This commit is contained in:
Eduard Ursu 2023-02-24 19:50:48 +01:00
parent 0b3b075532
commit e7a0fb9348
31 changed files with 1098 additions and 667 deletions

View file

@ -1,21 +1,21 @@
module.exports = {
env: {
browser: true,
es6: true
},
extends: ['eslint:recommended', 'prettier'],
plugins: ['prettier'],
globals: {
Atomics: 'readonly',
SharedArrayBuffer: 'readonly'
},
parserOptions: {
ecmaVersion: 2021,
sourceType: 'module'
},
rules: {
'prettier/prettier': 'error',
'no-unused-vars': 0,
'no-undef': 0,
}
}
env: {
browser: true,
es6: true
},
extends: ['eslint:recommended', 'prettier'],
plugins: ['prettier'],
globals: {
Atomics: 'readonly',
SharedArrayBuffer: 'readonly'
},
parserOptions: {
ecmaVersion: 2021,
sourceType: 'module'
},
rules: {
'prettier/prettier': 'error',
'no-unused-vars': 0,
'no-undef': 0
}
}

View file

@ -1,5 +1,6 @@
module.exports = {
printWidth: 80,
bracketSpacing: true,
semi: false,
singleQuote: true,
tabWidth: 4,

View file

@ -34,7 +34,6 @@
"html-webpack-plugin": "^5.5.0",
"mini-css-extract-plugin": "^2.7.2",
"node-sass": "^8.0.0",
"ping-url": "^1.0.3",
"postcss": "^8.4.21",
"prettier": "^2.8.3",
"purgecss-webpack-plugin": "^5.0.0",

View file

@ -13,7 +13,7 @@
keywords:'adblock,test adblock,analytics,trackers,ads,cosmetic filter,ublock, ublockorigin,adblock extension,script loading'
}) %>
<body class="_overflowhidden">
<%- include('partials/adblock/report.ejs') %>
<%- include('partials/adblock/results.ejs') %>
<% const adblock_compatibility = require('./data/adblock_compatibility.json') %>
<div class="dialog" id="dlg_compatibility" data-a11y-dialog="dlg_compatibility" aria-labelledby="dlg_compatibility-title" aria-hidden="true">
<div class="dialog-overlay" data-a11y-dialog-hide></div>
@ -28,14 +28,16 @@
</header>
<section>
<div>
<p>
While most of the tests are performed by users using the most popular solutions such as ublock-Origin, Blokada, NextDNS and Adguard,
there are some false positives due to platform/browser/solution limitations<br>
The test uses pure Javascript, and due to it's limitations and the way some solutions work, there may be problems.<br>
So here is a list of solutions where the test works, and gives a valid report of the result
</p>
<b class="_txt-red"><i>You will not see any ads and no trackers will be activated </i></b><br>
<b class="_txt-blue"><i>A configuration with multiple solutions at the same time can lead to false positives.</i></b><br>
<div class="card _pb-2">
<p>
While most of the tests are performed by users using the most popular solutions such as ublock-Origin, Blokada, NextDNS and Adguard,
there are some false positives due to platform/browser/solution limitations<br>
The test uses pure Javascript, and due to it's limitations and the way some solutions work, there may be problems.<br>
So here is a list of solutions where the test works, and gives a valid report of the result
</p>
<b class="_txt-red"><i>You will not see any ads and no trackers will be activated </i></b>
<b class="_txt-blue"><i>A configuration with multiple solutions at the same time can lead to false positives.</i></b>
</div>
<table class="rwd-table">
<tr>
<th>solution (type)</th>
@ -43,7 +45,7 @@
</tr>
<% for (let key in adblock_compatibility) { %>
<% value = adblock_compatibility[key]%>
<% if (key != 'default') { %>
<% if (key != 'default' && value.hidden!=true) { %>
<tr>
<td data-th="solution (type)">
<span class="rwd-table-t"><%- value.icon %>
@ -88,50 +90,31 @@
</div>
</div>
<%- include('partials/support_me.ejs') %>
<%- include('partials/adblock/settings.ejs') %>
<%- include('partials/adblock/faq.ejs') %>
<%- include('partials/adblock/changelog.ejs') %>
<%- include('partials/adblock/logs.ejs') %>
<%- include('partials/header.ejs', {page:'adblock'}) %>
<main>
<button data-a11y-dialog-show="dlg_reports"> <svg xmlns="http://www.w3.org/2000/svg"
class="icon icon-tabler icon-tabler-list-details" width="24" height="24" viewBox="0 0 24 24"
stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<button data-a11y-dialog-show="dlg_reports">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M13 5h8"></path>
<path d="M13 9h5"></path>
<path d="M13 15h8"></path>
<path d="M13 19h5"></path>
<rect x="3" y="4" width="6" height="6" rx="1"></rect>
<rect x="3" y="14" width="6" height="6" rx="1"></rect>
</svg> Reports</button>
<path d="M12 8l0 4l2 2"></path>
<path d="M3.05 11a9 9 0 1 1 .5 4m-.5 5v-5h5"></path>
</svg>
Results</button>
<button data-a11y-dialog-show="dlg_faq">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-info-square" width="24" height="24"
viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round"
stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<line x1="12" y1="8" x2="12.01" y2="8"></line>
<rect x="4" y="4" width="16" height="16" rx="2"></rect>
<polyline points="11 12 12 12 12 16 13 16"></polyline>
</svg> Open FAQ</button>
<button data-a11y-dialog-show="dlg_compatibility">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-info-square" width="24" height="24"
viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round"
stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<line x1="12" y1="8" x2="12.01" y2="8"></line>
<rect x="4" y="4" width="16" height="16" rx="2"></rect>
<polyline points="11 12 12 12 12 16 13 16"></polyline>
</svg> Check Compatibility</button>
<button data-a11y-dialog-show="dlg_logs">
<svg xmlns="http://www.w3.org/2000/svg"
class="icon icon-tabler icon-tabler-message-2-code" width="24" height="24" viewBox="0 0 24 24"
stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path
d="M12 20l-3 -3h-2a3 3 0 0 1 -3 -3v-6a3 3 0 0 1 3 -3h10a3 3 0 0 1 3 3v6a3 3 0 0 1 -3 3h-2l-3 3">
</path>
<path d="M10 9l-2 2l2 2"></path>
<path d="M14 9l2 2l-2 2"></path>
</svg> Logs</button>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="prefix__icon prefix__icon-tabler prefix__icon-tabler-info-square"><path stroke="none" d="M0 0h24v24H0z"/><path d="M12 8 12.01 8"/><rect width="16" height="16" x="4" y="4" rx="2"/><path d="M11 12 12 12 12 16 13 16"/></svg>
Open FAQ</button>
<button data-a11y-dialog-show="dlg_compatibility">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path stroke="none" d="M0 0h24v24H0z"/><path d="m7 12 5 5L22 7M2 12l5 5m5-5 5-5"/></svg>
Check Compatibility</button>
<button data-a11y-dialog-show="dlg_logs">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="prefix__icon prefix__icon-tabler prefix__icon-tabler-message-2-code"><path stroke="none" d="M0 0h24v24H0z"/><path d="m12 20-3-3H7a3 3 0 0 1-3-3V8a3 3 0 0 1 3-3h10a3 3 0 0 1 3 3v6a3 3 0 0 1-3 3h-2l-3 3"/><path d="m10 9-2 2 2 2M14 9l2 2-2 2"/></svg>
Logs</button>
<button data-a11y-dialog-show="dlg_settings">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="prefix__icon prefix__icon-tabler prefix__icon-tabler-settings"><path stroke="none" d="M0 0h24v24H0z"/><path d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 0 0-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 0 0-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 0 0-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 0 0-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 0 0 1.066-2.573c-.94-1.543.826-3.31 2.37-2.37 1 .608 2.296.07 2.572-1.065z"/><path d="M9 12a3 3 0 1 0 6 0 3 3 0 1 0-6 0"/></svg>
Settings</button>
<section>
<div class="grid">
<div>
@ -206,7 +189,7 @@
<div>
<hr>
</div>
<div>
<div id="cf_wrap">
<div class="test_card">
<h5>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" stroke-width="2"
@ -254,7 +237,7 @@
</div>
</div>
</div>
<div>
<div id="sl_wrap">
<div class="test_card">
<h5>
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-script" width="24"
@ -288,16 +271,8 @@
</div>
</div>
</div>
</div>
<div>
<hr>
</div>
<div>
<input class="toggle" id="collapse_status" name="toggle" type="checkbox"
checked="checked"><label for="collapse_status">
Collapse all</label><br>
<small>Click a category to collapse the url hosts</small>
</div>
<div>
<div id="test" class="test_wrapper"></div>
</div>

View file

@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" fill="currentColor" version="1.1"><style>@media (prefers-color-scheme: dark) { :root { fill: #ffffff; } }</style><path d="M63.98 27.685c-11.2 0-19.45 1.43-28.666 4.974-4.726 1.82-4.948 2.305-4.368 9.538.783 9.734 3.79 21.804 5.788 23.204h.006c1.294.906 1.359.895 5.762-1.055l3.887-1.719.247-4.466c.164-2.95.534-5.16 1.088-6.504 5.8-13.987 24.36-15.6 32.377-2.819a165.87 165.87 0 0 0 1.536 2.415c.067.094 2.902-.286 6.302-.846 8.414-1.387 8.515-1.474 9.115-8.288.61-6.893.258-7.667-4.35-9.434-9.273-3.57-17.497-5-28.724-5zm25.782 31.108c-1.212.054-2.792.318-4.78.755-2.195.483-2.222.51-2.48 2.37-.616 4.503-4.08 9.553-8.47 12.35-6.523 4.147-15.674 3.25-21.484-2.103l-1.947-1.79-3.19 1.393c-1.753.767-3.526 1.681-3.94 2.031-1.226 1.034-1.4 3.21-.41 5.144 2.298 4.507 10.82 14.17 16.92 19.18 3.835 3.15 4.28 3.086 9.514-1.38 9.813-8.38 18.129-20.139 22.552-31.883 1.703-4.517 1.35-6.23-2.285-6.067z"/><path d="M64.005 14c-4.992 0-9.984.257-13.262.768-9.64 1.5-18.933 4.257-27.123 8.04-5.084 2.35-5.615 3.542-5.632 12.586-.033 20.197 6.158 38.675 18.568 55.385 5.694 7.667 17.217 18.304 24.057 22.214 3.57 2.043 5.931 1.22 13.555-4.733 16.362-12.774 28.101-30.598 33.021-50.138 1.837-7.303 2.46-11.792 2.715-19.636.294-9.007.046-11.2-1.47-13.008-2.835-3.36-18.461-8.73-31.174-10.71-3.276-.51-8.264-.768-13.255-.768Zm.215 6.185c12.843.02 22.323 1.856 34.447 6.686 5.127 2.04 5.287 2.25 5.28 6.797-.03 20.474-7.486 41.401-20.326 57.078-4.633 5.654-12.121 12.67-17.188 16.108-.926.63-2.018 1.145-2.428 1.145-2.337 0-13.634-9.92-19.584-17.2-12.93-15.824-20.368-36.67-20.371-57.105 0-4.456.524-5.062 6.204-7.246 11.754-4.52 21.305-6.28 33.966-6.263z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" fill="#0074D8" version="1.1"><>@media (prefers-color-scheme: dark) { :root { fill: #ffffff; } }</<path d="M63.98 27.685c-11.2 0-19.45 1.43-28.666 4.974-4.726 1.82-4.948 2.305-4.368 9.538.783 9.734 3.79 21.804 5.788 23.204h.006c1.294.906 1.359.895 5.762-1.055l3.887-1.719.247-4.466c.164-2.95.534-5.16 1.088-6.504 5.8-13.987 24.36-15.6 32.377-2.819a165.87 165.87 0 0 0 1.536 2.415c.067.094 2.902-.286 6.302-.846 8.414-1.387 8.515-1.474 9.115-8.288.61-6.893.258-7.667-4.35-9.434-9.273-3.57-17.497-5-28.724-5zm25.782 31.108c-1.212.054-2.792.318-4.78.755-2.195.483-2.222.51-2.48 2.37-.616 4.503-4.08 9.553-8.47 12.35-6.523 4.147-15.674 3.25-21.484-2.103l-1.947-1.79-3.19 1.393c-1.753.767-3.526 1.681-3.94 2.031-1.226 1.034-1.4 3.21-.41 5.144 2.298 4.507 10.82 14.17 16.92 19.18 3.835 3.15 4.28 3.086 9.514-1.38 9.813-8.38 18.129-20.139 22.552-31.883 1.703-4.517 1.35-6.23-2.285-6.067z"/><path d="M64.005 14c-4.992 0-9.984.257-13.262.768-9.64 1.5-18.933 4.257-27.123 8.04-5.084 2.35-5.615 3.542-5.632 12.586-.033 20.197 6.158 38.675 18.568 55.385 5.694 7.667 17.217 18.304 24.057 22.214 3.57 2.043 5.931 1.22 13.555-4.733 16.362-12.774 28.101-30.598 33.021-50.138 1.837-7.303 2.46-11.792 2.715-19.636.294-9.007.046-11.2-1.47-13.008-2.835-3.36-18.461-8.73-31.174-10.71-3.276-.51-8.264-.768-13.255-.768Zm.215 6.185c12.843.02 22.323 1.856 34.447 6.686 5.127 2.04 5.287 2.25 5.28 6.797-.03 20.474-7.486 41.401-20.326 57.078-4.633 5.654-12.121 12.67-17.188 16.108-.926.63-2.018 1.145-2.428 1.145-2.337 0-13.634-9.92-19.584-17.2-12.93-15.824-20.368-36.67-20.371-57.105 0-4.456.524-5.062 6.204-7.246 11.754-4.52 21.305-6.28 33.966-6.263z"/></svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -1,33 +0,0 @@
export const icons = {
download: "<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' stroke-width='2' stroke='currentColor' fill='none' stroke-linecap='round' stroke-linejoin='round'><path d='M0 0h24v24H0z' stroke='none'/><path d='M4 17v2a2 2 0 002 2h12a2 2 0 002-2v-2M7 11l5 5 5-5M12 4v12'/></svg>",
delete: "<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' stroke-width='2' stroke='currentColor' fill='none' stroke-linecap='round' stroke-linejoin='round'><path d='M0 0h24v24H0z' stroke='none'/><path d='M4 7h16M10 11v6M14 11v6M5 7l1 12a2 2 0 002 2h8a2 2 0 002-2l1-12M9 7V4a1 1 0 011-1h4a1 1 0 011 1v3'/></svg>",
v: "<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' stroke-width='2' stroke='var(--green)' fill='none' stroke-linecap='round' stroke-linejoin='round'><path d='M0 0h24v24H0z' stroke='none'/><circle cx='12' cy='12' r='9'/><path d='M9 12l2 2 4-4'/></svg>",
x: "<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' stroke-width='2' stroke='var(--red)' fill='none' stroke-linecap='round' stroke-linejoin='round'><path d='M0 0h24v24H0z' stroke='none'/><circle cx='12' cy='12' r='9'/><path d='M10 10l4 4m0-4l-4 4'/></svg>",
Ads: "<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' stroke-width='2' stroke='currentColor' fill='none' stroke-linecap='round' stroke-linejoin='round'><path d='M0 0h24v24H0z' stroke='none'/><path d='M18 8a3 3 0 010 6M10 8v11a1 1 0 01-1 1H8a1 1 0 01-1-1v-5'/><path d='M12 8h0l4.524-3.77A.9.9 0 0118 4.922v12.156a.9.9 0 01-1.476.692L12 14H4a1 1 0 01-1-1V9a1 1 0 011-1h8'/></svg>",
'Analytics':
"<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' stroke-width='2' stroke='currentColor' fill='none' stroke-linecap='round' stroke-linejoin='round'><path d='M0 0h24v24H0z' stroke='none'/><path d='M4 18V6a2 2 0 012-2h12a2 2 0 012 2v12a2 2 0 01-2 2H6a2 2 0 01-2-2z'/><path d='M7 14l3-3 2 2 3-3 2 2'/></svg>",
'Error Trackers':
"<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' stroke-width='2' stroke='currentColor' fill='none' stroke-linecap='round' stroke-linejoin='round'><path d='M0 0h24v24H0z' stroke='none'/><path d='M9 9V8a3 3 0 016 0v1M8 9h8a6 6 0 011 3v3a5 5 0 01-10 0v-3a6 6 0 011-3M3 13h4M17 13h4M12 20v-6M4 19l3.35-2M20 19l-3.35-2M4 7l3.75 2.4M20 7l-3.75 2.4'/></svg>",
'Mix': "<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' stroke-width='2' stroke='currentColor' fill='none' stroke-linecap='round' stroke-linejoin='round'><path d='M0 0h24v24H0z' stroke='none'/><path d='M12 4L4 8l8 4 8-4-8-4M4 12l8 4 8-4M4 16l8 4 8-4'/></svg>",
'OEMs': "<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' stroke-width='2' stroke='currentColor' fill='none' stroke-linecap='round' stroke-linejoin='round'><path d='M0 0h24v24H0z' stroke='none'/><rect x='6' y='3' width='12' height='18' rx='2'/><path d='M11 4h2M12 17v.01'/></svg>",
'Social Trackers':"<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' stroke-width='2' stroke='currentColor' fill='none' stroke-linecap='round' stroke-linejoin='round'><path d='M0 0h24v24H0z' stroke='none'/><circle cx='12' cy='5' r='2'/><circle cx='5' cy='19' r='2'/><circle cx='19' cy='19' r='2'/><circle cx='12' cy='14' r='3'/><path d='M12 7v4M6.7 17.8l2.8-2M17.3 17.8l-2.8-2'/></svg>",
'OnePlus':"<svg fill='currentColor' width='18' height='18' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'><path d='M0 3.74V24h20.26V12.428h-2.256v9.317H2.254V5.995h9.318V3.742zM18.004 0v3.74h-3.758v2.256h3.758v3.758h2.255V5.996H24V3.74h-3.758V0zm-6.45 18.756V8.862H9.562c0 .682-.228 1.189-.577 1.504-.367.297-.91.437-1.556.437h-.245v1.625h2.133v6.31h2.237z'></path></svg>",
Xiaomi: "<svg fill='currentColor' width='18' height='18' role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'><path d='M19.96 20a.32.32 0 0 1-.32-.32V4.32a.32.32 0 0 1 .32-.32h3.71a.32.32 0 0 1 .33.32v15.36a.32.32 0 0 1-.33.32zm-6.22 0s-.3-.09-.3-.32v-9.43A2.18 2.18 0 0 0 11.24 8H4.3c-.4 0-.3.3-.3.3v11.38c0 .27-.3.32-.3.32H.33a.32.32 0 0 1-.33-.32V4.32A.32.32 0 0 1 .33 4h12.86a4.28 4.28 0 0 1 4.25 4.27l.01 11.41a.32.32 0 0 1-.32.32zm-6.9 0a.3.3 0 0 1-.3-.3v-9a.3.3 0 0 1 .3-.3h3.77a.3.3 0 0 1 .29.3v9a.3.3 0 0 1-.3.3z'></path></svg>",
Huawei: "<svg fill='currentColor' width='18' height='18' role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'><path d='M3.67 6.14S1.82 7.91 1.72 9.78v.35c.08 1.51 1.22 2.4 1.22 2.4 1.83 1.79 6.26 4.04 7.3 4.55 0 0 .06.03.1-.01l.02-.04v-.04C7.52 10.8 3.67 6.14 3.67 6.14zM9.65 18.6c-.02-.08-.1-.08-.1-.08l-7.38.26c.8 1.43 2.15 2.53 3.56 2.2.96-.25 3.16-1.78 3.88-2.3.06-.05.04-.09.04-.09zm.08-.78C6.49 15.63.21 12.28.21 12.28c-.15.46-.2.9-.21 1.3v.07c0 1.07.4 1.82.4 1.82.8 1.69 2.34 2.2 2.34 2.2.7.3 1.4.31 1.4.31.12.02 4.4 0 5.54 0 .05 0 .08-.05.08-.05v-.06c0-.03-.03-.05-.03-.05zM9.06 3.19a3.42 3.42 0 00-2.57 3.15v.41c.03.6.16 1.05.16 1.05.66 2.9 3.86 7.65 4.55 8.65.05.05.1.03.1.03a.1.1 0 00.06-.1c1.06-10.6-1.11-13.42-1.11-13.42-.32.02-1.19.23-1.19.23zm8.299 2.27s-.49-1.8-2.44-2.28c0 0-.57-.14-1.17-.22 0 0-2.18 2.81-1.12 13.43.01.07.06.08.06.08.07.03.1-.03.1-.03.72-1.03 3.9-5.76 4.55-8.64 0 0 .36-1.4.02-2.34zm-2.92 13.07s-.07 0-.09.05c0 0-.01.07.03.1.7.51 2.85 2 3.88 2.3 0 0 .16.05.43.06h.14c.69-.02 1.9-.37 3-2.26l-7.4-.25zm7.83-8.41c.14-2.06-1.94-3.97-1.94-3.98 0 0-3.85 4.66-6.67 10.8 0 0-.03.08.02.13l.04.01h.06c1.06-.53 5.46-2.77 7.28-4.54 0 0 1.15-.93 1.21-2.42zm1.52 2.14s-6.28 3.37-9.52 5.55c0 0-.05.04-.03.11 0 0 .03.06.07.06 1.16 0 5.56 0 5.67-.02 0 0 .57-.02 1.27-.29 0 0 1.56-.5 2.37-2.27 0 0 .73-1.45.17-3.14z'></path></svg>",
Samsung:"<svg fill='currentColor' width='18' height='18' role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'><path d='M19.8166 10.2808l.0459 2.6934h-.023l-.7793-2.6934h-1.2837v3.3925h.8481l-.0458-2.785h.023l.8366 2.785h1.2264v-3.3925zm-16.149 0l-.6418 3.427h.9284l.4699-3.1175h.0229l.4585 3.1174h.9169l-.6304-3.4269zm5.1805 0l-.424 2.6132h-.023l-.424-2.6132H6.5788l-.0688 3.427h.8596l.023-3.0832h.0114l.573 3.0831h.8711l.5731-3.083h.023l.0228 3.083h.8596l-.0802-3.4269zm-7.2664 2.4527c.0343.0802.0229.1949.0114.2522-.0229.1146-.1031.2292-.3324.2292-.2177 0-.3438-.126-.3438-.3095v-.3323H0v.2636c0 .7679.6074.9971 1.2493.9971.6189 0 1.1346-.2178 1.2149-.7794.0458-.298.0114-.4928 0-.5616-.1605-.722-1.467-.9283-1.5588-1.3295-.0114-.0688-.0114-.1375 0-.1834.023-.1146.1032-.2292.3095-.2292.2063 0 .321.126.321.3095v.2063h.8595v-.2407c0-.745-.6762-.8596-1.1576-.8596-.6074 0-1.1117.2063-1.2034.7564-.023.149-.0344.2866.0114.4585.1376.7106 1.364.9169 1.5358 1.3524m11.152 0c.0343.0803.0228.1834.0114.2522-.023.1146-.1032.2292-.3324.2292-.2178 0-.3438-.126-.3438-.3095v-.3323h-.917v.2636c0 .7564.596.9857 1.2379.9857.6189 0 1.1232-.2063 1.2034-.7794.0459-.298.0115-.4814 0-.5616-.1375-.7106-1.4327-.9284-1.5243-1.318-.0115-.0688-.0115-.1376 0-.1835.0229-.1146.1031-.2292.3094-.2292.1948 0 .321.126.321.3095v.2063h.848v-.2407c0-.745-.6647-.8596-1.146-.8596-.6075 0-1.1004.1948-1.192.7564-.023.149-.023.2866.0114.4585.1376.7106 1.341.9054 1.513 1.3524m2.8882.4585c.2407 0 .3094-.1605.3323-.2522.0115-.0343.0115-.0917.0115-.126v-2.533h.871v2.4642c0 .0688 0 .1948-.0114.2292-.0573.6419-.5616.8482-1.192.8482-.6303 0-1.1346-.2063-1.192-.8482 0-.0344-.0114-.1604-.0114-.2292v-2.4642h.871v2.533c0 .0458 0 .0916.0115.126 0 .0917.0688.2522.3095.2522m7.1518-.0344c.2522 0 .3324-.1605.3553-.2522.0115-.0343.0115-.0917.0115-.126v-.4929h-.3553v-.5043H24v.917c0 .0687 0 .1145-.0115.2292-.0573.6303-.596.8481-1.2034.8481-.6075 0-1.1461-.2178-1.2034-.8481-.0115-.1147-.0115-.1605-.0115-.2293v-1.444c0-.0574.0115-.172.0115-.2293.0802-.6419.596-.8482 1.2034-.8482s1.1347.2063 1.2034.8482c.0115.1031.0115.2292.0115.2292v.1146h-.8596v-.1948s0-.0803-.0115-.1261c-.0114-.0802-.0802-.2521-.3438-.2521-.2521 0-.321.1604-.3438.2521-.0115.0458-.0115.1032-.0115.1605v1.5702c0 .0458 0 .0916.0115.126 0 .0917.0917.2522.3323.2522'></path></svg>",
Apple: "<svg fill='currentColor' width='18' height='18' role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'><path d='M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701'></path></svg>",
Facebook:"<svg fill='currentColor' width='18' height='18' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'><path d='M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z'/></svg>",
Twitter: "<svg fill='currentColor' width='18' height='18' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'><path d='M23.953 4.57a10 10 0 01-2.825.775 4.958 4.958 0 002.163-2.723c-.951.555-2.005.959-3.127 1.184a4.92 4.92 0 00-8.384 4.482C7.69 8.095 4.067 6.13 1.64 3.162a4.822 4.822 0 00-.666 2.475c0 1.71.87 3.213 2.188 4.096a4.904 4.904 0 01-2.228-.616v.06a4.923 4.923 0 003.946 4.827 4.996 4.996 0 01-2.212.085 4.936 4.936 0 004.604 3.417 9.867 9.867 0 01-6.102 2.105c-.39 0-.779-.023-1.17-.067a13.995 13.995 0 007.557 2.209c9.053 0 13.998-7.496 13.998-13.985 0-.21 0-.42-.015-.63A9.935 9.935 0 0024 4.59z'/></svg>",
Sentry: "<svg fill='currentColor' viewBox='0 0 24 24' width='18' height='18' xmlns='http://www.w3.org/2000/svg'><path d='M13.91 2.505c-.873-1.448-2.972-1.448-3.844 0L6.904 7.92a15.478 15.478 0 018.53 12.811h-2.221A13.301 13.301 0 005.784 9.814l-2.926 5.06a7.65 7.65 0 014.435 5.848H2.194a.365.365 0 01-.298-.534l1.413-2.402a5.16 5.16 0 00-1.614-.913L.296 19.275a2.182 2.182 0 00.812 2.999 2.24 2.24 0 001.086.288h6.983a9.322 9.322 0 00-3.845-8.318l1.11-1.922a11.47 11.47 0 014.95 10.24h5.915a17.242 17.242 0 00-7.885-15.28l2.244-3.845a.37.37 0 01.504-.13c.255.14 9.75 16.708 9.928 16.9a.365.365 0 01-.327.543h-2.287c.029.612.029 1.223 0 1.831h2.297a2.206 2.206 0 001.922-3.31z'/></svg>",
Bugsnag: "<svg fill='currentColor' viewBox='0 0 24 24' width='18' height='18' xmlns='http://www.w3.org/2000/svg'><path d='M12 24c-4.596 0-8.336-3.74-8.336-8.336v-4.135a.62.62 0 01.62-.62h2.957L7.23 1.337 4.903 2.77v5.45a.62.62 0 01-1.24 0V2.7c0-.384.204-.749.53-.95L6.773.166a1.114 1.114 0 011.699.949l.01 9.796h3.52a4.759 4.759 0 014.753 4.754 4.759 4.759 0 01-4.753 4.753 4.759 4.759 0 01-4.754-4.753l-.003-3.515H4.903v3.515c0 3.912 3.183 7.097 7.097 7.097a7.104 7.104 0 007.097-7.097A7.105 7.105 0 0012 8.567h-1.076a.62.62 0 010-1.24H12c4.596 0 8.336 3.74 8.336 8.336S16.596 24 12 24zM8.482 12.15l.004 3.514A3.518 3.518 0 0012 19.178a3.518 3.518 0 003.514-3.514A3.518 3.518 0 0012 12.149zm4.513 3.514a.995.995 0 01-.995.994.995.995 0 01-.995-.994.995.995 0 01.995-.995.995.995 0 01.995.995z'/></svg>",
LinkedIn: "<svg fill='currentColor' width='18' height='18' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'><path d='M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 01-2.063-2.065 2.064 2.064 0 112.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z'/></svg>",
Pinterest: "<svg fill='currentColor' width='18' height='18' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'><path d='M12.017 0C5.396 0 .029 5.367.029 11.987c0 5.079 3.158 9.417 7.618 11.162-.105-.949-.199-2.403.041-3.439.219-.937 1.406-5.957 1.406-5.957s-.359-.72-.359-1.781c0-1.663.967-2.911 2.168-2.911 1.024 0 1.518.769 1.518 1.688 0 1.029-.653 2.567-.992 3.992-.285 1.193.6 2.165 1.775 2.165 2.128 0 3.768-2.245 3.768-5.487 0-2.861-2.063-4.869-5.008-4.869-3.41 0-5.409 2.562-5.409 5.199 0 1.033.394 2.143.889 2.741.099.12.112.225.085.345-.09.375-.293 1.199-.334 1.363-.053.225-.172.271-.401.165-1.495-.69-2.433-2.878-2.433-4.646 0-3.776 2.748-7.252 7.92-7.252 4.158 0 7.392 2.967 7.392 6.923 0 4.135-2.607 7.462-6.233 7.462-1.214 0-2.354-.629-2.758-1.379l-.749 2.848c-.269 1.045-1.004 2.352-1.498 3.146 1.123.345 2.306.535 3.55.535 6.607 0 11.985-5.365 11.985-11.987C23.97 5.39 18.592.026 11.985.026L12.017 0z'/></svg>",
Reddit: "<svg fill='currentColor' width='18' height='18' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'><path d='M12 0A12 12 0 000 12a12 12 0 0012 12 12 12 0 0012-12A12 12 0 0012 0zm5.01 4.744c.688 0 1.25.561 1.25 1.249a1.25 1.25 0 01-2.498.056l-2.597-.547-.8 3.747c1.824.07 3.48.632 4.674 1.488.308-.309.73-.491 1.207-.491.968 0 1.754.786 1.754 1.754 0 .716-.435 1.333-1.01 1.614a3.111 3.111 0 01.042.52c0 2.694-3.13 4.87-7.004 4.87-3.874 0-7.004-2.176-7.004-4.87 0-.183.015-.366.043-.534A1.748 1.748 0 014.028 12c0-.968.786-1.754 1.754-1.754.463 0 .898.196 1.207.49 1.207-.883 2.878-1.43 4.744-1.487l.885-4.182a.342.342 0 01.14-.197.35.35 0 01.238-.042l2.906.617a1.214 1.214 0 011.108-.701zM9.25 12C8.561 12 8 12.562 8 13.25c0 .687.561 1.248 1.25 1.248.687 0 1.248-.561 1.248-1.249 0-.688-.561-1.249-1.249-1.249zm5.5 0c-.687 0-1.248.561-1.248 1.25 0 .687.561 1.248 1.249 1.248.688 0 1.249-.561 1.249-1.249 0-.687-.562-1.249-1.25-1.249zm-5.466 3.99a.327.327 0 00-.231.094.33.33 0 000 .463c.842.842 2.484.913 2.961.913.477 0 2.105-.056 2.961-.913a.361.361 0 00.029-.463.33.33 0 00-.464 0c-.547.533-1.684.73-2.512.73-.828 0-1.979-.196-2.512-.73a.326.326 0 00-.232-.095z'/></svg>",
TikTok: "<svg fill='currentColor' width='18' height='18' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'><path d='M12.525.02c1.31-.02 2.61-.01 3.91-.02.08 1.53.63 3.09 1.75 4.17 1.12 1.11 2.7 1.62 4.24 1.79v4.03c-1.44-.05-2.89-.35-4.2-.97-.57-.26-1.1-.59-1.62-.93-.01 2.92.01 5.84-.02 8.75-.08 1.4-.54 2.79-1.35 3.94-1.31 1.92-3.58 3.17-5.91 3.21-1.43.08-2.86-.31-4.08-1.03-2.02-1.19-3.44-3.37-3.65-5.71-.02-.5-.03-1-.01-1.49.18-1.9 1.12-3.72 2.58-4.96 1.66-1.44 3.98-2.13 6.15-1.72.02 1.48-.04 2.96-.04 4.44-.99-.32-2.15-.23-3.02.37-.63.41-1.11 1.04-1.36 1.75-.21.51-.15 1.07-.14 1.61.24 1.64 1.82 3.02 3.5 2.87 1.12-.01 2.19-.66 2.77-1.61.19-.33.4-.67.41-1.06.1-1.79.06-3.57.07-5.36.01-4.03-.01-8.05.02-12.07z'/></svg>",
Yahoo: "<svg fill='currentColor' width='18' height='18' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'><path d='M18.86 1.56l-4.59 10.31h5.13L24 1.56h-5.14M0 6.71l5.15 11.56-1.85 4.17h4.53l6.86-15.73h-4.5l-2.8 6.73-2.77-6.73H0m15.62 6.16c-1.67 0-2.91 1.25-2.91 2.71 0 1.42 1.2 2.61 2.79 2.61 1.68 0 2.93-1.23 2.93-2.69 0-1.47-1.2-2.63-2.81-2.63z'/></svg>",
Hotjar:"<svg fill='currentColor' width='18' height='18' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M21.055 7.814C17.512 1.404 7.118 0 7.118 0s4.798 5.34-1.334 9.567c-3.876 2.666-5.41 6.13-3.75 9.914 1.27 2.9 3.96 4.076 6.86 4.519-.745-1.434-.932-3.505-.381-5.628a8.51 8.51 0 0 1 .186-.636c.813 1.258 2.148 1.946 3.45 1.629 1.783-.424 2.829-2.582 2.342-4.799a5.104 5.104 0 0 0-.536-1.372c.07.017.14.024.212.047 2.225.635 3.301 3.962 2.403 7.434a9.266 9.266 0 0 1-1.325 2.946c3.82-1.23 6.36-4.311 7.06-7.056.736-2.856.177-6.185-1.25-8.751z'/></svg>",
YouTube: "<svg fill='currentColor' width='18' height='18' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'><path d='M23.498 6.186a3.016 3.016 0 00-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 00.502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 002.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 002.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z'/></svg>",
Unity:"<svg fill='currentColor' width='18' height='18' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='m12.929 4.294 3.8 2.193c.136.077.141.29 0 .367l-4.515 2.608a.42.42 0 0 1-.425 0L7.274 6.854c-.139-.074-.141-.293 0-.367l3.797-2.193V0L1.376 5.598v11.195l3.717-2.146v-4.385c-.002-.157.182-.269.318-.184l4.515 2.607a.425.425 0 0 1 .214.368v5.213c.002.156-.181.268-.318.184l-3.8-2.193-3.717 2.145L12 24l9.695-5.598-3.717-2.145-3.8 2.192c-.134.082-.323-.024-.318-.183v-5.213c0-.157.087-.296.214-.368l4.515-2.607c.134-.082.322.022.318.184v4.385l3.717 2.146V5.598L12.93 0Z'/></svg>",
'Google Ads':"<svg fill='currentColor' width='18' height='18' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M4 22.93a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm19.464-6.001-8-13.857a4 4 0 0 0-6.93 4l8.001 13.857a4.001 4.001 0 0 0 6.93-4zM7.514 4.844l-5.95 10.304A4.5 4.5 0 0 1 4 14.43c2.56-.008 4.625 2.158 4.494 4.715l3.217-5.573-3.61-6.25a4.463 4.463 0 0 1-.587-2.478z'/></svg>",
'Google Analytics':"<svg fill='currentColor' width='18' height='18' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M22.84 2.998v17.999a2.983 2.983 0 0 1-2.967 2.998 2.98 2.98 0 0 1-.368-.02 3.06 3.06 0 0 1-2.61-3.1V3.12A3.06 3.06 0 0 1 19.51.02a2.983 2.983 0 0 1 3.329 2.978zM4.133 18.055a2.973 2.973 0 1 0 0 5.945 2.973 2.973 0 0 0 0-5.945zm7.872-9.01h-.05a3.06 3.06 0 0 0-2.892 3.126v7.985c0 2.167.954 3.482 2.35 3.763a2.978 2.978 0 0 0 3.57-2.927v-8.959a2.983 2.983 0 0 0-2.978-2.988z'/></svg>"
}

View file

@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128"><style>@media (prefers-color-scheme:dark){#fontlist_logo{fill:#fff}}</style><path id="fontlist_logo" d="M50.336 22.85c-1.471 0-2.942.712-3.54 2.137L19.911 89a3.84 3.84 0 0 0 2.052 5.029 3.835 3.835 0 0 0 5.029-2.054l5.407-12.874h35.88l5.408 12.874a3.82 3.82 0 0 0 3.539 2.354c.07 0 .139-.017.208-.02.063.004.122.019.186.019h18.893c7.513 0 13.619-6.108 13.619-13.62 0-5.372-3.152-9.985-7.677-12.204 2.559-2.472 4.162-5.932 4.162-9.765 0-7.51-6.107-13.62-13.62-13.62H77.62a2.637 2.637 0 0 0-2.636 2.636V75.24L53.877 24.987c-.597-1.425-2.07-2.138-3.54-2.138zM18.991 97.655c-4.372 0-4.991 1.67-4.991 3.747s.636 3.748 4.99 3.748h89.41c4.355 0 5.601-1.679 5.601-3.748s-1.23-3.747-5.601-3.747z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" fill="#FF851B" width="128" height="128"><path id="fontlist_logo" d="M50.336 22.85c-1.471 0-2.942.712-3.54 2.137L19.911 89a3.84 3.84 0 0 0 2.052 5.029 3.835 3.835 0 0 0 5.029-2.054l5.407-12.874h35.88l5.408 12.874a3.82 3.82 0 0 0 3.539 2.354c.07 0 .139-.017.208-.02.063.004.122.019.186.019h18.893c7.513 0 13.619-6.108 13.619-13.62 0-5.372-3.152-9.985-7.677-12.204 2.559-2.472 4.162-5.932 4.162-9.765 0-7.51-6.107-13.62-13.62-13.62H77.62a2.637 2.637 0 0 0-2.636 2.636V75.24L53.877 24.987c-.597-1.425-2.07-2.138-3.54-2.138zM18.991 97.655c-4.372 0-4.991 1.67-4.991 3.747s.636 3.748 4.99 3.748h89.41c4.355 0 5.601-1.679 5.601-3.748s-1.23-3.747-5.601-3.747z"/></svg>

Before

Width:  |  Height:  |  Size: 760 B

After

Width:  |  Height:  |  Size: 699 B

View file

@ -1 +1 @@
<svg fill="#f3535b" width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M104.625 67.125h-43.75v-43.75c0-5.156-4.219-9.375-9.375-9.375H23.375C18.219 14 14 18.219 14 23.375v81.25c0 5.156 4.219 9.375 9.375 9.375h81.25c5.156 0 9.375-4.219 9.375-9.375V76.5c0-5.156-4.219-9.375-9.375-9.375zm-3.568 37.5H26.158c-2.758-.237-2.783-.235-2.783-3.16V27.18c.136-3.817-.293-3.805 3.703-3.805h21.254c3.256.106 3.168.005 3.168 2.579v5.808c.02.556-.196.812-.728.812H35.875c-4.447.492-3.296 6.15 0 6.25l14.88.168c.45.003.7.148.745.661v11.048c.052.523-.249.781-.745.799h-14.88c-4.442.492-3.297 6.149 0 6.25h14.773c.53.033.838.186.852.701V69.5c-.013.573-.295.751-.852.751H35.875c-4.442.492-3.297 6.149 0 6.25h14.844c.562-.004.781.255.781.767v14.858c.492 4.442 6.149 3.297 6.25 0V77.231c-.012-.617.265-.713.79-.731h10.8c.716.016.91.308.91.927v14.698c.491 4.447 6.15 3.296 6.25 0V77.409c.004-.732.216-.909.891-.909h10.73c.778.046.879.522.879 1.175v14.45c.491 4.447 6.15 3.296 6.25 0V77.888c-.01-.987.267-1.388 1.453-1.388h5.376c1.816-.048 2.51.929 2.546 2.486v22.582c-.194 2.912-.327 3.057-3.568 3.057z"/></svg>
<svg fill="#22C55E" width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M104.625 67.125h-43.75v-43.75c0-5.156-4.219-9.375-9.375-9.375H23.375C18.219 14 14 18.219 14 23.375v81.25c0 5.156 4.219 9.375 9.375 9.375h81.25c5.156 0 9.375-4.219 9.375-9.375V76.5c0-5.156-4.219-9.375-9.375-9.375zm-3.568 37.5H26.158c-2.758-.237-2.783-.235-2.783-3.16V27.18c.136-3.817-.293-3.805 3.703-3.805h21.254c3.256.106 3.168.005 3.168 2.579v5.808c.02.556-.196.812-.728.812H35.875c-4.447.492-3.296 6.15 0 6.25l14.88.168c.45.003.7.148.745.661v11.048c.052.523-.249.781-.745.799h-14.88c-4.442.492-3.297 6.149 0 6.25h14.773c.53.033.838.186.852.701V69.5c-.013.573-.295.751-.852.751H35.875c-4.442.492-3.297 6.149 0 6.25h14.844c.562-.004.781.255.781.767v14.858c.492 4.442 6.149 3.297 6.25 0V77.231c-.012-.617.265-.713.79-.731h10.8c.716.016.91.308.91.927v14.698c.491 4.447 6.15 3.296 6.25 0V77.409c.004-.732.216-.909.891-.909h10.73c.778.046.879.522.879 1.175v14.45c.491 4.447 6.15 3.296 6.25 0V77.888c-.01-.987.267-1.388 1.453-1.388h5.376c1.816-.048 2.51.929 2.546 2.486v22.582c-.194 2.912-.327 3.057-3.568 3.057z"/></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -4,16 +4,18 @@
"icon":"<svg xmlns='http://www.w3.org/2000/svg' width='18' height='18' version='1.1' viewBox='0 0 33.867 33.867'><path fill='#0280ff' stroke='none' stroke-width='1' d='M16.388.064C14.763.52 13.48 2.19 12 2.994 9.23 4.502 3.978 3.643 2.772 7.1c-.609 1.747-.323 3.857-.323 5.678.003 6.818 1.869 13.956 7.744 18.06 1.934 1.35 5.28 3.586 7.744 2.902 9.279-2.574 13.422-11.506 13.422-20.446 0-2.264.628-5.585-.92-7.457-1.564-1.897-4.916-1.365-7.082-2.213-1.937-.756-4.94-4.129-6.969-3.56Z'/></svg>",
"type":"DNS",
"name": "NextDNS",
"no-issues": ["brave-macos","safari-macos"],
"note":" "
"no-issues": ["brave-macos","safari-macos","safari-ios","chrome-android","firefox-macos","firefox-macos","edge-windows"],
"note":"Can be used in combo with ublock-origin or adguard adblocker"
},
"pi-hole":{
"hidden":true,
"icon":"<svg fill='#96060C' width='18' height='18' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M4.344 0c.238 4.792 3.256 7.056 6.252 7.376.165-1.692-4.319-5.6-4.319-5.6-.008-.011.009-.025.019-.014 0 0 4.648 4.01 5.423 5.645 2.762-.15 5.196-1.947 5-4.912 0 0-4.12-.613-5 4.618C11.48 2.753 8.993 0 4.344 0zM12 7.682v.002a3.68 3.68 0 0 0-2.591 1.077L4.94 13.227a3.683 3.683 0 0 0-.86 1.356 3.31 3.31 0 0 0-.237 1.255A3.681 3.681 0 0 0 4.92 18.45l4.464 4.466a3.69 3.69 0 0 0 2.251 1.06l.002.001c.093.01.187.015.28.017l-.1-.008c.06.003.117.009.177.009l-.077-.001L12 24l-.004-.005a3.68 3.68 0 0 0 2.61-1.077l4.469-4.465a3.683 3.683 0 0 0 1.006-1.888l.012-.063a3.682 3.682 0 0 0 .057-.541l.003-.061c0-.017.003-.05.004-.06h-.002a3.683 3.683 0 0 0-1.077-2.607l-4.466-4.468a3.694 3.694 0 0 0-1.564-.927l-.07-.02a3.43 3.43 0 0 0-.946-.133L12 7.682zm3.165 3.357c.023 1.748-1.33 3.078-1.33 4.806.164 2.227 1.733 3.207 3.266 3.146-.035.003-.068.007-.104.009-1.847.135-3.209-1.326-5.002-1.326-2.23.164-3.21 1.736-3.147 3.27l-.008-.104c-.133-1.847 1.328-3.21 1.328-5.002-.173-2.32-1.867-3.284-3.46-3.132.1-.011.203-.021.31-.027 1.847-.133 3.209 1.328 5.002 1.328 2.082-.155 3.074-1.536 3.145-2.968zM4.344 0c.238 4.792 3.256 7.056 6.252 7.376.165-1.692-4.319-5.6-4.319-5.6-.008-.011.009-.025.019-.014 0 0 4.648 4.01 5.423 5.645 2.762-.15 5.196-1.947 5-4.912 0 0-4.12-.613-5 4.618C11.48 2.753 8.993 0 4.344 0zM12 7.682v.002a3.68 3.68 0 0 0-2.591 1.077L4.94 13.227a3.683 3.683 0 0 0-.86 1.356 3.31 3.31 0 0 0-.237 1.255A3.681 3.681 0 0 0 4.92 18.45l4.464 4.466a3.69 3.69 0 0 0 2.251 1.06l.002.001c.093.01.187.015.28.017l-.1-.008c.06.003.117.009.177.009l-.077-.001L12 24l-.004-.005a3.68 3.68 0 0 0 2.61-1.077l4.469-4.465a3.683 3.683 0 0 0 1.006-1.888l.012-.063a3.682 3.682 0 0 0 .057-.541l.003-.061c0-.017.003-.05.004-.06h-.002a3.683 3.683 0 0 0-1.077-2.607l-4.466-4.468a3.694 3.694 0 0 0-1.564-.927l-.07-.02a3.43 3.43 0 0 0-.946-.133L12 7.682zm3.165 3.357c.023 1.748-1.33 3.078-1.33 4.806.164 2.227 1.733 3.207 3.266 3.146-.035.003-.068.007-.104.009-1.847.135-3.209-1.326-5.002-1.326-2.23.164-3.21 1.736-3.147 3.27l-.008-.104c-.133-1.847 1.328-3.21 1.328-5.002-.173-2.32-1.867-3.284-3.46-3.132.1-.011.203-.021.31-.027 1.847-.133 3.209 1.328 5.002 1.328 2.082-.155 3.074-1.536 3.145-2.968z'/></svg>",
"name": "Pi-Hole",
"no-issues": [],
"note":" "
},
"blokada":{
"name":"Blokada",
"type":"Adblock App",
"icon":"<svg xmlns='http://www.w3.org/2000/svg' width='18'' height='18' version='1.1' viewBox='0 0 33.867 33.867'><path fill='#df6852' fill-opacity='1' fill-rule='evenodd' stroke-linecap='round' stroke-linejoin='round' stroke-width='.529' d='M16.002 33.555c-1.164-.738-4.932-4.154-6.613-5.995-4.648-5.09-6.945-9.74-7.64-15.467-.166-1.378-.168-4.79-.002-6.309.114-1.045.575-4.113.73-4.854.077-.37.135-.344 1.252.57.453.372 1.184.854 1.627 1.074.75.373.884.402 2.037.446 1.067.041 1.391.009 2.38-.239 1.408-.352 3.015-.954 5.311-1.99L16.84 0l.714.356c3.273 1.63 6.017 2.457 8.225 2.48 1.928.02 3.12-.393 4.446-1.543.933-.809.93-.811 1.25.905 1.107 5.924 1.024 10.055-.279 14.009-.463 1.404-1.963 4.478-2.933 6.01-.91 1.437-2.277 3.256-3.607 4.796-1.761 2.041-5.234 5.33-6.872 6.51-.624.449-1.11.458-1.781.032zm1.865-4.1c1.198-1.009 3.213-2.945 3.172-3.049-.055-.14-3.867-3.452-7.863-6.83a768.36 768.36 0 0 1-5.967-5.09c-2.181-1.894-2.566-2.192-2.68-2.078-.105.106.266 1.593.757 3.03 1.496 4.379 4.162 8.022 9.57 13.077 1.02.954 1.903 1.735 1.961 1.735.058 0 .53-.358 1.05-.796zm7.317-10.165C25.124 19.192 8.473 8.138 6.04 6.58c-.912-.584-1.277-.765-1.334-.663-.109.195-.318 2.435-.349 3.737-.02.855.01 1.095.14 1.178.09.058 1.3.558 2.688 1.112 3.207 1.281 10.1 4.151 14.427 6.007 3.19 1.368 3.711 1.564 3.572 1.339zm3.64-5.223c.362-1.013.46-2.067.464-5.006.003-2.345-.026-2.945-.147-3.046-.113-.093-.298-.09-.74.012-.97.226-3.467.168-4.877-.111-1.585-.314-3.378-.887-5.146-1.643-.782-.335-1.473-.608-1.535-.607-.248.007-1.704.73-1.704.846 0 .154 1.586 1.421 4.827 3.855 4.997 3.754 8.385 6.201 8.54 6.17.088-.016.23-.228.318-.47z'/></svg>",
"no-issues": [],
@ -41,7 +43,7 @@
"ublock-origin":{
"type":"Browser Extension",
"no-issues":[
"kiwibrowser-android","brave-macos"
"kiwibrowser-android","firefox-android","brave-macos","chrome-macos","firefox-macos"
],
"note":" ",
"icon":"<svg fill='#800000' width='18' height='18' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M12 0C7.502 3 6.002 3 1.5 3c0 15.002 0 15.002 10.5 21 10.5-5.998 10.5-5.998 10.5-21-4.498 0-5.998 0-10.5-3zM5.956 7.472h1.512v4.536c0 1.322.19 1.508 1.512 1.508 1.323 0 1.512-.19 1.512-1.512V7.472H12v.767a3.75 3.75 0 0 1 2.268-.767 3.79 3.79 0 0 1 3.776 3.78 3.79 3.79 0 0 1-3.78 3.775 3.765 3.764 0 0 1-2.684-1.133c-.464.77-1.315 1.133-2.6 1.133-2.079 0-3.024-.944-3.024-3.023zm8.308 1.512A2.254 2.254 0 0 0 12 11.252a2.254 2.254 0 0 0 2.268 2.264 2.254 2.254 0 0 0 2.264-2.268 2.254 2.254 0 0 0-2.268-2.264z'/></svg>"

247
src/data/font_list.js Normal file
View file

@ -0,0 +1,247 @@
export const font_list = [
"Abadi MT Condensed Light",
"Albertus Extra Bold",
"Albertus Medium",
"Amazone BT",
"AmerType Md BT",
"American Typewriter",
"Andale Mono",
"Antique Olive",
"Arial",
"Arial Black",
"Arial MT",
"Arial Narrow",
"Arial Rounded MT Bold",
"Arial Unicode MS",
"Arrus BT",
"Aurora Cn BT",
"AvantGarde Bk BT",
"AvantGarde Md BT",
"Avenir",
"Avenir Next",
"Avenir Next Condensed",
"Bahnschrift",
"BankGothic Md BT",
"Baskerville",
"Bazooka",
"Benguiat Bk BT",
"BernhardFashion BT",
"BernhardMod BT",
"Big Caslon",
"BinnerD",
"Bodoni 72",
"Bodoni 72 Oldstyle",
"Bodoni 72 Smallcaps",
"Book Antiqua",
"Bookman Old Style",
"Boulder",
"Bradley Hand",
"Bremen Bd BT",
"Brush Script MT",
"CG Omega",
"CG Times",
"Calibri",
"Calisto MT",
"Calligrapher",
"Cambria",
"Cambria Math",
"Candara",
"CaslonOpnface BT",
"Century Gothic",
"Century Schoolbook",
"Cezanne",
"Chalkboard",
"Chalkboard SE",
"Chalkduster",
"Charlesworth",
"Charter",
"Charter BT",
"Charter Bd BT",
"Chaucer",
"ChelthmITC Bk BT",
"Clarendon Condensed",
"CloisterBlack BT",
"Cochin",
"Comic Sans MS",
"Consolas",
"Constantia",
"CopperplGoth Bd BT",
"Copperplate",
"Copperplate Gothic Bold",
"Copperplate Gothic Light",
"Corbel",
"Cornerstone",
"Coronet",
"Courier",
"Courier New",
"Cuckoo",
"DIN Alternate",
"DIN Condensed",
"Dauphin",
"Denmark",
"Didot",
"Ebrima",
"English 111 Vivace BT",
"EngraversGothic BT",
"Exotc350 Bd BT",
"Franklin Gothic Medium",
"Fransiscan",
"Freefrm721 Blk BT",
"FrnkGothITC Bk BT",
"Futura",
"Futura Bk BT",
"Futura Lt BT",
"Futura Md BT",
"Futura ZBlk BT",
"FuturaBlack BT",
"Gabriola",
"Gadugi",
"Galliard BT",
"Garamond",
"Geneva",
"GeoSlab 703 Lt BT",
"GeoSlab 703 XBd BT",
"Geometr231 BT",
"Geometr231 Hv BT",
"Geometr231 Lt BT",
"Georgia",
"Gill Sans",
"GoudyHandtooled BT",
"GoudyOLSt BT",
"Haettenschweiler",
"Heather",
"Helvetica",
"Helvetica Neue",
"Herald",
"Herculanum",
"Hoefler Text",
"HoloLens MDL2 Assets",
"Humanst 521 Cn BT",
"Humanst521 BT",
"Humanst521 Lt BT",
"Impact",
"Incised901 BT",
"Incised901 Bd BT",
"Incised901 Lt BT",
"Informal011 BT",
"Ink Free",
"Javanese Text",
"Jester",
"Kabel Bk BT",
"Kabel Ult BT",
"Kaufmann BT",
"Kaufmann Bd BT",
"Korinna BT",
"Leelawadee UI",
"Letter Gothic",
"Lithograph",
"Lithograph Light",
"Long Island",
"Lucida Console",
"Lucida Grande",
"Lucida Handwriting",
"Lucida Sans",
"Lucida Sans Unicode",
"Luminari",
"Lydian BT",
"MS Gothic",
"MS LineDraw",
"MV Boli",
"Malgun Gothic",
"Marigold",
"Marker Felt",
"Market",
"Marlett",
"Matisse ITC",
"Menlo",
"Microsoft Himalaya",
"Microsoft JhengHei",
"Microsoft New Tai Lue",
"Microsoft PhagsPa",
"Microsoft Sans Serif",
"Microsoft Tai Le",
"Microsoft YaHei",
"Microsoft Yi Baiti",
"MingLiU-ExtB",
"Monaco",
"Mongolian Baiti",
"Monotype Corsiva",
"Myanmar Text",
"News GothicMT",
"NewsGoth BT",
"Nirmala UI",
"Noteworthy",
"OCR A Extended",
"Old Century",
"Onyx BT",
"Optima",
"OzHandicraft BT",
"PTBarnum BT",
"Palatino",
"Palatino Linotype",
"Papyrus",
"Pegasus",
"Phosphate",
"Pickwick",
"Poster",
"PosterBodoni BT",
"Pythagoras",
"Ribbon131 Bd BT",
"Rockwell",
"Savoye LET",
"Sceptre",
"Segoe MDL2 Assets",
"Segoe Print",
"Segoe Script",
"Segoe UI",
"Segoe UI Emoji",
"Segoe UI Historic",
"Segoe UI Symbol",
"Serifa BT",
"Serifa Th BT",
"ShelleyVolante BT",
"Sherwood",
"SignPainter",
"Signboard",
"SimSun",
"Sitka",
"Skia",
"Snell Roundhand",
"Socket",
"Souvenir Lt BT",
"Staccato222 BT",
"Steamer",
"Storybook",
"Subway",
"Swis721 BlkEx BT",
"Swiss911 XCm BT",
"Sylfaen",
"Symbol",
"Tahoma",
"Technical",
"Teletype",
"Tempus Sans ITC",
"Times",
"Times New Roman",
"Times New Roman PS",
"Trattatello",
"Trebuchet MS",
"Tristan",
"Tubular",
"TypoUpright BT",
"Unicorn",
"Univers",
"Univers Condensed",
"Vagabond",
"Verdana",
"Webdings",
"Westminster\tAllegro",
"Wingdings",
"Yu Gothic",
"ZapfEllipt BT",
"ZapfHumnst BT",
"ZapfHumnst Dm BT",
"Zapfino",
"Zurich BlkEx BT",
"Zurich Ex BT"
]

48
src/data/icons.js Normal file
View file

@ -0,0 +1,48 @@
export const icons = {
download:
"<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' stroke-width='2' stroke='currentColor' fill='none' stroke-linecap='round' stroke-linejoin='round'><path d='M0 0h24v24H0z' stroke='none'/><path d='M4 17v2a2 2 0 002 2h12a2 2 0 002-2v-2M7 11l5 5 5-5M12 4v12'/></svg>",
delete: "<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' stroke-width='2' stroke='currentColor' fill='none' stroke-linecap='round' stroke-linejoin='round'><path d='M0 0h24v24H0z' stroke='none'/><path d='M4 7h16M10 11v6M14 11v6M5 7l1 12a2 2 0 002 2h8a2 2 0 002-2l1-12M9 7V4a1 1 0 011-1h4a1 1 0 011 1v3'/></svg>",
cdot: "<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='var(--blue)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' ><path stroke='none' d='M0 0h24v24H0z'/><path d='M11 12a1 1 0 1 0 2 0 1 1 0 1 0-2 0'/><path d='M3 12a9 9 0 1 0 18 0 9 9 0 1 0-18 0'/></svg>",
v: "<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' stroke-width='2' stroke='var(--green)' fill='none' stroke-linecap='round' stroke-linejoin='round'><path d='M0 0h24v24H0z' stroke='none'/><circle cx='12' cy='12' r='9'/><path d='M9 12l2 2 4-4'/></svg>",
x: "<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' stroke-width='2' stroke='var(--red)' fill='none' stroke-linecap='round' stroke-linejoin='round'><path d='M0 0h24v24H0z' stroke='none'/><circle cx='12' cy='12' r='9'/><path d='M10 10l4 4m0-4l-4 4'/></svg>",
Ads: "<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' stroke-width='2' stroke='currentColor' fill='none' stroke-linecap='round' stroke-linejoin='round'><path d='M0 0h24v24H0z' stroke='none'/><path d='M18 8a3 3 0 010 6M10 8v11a1 1 0 01-1 1H8a1 1 0 01-1-1v-5'/><path d='M12 8h0l4.524-3.77A.9.9 0 0118 4.922v12.156a.9.9 0 01-1.476.692L12 14H4a1 1 0 01-1-1V9a1 1 0 011-1h8'/></svg>",
Analytics:
"<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' stroke-width='2' stroke='currentColor' fill='none' stroke-linecap='round' stroke-linejoin='round'><path d='M0 0h24v24H0z' stroke='none'/><path d='M4 18V6a2 2 0 012-2h12a2 2 0 012 2v12a2 2 0 01-2 2H6a2 2 0 01-2-2z'/><path d='M7 14l3-3 2 2 3-3 2 2'/></svg>",
'Error Trackers':
"<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' stroke-width='2' stroke='currentColor' fill='none' stroke-linecap='round' stroke-linejoin='round'><path d='M0 0h24v24H0z' stroke='none'/><path d='M9 9V8a3 3 0 016 0v1M8 9h8a6 6 0 011 3v3a5 5 0 01-10 0v-3a6 6 0 011-3M3 13h4M17 13h4M12 20v-6M4 19l3.35-2M20 19l-3.35-2M4 7l3.75 2.4M20 7l-3.75 2.4'/></svg>",
Mix: "<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' stroke-width='2' stroke='currentColor' fill='none' stroke-linecap='round' stroke-linejoin='round'><path d='M0 0h24v24H0z' stroke='none'/><path d='M12 4L4 8l8 4 8-4-8-4M4 12l8 4 8-4M4 16l8 4 8-4'/></svg>",
OEMs: "<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' stroke-width='2' stroke='currentColor' fill='none' stroke-linecap='round' stroke-linejoin='round'><path d='M0 0h24v24H0z' stroke='none'/><rect x='6' y='3' width='12' height='18' rx='2'/><path d='M11 4h2M12 17v.01'/></svg>",
'Social Trackers':
"<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' stroke-width='2' stroke='currentColor' fill='none' stroke-linecap='round' stroke-linejoin='round'><path d='M0 0h24v24H0z' stroke='none'/><circle cx='12' cy='5' r='2'/><circle cx='5' cy='19' r='2'/><circle cx='19' cy='19' r='2'/><circle cx='12' cy='14' r='3'/><path d='M12 7v4M6.7 17.8l2.8-2M17.3 17.8l-2.8-2'/></svg>",
OnePlus:
"<svg fill='currentColor' width='18' height='18' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'><path d='M0 3.74V24h20.26V12.428h-2.256v9.317H2.254V5.995h9.318V3.742zM18.004 0v3.74h-3.758v2.256h3.758v3.758h2.255V5.996H24V3.74h-3.758V0zm-6.45 18.756V8.862H9.562c0 .682-.228 1.189-.577 1.504-.367.297-.91.437-1.556.437h-.245v1.625h2.133v6.31h2.237z'></path></svg>",
Xiaomi: "<svg fill='currentColor' width='18' height='18' role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'><path d='M19.96 20a.32.32 0 0 1-.32-.32V4.32a.32.32 0 0 1 .32-.32h3.71a.32.32 0 0 1 .33.32v15.36a.32.32 0 0 1-.33.32zm-6.22 0s-.3-.09-.3-.32v-9.43A2.18 2.18 0 0 0 11.24 8H4.3c-.4 0-.3.3-.3.3v11.38c0 .27-.3.32-.3.32H.33a.32.32 0 0 1-.33-.32V4.32A.32.32 0 0 1 .33 4h12.86a4.28 4.28 0 0 1 4.25 4.27l.01 11.41a.32.32 0 0 1-.32.32zm-6.9 0a.3.3 0 0 1-.3-.3v-9a.3.3 0 0 1 .3-.3h3.77a.3.3 0 0 1 .29.3v9a.3.3 0 0 1-.3.3z'></path></svg>",
Huawei: "<svg fill='currentColor' width='18' height='18' role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'><path d='M3.67 6.14S1.82 7.91 1.72 9.78v.35c.08 1.51 1.22 2.4 1.22 2.4 1.83 1.79 6.26 4.04 7.3 4.55 0 0 .06.03.1-.01l.02-.04v-.04C7.52 10.8 3.67 6.14 3.67 6.14zM9.65 18.6c-.02-.08-.1-.08-.1-.08l-7.38.26c.8 1.43 2.15 2.53 3.56 2.2.96-.25 3.16-1.78 3.88-2.3.06-.05.04-.09.04-.09zm.08-.78C6.49 15.63.21 12.28.21 12.28c-.15.46-.2.9-.21 1.3v.07c0 1.07.4 1.82.4 1.82.8 1.69 2.34 2.2 2.34 2.2.7.3 1.4.31 1.4.31.12.02 4.4 0 5.54 0 .05 0 .08-.05.08-.05v-.06c0-.03-.03-.05-.03-.05zM9.06 3.19a3.42 3.42 0 00-2.57 3.15v.41c.03.6.16 1.05.16 1.05.66 2.9 3.86 7.65 4.55 8.65.05.05.1.03.1.03a.1.1 0 00.06-.1c1.06-10.6-1.11-13.42-1.11-13.42-.32.02-1.19.23-1.19.23zm8.299 2.27s-.49-1.8-2.44-2.28c0 0-.57-.14-1.17-.22 0 0-2.18 2.81-1.12 13.43.01.07.06.08.06.08.07.03.1-.03.1-.03.72-1.03 3.9-5.76 4.55-8.64 0 0 .36-1.4.02-2.34zm-2.92 13.07s-.07 0-.09.05c0 0-.01.07.03.1.7.51 2.85 2 3.88 2.3 0 0 .16.05.43.06h.14c.69-.02 1.9-.37 3-2.26l-7.4-.25zm7.83-8.41c.14-2.06-1.94-3.97-1.94-3.98 0 0-3.85 4.66-6.67 10.8 0 0-.03.08.02.13l.04.01h.06c1.06-.53 5.46-2.77 7.28-4.54 0 0 1.15-.93 1.21-2.42zm1.52 2.14s-6.28 3.37-9.52 5.55c0 0-.05.04-.03.11 0 0 .03.06.07.06 1.16 0 5.56 0 5.67-.02 0 0 .57-.02 1.27-.29 0 0 1.56-.5 2.37-2.27 0 0 .73-1.45.17-3.14z'></path></svg>",
Samsung:
"<svg fill='currentColor' width='18' height='18' role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'><path d='M19.8166 10.2808l.0459 2.6934h-.023l-.7793-2.6934h-1.2837v3.3925h.8481l-.0458-2.785h.023l.8366 2.785h1.2264v-3.3925zm-16.149 0l-.6418 3.427h.9284l.4699-3.1175h.0229l.4585 3.1174h.9169l-.6304-3.4269zm5.1805 0l-.424 2.6132h-.023l-.424-2.6132H6.5788l-.0688 3.427h.8596l.023-3.0832h.0114l.573 3.0831h.8711l.5731-3.083h.023l.0228 3.083h.8596l-.0802-3.4269zm-7.2664 2.4527c.0343.0802.0229.1949.0114.2522-.0229.1146-.1031.2292-.3324.2292-.2177 0-.3438-.126-.3438-.3095v-.3323H0v.2636c0 .7679.6074.9971 1.2493.9971.6189 0 1.1346-.2178 1.2149-.7794.0458-.298.0114-.4928 0-.5616-.1605-.722-1.467-.9283-1.5588-1.3295-.0114-.0688-.0114-.1375 0-.1834.023-.1146.1032-.2292.3095-.2292.2063 0 .321.126.321.3095v.2063h.8595v-.2407c0-.745-.6762-.8596-1.1576-.8596-.6074 0-1.1117.2063-1.2034.7564-.023.149-.0344.2866.0114.4585.1376.7106 1.364.9169 1.5358 1.3524m11.152 0c.0343.0803.0228.1834.0114.2522-.023.1146-.1032.2292-.3324.2292-.2178 0-.3438-.126-.3438-.3095v-.3323h-.917v.2636c0 .7564.596.9857 1.2379.9857.6189 0 1.1232-.2063 1.2034-.7794.0459-.298.0115-.4814 0-.5616-.1375-.7106-1.4327-.9284-1.5243-1.318-.0115-.0688-.0115-.1376 0-.1835.0229-.1146.1031-.2292.3094-.2292.1948 0 .321.126.321.3095v.2063h.848v-.2407c0-.745-.6647-.8596-1.146-.8596-.6075 0-1.1004.1948-1.192.7564-.023.149-.023.2866.0114.4585.1376.7106 1.341.9054 1.513 1.3524m2.8882.4585c.2407 0 .3094-.1605.3323-.2522.0115-.0343.0115-.0917.0115-.126v-2.533h.871v2.4642c0 .0688 0 .1948-.0114.2292-.0573.6419-.5616.8482-1.192.8482-.6303 0-1.1346-.2063-1.192-.8482 0-.0344-.0114-.1604-.0114-.2292v-2.4642h.871v2.533c0 .0458 0 .0916.0115.126 0 .0917.0688.2522.3095.2522m7.1518-.0344c.2522 0 .3324-.1605.3553-.2522.0115-.0343.0115-.0917.0115-.126v-.4929h-.3553v-.5043H24v.917c0 .0687 0 .1145-.0115.2292-.0573.6303-.596.8481-1.2034.8481-.6075 0-1.1461-.2178-1.2034-.8481-.0115-.1147-.0115-.1605-.0115-.2293v-1.444c0-.0574.0115-.172.0115-.2293.0802-.6419.596-.8482 1.2034-.8482s1.1347.2063 1.2034.8482c.0115.1031.0115.2292.0115.2292v.1146h-.8596v-.1948s0-.0803-.0115-.1261c-.0114-.0802-.0802-.2521-.3438-.2521-.2521 0-.321.1604-.3438.2521-.0115.0458-.0115.1032-.0115.1605v1.5702c0 .0458 0 .0916.0115.126 0 .0917.0917.2522.3323.2522'></path></svg>",
Apple: "<svg fill='currentColor' width='18' height='18' role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'><path d='M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701'></path></svg>",
Facebook:
"<svg fill='currentColor' width='18' height='18' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'><path d='M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z'/></svg>",
Twitter:
"<svg fill='currentColor' width='18' height='18' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'><path d='M23.953 4.57a10 10 0 01-2.825.775 4.958 4.958 0 002.163-2.723c-.951.555-2.005.959-3.127 1.184a4.92 4.92 0 00-8.384 4.482C7.69 8.095 4.067 6.13 1.64 3.162a4.822 4.822 0 00-.666 2.475c0 1.71.87 3.213 2.188 4.096a4.904 4.904 0 01-2.228-.616v.06a4.923 4.923 0 003.946 4.827 4.996 4.996 0 01-2.212.085 4.936 4.936 0 004.604 3.417 9.867 9.867 0 01-6.102 2.105c-.39 0-.779-.023-1.17-.067a13.995 13.995 0 007.557 2.209c9.053 0 13.998-7.496 13.998-13.985 0-.21 0-.42-.015-.63A9.935 9.935 0 0024 4.59z'/></svg>",
Sentry: "<svg fill='currentColor' viewBox='0 0 24 24' width='18' height='18' xmlns='http://www.w3.org/2000/svg'><path d='M13.91 2.505c-.873-1.448-2.972-1.448-3.844 0L6.904 7.92a15.478 15.478 0 018.53 12.811h-2.221A13.301 13.301 0 005.784 9.814l-2.926 5.06a7.65 7.65 0 014.435 5.848H2.194a.365.365 0 01-.298-.534l1.413-2.402a5.16 5.16 0 00-1.614-.913L.296 19.275a2.182 2.182 0 00.812 2.999 2.24 2.24 0 001.086.288h6.983a9.322 9.322 0 00-3.845-8.318l1.11-1.922a11.47 11.47 0 014.95 10.24h5.915a17.242 17.242 0 00-7.885-15.28l2.244-3.845a.37.37 0 01.504-.13c.255.14 9.75 16.708 9.928 16.9a.365.365 0 01-.327.543h-2.287c.029.612.029 1.223 0 1.831h2.297a2.206 2.206 0 001.922-3.31z'/></svg>",
Bugsnag:
"<svg fill='currentColor' viewBox='0 0 24 24' width='18' height='18' xmlns='http://www.w3.org/2000/svg'><path d='M12 24c-4.596 0-8.336-3.74-8.336-8.336v-4.135a.62.62 0 01.62-.62h2.957L7.23 1.337 4.903 2.77v5.45a.62.62 0 01-1.24 0V2.7c0-.384.204-.749.53-.95L6.773.166a1.114 1.114 0 011.699.949l.01 9.796h3.52a4.759 4.759 0 014.753 4.754 4.759 4.759 0 01-4.753 4.753 4.759 4.759 0 01-4.754-4.753l-.003-3.515H4.903v3.515c0 3.912 3.183 7.097 7.097 7.097a7.104 7.104 0 007.097-7.097A7.105 7.105 0 0012 8.567h-1.076a.62.62 0 010-1.24H12c4.596 0 8.336 3.74 8.336 8.336S16.596 24 12 24zM8.482 12.15l.004 3.514A3.518 3.518 0 0012 19.178a3.518 3.518 0 003.514-3.514A3.518 3.518 0 0012 12.149zm4.513 3.514a.995.995 0 01-.995.994.995.995 0 01-.995-.994.995.995 0 01.995-.995.995.995 0 01.995.995z'/></svg>",
LinkedIn:
"<svg fill='currentColor' width='18' height='18' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'><path d='M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 01-2.063-2.065 2.064 2.064 0 112.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z'/></svg>",
Pinterest:
"<svg fill='currentColor' width='18' height='18' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'><path d='M12.017 0C5.396 0 .029 5.367.029 11.987c0 5.079 3.158 9.417 7.618 11.162-.105-.949-.199-2.403.041-3.439.219-.937 1.406-5.957 1.406-5.957s-.359-.72-.359-1.781c0-1.663.967-2.911 2.168-2.911 1.024 0 1.518.769 1.518 1.688 0 1.029-.653 2.567-.992 3.992-.285 1.193.6 2.165 1.775 2.165 2.128 0 3.768-2.245 3.768-5.487 0-2.861-2.063-4.869-5.008-4.869-3.41 0-5.409 2.562-5.409 5.199 0 1.033.394 2.143.889 2.741.099.12.112.225.085.345-.09.375-.293 1.199-.334 1.363-.053.225-.172.271-.401.165-1.495-.69-2.433-2.878-2.433-4.646 0-3.776 2.748-7.252 7.92-7.252 4.158 0 7.392 2.967 7.392 6.923 0 4.135-2.607 7.462-6.233 7.462-1.214 0-2.354-.629-2.758-1.379l-.749 2.848c-.269 1.045-1.004 2.352-1.498 3.146 1.123.345 2.306.535 3.55.535 6.607 0 11.985-5.365 11.985-11.987C23.97 5.39 18.592.026 11.985.026L12.017 0z'/></svg>",
Reddit: "<svg fill='currentColor' width='18' height='18' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'><path d='M12 0A12 12 0 000 12a12 12 0 0012 12 12 12 0 0012-12A12 12 0 0012 0zm5.01 4.744c.688 0 1.25.561 1.25 1.249a1.25 1.25 0 01-2.498.056l-2.597-.547-.8 3.747c1.824.07 3.48.632 4.674 1.488.308-.309.73-.491 1.207-.491.968 0 1.754.786 1.754 1.754 0 .716-.435 1.333-1.01 1.614a3.111 3.111 0 01.042.52c0 2.694-3.13 4.87-7.004 4.87-3.874 0-7.004-2.176-7.004-4.87 0-.183.015-.366.043-.534A1.748 1.748 0 014.028 12c0-.968.786-1.754 1.754-1.754.463 0 .898.196 1.207.49 1.207-.883 2.878-1.43 4.744-1.487l.885-4.182a.342.342 0 01.14-.197.35.35 0 01.238-.042l2.906.617a1.214 1.214 0 011.108-.701zM9.25 12C8.561 12 8 12.562 8 13.25c0 .687.561 1.248 1.25 1.248.687 0 1.248-.561 1.248-1.249 0-.688-.561-1.249-1.249-1.249zm5.5 0c-.687 0-1.248.561-1.248 1.25 0 .687.561 1.248 1.249 1.248.688 0 1.249-.561 1.249-1.249 0-.687-.562-1.249-1.25-1.249zm-5.466 3.99a.327.327 0 00-.231.094.33.33 0 000 .463c.842.842 2.484.913 2.961.913.477 0 2.105-.056 2.961-.913a.361.361 0 00.029-.463.33.33 0 00-.464 0c-.547.533-1.684.73-2.512.73-.828 0-1.979-.196-2.512-.73a.326.326 0 00-.232-.095z'/></svg>",
TikTok: "<svg fill='currentColor' width='18' height='18' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'><path d='M12.525.02c1.31-.02 2.61-.01 3.91-.02.08 1.53.63 3.09 1.75 4.17 1.12 1.11 2.7 1.62 4.24 1.79v4.03c-1.44-.05-2.89-.35-4.2-.97-.57-.26-1.1-.59-1.62-.93-.01 2.92.01 5.84-.02 8.75-.08 1.4-.54 2.79-1.35 3.94-1.31 1.92-3.58 3.17-5.91 3.21-1.43.08-2.86-.31-4.08-1.03-2.02-1.19-3.44-3.37-3.65-5.71-.02-.5-.03-1-.01-1.49.18-1.9 1.12-3.72 2.58-4.96 1.66-1.44 3.98-2.13 6.15-1.72.02 1.48-.04 2.96-.04 4.44-.99-.32-2.15-.23-3.02.37-.63.41-1.11 1.04-1.36 1.75-.21.51-.15 1.07-.14 1.61.24 1.64 1.82 3.02 3.5 2.87 1.12-.01 2.19-.66 2.77-1.61.19-.33.4-.67.41-1.06.1-1.79.06-3.57.07-5.36.01-4.03-.01-8.05.02-12.07z'/></svg>",
Yahoo: "<svg fill='currentColor' width='18' height='18' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'><path d='M18.86 1.56l-4.59 10.31h5.13L24 1.56h-5.14M0 6.71l5.15 11.56-1.85 4.17h4.53l6.86-15.73h-4.5l-2.8 6.73-2.77-6.73H0m15.62 6.16c-1.67 0-2.91 1.25-2.91 2.71 0 1.42 1.2 2.61 2.79 2.61 1.68 0 2.93-1.23 2.93-2.69 0-1.47-1.2-2.63-2.81-2.63z'/></svg>",
Hotjar: "<svg fill='currentColor' width='18' height='18' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M21.055 7.814C17.512 1.404 7.118 0 7.118 0s4.798 5.34-1.334 9.567c-3.876 2.666-5.41 6.13-3.75 9.914 1.27 2.9 3.96 4.076 6.86 4.519-.745-1.434-.932-3.505-.381-5.628a8.51 8.51 0 0 1 .186-.636c.813 1.258 2.148 1.946 3.45 1.629 1.783-.424 2.829-2.582 2.342-4.799a5.104 5.104 0 0 0-.536-1.372c.07.017.14.024.212.047 2.225.635 3.301 3.962 2.403 7.434a9.266 9.266 0 0 1-1.325 2.946c3.82-1.23 6.36-4.311 7.06-7.056.736-2.856.177-6.185-1.25-8.751z'/></svg>",
YouTube:
"<svg fill='currentColor' width='18' height='18' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'><path d='M23.498 6.186a3.016 3.016 0 00-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 00.502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 002.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 002.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z'/></svg>",
Unity: "<svg fill='currentColor' width='18' height='18' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='m12.929 4.294 3.8 2.193c.136.077.141.29 0 .367l-4.515 2.608a.42.42 0 0 1-.425 0L7.274 6.854c-.139-.074-.141-.293 0-.367l3.797-2.193V0L1.376 5.598v11.195l3.717-2.146v-4.385c-.002-.157.182-.269.318-.184l4.515 2.607a.425.425 0 0 1 .214.368v5.213c.002.156-.181.268-.318.184l-3.8-2.193-3.717 2.145L12 24l9.695-5.598-3.717-2.145-3.8 2.192c-.134.082-.323-.024-.318-.183v-5.213c0-.157.087-.296.214-.368l4.515-2.607c.134-.082.322.022.318.184v4.385l3.717 2.146V5.598L12.93 0Z'/></svg>",
'Google Ads':
"<svg fill='currentColor' width='18' height='18' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M4 22.93a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm19.464-6.001-8-13.857a4 4 0 0 0-6.93 4l8.001 13.857a4.001 4.001 0 0 0 6.93-4zM7.514 4.844l-5.95 10.304A4.5 4.5 0 0 1 4 14.43c2.56-.008 4.625 2.158 4.494 4.715l3.217-5.573-3.61-6.25a4.463 4.463 0 0 1-.587-2.478z'/></svg>",
'Google Analytics':
"<svg fill='currentColor' width='18' height='18' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M22.84 2.998v17.999a2.983 2.983 0 0 1-2.967 2.998 2.98 2.98 0 0 1-.368-.02 3.06 3.06 0 0 1-2.61-3.1V3.12A3.06 3.06 0 0 1 19.51.02a2.983 2.983 0 0 1 3.329 2.978zM4.133 18.055a2.973 2.973 0 1 0 0 5.945 2.973 2.973 0 0 0 0-5.945zm7.872-9.01h-.05a3.06 3.06 0 0 0-2.892 3.126v7.985c0 2.167.954 3.482 2.35 3.763a2.978 2.978 0 0 0 3.57-2.927v-8.959a2.983 2.983 0 0 0-2.978-2.988z'/></svg>",
Adcolony:
"<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 83 110'><path d='m27.1 85.6.1-.1c6.3-8.5 7-14.9 4.1-17.1-2.9-2.2-8.9.2-15.2 8.7-12.8-14.7-11.2-37 3.5-49.7 3-2.6 6.4-4.7 10-6.1-.5.1-1.1.2-1.6.4C9.2 26.2-2.3 45.2 2.4 64c1.7 6.9 5.5 13.1 10.8 17.8C7.9 91.3 3.2 106 0 110.2c3.3-4.5 17.1-13.7 24.6-21.7 6.4 2.3 13.4 2.6 20 1 .6-.1 1.2-.3 1.8-.5-6.7.8-13.3-.4-19.3-3.4zM11 95.5c1.6-3.9 3.4-8 5.2-11.2.8-1.4 1.6-2.8 2.6-4.1l.1-.1c4.8-6.4 8.5-7.7 9.3-7.3.5.6.3 4.5-4.5 11v.1c-.9 1.1-1.8 2.2-2.8 3.2-3.2 2.9-6.5 5.7-9.9 8.4z' transform='translate(-285 -100) translate(285 100)'/><path d='M66.8 38.1C81.8 18.1 82.7 0 82.7 0S65.6 5.9 50.6 26c-4.5 6.1-8.5 12.5-11.9 19.3h-.1l-10.2 1.4c1-1.9 1.8-3.8 2.4-5.9 0 0-4.7 2.4-10.7 10.4s-6.6 12.1-6.6 12.1l.5.3s3-1.3 7.8-7.2l11.5 1h.2c-.7 1.9-1.2 3.8-1.7 5.7l2.1 1.6c7.5-7.6 11.7-18 11.7-18-.5.7-7.2 8.2-9.9 11.2 0 0 6.6-16.8 15.8-29 12-16 22.4-21.2 22.4-21.2s-3.2 12.8-14.2 27.5c-3.9 5.2-8.2 10.2-12.8 14.8l-.6.6c-2.7 5.7-6.3 11-10.6 15.7l.5.4c.2-.1 1.8-1 4.4-2.8l.6-.4.1.2 4.3 10.8c-4.3 6.4-4.7 9.6-4.7 9.6l.5.3s3.8-1.6 9.8-9.7 7-13.2 7-13.2c-1.8 1.1-3.5 2.4-5 3.9l-1.5-10.2V55c5.5-5.2 10.6-10.8 15.1-16.9z' transform='translate(-285 -100) translate(285 100)'/><path d='M66.8 38.1C81.8 18.1 82.7 0 82.7 0S65.6 5.9 50.6 26c-4.5 6.1-8.5 12.5-11.9 19.3h-.1l-10.2 1.4c1-1.9 1.8-3.8 2.4-5.9 0 0-4.7 2.4-10.7 10.4s-6.6 12.1-6.6 12.1l.5.3s3-1.3 7.8-7.2l11.5 1h.2c-.7 1.9-1.2 3.8-1.7 5.7l2.1 1.6c7.5-7.6 11.7-18 11.7-18-.5.7-7.2 8.2-9.9 11.2 0 0 6.6-16.8 15.8-29 12-16 22.4-21.2 22.4-21.2s-3.2 12.8-14.2 27.5c-3.9 5.2-8.2 10.2-12.8 14.8l-.6.6c-2.7 5.7-6.3 11-10.6 15.7l.5.4c.2-.1 1.8-1 4.4-2.8l.6-.4.1.2 4.3 10.8c-4.3 6.4-4.7 9.6-4.7 9.6l.5.3s3.8-1.6 9.8-9.7 7-13.2 7-13.2c-1.8 1.1-3.5 2.4-5 3.9l-1.5-10.2V55c5.5-5.2 10.6-10.8 15.1-16.9z' transform='translate(-285 -100) translate(285 100)'/></svg>"
}

View file

@ -12,16 +12,105 @@
}) %>
<body>
<%- include('partials/header.ejs', {page:'fontlist'}) %>
<main>
<div class="hero ">
<p>View a list of available fonts in your browser</p>
</div>
<div id="flist">
</div>
</main>
<%- include('partials/adblock/changelog.ejs') %>
<%- include('partials/support_me.ejs') %>
<%- include('partials/header.ejs', {page:'fontlist'}) %>
<main>
<div class="grid">
<div class="col-6 _ta-center">
<svg xmlns="http://www.w3.org/2000/svg" fill="var(--txt-r)" width="128" height="128" viewBox="0 0 128 128">
<path
d="M50.336 22.85c-1.471 0-2.942.712-3.54 2.137L19.911 89a3.84 3.84 0 0 0 2.052 5.029 3.835 3.835 0 0 0 5.029-2.054l5.407-12.874h35.88l5.408 12.874a3.82 3.82 0 0 0 3.539 2.354c.07 0 .139-.017.208-.02.063.004.122.019.186.019h18.893c7.513 0 13.619-6.108 13.619-13.62 0-5.372-3.152-9.985-7.677-12.204 2.559-2.472 4.162-5.932 4.162-9.765 0-7.51-6.107-13.62-13.62-13.62H77.62a2.637 2.637 0 0 0-2.636 2.636V75.24L53.877 24.987c-.597-1.425-2.07-2.138-3.54-2.138zM18.991 97.655c-4.372 0-4.991 1.67-4.991 3.747s.636 3.748 4.99 3.748h89.41c4.355 0 5.601-1.679 5.601-3.748s-1.23-3.747-5.601-3.747z" />
</svg>
</div>
<div class="col-6">
<div class="card" id="results">
</div>
</div>
<div>
<div class="card">
<fieldset>
<legend>Font Test</legend>
<div class="row">
<div>
<sub>Click on below text to edit</sub>
<h1 id="font_test" contenteditable>
abcde
<div>12345</div>
</h1>
<hr>
<div>
<pre class="_mt-2"><code id="css-code">.custom-font {
font-family: Arial;
font-weight: 500;
font-size: 48px;
letter-spacing: 0px;
line-height: 1.4;
}</code></pre></div>
</div>
<div>
<div class="grid">
<div>
<select id="f_options">
<option value="Arial">Select font..</option>
</select>
</div>
<div>
<label>Font Weight &nbsp; <span id="r_fw_value">500</span>
<input id="r_fw" type="range" value="500" min="100" max="900" step="50">
</label>
<label>Font Size &nbsp; <span id="r_fs_value">48px</span>
<input id="r_fs" type="range" min="8" max="72" value="48" />
</label>
<label>Letter Spacing &nbsp; <span id="r_ls_value">0px</span>
<input id="r_ls" type="range" min="-20" max="20" value="0" step=".1" />
</label>
<label>Line Height &nbsp; <span id="r_lh_value">1.4</span>
<input id="r_lh" type="range" min="0" max="2" value="1.4" step=".1" />
</label>
</div>
<div>
<button class="btn-p" id="css_code_copy"><svg stroke="currentColor" fill="none" stroke-width="2"
viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round"
height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
<desc></desc>
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<rect x="8" y="8" width="12" height="12" rx="2"></rect>
<path d="M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2">
</path>
</svg> Copy CSS to Clipboard</button>
</div>
</div>
</div>
</div>
</fieldset>
</div>
</div>
<div>
<details class="card _p-0 _shadowless _bg _my-2">
<summary class="_p-1"> FontList </summary>
<div class="_p-1">
<p>
Standard fonts may appear differently on different devices or operating systems, causing
inconsistency in the appearance of text on a webpage.<br>
This testing tool allows you to check over 200+ standard fonts and see which ones are supported
by your browser.
The page displays a list of each supported font.<br>
Users can also customize the sample text and adjust font size and style options to see how the
different fonts look in various settings. This tool is useful for designers, developers, and
anyone looking to experiment with different fonts on their website.
<br>
</p>
</div>
</details>
</div>
<div>
<div id="flist">
</div>
</div>
</div>
</main>
<%- include('partials/footer.ejs') %>
<%- include('partials/gotop.ejs') %>
</body>

View file

@ -15,6 +15,7 @@
<body>
<%- include('partials/support_me.ejs') %>
<%- include('partials/adblock/changelog.ejs') %>
<%- include('partials/header.ejs', {page:'index'}) %>
<main class="_ta-center">
<div class="_aos-top card">

View file

@ -1,32 +1,74 @@
import '../sass/adblock.sass'
import * as data from '../data/adblock_data.json'
import { icons } from '../assets/adblock/icons'
import packageJSON from '../../package.json'
import { icons } from '../data/icons'
import { navbar } from './components/navbar'
import { dialog } from './components/dialog'
import A11yDialog from './components/dialog'
import { themeManager } from './components/themeManager'
import { gotop } from './components/gotop'
import { aos } from './components/aos'
import { fadeIn, fadeOut } from './components/fade'
import { Snackbar } from './components/snackbar'
import { LocalStorageManager } from './components/localStorage'
const cd = document.querySelector('#dlg_changelog')
const ch_dialog = new A11yDialog(cd)
var TZ = new LocalStorageManager('toolz')
const version = packageJSON.version
const tzversion = TZ.get('version')
if (tzversion !== version) {
//Show changelog
ch_dialog.show()
//Set version
TZ.set('version', version)
}
var LS = new LocalStorageManager('adb_tool')
var reports = LS.get('reports')
var collapseStatus = LS.get('collapseStatus')
if (!collapseStatus) { collapseStatus = true; LS.set('collapseStatus', collapseStatus) }
var tslog = ""
if (!reports) reports = []
var results = LS.get('results')
var settings = LS.get('settings')
if (!settings) {
settings = {
collapseAll: true,
hideCF: false,
hideSL: false
}
LS.set('settings', settings)
}
var tslog = ''
if (!results) results = []
var test_log = document.getElementById('test_log')
var snackbar = new Snackbar({
topPos: "10px",
topPos: '10px',
classNames: 'success',
autoClose: true,
autoCloseTimeout: 2000
})
function downloadResult(k) {
var r
results.forEach((ri) => {
console.log(ri['time'], k)
if (ri['time'] == k) r = ri
})
var data = JSON.stringify(r)
var blob = new Blob([data], { type: 'application/json' })
var url = URL.createObjectURL(blob)
var linkElement = document.createElement('a')
linkElement.setAttribute('download', 'd3_adb_' + r.date + '.json')
var revokeAndDownload = function () {
URL.revokeObjectURL(linkElement.href)
linkElement.href = url
linkElement.click()
}
if (linkElement.href) {
URL.revokeObjectURL(linkElement.href)
setTimeout(revokeAndDownload, 1000)
} else {
revokeAndDownload()
}
}
async function copyToClip(str) {
try {
await navigator.clipboard.writeText(str).then(() => { snackbar.showN('URL copied to clipboard !') })
await navigator.clipboard.writeText(str).then(() => {
snackbar.show('URL copied to clipboard !')
})
} catch (err) {
const txt = document.createElement('textarea')
txt.value = str
@ -35,25 +77,25 @@ async function copyToClip(str) {
txt.style.left = '-9999px'
document.body.appendChild(txt)
txt.select();
txt.setSelectionRange(0, 99999);
document.execCommand('copy');
txt.select()
txt.setSelectionRange(0, 99999)
document.execCommand('copy')
txt.remove()
snackbar.showN('URL copied to clipboard !')
snackbar.show('URL copied to clipboard !')
}
}
var abt = {
total: 10,
total: 0,
blocked: 0,
notblocked:0,
notblocked: 0,
cosmetic_test: {
static: false,
dynamic: false
static: null,
dynamic: null
},
script: {
ads: false,
pagead: false,
partnerads: false
ads: null,
pagead: null,
partnerads: null
},
hosts: {}
}
@ -83,22 +125,19 @@ async function check_url(url, div, parent, k1, k2) {
await fetch('https://' + url, config, timeout, parent, div)
.then((response) => {
console.log(response)
if(response.type == "basic" && response.status == 200)
{
if (response.type == 'basic' && response.status == 200) {
hostDiv.innerHTML = icons['v'] + '<span>' + url + '</span>'
abt.blocked += 1
Object.assign(abt.hosts[k1][k2], { [url]: true })
tslog += "<br> " + url + " - blocked"
}else{
tslog += '<br> ' + url + ' - blocked'
} else {
//Response was received --> ads are NOT blocked
parent.style.background = 'var(--red)'
hostDiv.innerHTML = icons['x'] + '<span>' + url + '</span>'
abt.notblocked += 1
Object.assign(abt.hosts[k1][k2], { [url]: false })
tslog += "<br> " + url + " - not blocked"
tslog += '<br> ' + url + ' - not blocked'
}
})
.catch((error) => {
console.log(error)
@ -106,7 +145,7 @@ async function check_url(url, div, parent, k1, k2) {
hostDiv.innerHTML = icons['v'] + '<span>' + url + '</span>'
abt.blocked += 1
Object.assign(abt.hosts[k1][k2], { [url]: true })
tslog += "<br> " + url + " - blocked"
tslog += '<br> ' + url + ' - blocked'
//No response / error --> ads are blocked
})
} catch (error) {
@ -133,9 +172,10 @@ async function fetchTests() {
Object.keys(data).forEach((key) => {
if (key == 'default') return
var catEl = document.createElement('div')
catEl.className = "grid"
catEl.className = 'grid'
catEl.id = key
catEl.innerHTML = '<div><h5>' + icons[key] + '&nbsp;&nbsp;' + key + '</h5><div>'
catEl.innerHTML =
'<div><h5>' + icons[key] + '&nbsp;&nbsp;' + key + '</h5><div>'
testWrapper.appendChild(catEl)
var category = data[key]
var total_hosts = 0
@ -144,10 +184,10 @@ async function fetchTests() {
dd_1.classList.add('col-6')
var dd_2 = document.createElement('div')
dd_2.classList.add('col-6')
catEl.appendChild(dd_2)
catEl.appendChild(dd_1)
var i=0
var i = 0
Object.keys(category).forEach((keyC) => {
var testInfo = document.createElement('div')
var tests_count = 0
@ -156,12 +196,13 @@ async function fetchTests() {
div.classList.add('test')
div.id = keyC
div.style.background = 'var(--green)'
let tc = icons[keyC] != undefined ? (icons[keyC] + "&nbsp") : ""
div.innerHTML = "<span class='test_collapse'>" + tc + keyC + '</span>'
let tc = icons[keyC] != undefined ? icons[keyC] + '&nbsp' : ''
div.innerHTML =
"<span class='test_collapse'>" + tc + keyC + '</span>'
div.appendChild(dw)
if(i%2==0){
if (i % 2 == 0) {
dd_2.appendChild(div)
}else{
} else {
dd_1.appendChild(div)
}
i++
@ -169,12 +210,10 @@ async function fetchTests() {
if (Object.prototype.hasOwnProperty.call(category, keyC)) {
var value = category[keyC]
for (let i = 0; i < value.length; i++) {
fetches.push(
check_url(value[i], dw, div, key, keyC).then(() => {
set_liquid()
})
)
tests_count++
}
@ -208,8 +247,14 @@ function ad_script_test() {
sfa1.classList.add(abt.script.ads ? '_bg-green' : '_bg-red')
sfa2.classList.add(abt.script.pagead ? '_bg-green' : '_bg-red')
sfa3.classList.add(abt.script.partnerads ? '_bg-green' : '_bg-red')
abt.blocked += (abt.script.ads ? 2 :0)+(abt.script.pagead ? 2 :0)+(abt.script.partnerads ? 2 :0)
abt.notblocked += (abt.script.ads ? 0 :2)+(abt.script.pagead ? 0 :2)+(abt.script.partnerads ? 0 :2)
abt.blocked +=
(abt.script.ads ? 2 : 0) +
(abt.script.pagead ? 2 : 0) +
(abt.script.partnerads ? 2 : 0)
abt.notblocked +=
(abt.script.ads ? 0 : 2) +
(abt.script.pagead ? 0 : 2) +
(abt.script.partnerads ? 0 : 2)
test_log.appendChild(log)
log.innerHTML =
'<div>script_ads : ' +
@ -219,7 +264,7 @@ function ad_script_test() {
'</div><div>script_partenrads : ' +
abt.script.partnerads +
'</div><br> ------------------------- '
set_liquid()
set_liquid()
}
const ctd = document.querySelector('#ctd_test')
@ -227,32 +272,45 @@ const ctd = document.querySelector('#ctd_test')
function cosmetic_test_static() {
setTimeout(function () {
const cts = document.querySelector('#cts_test')
abt.cosmetic_test.static = (cts.clientHeight || cts.offsetHeight || window.getComputedStyle(cts, null).getPropertyValue("display") =='block') ? false : true
abt.cosmetic_test.static =
cts.clientHeight ||
cts.offsetHeight ||
window.getComputedStyle(cts, null).getPropertyValue('display') ==
'block'
? false
: true
abt.blocked += abt.cosmetic_test.static ? 2 : 0
abt.notblocked += abt.cosmetic_test.static ? 0 : 2
document.querySelector('#ct_static').classList.add(abt.cosmetic_test.static ? '_bg-green' : '_bg-red')
document
.querySelector('#ct_static')
.classList.add(abt.cosmetic_test.static ? '_bg-green' : '_bg-red')
let log = document.createElement('div')
test_log.appendChild(log)
log.innerHTML =
' cosmetic_static_ad : ' +
abt.cosmetic_test.static +
'<br><br> ------------------------- '
set_liquid()
set_liquid()
}, 500)
}
//Dynamic
function cosmetic_test_dynamic() {
let log = document.createElement('div')
let ad = document.createElement('div')
ad.id="ad_ctd"
ad.id = 'ad_ctd'
ad.className =
'textads banner-ads banner_ads ad-unit afs_ads ad-zone ad-space adsbox'
ad.innerHTML="&nbsp;"
ad.innerHTML = '&nbsp;'
ctd.appendChild(ad)
setTimeout(function () {
let adt = document.querySelector("#ad_ctd")
let adt = document.querySelector('#ad_ctd')
abt.cosmetic_test.dynamic =
(adt.offsetHeight || adt.clientHeight || window.getComputedStyle(adt, null).getPropertyValue("display") =='block')? false : true
adt.offsetHeight ||
adt.clientHeight ||
window.getComputedStyle(adt, null).getPropertyValue('display') ==
'block'
? false
: true
abt.blocked += abt.cosmetic_test.dynamic ? 2 : 0
abt.notblocked += abt.cosmetic_test.dynamic ? 0 : 2
test_log.appendChild(log)
@ -263,7 +321,7 @@ function cosmetic_test_dynamic() {
document
.querySelector('#ct_dynamic')
.classList.add(abt.cosmetic_test.dynamic ? '_bg-green' : '_bg-red')
set_liquid()
set_liquid()
}, 500)
}
@ -273,9 +331,20 @@ async function startAdBlockTesting() {
document.querySelector('.lt_wrap').classList.add('start')
lt_cwrap.classList.add('start')
let tests = []
tests.push(cosmetic_test_static())
tests.push(cosmetic_test_dynamic())
tests.push(ad_script_test())
if (settings['hideCF']) {
abt.total += 4
tests.push(cosmetic_test_static())
tests.push(cosmetic_test_dynamic())
} else {
document.querySelector('#cf_wrap').style.display = 'none'
}
if (settings['hideSL']) {
abt.total += 6
tests.push(ad_script_test())
} else {
document.querySelector('#sl_wrap').style.display = 'none'
}
tests.push(fetchTests())
let results = await Promise.all(tests)
return results
@ -285,17 +354,14 @@ function set_liquid() {
var c = p > 30 ? (p > 60 ? 'var(--green)' : 'var(--orange)') : 'var(--red)'
document.body.style.setProperty('--liquid-percentage', 45 - p + '%')
document.body.style.setProperty('--liquid-color', c)
document.body.style.setProperty(
'--liquid-title',
"'" + abt.blocked + "'"
)
document.body.style.setProperty('--liquid-title', "'" + abt.blocked + "'")
}
function stopAdBlockTesting() {
fadeOut(lt_particles, () => {
document.querySelector('.lt_wrap').classList.remove('start')
fadeIn(lt_particles, 'flex')
document.body.classList.remove("_overflowhidden")
document.body.classList.remove('_overflowhidden')
})
lt_cwrap.classList.remove('start')
console.log(abt)
@ -303,73 +369,118 @@ function stopAdBlockTesting() {
function render_tests() {
var r_wrap = document.querySelector('.r_wrap')
r_wrap.innerHTML = ''
reports.forEach((r, index) => {
results.forEach((r, index) => {
var div = document.createElement('div')
div.className = "col-6"
var date = new Date(r["time"]);
let d = date.getDate() + "/" + (date.getMonth() + 1) + "/" + date.getFullYear() +
" " + date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds();
var abt_r = reports[index].abt
var t = "<span>Total : "+abt_r.total+"</span><br><span>"+icons["x"]+" "+abt_r.notblocked+" not blocked</span><span>"+icons["v"]+" "+abt_r.blocked+" blocked</span>"
div.innerHTML = "<div class='card'><div>"+t+"<br><h6>" + d + "</h6></div><div><button class='btn-blue'>" + icons["download"] + "</button></div></div>"
r_wrap.insertBefore(div,r_wrap.children[0])
div.className = 'col-6'
var abt_r = results[index].abt
var t =
'<span>Total : ' +
abt_r.total +
'</span><br><span>' +
icons['x'] +
' ' +
abt_r.notblocked +
' not blocked</span><span>' +
icons['v'] +
' ' +
abt_r.blocked +
' blocked</span>'
div.innerHTML =
"<div class='card'><div>" +
t +
'<br><h6>' +
r.date +
'</h6></div><div><button class="btn-blue outline" data-r=' +
r['time'] +
'>' +
icons['download'] +
'</button></div></div>'
r_wrap.insertBefore(div, r_wrap.children[0])
})
document.querySelectorAll('button[data-r]').forEach((el) => {
el.addEventListener('click', () => {
downloadResult(el.getAttribute('data-r'))
})
})
}
//Browser : \nOS : \nAd-block : \nDNS : \nVPN :
function add_report() {
let ms = Date.now();
if (reports.length < 10) {
reports.push({ "time": ms, "note": "", "abt": abt })
let ms = Date.now()
var date = new Date(ms)
let d =
date.getDate() +
'/' +
(date.getMonth() + 1) +
'/' +
date.getFullYear() +
' ' +
date.getHours() +
':' +
date.getMinutes() +
':' +
date.getSeconds()
if (results.length < 10) {
results.push({ time: ms, date: d, note: '', abt: abt })
} else {
reports.splice(0, 1)
reports.push({ "time": ms, "note": "", "abt": abt })
results.splice(0, 1)
results.push({ time: ms, date: d, note: '', abt: abt })
}
LS.set("reports", reports)
LS.set('results', results)
render_tests()
console.log(abt)
}
window.onbeforeunload = function () {
window.scrollTo(0, 0);
};
window.scrollTo(0, 0)
}
const el = (l) => { return document.querySelector(l) }
const el = (l) => {
return document.querySelector(l)
}
document.addEventListener('DOMContentLoaded', function () {
new navbar()
new themeManager()
new gotop()
new aos()
const ct = document.querySelector("#collapse_status")
ct.checked = collapseStatus
ct.addEventListener("change", () => {
console.log(collapseStatus)
collapseStatus = ct.checked
collapse_category(collapseStatus, false)
LS.set('collapseStatus', collapseStatus)
})
console.log(settings)
for (const key in settings) {
console.log(`${key}: ${settings[key]}`)
const c = document.querySelector('#' + key)
c.checked = settings[key]
c.addEventListener('change', () => {
settings[key] = c.checked
console.log(key, c.checked)
if (key == 'collapseAll') collapse_category(settings[key], false)
LS.set('settings', settings)
})
}
render_tests()
startAdBlockTesting().then(() => {
collapse_category(collapseStatus, true)
collapse_category(settings['collapseAll'], true)
//Add a delay in order to show properly the animation
setTimeout(() => {
stopAdBlockTesting()
add_report()
var tsl = document.createElement("div")
var tsl = document.createElement('div')
tsl.innerHTML = tslog
test_log.appendChild(tsl)
fadeIn(document.querySelector("#adb_test"), "flex")
fadeIn(document.querySelector('#adb_test'), 'flex')
}, 2000)
})
document.querySelector("#start_test").addEventListener("click", () => {
document.querySelector('#start_test').addEventListener('click', () => {
location.reload(true)
})
const stxt = "https://raw.githubusercontent.com/d3ward/toolz/master/src/d3host.txt"
const sadblock = 'https://raw.githubusercontent.com/d3ward/toolz/master/src/d3host.adblock'
document.querySelector("#d3H_txt").addEventListener("click", function () { copyToClip(stxt) })
el("#d3H_adblock").addEventListener("click", function () { copyToClip(sadblock) })
const stxt =
'https://raw.githubusercontent.com/d3ward/toolz/master/src/d3host.txt'
const sadblock =
'https://raw.githubusercontent.com/d3ward/toolz/master/src/d3host.adblock'
document.querySelector('#d3H_txt').addEventListener('click', function () {
copyToClip(stxt)
})
el('#d3H_adblock').addEventListener('click', function () {
copyToClip(sadblock)
})
})

View file

@ -0,0 +1,32 @@
export function fontChecker() {
var baseFonts = ['monospace', 'sans-serif', 'serif']
var testString = 'abcdefghilmnopqrstuvz'
var testSize = '72px'
var h = document.getElementsByTagName('body')[0]
var s = document.createElement('span')
s.style.fontSize = testSize
s.innerHTML = testString
var defaultWidth = {}
var defaultHeight = {}
for (var index in baseFonts) {
s.style.fontFamily = baseFonts[index]
h.appendChild(s)
defaultWidth[baseFonts[index]] = s.offsetWidth //width for the default font
defaultHeight[baseFonts[index]] = s.offsetHeight //height for the defualt font
h.removeChild(s)
}
this.detect = function(font){
var detected = false
for (var index in baseFonts) {
s.style.fontFamily = font + ',' + baseFonts[index] // name of the font along with the base font for fallback.
h.appendChild(s)
var matched =
s.offsetWidth != defaultWidth[baseFonts[index]] ||
s.offsetHeight != defaultHeight[baseFonts[index]]
h.removeChild(s)
detected = detected || matched
}
return detected
}
}

View file

@ -20,19 +20,19 @@ export function Snackbar(option) {
t.message.innerHTML = ''
t.snack.classList.remove(t.classNames)
}
t.showN = function (msg, type) {
t.hideN()
t.show = function (msg, type) {
t.hide()
t.message.innerHTML = msg
t.snack.style.top = t.top
t.snack.classList.add(type || t.classNames)
if (t.autoClose) {
setTimeout(function () {
t.hideN()
t.hide()
}, t.autoCloseTimeout)
}
}
t.hideN = function () {
t.hide = function () {
t.snack.style.top = '-100%'
t.reset()
}

View file

@ -1,220 +1,147 @@
import '../sass/fontlist.sass'
import packageJSON from '../../package.json'
import { font_list } from '../data/font_list'
import { navbar } from './components/navbar'
import { dialog } from './components/dialog'
import A11yDialog from './components/dialog'
import { themeManager } from './components/themeManager'
import { gotop } from './components/gotop'
import { aos } from './components/aos'
import { Snackbar } from './components/snackbar'
import { fontChecker } from './components/fontChecker'
import { icons } from '../data/icons'
import { LocalStorageManager } from './components/localStorage'
const cd = document.querySelector('#dlg_changelog')
const ch_dialog = new A11yDialog(cd)
var TZ = new LocalStorageManager('toolz')
const version = packageJSON.version
const tzversion = TZ.get('version')
if (tzversion !== version) {
//Show changelog
ch_dialog.show()
//Set version
TZ.set('version', version)
}
var snackbar = new Snackbar({
topPos: '10px',
classNames: 'success',
autoClose: true,
autoCloseTimeout: 2000
})
const fo = document.getElementById('f_options')
const ft = document.getElementById('font_test')
const r_fw = document.getElementById('r_fw')
const r_fwv = document.getElementById('r_fw_value')
const r_fs = document.getElementById('r_fs')
const r_fsv = document.getElementById('r_fs_value')
const r_ls = document.getElementById('r_ls')
const r_lsv = document.getElementById('r_ls_value')
const r_lh = document.getElementById('r_lh')
const r_lhv = document.getElementById('r_lh_value')
function copyToClip() {
var cssCode = document.getElementById('css-code')
var range = document.createRange()
range.selectNode(cssCode)
window.getSelection().removeAllRanges()
window.getSelection().addRange(range)
document.execCommand('copy')
window.getSelection().removeAllRanges()
snackbar.show('CSS copied to clipboard !')
}
function generateCSS() {
var css =
'.custom-font {\n' +
' font-family: ' +
fo.value +
';\n' +
' font-weight: ' +
r_fwv.innerText +
';\n' +
' font-size: ' +
r_fsv.innerText +
';\n' +
' letter-spacing: ' +
r_lsv.innerText +
';\n' +
' line-height: ' +
r_lhv.innerText +
';\n' +
'}'
document.getElementById('css-code').innerHTML = css
}
// Call the function when the DOM is loaded
document.addEventListener('DOMContentLoaded', () => {
new themeManager()
new navbar()
new gotop()
new aos()
new modal()
})
var Detector = function () {
var baseFonts = ['monospace', 'sans-serif', 'serif']
var testString = 'abcdefghilmnopqrstuvz'
var testSize = '72px'
var h = document.getElementsByTagName('body')[0]
// create a SPAN in the document to get the width of the text we use to test
var s = document.createElement('span')
s.style.fontSize = testSize
s.innerHTML = testString
var defaultWidth = {}
var defaultHeight = {}
for (var index in baseFonts) {
//get the default width for the three base fonts
s.style.fontFamily = baseFonts[index]
h.appendChild(s)
defaultWidth[baseFonts[index]] = s.offsetWidth //width for the default font
defaultHeight[baseFonts[index]] = s.offsetHeight //height for the defualt font
h.removeChild(s)
}
function detect(font) {
var detected = false
for (var index in baseFonts) {
s.style.fontFamily = font + ',' + baseFonts[index] // name of the font along with the base font for fallback.
h.appendChild(s)
var matched =
s.offsetWidth != defaultWidth[baseFonts[index]] ||
s.offsetHeight != defaultHeight[baseFonts[index]]
h.removeChild(s)
detected = detected || matched
var total = 0,
available = 0,
notAvalaible = 0
var fc = new fontChecker()
const flist = document.querySelector('#flist')
font_list.forEach((element) => {
total++
var a = fc.detect(element)
if (a) {
var el = document.createElement('div')
el.innerText = element
el.className = 'card _aos'
var op = document.createElement('option')
op.value = element
op.innerText = element
fo.appendChild(op)
el.style.fontFamily = element
flist.appendChild(el)
available++
} else {
notAvalaible++
}
return detected
console.log(a)
})
const r = document.querySelector('#results')
r.innerHTML =
'<span>' +
total +
' Tested Fonts </span><span>' +
icons['v'] +
' ' +
available +
' Detected fonts</span><span>' +
icons['cdot'] +
' ' +
notAvalaible +
' Not available </span>'
new aos()
fo.onchange = function () {
ft.style['fontFamily'] = this.value
generateCSS()
}
r_fw.oninput = function () {
ft.style['font-weight'] = this.value
r_fwv.innerText = this.value
generateCSS()
}
this.detect = detect
}
var d = new Detector()
var list = [
'Abadi MT Condensed Light',
'Albertus Extra Bold',
'Albertus Medium',
'Antique Olive',
'Arial',
'Arial Black',
'Arial MT',
'Arial Narrow',
'Bazooka',
'Book Antiqua',
'Bookman Old Style',
'Boulder',
'Calisto MT',
'Calligrapher',
'Century Gothic',
'Century Schoolbook',
'Cezanne',
'CG Omega',
'CG Times',
'Charlesworth',
'Chaucer',
'Clarendon Condensed',
'Comic Sans MS',
'Copperplate Gothic Bold',
'Copperplate Gothic Light',
'Cornerstone',
'Coronet',
'Courier',
'Courier New',
'Cuckoo',
'Dauphin',
'Denmark',
'Fransiscan',
'Garamond',
'Geneva',
'Haettenschweiler',
'Heather',
'Helvetica',
'Herald',
'Impact',
'Jester',
'Letter Gothic',
'Lithograph',
'Lithograph Light',
'Long Island',
'Lucida Console',
'Lucida Handwriting',
'Lucida Sans',
'Lucida Sans Unicode',
'Marigold',
'Market',
'Matisse ITC',
'MS LineDraw',
'News GothicMT',
'OCR A Extended',
'Old Century',
'Pegasus',
'Pickwick',
'Poster',
'Pythagoras',
'Sceptre',
'Sherwood',
'Signboard',
'Socket',
'Steamer',
'Storybook',
'Subway',
'Tahoma',
'Technical',
'Teletype',
'Tempus Sans ITC',
'Times',
'Times New Roman',
'Times New Roman PS',
'Trebuchet MS',
'Tristan',
'Tubular',
'Unicorn',
'Univers',
'Univers Condensed',
'Vagabond',
'Verdana',
'Westminster Allegro',
'Amazone BT',
'AmerType Md BT',
'Arrus BT',
'Aurora Cn BT',
'AvantGarde Bk BT',
'AvantGarde Md BT',
'BankGothic Md BT',
'Benguiat Bk BT',
'BernhardFashion BT',
'BernhardMod BT',
'BinnerD',
'Bremen Bd BT',
'CaslonOpnface BT',
'Charter Bd BT',
'Charter BT',
'ChelthmITC Bk BT',
'CloisterBlack BT',
'CopperplGoth Bd BT',
'English 111 Vivace BT',
'EngraversGothic BT',
'Exotc350 Bd BT',
'Freefrm721 Blk BT',
'FrnkGothITC Bk BT',
'Futura Bk BT',
'Futura Lt BT',
'Futura Md BT',
'Futura ZBlk BT',
'FuturaBlack BT',
'Galliard BT',
'Geometr231 BT',
'Geometr231 Hv BT',
'Geometr231 Lt BT',
'GeoSlab 703 Lt BT',
'GeoSlab 703 XBd BT',
'GoudyHandtooled BT',
'GoudyOLSt BT',
'Humanst521 BT',
'Humanst 521 Cn BT',
'Humanst521 Lt BT',
'Incised901 Bd BT',
'Incised901 BT',
'Incised901 Lt BT',
'Informal011 BT',
'Kabel Bk BT',
'Kabel Ult BT',
'Kaufmann Bd BT',
'Kaufmann BT',
'Korinna BT',
'Lydian BT',
'Monotype Corsiva',
'NewsGoth BT',
'Onyx BT',
'OzHandicraft BT',
'PosterBodoni BT',
'PTBarnum BT',
'Ribbon131 Bd BT',
'Serifa BT',
'Serifa Th BT',
'ShelleyVolante BT',
'Souvenir Lt BT',
'Staccato222 BT',
'Swis721 BlkEx BT',
'Swiss911 XCm BT',
'TypoUpright BT',
'ZapfEllipt BT',
'ZapfHumnst BT',
'ZapfHumnst Dm BT',
'Zurich BlkEx BT',
'Zurich Ex BT'
]
const flist = document.querySelector('#flist')
list.forEach((element) => {
var a = d.detect(element)
if (a) {
var el = document.createElement('div')
el.innerText = element
el.className = 'card _aos'
el.style.fontFamily = element
flist.appendChild(el)
r_fs.oninput = function () {
ft.style['font-size'] = this.value + 'px'
r_fsv.innerText = this.value + 'px'
generateCSS()
}
console.log(a)
r_ls.oninput = function () {
ft.style['letter-spacing'] = this.value + 'px'
r_lsv.innerText = this.value + 'px'
generateCSS()
}
r_lh.oninput = function () {
ft.style['line-height'] = this.value
r_lhv.innerText = this.value
generateCSS()
}
document
.querySelector('#css_code_copy')
.addEventListener('click', copyToClip)
})

View file

@ -1,15 +1,27 @@
import '../sass/index.sass'
import packageJSON from '../../package.json'
import { navbar } from './components/navbar'
import { dialog } from './components/dialog'
import A11yDialog from './components/dialog'
import { themeManager } from './components/themeManager'
import { gotop } from './components/gotop'
import { aos } from './components/aos'
import { LocalStorageManager } from './components/localStorage'
const cd = document.querySelector('#dlg_changelog')
const ch_dialog = new A11yDialog(cd)
var TZ = new LocalStorageManager('toolz')
const version = packageJSON.version
var tzversion = TZ.get('version')
console.log(tzversion, version)
if (tzversion !== version) {
//Show changelog
ch_dialog.show()
//Set version
TZ.set('version', version)
}
// Call the function when the DOM is loaded
document.addEventListener('DOMContentLoaded', () => {
new themeManager()
new navbar()
new gotop()
new aos()
new modal()
})

View file

@ -1,9 +1,22 @@
import '../sass/units.sass'
import packageJSON from '../../package.json'
import { navbar } from './components/navbar'
import { dialog } from './components/dialog'
import A11yDialog from './components/dialog'
import { themeManager } from './components/themeManager'
import { gotop } from './components/gotop'
import { aos } from './components/aos'
import { LocalStorageManager } from './components/localStorage'
const cd = document.querySelector('#dlg_changelog')
const ch_dialog = new A11yDialog(cd)
var TZ = new LocalStorageManager('toolz')
const version = packageJSON.version
const tzversion = TZ.get('version')
if (tzversion !== version) {
//Show changelog
ch_dialog.show()
//Set version
TZ.set('version', version)
}
// Call the function when the DOM is loaded
document.addEventListener('DOMContentLoaded', () => {
@ -13,8 +26,6 @@ document.addEventListener('DOMContentLoaded', () => {
new aos()
})
const spinner = ['/', '-', '\\', '|']
let spinnerIx = 0
function el(name) {
return document.querySelector(name)
}
@ -60,10 +71,8 @@ function updateTest() {
lvh == i ? 'var(--green)' : lvh > i ? 'var(--blue)' : 'var(--orange)'
el('.t-p').style.background =
p == i ? 'var(--green)' : p > i ? 'var(--blue)' : 'var(--orange)'
}
var fullscreen = false
addEventListener('load', function () {
getBars()
updateTest()

View file

@ -0,0 +1,70 @@
<div class="dialog" id="dlg_changelog" aria-labelledby="dlg_changelog-title" aria-hidden="true">
<div class="dialog-overlay" data-a11y-dialog-hide></div>
<div class="dialog-content">
<header>
<h3 id="dlg_changelog-title">Toolz 3.0.0 </h3>
<button data-a11y-dialog-hide><svg class="w-6 h-6" id="close-icon" fill="none" stroke="currentColor"
viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12">
</path>
</svg></button>
</header>
<section>
<div class="grid better_r">
<div class="_txt-center">
<h1 class="_p-1">🎉 Thank you! 🎉</h1>
</div>
<div>
<h2>More than 2 million tests so far</h2>
</div>
<div>
<div class="card _mt-1 _p-1 _bg3 _shadowless">
<p>
I would like to take a moment to express my gratitude for your support of <b>Toolz</b> over the past 3 years.<br>
Your contributions have been invaluable, from sharing it with your communities to providing feedback that has helped me improve the project.
</p>
<p>
I'm pleased to announce the release <b>3.0.0</b> of Toolz with several new features that I believe will improve your experience even more.<br>
<h5>#Changelog</h5>
<ul class="keep-ls">
<li>Overall design improvement</li>
<li>Improved project structure and tooling</li>
<li>Adblock
<ul class="keep-ls">
<li>New design , colors and animations</li>
<li>Cosmetic Filter and Script tests</li>
<li>Updated , cleaned and optimized host list</li>
<li>History and logs of tests (max 10)</li>
<li>Compatibility table</li>
</ul>
</li>
<li>Fontlist
<ul class="keep-ls">
<li>New layout design</li>
<li>Added 200+ standard font test</li>
<li>New feature to preview the font and generate CSS</li>
</ul>
</li>
<li>Units
<ul class="keep-ls">
<li>New desgin</li>
<li>Feature improvement with 5 CSS units </li>
<li>Live innerHeight value</li>
</ul>
</li>
</ul>
<p>Thank you again for your support.</p>
Best regards,<br>
d3ward
</p>
</div>
</div>
</div>
</section>
<footer>
<button data-a11y-dialog-hide>
Close
</button>
</footer>
</div>
</div>

View file

@ -10,12 +10,12 @@
</svg></button>
</header>
<section>
<div>
<div class="better_r">
<h2>How does it work?</h2>
<b class="_txt-red"><i>You will not see any ads and no trackers will be activated </i></b><br><br>
<div class="row keep-width">
<div>
<div class="card">
<div class="card _h-100">
<div class="_f-center">
<svg xmlns="http://www.w3.org/2000/svg" fill="var(--green)" width="24" height="24"
viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none"
@ -25,7 +25,7 @@
</svg>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" stroke-width="2" stroke="var(--green)" fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="M0 0h24v24H0z" stroke="none"></path><circle cx="12" cy="12" r="9"></circle><path d="M9 12l2 2 4-4"></path></svg>
&nbsp; Blocked
&nbsp; <b>Blocked</b>
</div>
If the connection to a host/script fails or a box is removed means the latter has been
blocked by your
@ -42,7 +42,7 @@
<path d="M12 3c7.2 0 9 1.8 9 9s-1.8 9 -9 9s-9 -1.8 -9 -9s1.8 -9 9 -9z"></path>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" stroke-width="2" stroke="var(--red)" fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="M0 0h24v24H0z" stroke="none"></path><circle cx="12" cy="12" r="9"></circle><path d="M10 10l4 4m0-4l-4 4"></path></svg>
&nbsp; Not Blocked
&nbsp; <b>Not Blocked</b>
</div>
Connection to a host did not fail or box is not removed, means that your ad-blocker did not
block it or doesn't work
@ -109,7 +109,8 @@
However, please note that this does not mean that there is a lack of protection provided by the solution you have configured, such as an ad blocking extension, a VPN or a DNS.<br>
The limitations of JavaScript or the absence of certain features may prevent the test from being able to accurately determine the number of connections that are blocked.<br>
You will still receive an estimate of the percentage of connections that have been blocked/detected by this tool
<br><button data-a11y-dialog-show="dlg_compatibility">
</p>
<div class="_py-1"><button data-a11y-dialog-show="dlg_compatibility">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-info-square" width="24" height="24"
viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round"
stroke-linejoin="round">
@ -117,18 +118,17 @@
<line x1="12" y1="8" x2="12.01" y2="8"></line>
<rect x="4" y="4" width="16" height="16" rx="2"></rect>
<polyline points="11 12 12 12 12 16 13 16"></polyline>
</svg> Check Compatibility</button>
</p>
</svg> Check Compatibility</button></div>
<br>
<hr><br>
<h2>How I can have 100%</h2>
<p>
A green score indicates a satisfactory level of protection.<br>
There is no need to aim for a perfect score.<br>
However, if you are interested in achieving full 100% protection, you can use the list we have provided, which covers most of the tests on the site (excluding cosmetic filters and script loading).
However, if you are interested in achieving full 100% protection, you can use my d3Host List, which covers most of the tests on the site (excluding cosmetic filters and script loading).
This should help to improve your score.
</p>
<div class="grid keep-width">
<div class="grid keep-width _mt-1">
<div>
<button class="btn-blue" id="d3H_txt">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-copy" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
@ -151,18 +151,24 @@
<br>
<hr><br>
<h2>My ad-blocking solutions</h2>
I use <a href="https://www.dnsfilter.com/">DNSFilter</a> as main DNS resolver<br>
Plus these combo on each platform :
<ul>
<p>
I use <a href="https://www.dnsfilter.com/">DNSFilter</a> as main DNS resolver<br>
Plus these combo on each platform :
</p>
<ul class="keep-ls">
<li>Windows : Brave + ublock-Origin</li>
<li>MacOS : Brave + ublock-Origin</li>
<li>Android : Kiwi Browser + ublock-Origin</li>
<li>iOS : Safari + Adguard Extension</li>
</ul>
<a href="https://ublockorigin.com/" class="btn">uBlock Origin </a>
<a href="https://adguard.com/it/adguard-ios/overview.html" class="btn">Adguard for iOS</a>
<div class="_cnt-grid-wrap">
<a href="https://ublockorigin.com/" class="btn">uBlock Origin </a>
<a href="https://adguard.com/it/adguard-ios/overview.html" class="btn">Adguard for iOS</a>
</div>
Lists I have set on ad blocking solutions :
<ul>
<ul class="keep-ls">
<li>OISD List (includes my list)</li>
<li>Peter Lowes Ad and tracking server list </li>
<li>uBlock filters</li>
@ -175,7 +181,7 @@
I wanted to build something with a great design and user experience that was pretty straightforward for any type of user.<br>
There are other great tools that I use and would like to recommend
</p>
<div class="cnt2">
<div class="_cnt-grid-wrap">
<a href="https://canyoublockit.com/" class="btn">CanYouBlockIt</a>
<a href="https://ipleak.net/" class="btn">IP Leak </a>
<a href="https://blockads.fivefilters.org/" class="btn">Block Ads Test </a>

View file

@ -4,7 +4,7 @@
<div class="dialog-overlay" data-a11y-dialog-hide></div>
<div class="dialog-content">
<header>
<h3 id="dlg_reports-title">History </h3>
<h3 id="dlg_reports-title">Latest Test Results</h3>
<button data-a11y-dialog-hide><svg class="w-6 h-6" id="close-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path></svg></button>
</header>
<section style="width: 100%">

View file

@ -0,0 +1,39 @@
<div class="dialog" id="dlg_settings" data-a11y-dialog="dlg_settings" aria-labelledby="dlg_settings-title"
aria-hidden="true">
<div class="dialog-overlay" data-a11y-dialog-hide></div>
<div class="dialog-content">
<header>
<h3 id="dlg_settings-title">Settings</h3>
<button data-a11y-dialog-hide><svg class="w-6 h-6" id="close-icon" fill="none" stroke="currentColor"
viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12">
</path>
</svg></button>
</header>
<section>
<div class="field">
<div>
<input class="toggle" id="collapseAll" name="toggle" type="checkbox" checked="checked"><label
for="collapseAll">
Collapse all</label><br>
<small>Click a category to toggle the url hosts list</small>
</div>
<div>
<input class="toggle" id="hideCF" name="toggle" type="checkbox" checked="checked"><label
for="hideCF">
Cosmetic Filter</label><br>
</div>
<div>
<input class="toggle" id="hideSL" name="toggle" type="checkbox" checked="checked"><label
for="hideSL">
Ad Scripts Loading</label><br>
</div>
</div>
</section>
<footer>
<button data-a11y-dialog-hide>
Close
</button>
</footer>
</div>
</div>

View file

@ -1,162 +0,0 @@
<div class="dialog" id="dlg_changelog" data-a11y-dialog="dlg_changelog" aria-labelledby="dlg_changelog-title" aria-hidden="true">
<div class="dialog-overlay" data-a11y-dialog-hide></div>
<div class="dialog-content">
<header>
<h3 id="dlg_changelog-title">Thank you !</h3>
<button data-a11y-dialog-hide><svg class="w-6 h-6" id="close-icon" fill="none" stroke="currentColor"
viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12">
</path>
</svg></button>
</header>
<section>
<div>
<h2>More than 1 million tests so far</h2>
<b class="_txt-red"><i>You will not see any ads and no trackers will be activated </i></b><br><br>
<div class="row keep-width">
<div>
<div class="card">
<div class="_f-center">
<svg xmlns="http://www.w3.org/2000/svg" fill="var(--green)" width="24" height="24"
viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none"
stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M12 3c7.2 0 9 1.8 9 9s-1.8 9 -9 9s-9 -1.8 -9 -9s1.8 -9 9 -9z"></path>
</svg>
&nbsp; Blocked
</div>
If the connection to a host/script fails or a box is removed means the latter has been blocked by your
ad-blocker
</div>
</div>
<div>
<div class="card">
<div class="_f-center">
<svg xmlns="http://www.w3.org/2000/svg" fill="var(--red)" width="24" height="24"
viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none"
stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M12 3c7.2 0 9 1.8 9 9s-1.8 9 -9 9s-9 -1.8 -9 -9s1.8 -9 9 -9z"></path>
</svg>
&nbsp; Not Blocked
</div>
Connection to a host did not fail or box is not removed, means that your ad-blocker did not block it or doesn't work
</div>
</div>
</div>
<p>After tests are completed , you get a liquid color ball with points.<br>
Points are caculated based on your tests for each category and type <br>
The color is calculated based on you points range <br>
Here a preview of 3 scenarios :</p>
<div class="template_wrap row keep-width ">
<div>
<div class="lt_cwrap lt_template" style="--liquid-color:var(--red);--liquid-percentage:10%">
<div class="lt_circle">
<div class="lt_wave"></div>
</div>
</div>
<div class="lt_value_2 _bg-red">
Cmon , use an adblock or smth
</div>
</div>
<div>
<div class="lt_cwrap lt_template" style="--liquid-color:var(--orange);--liquid-percentage:0%">
<div class="lt_circle">
<div class="lt_wave"></div>
</div>
</div>
<div class="lt_value_2 _bg-orange">
Ok, but you can do better
</div>
</div>
<div>
<div class="lt_cwrap lt_template" style="--liquid-color:var(--green);--liquid-percentage:-30%">
<div class="lt_circle">
<div class="lt_wave"></div>
</div>
</div>
<div class="lt_value_2 _bg-green">
Great, you're ready to surf
</div>
</div>
</div>
The tests consist of 3 types
<ul>
<li>Cosmetic Filter : Check if you are hiding/removing the empy boxes of ads, cookie policy etc.</li>
<li>Script Loading : Check if you are blocking a possible ad script loading or trackers</li>
<li>Host : Check if you block domains that provide trackers, analytics or ads</li>
</ul>
<h3>The test is not working, I'm sure my adblock method is properly configured</h3>
<p>
In that case probably you have a setup that is not compatible for the checks of this tool.
This doesn't mean you are not protected by your configured solution that can be ablock extension , vpn or dns
It's because due to some JS limitation or lack of implementation feature the test is not able to figure out
You will receive a percentage of how many connections you have blocked
</p>
<h2>How I can have 100%</h2>
<p>
It's not needed . If you got a green result , you are pretty good. Don't be too competitive with that number
In case you want to have a full 100% ,
consider using my small list that I created to cover most of the tests in this website (cosmetic filter,script loading excluded)
<button class="btn-blue"
onclick="copyToClip('https://raw.githubusercontent.com/d3ward/toolz/master/src/d3host.txt')">
d3Host List (TXT)</button>
<button class="btn-blue"
onclick="copyToClip('https://raw.githubusercontent.com/d3ward/toolz/master/src/d3host.adblock')">
d3Host List (ADBLOCK)</button>
<br><br>
</p>
<h2>Adblock solutions</h2>
On any device where possible the first thing I install on the browser is <a href="https://ublockorigin.com/" class="btn">uBlock Origin </a>
Second, I go with a DNS solution like <a href="https://nextdns.io/" class="btn">Next DNS</a> for blocking on any installed app
<h3>Other suggested solutions for ad-blocking</h3>
<div>
<a href="https://adguard.com/" class="btn">Adguard Extension or DNS </a>
<a href="https://blokada.org/" class="btn">Blokada </a>
</div>
<p>
<h2>Test tools for your adblock </h2>
I created this website to quickly test my small list of most common hosts.
I wanted to build something with a great design and user experience that is pretty straigthforward for any user.
There are other great tools that I use and I want to recommend
<div class="cnt2">
<a href="https://canyoublockit.com/" class="btn">CanYouBlockIt</a>
<a href="https://ipleak.net/" class="btn">IP Leak </a>
<a href="https://blockads.fivefilters.org/" class="btn">Block Ads Test </a>
<a href="https://panopticlick.eff.org/" class="btn">Browser Fingerprint by EEF</a>
<a href="http://raymondhill.net/ublock/tiles1.html" class="btn">Adblock Testing by
raymondhill</a>
<a href="http://raymondhill.net/ublock/popup.html" class="btn">Popup Blocker by
raymondhill</a>
</div>
</p>
</div>
</section>
<footer>
<button data-a11y-dialog-hide>
Cancel
</button>
<button class="btn-p" data-a11y-dialog-hide>
Ok
</button>
</footer>
</div>
</div>

View file

@ -8,8 +8,11 @@
href="https://github.com/simple-icons/simple-icons/blob/develop/LICENSE.md"
class="_txt">CC0-1.0</a>)</b>
</div>
<div>
This website use <b><a class="_txt-white" href="https://umami.is/" target="_blank">Umami</a></b> for privacy-focused analytics
</div>
<div>
Designed and built with by <b><a href="https://d3ward.github.io">Ursu Eduard (d3ward</a></b>) © 2022
Designed and built with by <b><a href="https://d3ward.github.io">Ursu Eduard (d3ward</a>)</b> © 2022
</div>
<div>
Licensed under <b><a

View file

@ -28,6 +28,7 @@
<meta name="twitter:title" content="<%= title %>">
<meta name="twitter:description" content="<%= description %>">
<meta name="twitter:image" content="<%= preview_thumbnail %>">
<!--
<script async defer data-website-id="69b7679a-b1d7-4bed-8ace-761809fda99c" src="https://d3-umami.up.railway.app/umami.js"></script>
-->
</head>

View file

@ -21,7 +21,7 @@ body
gap: .5rem
align-items: center
justify-content: center
@media (prefers-reduced-motion: no-preference)
scroll-behavior: smooth
body,html
@ -54,3 +54,12 @@ section
overflow-x: hidden
display: flex
flex-direction: column
.better_r
-webkit-font-smoothing: antialiased!important
-moz-font-smoothing: antialiased!important
font-size: 16px
letter-spacing: .03em
line-height: 1.5em
text-align: justify
text-rendering: optimizelegibility!important

View file

@ -56,9 +56,9 @@ select
select
-webkit-appearance: none
-moz-appearance: none
background-image: linear-gradient(45deg, transparent 50%, var(--input-brd) 50%), linear-gradient(134deg, var(--input-brd) 50%, transparent 50%), linear-gradient(to right, #ccc, #ccc)
background-position: calc(100% - 20px) calc(1em + 2px), calc(100% - 10px) calc(1em + 2px), calc(100% - 2.5em) 0.5em
background-size: 10px 10px, 10px 10px, 2px 1.6rem
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path stroke="none" d="M0 0h24v24H0z"/><path d="m6 9 6 6 6-6"/></svg>')
background-position: right center
background-size: 18px 18px, 18px 18px, 2px 1.6rem
background-repeat: no-repeat
fieldset

View file

@ -8,6 +8,9 @@ html
--primary-h: var(--orange-h)!important
--primary-l: var(--orange-l)!important
--primary-d: var(--orange-d)!important
--slider-color: var(--primary-l)
--slider-thumb-color: #fff
body
background-color: var(--primary)
background-image: linear-gradient(315deg, var(--primary)0%, var(--primary-l)74%)
@ -21,16 +24,18 @@ body
@import "./base/basic"
@import "./extra/aos"
@import "./elements/typography"
@import "./elements/form"
@import "./layout/navbar"
@import "./layout/header"
@import "./layout/container"
@import "./layout/grid"
@import "./layout/footer"
@import "./elements/code"
@import "./elements/button"
@import "./components/card"
@import "./components/modal"
@import "./components/snackbar"
@import "./components/gotop_link"
@import "./extra/tooltip"
@import "./extra/alert"
@ -45,3 +50,37 @@ body
@import "./utilities/padding"
@import "./utilities/spacer"
@import "./utilities/text"
#results>span
display: flex
align-items: center
gap: .5rem
input[type=range]
-webkit-appearance: none
margin: 10px 0
width: 100%
input[type=range]:focus
outline: none
input[type=range]::-webkit-slider-runnable-track
height: 6px
background: #ddd
border-radius: 3px
input[type=range]::-webkit-slider-thumb
-webkit-appearance: none
height: 20px
width: 20px
background: #fff
border-radius: 50%
border: 1px solid #ccc
margin-top: -8px
input[type=range]::-webkit-slider-runnable-track
background: var(--slider-color)
input[type=range]::-webkit-slider-thumb
background: var(--slider-thumb-color)

View file

@ -1,53 +1,60 @@
/* ------------- General utilities ------------ */
._clearfix
clear: both !important
clear: both !important
._floatleft
float: left !important
float: left !important
._floatright
float: right !important
float: right !important
._shadowless
box-shadow: none !important
box-shadow: none !important
._shadow
box-shadow: var(--shadow) !important
box-shadow: var(--shadow) !important
._overflowauto
overflow: auto !important
overflow: auto !important
._overflowhidden
overflow: hidden !important
overflow: hidden !important
._f-center
display: flex
flex-flow: wrap
justify-content: center
align-items: center
display: flex
flex-flow: wrap
justify-content: center
align-items: center
._f-column
display: flex
flex-direction: column
display: flex
flex-direction: column
._f-wrap
display: flex
flex-wrap: wrap
display: flex
flex-wrap: wrap
._icon
display: block
height: 1.4rem
width: 1.4rem
fill: currentColor
margin: 0 auto
display: block
height: 1.4rem
width: 1.4rem
fill: currentColor
margin: 0 auto
._ratio32
//height: max(18vh, 12rem)!important
apsect-ratio: 3/2
apsect-ratio: 3/2
._fit-cover
object-fit: cover !important
object-fit: cover !important
._no-select
-webkit-user-select: none
-moz-user-select: none
user-select: none
-webkit-user-select: none
-moz-user-select: none
user-select: none
._h-100
height: 100%
._cnt-grid-wrap
display: flex
flex-wrap: wrap
gap: .5rem
padding: .5rem

View file

@ -9,27 +9,26 @@
<body>
<%- include('partials/support_me.ejs') %>
<%- include('partials/adblock/changelog.ejs') %>
<%- include('partials/header.ejs', {page:'units'}) %>
<main>
<div class="_ta-center">
<svg fill="#22C55E" width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M104.625 67.125h-43.75v-43.75c0-5.156-4.219-9.375-9.375-9.375H23.375C18.219 14 14 18.219 14 23.375v81.25c0 5.156 4.219 9.375 9.375 9.375h81.25c5.156 0 9.375-4.219 9.375-9.375V76.5c0-5.156-4.219-9.375-9.375-9.375zm-3.568 37.5H26.158c-2.758-.237-2.783-.235-2.783-3.16V27.18c.136-3.817-.293-3.805 3.703-3.805h21.254c3.256.106 3.168.005 3.168 2.579v5.808c.02.556-.196.812-.728.812H35.875c-4.447.492-3.296 6.15 0 6.25l14.88.168c.45.003.7.148.745.661v11.048c.052.523-.249.781-.745.799h-14.88c-4.442.492-3.297 6.149 0 6.25h14.773c.53.033.838.186.852.701V69.5c-.013.573-.295.751-.852.751H35.875c-4.442.492-3.297 6.149 0 6.25h14.844c.562-.004.781.255.781.767v14.858c.492 4.442 6.149 3.297 6.25 0V77.231c-.012-.617.265-.713.79-.731h10.8c.716.016.91.308.91.927v14.698c.491 4.447 6.15 3.296 6.25 0V77.409c.004-.732.216-.909.891-.909h10.73c.778.046.879.522.879 1.175v14.45c.491 4.447 6.15 3.296 6.25 0V77.888c-.01-.987.267-1.388 1.453-1.388h5.376c1.816-.048 2.51.929 2.546 2.486v22.582c-.194 2.912-.327 3.057-3.568 3.057z"/></svg>
</div>
<details class="card _p-0 _shadowless _brd-bg3 _bg2 _my-2">
<summary class="_p-1"> Units </summary>
<div class="_p-1">
<div class="_p-1 better_r">
<p>
<b>innerHeight</b> property returns the height of a window's content area <br>
vh = 1% of the height of the viewport size. <br>
5 units can be used with CSS to fix mobile issues,if you use a unit that does not match the innerheight the
user
visiting your site may not see some absolute or fixed buttons because they are hidden by the navigation bar
.
One of the browsers most affected by the problem is Webkit based , which is why several units have been
introduced over the years to compensate for the problem. <br>
These tests can be used to check the value of each units . <br>
<b>innerHeight</b> property returns the height of the content area of a window<br>
vh = 1% of the height of the viewport size<br><br>
5 Units can be used with CSS to fix mobile issues; if you use a unit that does not match the innerheight, the user visiting your site may not see some absolute or fixed buttons because they are hidden by the navigation bar.<br> One of the browsers most affected by this problem is Webkit-based, so several units have been introduced over the years to compensate for the problem.<br>
These tests can be used to check the value of each unit.
</p>
</div>
</details>
<div class="row keep-width vtests">
<div>
<div class="test t-vh"><span>100vh</span></div>
@ -47,7 +46,7 @@
<div class="test t-dvh"><span>100dvh</span></div>
</div>
</div>
<div id="barContainer" style="opacity:0;">
<div id="barContainer" style="opacity:0;" class="_mt-2">
<div class="bar b-vh" style="right: 5px; position: fixed; height: 100vh;">
<div class="text">100vh position:fixed <span class="height"></span></div>
</div>