Convert from CRLF to LF

This commit is contained in:
Maks Snegov 2024-04-16 18:38:51 -07:00
parent 0317e9401d
commit 3ff3130cbb
9 changed files with 3283 additions and 3283 deletions

View File

@ -1,39 +1,39 @@
@font-face {
font-family: Quicksand;
src: url(../fonts/Quicksand.ttf);
}
:root {
--font-fallback: BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-sans;
}
* {
font-family: "Quicksand", var(--font-fallback);
}
html {
width: 250px;
}
body {
background: #fdf8ea;
text-align: center;
}
h1,
h2,
h3,
h4,
h5,
h6 {
font-weight: bold;
}
h2 span {
font-size: 12px;
}
p {
text-align: justify;
font-size: 0.9em;
@font-face {
font-family: Quicksand;
src: url(../fonts/Quicksand.ttf);
}
:root {
--font-fallback: BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-sans;
}
* {
font-family: "Quicksand", var(--font-fallback);
}
html {
width: 250px;
}
body {
background: #fdf8ea;
text-align: center;
}
h1,
h2,
h3,
h4,
h5,
h6 {
font-weight: bold;
}
h2 span {
font-size: 12px;
}
p {
text-align: justify;
font-size: 0.9em;
}

File diff suppressed because it is too large Load Diff

View File

@ -1,66 +1,66 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AIS Visa Auto Rescheduler</title>
<link rel="stylesheet" href="css/bootstrap.min.css"></link>
<link rel="stylesheet" href="css/styles.css"></link>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-12">
<h4 class="mt-2 mb-0">AIS Visa Auto Rescheduler<br><span id="version"></span></h4>
</div>
</div>
<div class="row">
<div class="col-12">
<h3 class="my-2" id="credits">50</h3>
<p class="my-2 text-center">Credits left.</p>
</div>
</div>
<div class="row">
<div class="col-12">
<div class="mt-2">
<div class="form-check form-switch" style="text-align: left;">
<input class="form-check-input" type="checkbox" role="switch" id="activate">
<label class="form-check-label" for="activate">Activate the script</label>
</div>
</div>
<div class="my-2">
<div class="form-check form-switch" style="text-align: left;">
<input class="form-check-input" type="checkbox" role="switch" id="autobook">
<label class="form-check-label" for="autobook">Enable Autobook</label>
</div>
</div>
<div class="my-2">
<input type="range" id="frequency" name="frequency" min="1" max="10" step="0.5">
<label for="frequency">Frequency of checks<br>(every <span id="checkfrequency">1</span> minutes)</label>
</div>
<div class="my-2">
<input type="range" id="gap" name="gap" min="0" value="3" max="30" step="1">
<label for="gap">Check availability from <span id="daygap">3</span> days from today. [0 = today]</label>
</div>
<p class="my-2 text-center">Changes are autosaved.</p>
<form class="my-2" name="ais_visa_info" id="ais_visa_info">
<div class="d-grid">
<button id="reset_info" type="submit" class="btn btn-danger btn-sm">Configure / Reset</button>
</div>
</form>
<p class="my-2 text-center">
<button id=read_faqs form=null class="btn btn-info btn-sm">Read FAQs</button>
</p>
</div>
</div>
</div>
<a href="https://www.buymeacoffee.com/hymnz" target="_blank">
<img style="width: 250px;background: #5F7FFF;" src="https://img.buymeacoffee.com/button-api/?text=Help me run the extension&emoji=🙂&slug=hymnz&button_colour=5F7FFF&font_colour=ffffff&font_family=Comic&outline_colour=000000&coffee_colour=FFDD00" />
</a>
<script src="js/content.js"></script>
</body>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AIS Visa Auto Rescheduler</title>
<link rel="stylesheet" href="css/bootstrap.min.css"></link>
<link rel="stylesheet" href="css/styles.css"></link>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-12">
<h4 class="mt-2 mb-0">AIS Visa Auto Rescheduler<br><span id="version"></span></h4>
</div>
</div>
<div class="row">
<div class="col-12">
<h3 class="my-2" id="credits">50</h3>
<p class="my-2 text-center">Credits left.</p>
</div>
</div>
<div class="row">
<div class="col-12">
<div class="mt-2">
<div class="form-check form-switch" style="text-align: left;">
<input class="form-check-input" type="checkbox" role="switch" id="activate">
<label class="form-check-label" for="activate">Activate the script</label>
</div>
</div>
<div class="my-2">
<div class="form-check form-switch" style="text-align: left;">
<input class="form-check-input" type="checkbox" role="switch" id="autobook">
<label class="form-check-label" for="autobook">Enable Autobook</label>
</div>
</div>
<div class="my-2">
<input type="range" id="frequency" name="frequency" min="1" max="10" step="0.5">
<label for="frequency">Frequency of checks<br>(every <span id="checkfrequency">1</span> minutes)</label>
</div>
<div class="my-2">
<input type="range" id="gap" name="gap" min="0" value="3" max="30" step="1">
<label for="gap">Check availability from <span id="daygap">3</span> days from today. [0 = today]</label>
</div>
<p class="my-2 text-center">Changes are autosaved.</p>
<form class="my-2" name="ais_visa_info" id="ais_visa_info">
<div class="d-grid">
<button id="reset_info" type="submit" class="btn btn-danger btn-sm">Configure / Reset</button>
</div>
</form>
<p class="my-2 text-center">
<button id=read_faqs form=null class="btn btn-info btn-sm">Read FAQs</button>
</p>
</div>
</div>
</div>
<a href="https://www.buymeacoffee.com/hymnz" target="_blank">
<img style="width: 250px;background: #5F7FFF;" src="https://img.buymeacoffee.com/button-api/?text=Help me run the extension&emoji=🙂&slug=hymnz&button_colour=5F7FFF&font_colour=ffffff&font_family=Comic&outline_colour=000000&coffee_colour=FFDD00" />
</a>
<script src="js/content.js"></script>
</body>
</html>

View File

@ -1,79 +1,79 @@
chrome.runtime.onConnect.addListener(function(port) {
port.onMessage.addListener(async function(def) {
let response = new Object();
response.action = def.action;
if (def.action == "fetch_info") {
let { __un } = await chrome.storage.local.get("__un");
let { __pw } = await chrome.storage.local.get("__pw");
let { __id } = await chrome.storage.local.get("__id");
let { __ap } = await chrome.storage.local.get("__ap");
let { __il } = await chrome.storage.local.get("__il");
let { __ad } = await chrome.storage.local.get("__ad");
let { __al } = await chrome.storage.local.get("__al");
let { __ar } = await chrome.storage.local.get("__ar");
let $version = await new Promise(r => chrome.management.getSelf(self => r(self.version)));
response.data = {
$username: __un,
$password: __pw,
$appid: __id,
$active: __ap,
$apptCenter: __il,
$apptDate: __ad,
$ascCenter: __al,
$ascReverse: __ar,
$version
}
}
port.postMessage(response);
});
});
chrome.runtime.onInstalled.addListener(async({ reason }) => {
chrome.action.disable();
chrome.declarativeContent.onPageChanged.removeRules(undefined, () => {
let exampleRule = {
conditions: [
new chrome.declarativeContent.PageStateMatcher({
pageUrl: { hostEquals: 'ais.usvisa-info.com' },
})
],
actions: [new chrome.declarativeContent.ShowAction()],
};
let rules = [exampleRule];
chrome.declarativeContent.onPageChanged.addRules(rules);
});
if (reason === 'install') {
await chrome.storage.local.set({ __ab: false, __ap: true, __cr: 0, __fq: 1, __gp: 3 });
chrome.tabs.create({
url: "https://ais.usvisa-info.com/en-us/countries_list/niv"
});
}
});
var myNotificationID = null,
senderId = null,
ensureSendMessage = (tabId, message, callback) => {
chrome.tabs.sendMessage(tabId, { ping: true }, function(response) {
if (response && response.pong) {
chrome.tabs.sendMessage(tabId, message, callback);
}
});
};
chrome.notifications.onButtonClicked.addListener(function(notifId, btnId) {
if (notifId === myNotificationID) {
chrome.tabs.get(senderId, function(tab) {
chrome.tabs.highlight({ 'tabs': tab.index }, function() {});
});
ensureSendMessage(senderId, { bookNow: btnId === 0 });
}
});
chrome.runtime.onMessage.addListener((req, sender, sendResponse) => {
chrome.notifications.create(req.options, function(id) {
myNotificationID = id;
senderId = sender.tab.id;
});
sendResponse(true);
chrome.runtime.onConnect.addListener(function(port) {
port.onMessage.addListener(async function(def) {
let response = new Object();
response.action = def.action;
if (def.action == "fetch_info") {
let { __un } = await chrome.storage.local.get("__un");
let { __pw } = await chrome.storage.local.get("__pw");
let { __id } = await chrome.storage.local.get("__id");
let { __ap } = await chrome.storage.local.get("__ap");
let { __il } = await chrome.storage.local.get("__il");
let { __ad } = await chrome.storage.local.get("__ad");
let { __al } = await chrome.storage.local.get("__al");
let { __ar } = await chrome.storage.local.get("__ar");
let $version = await new Promise(r => chrome.management.getSelf(self => r(self.version)));
response.data = {
$username: __un,
$password: __pw,
$appid: __id,
$active: __ap,
$apptCenter: __il,
$apptDate: __ad,
$ascCenter: __al,
$ascReverse: __ar,
$version
}
}
port.postMessage(response);
});
});
chrome.runtime.onInstalled.addListener(async({ reason }) => {
chrome.action.disable();
chrome.declarativeContent.onPageChanged.removeRules(undefined, () => {
let exampleRule = {
conditions: [
new chrome.declarativeContent.PageStateMatcher({
pageUrl: { hostEquals: 'ais.usvisa-info.com' },
})
],
actions: [new chrome.declarativeContent.ShowAction()],
};
let rules = [exampleRule];
chrome.declarativeContent.onPageChanged.addRules(rules);
});
if (reason === 'install') {
await chrome.storage.local.set({ __ab: false, __ap: true, __cr: 0, __fq: 1, __gp: 3 });
chrome.tabs.create({
url: "https://ais.usvisa-info.com/en-us/countries_list/niv"
});
}
});
var myNotificationID = null,
senderId = null,
ensureSendMessage = (tabId, message, callback) => {
chrome.tabs.sendMessage(tabId, { ping: true }, function(response) {
if (response && response.pong) {
chrome.tabs.sendMessage(tabId, message, callback);
}
});
};
chrome.notifications.onButtonClicked.addListener(function(notifId, btnId) {
if (notifId === myNotificationID) {
chrome.tabs.get(senderId, function(tab) {
chrome.tabs.highlight({ 'tabs': tab.index }, function() {});
});
ensureSendMessage(senderId, { bookNow: btnId === 0 });
}
});
chrome.runtime.onMessage.addListener((req, sender, sendResponse) => {
chrome.notifications.create(req.options, function(id) {
myNotificationID = id;
senderId = sender.tab.id;
});
sendResponse(true);
});

1328
js/bootstrap.min.js vendored

File diff suppressed because it is too large Load Diff

View File

@ -1,71 +1,71 @@
(async function() {
const $version = await new Promise(r => chrome.management.getSelf(self => r(self.version)));
document.getElementById("version").innerText = `(version v${$version})`;
await chrome.storage.local.get().then(items => {
document.getElementById("activate").checked = items["__ap"];
document.getElementById("autobook").checked = items["__ab"];
document.getElementById("credits").innerText = items["__cr"] || "--";
document.getElementById("frequency").value = items["__fq"] || 1;
document.getElementById("checkfrequency").innerText = items["__fq"] || 1;
document.getElementById("gap").value = items["__gp"] || 3;
document.getElementById("daygap").innerText = items["__gp"] || 3;
})
chrome.storage.onChanged.addListener((changes, area) => {
if (changes.__cr)
document.getElementById("credits").innerText = changes.__cr.newValue;
if (changes.__fq)
document.getElementById("checkfrequency").innerText = changes.__fq.newValue;
if (changes.__gp)
document.getElementById("daygap").innerText = changes.__gp.newValue;
});
document.getElementById("activate").addEventListener("change", async function() {
chrome.storage.local.set({ __ap: this.checked });
let [tab] = await chrome.tabs.query({ active: true, lastFocusedWindow: true });
chrome.tabs.sendMessage(tab.id, { action: "activate", status: this.checked });
});
document.getElementById("autobook").addEventListener("change", async function() {
chrome.storage.local.set({ __ab: this.checked });
});
document.getElementById("frequency").addEventListener("change", function() {
chrome.storage.local.set({ __fq: this.value });
});
document.getElementById("gap").addEventListener("change", function() {
chrome.storage.local.set({ __gp: this.value });
});
document.getElementById("read_faqs").addEventListener("click", function() {
chrome.tabs.create({
url: chrome.runtime.getURL("pages/faqs.html")
});
});
document.getElementById("ais_visa_info").addEventListener("submit", async function(e) {
e.preventDefault();
let button = document.getElementById("reset_info");
button.setAttribute("disabled", "disabled");
await new Promise(r => setTimeout(r, 500));
await chrome.storage.local.clear();
await chrome.storage.local.set({ __ab: false, __ap: true, __cr: 0, __fq: 1, __gp: 7 });
let [tab] = await chrome.tabs.query({ active: true, lastFocusedWindow: true });
await chrome.tabs.sendMessage(tab.id, { action: "logout" });
button.classList.toggle("btn-success");
button.innerText = "Success";
await new Promise(r => setTimeout(r, 1000));
button.classList.toggle("btn-success");
button.removeAttribute("disabled");
button.innerText = "Configure / Reset";
});
(async function() {
const $version = await new Promise(r => chrome.management.getSelf(self => r(self.version)));
document.getElementById("version").innerText = `(version v${$version})`;
await chrome.storage.local.get().then(items => {
document.getElementById("activate").checked = items["__ap"];
document.getElementById("autobook").checked = items["__ab"];
document.getElementById("credits").innerText = items["__cr"] || "--";
document.getElementById("frequency").value = items["__fq"] || 1;
document.getElementById("checkfrequency").innerText = items["__fq"] || 1;
document.getElementById("gap").value = items["__gp"] || 3;
document.getElementById("daygap").innerText = items["__gp"] || 3;
})
chrome.storage.onChanged.addListener((changes, area) => {
if (changes.__cr)
document.getElementById("credits").innerText = changes.__cr.newValue;
if (changes.__fq)
document.getElementById("checkfrequency").innerText = changes.__fq.newValue;
if (changes.__gp)
document.getElementById("daygap").innerText = changes.__gp.newValue;
});
document.getElementById("activate").addEventListener("change", async function() {
chrome.storage.local.set({ __ap: this.checked });
let [tab] = await chrome.tabs.query({ active: true, lastFocusedWindow: true });
chrome.tabs.sendMessage(tab.id, { action: "activate", status: this.checked });
});
document.getElementById("autobook").addEventListener("change", async function() {
chrome.storage.local.set({ __ab: this.checked });
});
document.getElementById("frequency").addEventListener("change", function() {
chrome.storage.local.set({ __fq: this.value });
});
document.getElementById("gap").addEventListener("change", function() {
chrome.storage.local.set({ __gp: this.value });
});
document.getElementById("read_faqs").addEventListener("click", function() {
chrome.tabs.create({
url: chrome.runtime.getURL("pages/faqs.html")
});
});
document.getElementById("ais_visa_info").addEventListener("submit", async function(e) {
e.preventDefault();
let button = document.getElementById("reset_info");
button.setAttribute("disabled", "disabled");
await new Promise(r => setTimeout(r, 500));
await chrome.storage.local.clear();
await chrome.storage.local.set({ __ab: false, __ap: true, __cr: 0, __fq: 1, __gp: 7 });
let [tab] = await chrome.tabs.query({ active: true, lastFocusedWindow: true });
await chrome.tabs.sendMessage(tab.id, { action: "logout" });
button.classList.toggle("btn-success");
button.innerText = "Success";
await new Promise(r => setTimeout(r, 1000));
button.classList.toggle("btn-success");
button.removeAttribute("disabled");
button.innerText = "Configure / Reset";
});
})();

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -1,109 +1,109 @@
<!DOCTYPE html>
<html>
<head>
<title>AIS Visa Scheduler FAQs</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="../css/bootstrap.min.css" rel="stylesheet">
<style>
body {
background: #1e3b4d;
}
section {
font-family: Helvetica, Arial, system-ui, ui-sans-serif;
}
.accordian-element {
background: white;
}
.accordion-button {
font-weight: 600;
font-size: 1.2rem;
}
.accordion-button.collapsed {
text-decoration: underline;
text-underline-offset: .5em;
}
</style>
</head>
<body>
<section class="container mt-5">
<div class="accordion" id="faqs-accordion">
<div class="accordian-element">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-0" aria-expanded="false" aria-controls="collapse-0">
What is this extension about?
</button>
</h2>
<div id="collapse-0" class="accordion-collapse collapse" data-bs-parent="#faqs-accordion">
<p class="accordion-body m-0">
This extension was born out of boredom and the ridiculous task of clicking through multiple months to find the next available date for rescheduling. I wanted to build something to click through the calendar but ended up building the extension which automates
everything.
</p>
</div>
</div>
<div class="accordian-element">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-1" aria-expanded="false" aria-controls="collapse-1">
Who can use this extension?
</button>
</h2>
<div id="collapse-1" class="accordion-collapse collapse" data-bs-parent="#faqs-accordion">
<p class="accordion-body m-0">
This extension is designed to work for the AIS VISA application system only—which means only the countries listed here (<a href='https://ais.usvisa-info.com/en-us/countries_list/niv'>https://ais.usvisa-info.com/en-us/countries_list/niv</a>)
will work with this extension. Also, this is only for rescheduling your appointment. If you are looking to schedule it for the first time, this extension will not work.
</p>
</div>
</div>
<div class="accordian-element">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-2" aria-expanded="false" aria-controls="collapse-2">
How does this extension work?
</button>
</h2>
<div id="collapse-2" class="accordion-collapse collapse" data-bs-parent="#faqs-accordion">
<p class="accordion-body m-0">
The extension automates all the clicking and navigating that you'll generally do manually. It uses your current appointment date and periodically checks for any date earlier than it and tries to book it automatically.<br />The
extension uses credits every time it finds any date. Only when you are in a soft block or a hard block, the credits are not used.
</p>
</div>
</div>
<div class="accordian-element">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-3" aria-expanded="false" aria-controls="collapse-3">
Soft block? Hard block? You're scaring me. What are these?
</button>
</h2>
<div id="collapse-3" class="accordion-collapse collapse" data-bs-parent="#faqs-accordion">
<p class="accordion-body m-0">
<strong>Soft block</strong>:<br />The AIS system shows you no slots for 5 hours when you check for the slots a certain number of times. Sometimes this is 70 checks and sometimes it is only 20. The extension identifies this and
automatically adjusts the checking interval to prevent a hard block.<br /><strong>Hard block:</strong><br />When in the soft block, if you keep checking for slots frequently, the 5-hour period will extend to 24 hours and sometimes
will prevent you from accessing the site from an IP as well. it is best to stay out of this hard block state.<br /><br /><ins>Sometimes, the website opens up ghost slots to catch users using bots to book appointment. When such slots open up, you'll see errors telling you to that your selection is invalid. If this error happens three times in a row, stop using the extension for a couple of hours.</ins>
</p>
</div>
</div>
<div class="accordian-element">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-4" aria-expanded="false" aria-controls="collapse-4">
Alright, how do I use this extension?
</button>
</h2>
<div id="collapse-4" class="accordion-collapse collapse" data-bs-parent="#faqs-accordion">
<p class="accordion-body m-0">
The extension is intuitive to use. It'll show you dialogs for you to act on or provide information. Apart from that you can control things like checking frequency and other options. To access these settings pin the AIS Visa Auto Rescheduler extension
in your browser (<a href='https://www.youtube.com/watch?v=lYwGngJS7og&t=33s' target='_blank'>How to pin extension</a>). Changes done here are autosaved.<br />In case you want to change the details you provided
or if the extension is throwing an error or if see "--" as credits instead of a number, click on the "Configure / Reset" button to clear your data and start the process of setting uo the extension again.
</p>
</div>
</div>
</div>
</section>
<script src="../js/bootstrap.min.js"></script>
</body>
<!DOCTYPE html>
<html>
<head>
<title>AIS Visa Scheduler FAQs</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="../css/bootstrap.min.css" rel="stylesheet">
<style>
body {
background: #1e3b4d;
}
section {
font-family: Helvetica, Arial, system-ui, ui-sans-serif;
}
.accordian-element {
background: white;
}
.accordion-button {
font-weight: 600;
font-size: 1.2rem;
}
.accordion-button.collapsed {
text-decoration: underline;
text-underline-offset: .5em;
}
</style>
</head>
<body>
<section class="container mt-5">
<div class="accordion" id="faqs-accordion">
<div class="accordian-element">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-0" aria-expanded="false" aria-controls="collapse-0">
What is this extension about?
</button>
</h2>
<div id="collapse-0" class="accordion-collapse collapse" data-bs-parent="#faqs-accordion">
<p class="accordion-body m-0">
This extension was born out of boredom and the ridiculous task of clicking through multiple months to find the next available date for rescheduling. I wanted to build something to click through the calendar but ended up building the extension which automates
everything.
</p>
</div>
</div>
<div class="accordian-element">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-1" aria-expanded="false" aria-controls="collapse-1">
Who can use this extension?
</button>
</h2>
<div id="collapse-1" class="accordion-collapse collapse" data-bs-parent="#faqs-accordion">
<p class="accordion-body m-0">
This extension is designed to work for the AIS VISA application system only—which means only the countries listed here (<a href='https://ais.usvisa-info.com/en-us/countries_list/niv'>https://ais.usvisa-info.com/en-us/countries_list/niv</a>)
will work with this extension. Also, this is only for rescheduling your appointment. If you are looking to schedule it for the first time, this extension will not work.
</p>
</div>
</div>
<div class="accordian-element">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-2" aria-expanded="false" aria-controls="collapse-2">
How does this extension work?
</button>
</h2>
<div id="collapse-2" class="accordion-collapse collapse" data-bs-parent="#faqs-accordion">
<p class="accordion-body m-0">
The extension automates all the clicking and navigating that you'll generally do manually. It uses your current appointment date and periodically checks for any date earlier than it and tries to book it automatically.<br />The
extension uses credits every time it finds any date. Only when you are in a soft block or a hard block, the credits are not used.
</p>
</div>
</div>
<div class="accordian-element">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-3" aria-expanded="false" aria-controls="collapse-3">
Soft block? Hard block? You're scaring me. What are these?
</button>
</h2>
<div id="collapse-3" class="accordion-collapse collapse" data-bs-parent="#faqs-accordion">
<p class="accordion-body m-0">
<strong>Soft block</strong>:<br />The AIS system shows you no slots for 5 hours when you check for the slots a certain number of times. Sometimes this is 70 checks and sometimes it is only 20. The extension identifies this and
automatically adjusts the checking interval to prevent a hard block.<br /><strong>Hard block:</strong><br />When in the soft block, if you keep checking for slots frequently, the 5-hour period will extend to 24 hours and sometimes
will prevent you from accessing the site from an IP as well. it is best to stay out of this hard block state.<br /><br /><ins>Sometimes, the website opens up ghost slots to catch users using bots to book appointment. When such slots open up, you'll see errors telling you to that your selection is invalid. If this error happens three times in a row, stop using the extension for a couple of hours.</ins>
</p>
</div>
</div>
<div class="accordian-element">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-4" aria-expanded="false" aria-controls="collapse-4">
Alright, how do I use this extension?
</button>
</h2>
<div id="collapse-4" class="accordion-collapse collapse" data-bs-parent="#faqs-accordion">
<p class="accordion-body m-0">
The extension is intuitive to use. It'll show you dialogs for you to act on or provide information. Apart from that you can control things like checking frequency and other options. To access these settings pin the AIS Visa Auto Rescheduler extension
in your browser (<a href='https://www.youtube.com/watch?v=lYwGngJS7og&t=33s' target='_blank'>How to pin extension</a>). Changes done here are autosaved.<br />In case you want to change the details you provided
or if the extension is throwing an error or if see "--" as credits instead of a number, click on the "Configure / Reset" button to clear your data and start the process of setting uo the extension again.
</p>
</div>
</div>
</div>
</section>
<script src="../js/bootstrap.min.js"></script>
</body>
</html>