feat: offline in-browser "Ask MSOS" assistant (no API, zero cost)
A privacy-friendly help widget that answers visitor questions from the site's own content and links to the full page — runs 100% in the browser, no API, no server, no per-token cost. - tools/build_search_index.py: parses every EN/MK/SI page into ~720 heading-level chunks per language -> assistant/index-<lang>.json (lazy-loaded only when the chat is opened; gzips to ~80 KB). - assistant.js: dependency-free BM25 search + multilingual stopword filtering + a curated short-answer layer for common questions, plus an accessible chat widget (role=dialog, keyboard, aria). CSP-safe (self only). - assistant.css: scoped .msa-* styles in the site's teal palette; responsive (full-screen panel on mobile). - Injected on 208 pages (blog WIP excluded; picks it up when that lands). Verified in a headless browser across EN/MK/SI: curated answers, search fallback with correct ranking (rare terms win), correct deep links, Cyrillic + Slovene diacritics, and zero console errors. Curated MK/SI answers are machine-drafted — proofread before launch. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
cca6fd18aa
commit
f7f297bd65
2
404.html
2
404.html
|
|
@ -70,5 +70,7 @@
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,94 @@
|
||||||
|
/* ==========================================================================
|
||||||
|
MSOS Assistant widget styles. All selectors are .msa-* scoped so they can't
|
||||||
|
collide with the site. Colours echo the site's teal accent.
|
||||||
|
========================================================================== */
|
||||||
|
.msa-root {
|
||||||
|
--msa-accent: #12707e;
|
||||||
|
--msa-accent-dark: #0d5560;
|
||||||
|
--msa-bg: #ffffff;
|
||||||
|
--msa-bot: #f1f5f6;
|
||||||
|
--msa-user: #12707e;
|
||||||
|
--msa-text: #16232a;
|
||||||
|
position: fixed;
|
||||||
|
right: 20px; bottom: 20px;
|
||||||
|
z-index: 9999;
|
||||||
|
font-family: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* launcher */
|
||||||
|
.msa-launch {
|
||||||
|
display: inline-flex; align-items: center; gap: 8px;
|
||||||
|
background: var(--msa-accent); color: #fff;
|
||||||
|
border: 0; border-radius: 999px;
|
||||||
|
padding: 12px 18px; font-size: 15px; font-weight: 600;
|
||||||
|
cursor: pointer; box-shadow: 0 8px 24px rgba(0, 0, 0, 0.18);
|
||||||
|
transition: transform .15s ease, background .15s ease;
|
||||||
|
}
|
||||||
|
.msa-launch:hover { background: var(--msa-accent-dark); transform: translateY(-1px); }
|
||||||
|
.msa-launch i { font-size: 17px; }
|
||||||
|
.msa-open .msa-launch { display: none; }
|
||||||
|
|
||||||
|
/* panel */
|
||||||
|
.msa-panel {
|
||||||
|
position: absolute; right: 0; bottom: 0;
|
||||||
|
width: min(380px, calc(100vw - 32px));
|
||||||
|
height: min(560px, calc(100vh - 40px));
|
||||||
|
display: none; flex-direction: column;
|
||||||
|
background: var(--msa-bg); border-radius: 16px;
|
||||||
|
box-shadow: 0 24px 60px rgba(0, 0, 0, 0.28);
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.msa-open .msa-panel { display: flex; }
|
||||||
|
|
||||||
|
.msa-head {
|
||||||
|
display: flex; align-items: center; justify-content: space-between;
|
||||||
|
background: var(--msa-accent); color: #fff;
|
||||||
|
padding: 14px 16px; font-weight: 700; font-size: 16px;
|
||||||
|
}
|
||||||
|
.msa-x { background: none; border: 0; color: #fff; font-size: 26px; line-height: 1; cursor: pointer; padding: 0 4px; }
|
||||||
|
.msa-x:hover { opacity: .8; }
|
||||||
|
|
||||||
|
.msa-log {
|
||||||
|
flex: 1; overflow-y: auto; padding: 14px;
|
||||||
|
display: flex; flex-direction: column; gap: 10px;
|
||||||
|
background: #fafbfb;
|
||||||
|
}
|
||||||
|
.msa-msg { display: flex; }
|
||||||
|
.msa-bot { justify-content: flex-start; }
|
||||||
|
.msa-user { justify-content: flex-end; }
|
||||||
|
.msa-bubble {
|
||||||
|
max-width: 85%; padding: 10px 13px; border-radius: 14px;
|
||||||
|
font-size: 14.5px; line-height: 1.5; color: var(--msa-text);
|
||||||
|
background: var(--msa-bot); border-bottom-left-radius: 4px;
|
||||||
|
word-wrap: break-word;
|
||||||
|
}
|
||||||
|
.msa-user .msa-bubble {
|
||||||
|
background: var(--msa-user); color: #fff; border-radius: 14px; border-bottom-right-radius: 4px;
|
||||||
|
}
|
||||||
|
.msa-also { color: #5a6b72; font-size: 13px; }
|
||||||
|
.msa-link {
|
||||||
|
display: inline-block; margin-top: 6px;
|
||||||
|
color: var(--msa-accent); font-weight: 600; text-decoration: none;
|
||||||
|
}
|
||||||
|
.msa-link:hover { text-decoration: underline; }
|
||||||
|
|
||||||
|
.msa-form { display: flex; gap: 8px; padding: 10px; border-top: 1px solid #eceff0; background: #fff; }
|
||||||
|
.msa-input {
|
||||||
|
flex: 1; border: 1px solid #d6dcde; border-radius: 10px;
|
||||||
|
padding: 10px 12px; font-size: 14.5px; font-family: inherit; color: var(--msa-text);
|
||||||
|
}
|
||||||
|
.msa-input:focus { outline: 2px solid var(--msa-accent); outline-offset: -1px; border-color: var(--msa-accent); }
|
||||||
|
.msa-send {
|
||||||
|
background: var(--msa-accent); color: #fff; border: 0; border-radius: 10px;
|
||||||
|
width: 44px; cursor: pointer; font-size: 16px;
|
||||||
|
}
|
||||||
|
.msa-send:hover { background: var(--msa-accent-dark); }
|
||||||
|
.msa-foot { margin: 0; padding: 8px 12px; font-size: 11.5px; color: #8a979d; background: #fff; text-align: center; }
|
||||||
|
|
||||||
|
@media (max-width: 480px) {
|
||||||
|
.msa-root { right: 12px; bottom: 12px; }
|
||||||
|
.msa-panel { width: calc(100vw - 24px); height: calc(100vh - 24px); }
|
||||||
|
}
|
||||||
|
@media (prefers-reduced-motion: reduce) {
|
||||||
|
.msa-launch { transition: none; }
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,284 @@
|
||||||
|
/* ==========================================================================
|
||||||
|
MSOS Assistant — offline "find my answer" helper.
|
||||||
|
100% in-browser: no API, no server, no cost. Lazy-loads a small per-language
|
||||||
|
index and answers with a short snippet + a link to the full page.
|
||||||
|
Dependency-free so it stays CSP-safe (script-src 'self').
|
||||||
|
========================================================================== */
|
||||||
|
(function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var LANG = (document.documentElement.lang || "en").toLowerCase();
|
||||||
|
if (LANG === "sl") LANG = "si"; // site uses lang="sl", files use "si"
|
||||||
|
if (["en", "mk", "si"].indexOf(LANG) < 0) LANG = "en";
|
||||||
|
|
||||||
|
/* ---- localized UI strings ---- */
|
||||||
|
var UI = {
|
||||||
|
en: { title: "Ask MSOS", open: "Ask MSOS", placeholder: "Ask a question…",
|
||||||
|
send: "Send", close: "Close",
|
||||||
|
greeting: "Hi! 👋 Ask me anything about studying in Slovenia or MSOS and I'll point you to the right page.",
|
||||||
|
found: "Here's what I found:", more: "Read more",
|
||||||
|
none: "I couldn't find a clear answer. Try the Student Welcome Guide, or email info@msosorg.com.",
|
||||||
|
guideUrl: "/en/student-welcome-guide/", disclaimer: "Answers come straight from this website." },
|
||||||
|
mk: { title: "Прашај MSOS", open: "Прашај MSOS", placeholder: "Постави прашање…",
|
||||||
|
send: "Испрати", close: "Затвори",
|
||||||
|
greeting: "Здраво! 👋 Прашај ме било што за студирање во Словенија или за MSOS и ќе те упатам до вистинската страница.",
|
||||||
|
found: "Еве што најдов:", more: "Прочитај повеќе",
|
||||||
|
none: "Не најдов јасен одговор. Пробај го Водичот за студенти или пиши на info@msosorg.com.",
|
||||||
|
guideUrl: "/mk/student-welcome-guide/", disclaimer: "Одговорите доаѓаат директно од оваа страница." },
|
||||||
|
si: { title: "Vprašaj MSOS", open: "Vprašaj MSOS", placeholder: "Zastavi vprašanje…",
|
||||||
|
send: "Pošlji", close: "Zapri",
|
||||||
|
greeting: "Živjo! 👋 Vprašaj me karkoli o študiju v Sloveniji ali o MSOS in usmeril te bom na pravo stran.",
|
||||||
|
found: "Tole sem našel:", more: "Preberi več",
|
||||||
|
none: "Nisem našel jasnega odgovora. Poglej Vodnik za študente ali piši na info@msosorg.com.",
|
||||||
|
guideUrl: "/si/student-welcome-guide/", disclaimer: "Odgovori prihajajo neposredno s te spletne strani." }
|
||||||
|
}[LANG];
|
||||||
|
|
||||||
|
/* ---- curated short answers for common questions (checked before search).
|
||||||
|
EN is complete; MK/SI seed a few — machine-drafted, PROOFREAD before launch.
|
||||||
|
Add more freely: {k:[keywords], a:"short answer", u:"/lang/page/"} ---- */
|
||||||
|
var INTENTS = {
|
||||||
|
en: [
|
||||||
|
{ k: ["residence", "permit", "temporary", "stay"], u: "/en/student-welcome-guide/student-residence-permit/",
|
||||||
|
a: "You apply for a temporary residence permit for study (usually before or right after arrival). It takes several documents and steps and is valid ~1 year, then renewed." },
|
||||||
|
{ k: ["visa"], u: "/en/student-welcome-guide/student-residence-permit/",
|
||||||
|
a: "Non-EU students generally need a residence permit for study rather than a short visa. See the residence-permit guide for the documents and steps." },
|
||||||
|
{ k: ["cost", "living", "expenses", "budget", "money", "rent"], u: "/en/get-to-know-slovenia/",
|
||||||
|
a: "Monthly living costs depend on your city and housing. The guide breaks down rent, food, transport and student discounts." },
|
||||||
|
{ k: ["accommodation", "housing", "dorm", "apartment", "room", "student home"], u: "/en/student-welcome-guide/student-accommodation/",
|
||||||
|
a: "You can look at student dorms and private rentals. The accommodation guide explains how and where to search." },
|
||||||
|
{ k: ["english", "slovene", "slovenian", "language"], u: "/en/student-welcome-guide/",
|
||||||
|
a: "Some programmes are in English; many are in Slovene. Learning basic Slovene helps a lot with daily life and admin." },
|
||||||
|
{ k: ["work", "job", "part-time", "student work"], u: "/en/student-welcome-guide/",
|
||||||
|
a: "Students can work part-time through student work ('študentsko delo'). The guide covers how it works alongside studies." },
|
||||||
|
{ k: ["boni", "benefits", "discount", "meal", "subsidised"], u: "/en/student-welcome-guide/",
|
||||||
|
a: "Students get subsidised meals ('boni') and many discounts. See the guide for how to register and use them." },
|
||||||
|
{ k: ["tuition", "fees", "scholarship", "funding", "ad futura"], u: "/en/student-welcome-guide/application-deadlines/",
|
||||||
|
a: "Tuition varies by programme and status; scholarships like Ad Futura exist. Check deadlines and funding in the guide." },
|
||||||
|
{ k: ["bank", "account", "iban"], u: "/en/blog/how-to-open-slovenian-bank-account/",
|
||||||
|
a: "Opening a Slovenian bank account is straightforward with your documents. The blog post walks through it step by step." },
|
||||||
|
{ k: ["enrol", "enrolment", "evš", "evs", "apply", "application", "admission"], u: "/en/student-welcome-guide/evs-application-guide/",
|
||||||
|
a: "You apply through the eVŠ portal. The eVŠ guide shows exactly how to submit your application." },
|
||||||
|
{ k: ["arrival", "checklist", "first", "when i arrive", "moving"], u: "/en/student-welcome-guide/arrival-checklist/",
|
||||||
|
a: "There's a first-weeks arrival checklist (registration, permit, bank, health, etc.) to keep you on track." },
|
||||||
|
{ k: ["member", "join", "membership", "become"], u: "/en/become-a-member/",
|
||||||
|
a: "You can join in a couple of minutes — students and supporters both welcome. Use the Become a member form." },
|
||||||
|
{ k: ["support", "donate", "donation", "sponsor", "help"], u: "/en/support/",
|
||||||
|
a: "You can support MSOS by bank transfer, sponsorship or partnership. See the Support page for details." },
|
||||||
|
{ k: ["contact", "email", "reach", "get in touch"], u: "/en/legal/",
|
||||||
|
a: "You can reach MSOS at info@msosorg.com. Official details are on the Official information page." }
|
||||||
|
],
|
||||||
|
mk: [
|
||||||
|
{ k: ["дозвол", "престој", "виза"], u: "/mk/student-welcome-guide/student-residence-permit/",
|
||||||
|
a: "Аплицираш за дозвола за привремен престој за студирање. Потребни се неколку документи и чекори; важи околу 1 година." },
|
||||||
|
{ k: ["член", "зачлен", "приклуч"], u: "/mk/become-a-member/",
|
||||||
|
a: "Можеш да се зачлениш за неколку минути — добредојдени се и студенти и поддржувачи." },
|
||||||
|
{ k: ["поддрш", "донац", "донир"], u: "/mk/support/",
|
||||||
|
a: "Можеш да го поддржиш MSOS преку банкарски трансфер, спонзорство или партнерство. Види ја страницата Поддршка." },
|
||||||
|
{ k: ["сместув", "стан", "дом"], u: "/mk/student-welcome-guide/student-accommodation/",
|
||||||
|
a: "Можеш да бараш студентски домови или приватно сместување. Водичот објаснува како и каде." },
|
||||||
|
{ k: ["контакт", "е-пошта", "мејл"], u: "/mk/legal/",
|
||||||
|
a: "Контактирај го MSOS на info@msosorg.com. Официјалните податоци се на страницата Официјални информации." }
|
||||||
|
],
|
||||||
|
si: [
|
||||||
|
{ k: ["dovoljenje", "prebivanje", "vizum", "bivanje"], u: "/si/student-welcome-guide/student-residence-permit/",
|
||||||
|
a: "Zaprosiš za dovoljenje za začasno prebivanje zaradi študija. Potrebnih je nekaj dokumentov in korakov; velja približno 1 leto." },
|
||||||
|
{ k: ["član", "včlan", "pridruž"], u: "/si/become-a-member/",
|
||||||
|
a: "Včlaniš se lahko v nekaj minutah — dobrodošli so študenti in podporniki." },
|
||||||
|
{ k: ["podpri", "donacij", "donir"], u: "/si/support/",
|
||||||
|
a: "MSOS lahko podpreš z bančnim nakazilom, sponzorstvom ali partnerstvom. Glej stran Podpri." },
|
||||||
|
{ k: ["nastanit", "stanovanje", "dom", "soba"], u: "/si/student-welcome-guide/student-accommodation/",
|
||||||
|
a: "Iščeš lahko študentske domove ali zasebne najeme. Vodnik pojasni, kako in kje." },
|
||||||
|
{ k: ["kontakt", "e-pošta", "mail"], u: "/si/legal/",
|
||||||
|
a: "MSOS dosežeš na info@msosorg.com. Uradni podatki so na strani Uradni podatki." }
|
||||||
|
]
|
||||||
|
}[LANG] || [];
|
||||||
|
|
||||||
|
/* ---- text normalization: lowercase + fold Latin diacritics (č→c…),
|
||||||
|
keep Cyrillic. Tokenize on non-letter/digit (Unicode-aware). ---- */
|
||||||
|
function norm(s) {
|
||||||
|
s = (s || "").toLowerCase();
|
||||||
|
try { s = s.normalize("NFD").replace(/[̀-ͯ]/g, ""); } catch (e) {}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
function tokens(s) {
|
||||||
|
var out = [], m = norm(s).match(/[\p{L}\p{N}]+/gu);
|
||||||
|
if (m) for (var i = 0; i < m.length; i++) if (m[i].length > 1) out.push(m[i]);
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
// Question/filler words in EN + MK + SI; removed from queries so the
|
||||||
|
// meaningful terms (e.g. "ohrid", "permit") drive the ranking.
|
||||||
|
var STOP = (function () {
|
||||||
|
var w = ("the a an of to in on for and or is are be was were do does did how what " +
|
||||||
|
"when where why who which can could would should will my your our we they it this " +
|
||||||
|
"that these those with at as by from about into over out up down me you i us them " +
|
||||||
|
"have has had need want please get got give tell show find help hi hello hey thanks " +
|
||||||
|
"kako kaj kje kdaj zakaj kdo kateri ali je so bo bi na za in ali da li mi me ti to ta " +
|
||||||
|
"te tega se z s v iz pri od do imam imate zelim moram lahko prosim zivjo pozdravljeni " +
|
||||||
|
"kako sto dali koi koga kade zosto koj koja e se na vo za i ili so da li mi me ti nie " +
|
||||||
|
"toa ova imam sakam treba moze prosim zdravo ").split(/\s+/);
|
||||||
|
var o = {}; for (var i = 0; i < w.length; i++) if (w[i]) o[w[i]] = 1; return o;
|
||||||
|
})();
|
||||||
|
|
||||||
|
/* ---- tiny BM25 search over the lazily-loaded index ---- */
|
||||||
|
var INDEX = null, DF = null, AVGLEN = 0, ready = false, loading = false;
|
||||||
|
|
||||||
|
function loadIndex() {
|
||||||
|
if (ready || loading) return Promise.resolve();
|
||||||
|
loading = true;
|
||||||
|
return fetch("/assistant/index-" + LANG + ".json")
|
||||||
|
.then(function (r) { return r.json(); })
|
||||||
|
.then(function (data) {
|
||||||
|
INDEX = data; DF = {}; var total = 0;
|
||||||
|
for (var i = 0; i < INDEX.length; i++) {
|
||||||
|
var c = INDEX[i];
|
||||||
|
c._t = tokens(c.x + " " + c.h + " " + c.t);
|
||||||
|
c._len = c._t.length; total += c._len;
|
||||||
|
var seen = {};
|
||||||
|
for (var j = 0; j < c._t.length; j++) {
|
||||||
|
var w = c._t[j];
|
||||||
|
if (!seen[w]) { seen[w] = 1; DF[w] = (DF[w] || 0) + 1; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
AVGLEN = total / Math.max(INDEX.length, 1);
|
||||||
|
ready = true; loading = false;
|
||||||
|
})
|
||||||
|
.catch(function () { loading = false; });
|
||||||
|
}
|
||||||
|
|
||||||
|
function search(query, k) {
|
||||||
|
if (!ready) return [];
|
||||||
|
var q0 = tokens(query); if (!q0.length) return [];
|
||||||
|
var N = INDEX.length, k1 = 1.5, b = 0.75, scored = [];
|
||||||
|
// Drop stopwords + very common terms so rare, meaningful words win.
|
||||||
|
var q = q0.filter(function (t) { return !STOP[t] && (!DF[t] || DF[t] / N <= 0.4); });
|
||||||
|
if (!q.length) q = q0.filter(function (t) { return !STOP[t]; });
|
||||||
|
if (!q.length) q = q0;
|
||||||
|
for (var i = 0; i < N; i++) {
|
||||||
|
var c = INDEX[i], score = 0, tf = {};
|
||||||
|
for (var j = 0; j < c._t.length; j++) tf[c._t[j]] = (tf[c._t[j]] || 0) + 1;
|
||||||
|
for (var t = 0; t < q.length; t++) {
|
||||||
|
var term = q[t], f = tf[term]; if (!f) continue;
|
||||||
|
var idf = Math.log(1 + (N - DF[term] + 0.5) / (DF[term] + 0.5));
|
||||||
|
score += idf * (f * (k1 + 1)) / (f + k1 * (1 - b + b * c._len / AVGLEN));
|
||||||
|
}
|
||||||
|
// boost when the query hits the heading/title
|
||||||
|
var hn = norm(c.h + " " + c.t);
|
||||||
|
for (var h = 0; h < q.length; h++) if (hn.indexOf(q[h]) >= 0) score += 0.6;
|
||||||
|
if (score > 0) scored.push([score, c]);
|
||||||
|
}
|
||||||
|
scored.sort(function (a, b) { return b[0] - a[0]; });
|
||||||
|
return scored.slice(0, k || 3).map(function (s) { return s[1]; });
|
||||||
|
}
|
||||||
|
|
||||||
|
function matchIntent(query) {
|
||||||
|
var q = norm(query), best = null, bestHits = 0;
|
||||||
|
for (var i = 0; i < INTENTS.length; i++) {
|
||||||
|
var hits = 0;
|
||||||
|
for (var j = 0; j < INTENTS[i].k.length; j++)
|
||||||
|
if (q.indexOf(norm(INTENTS[i].k[j])) >= 0) hits++;
|
||||||
|
if (hits > bestHits) { bestHits = hits; best = INTENTS[i]; }
|
||||||
|
}
|
||||||
|
return bestHits > 0 ? best : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---- snippet: ~180 chars of a chunk, trimmed to a sentence ---- */
|
||||||
|
function snippet(c) {
|
||||||
|
var x = c.x;
|
||||||
|
var lead = c.h && x.indexOf(c.h) === 0 ? x.slice(c.h.length).replace(/^[.\s]+/, "") : x;
|
||||||
|
if (lead.length > 200) lead = lead.slice(0, 200).replace(/\s+\S*$/, "") + "…";
|
||||||
|
return lead;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ========================= UI ========================= */
|
||||||
|
var esc = function (s) { return String(s == null ? "" : s)
|
||||||
|
.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">")
|
||||||
|
.replace(/"/g, """).replace(/'/g, "'"); };
|
||||||
|
|
||||||
|
var root, panel, log, input, launch, opened = false;
|
||||||
|
|
||||||
|
function bubble(text, who, extraHTML) {
|
||||||
|
var b = document.createElement("div");
|
||||||
|
b.className = "msa-msg msa-" + who;
|
||||||
|
b.innerHTML = '<div class="msa-bubble">' + text + (extraHTML || "") + "</div>";
|
||||||
|
log.appendChild(b);
|
||||||
|
log.scrollTop = log.scrollHeight;
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
|
||||||
|
function answer(query) {
|
||||||
|
bubble(esc(query), "user");
|
||||||
|
var typing = bubble("…", "bot");
|
||||||
|
Promise.resolve(ready ? null : loadIndex()).then(function () {
|
||||||
|
typing.remove();
|
||||||
|
var intent = matchIntent(query);
|
||||||
|
var hits = search(query, 3);
|
||||||
|
if (intent) {
|
||||||
|
var extra = '<a class="msa-link" href="' + esc(intent.u) + '">' + esc(UI.more) + ' →</a>';
|
||||||
|
bubble(esc(intent.a), "bot", extra);
|
||||||
|
// offer one more related page from search if different
|
||||||
|
var extraHit = hits.filter(function (c) { return c.u !== intent.u; })[0];
|
||||||
|
if (extraHit) bubble('<span class="msa-also">' + esc(UI.found) + '</span> ' +
|
||||||
|
esc(extraHit.h) + ' <a class="msa-link" href="' + esc(extraHit.u) + '">' + esc(UI.more) + ' →</a>', "bot");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (hits.length) {
|
||||||
|
bubble('<span class="msa-also">' + esc(UI.found) + '</span>', "bot");
|
||||||
|
hits.forEach(function (c) {
|
||||||
|
bubble('<strong>' + esc(c.h) + '</strong><br>' + esc(snippet(c)) +
|
||||||
|
'<br><a class="msa-link" href="' + esc(c.u) + '">' + esc(UI.more) + ' →</a>', "bot");
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
bubble(esc(UI.none) + ' <a class="msa-link" href="' + esc(UI.guideUrl) + '">' + esc(UI.more) + ' →</a>', "bot");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function open() {
|
||||||
|
opened = true; root.classList.add("msa-open");
|
||||||
|
panel.setAttribute("aria-hidden", "false");
|
||||||
|
launch.setAttribute("aria-expanded", "true");
|
||||||
|
loadIndex();
|
||||||
|
if (!log.childNodes.length) bubble(esc(UI.greeting), "bot");
|
||||||
|
setTimeout(function () { input.focus(); }, 50);
|
||||||
|
}
|
||||||
|
function close() {
|
||||||
|
opened = false; root.classList.remove("msa-open");
|
||||||
|
panel.setAttribute("aria-hidden", "true");
|
||||||
|
launch.setAttribute("aria-expanded", "false");
|
||||||
|
launch.focus();
|
||||||
|
}
|
||||||
|
function submit() {
|
||||||
|
var q = input.value.trim(); if (!q) return;
|
||||||
|
input.value = ""; answer(q);
|
||||||
|
}
|
||||||
|
|
||||||
|
function build() {
|
||||||
|
root = document.createElement("div");
|
||||||
|
root.className = "msa-root"; root.setAttribute("data-msa", "1");
|
||||||
|
root.innerHTML =
|
||||||
|
'<button class="msa-launch" aria-expanded="false" aria-controls="msa-panel" aria-label="' + esc(UI.open) + '">' +
|
||||||
|
'<i class="fas fa-comment-dots" aria-hidden="true"></i><span>' + esc(UI.open) + '</span></button>' +
|
||||||
|
'<section class="msa-panel" id="msa-panel" role="dialog" aria-label="' + esc(UI.title) + '" aria-hidden="true">' +
|
||||||
|
'<header class="msa-head"><span>' + esc(UI.title) + '</span>' +
|
||||||
|
'<button class="msa-x" aria-label="' + esc(UI.close) + '">×</button></header>' +
|
||||||
|
'<div class="msa-log" role="log" aria-live="polite"></div>' +
|
||||||
|
'<form class="msa-form"><input class="msa-input" type="text" autocomplete="off" ' +
|
||||||
|
'placeholder="' + esc(UI.placeholder) + '" aria-label="' + esc(UI.placeholder) + '">' +
|
||||||
|
'<button class="msa-send" type="submit" aria-label="' + esc(UI.send) + '"><i class="fas fa-paper-plane" aria-hidden="true"></i></button>' +
|
||||||
|
'</form>' +
|
||||||
|
'<p class="msa-foot">' + esc(UI.disclaimer) + '</p>' +
|
||||||
|
'</section>';
|
||||||
|
document.body.appendChild(root);
|
||||||
|
panel = root.querySelector(".msa-panel");
|
||||||
|
log = root.querySelector(".msa-log");
|
||||||
|
input = root.querySelector(".msa-input");
|
||||||
|
launch = root.querySelector(".msa-launch");
|
||||||
|
launch.addEventListener("click", function () { opened ? close() : open(); });
|
||||||
|
root.querySelector(".msa-x").addEventListener("click", close);
|
||||||
|
root.querySelector(".msa-form").addEventListener("submit", function (e) { e.preventDefault(); submit(); });
|
||||||
|
document.addEventListener("keydown", function (e) { if (e.key === "Escape" && opened) close(); });
|
||||||
|
}
|
||||||
|
|
||||||
|
if (document.readyState !== "loading") build();
|
||||||
|
else document.addEventListener("DOMContentLoaded", build);
|
||||||
|
})();
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -422,5 +422,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../main.js"></script>
|
<script src="../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -607,5 +607,7 @@
|
||||||
<script src="../../main.js"></script>
|
<script src="../../main.js"></script>
|
||||||
<script src="../../member-form.js"></script>
|
<script src="../../member-form.js"></script>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -314,5 +314,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../main.js"></script>
|
<script src="../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -529,5 +529,7 @@
|
||||||
</footer>
|
</footer>
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -382,5 +382,7 @@
|
||||||
</footer>
|
</footer>
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -391,5 +391,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -397,5 +397,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -364,5 +364,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../main.js"></script>
|
<script src="../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -397,5 +397,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -389,5 +389,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -379,5 +379,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -376,5 +376,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -381,5 +381,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -364,5 +364,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../main.js"></script>
|
<script src="../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -377,5 +377,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -371,5 +371,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -398,5 +398,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -383,5 +383,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -354,5 +354,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -530,5 +530,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../main.js"></script>
|
<script src="../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
@ -289,5 +289,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../main.js"></script>
|
<script src="../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -406,5 +406,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../main.js"></script>
|
<script src="../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -469,5 +469,7 @@
|
||||||
<script src="../../main.js"></script>
|
<script src="../../main.js"></script>
|
||||||
<script src="../../news-filter.js"></script>
|
<script src="../../news-filter.js"></script>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -295,5 +295,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -357,5 +357,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../main.js"></script>
|
<script src="../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -378,5 +378,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -320,5 +320,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -331,5 +331,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -425,5 +425,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../main.js"></script>
|
<script src="../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
@ -412,5 +412,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
@ -436,5 +436,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
@ -439,5 +439,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
@ -398,5 +398,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
@ -360,5 +360,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -346,5 +346,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -358,5 +358,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
<script src="../../../guide-feedback.js"></script>
|
<script src="../../../guide-feedback.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -355,5 +355,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
<script src="../../../guide-feedback.js"></script>
|
<script src="../../../guide-feedback.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -356,5 +356,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
<script src="../../../guide-feedback.js"></script>
|
<script src="../../../guide-feedback.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -353,5 +353,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
<script src="../../../guide-feedback.js"></script>
|
<script src="../../../guide-feedback.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -371,5 +371,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
<script src="../../../guide-feedback.js"></script>
|
<script src="../../../guide-feedback.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -383,5 +383,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
<script src="../../../guide-feedback.js"></script>
|
<script src="../../../guide-feedback.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -374,5 +374,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
<script src="../../../guide-feedback.js"></script>
|
<script src="../../../guide-feedback.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -399,5 +399,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
<script src="../../../guide-feedback.js"></script>
|
<script src="../../../guide-feedback.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -348,5 +348,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
<script src="../../../guide-feedback.js"></script>
|
<script src="../../../guide-feedback.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -366,5 +366,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
<script src="../../../guide-feedback.js"></script>
|
<script src="../../../guide-feedback.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -409,5 +409,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
<script src="../../../guide-feedback.js"></script>
|
<script src="../../../guide-feedback.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -513,5 +513,7 @@
|
||||||
<script src="../../main.js"></script>
|
<script src="../../main.js"></script>
|
||||||
<script src="../../student-guide.js"></script>
|
<script src="../../student-guide.js"></script>
|
||||||
<script src="../../guide-feedback.js"></script>
|
<script src="../../guide-feedback.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -360,5 +360,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
<script src="../../../guide-feedback.js"></script>
|
<script src="../../../guide-feedback.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -432,5 +432,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
<script src="../../../guide-feedback.js"></script>
|
<script src="../../../guide-feedback.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -261,5 +261,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
<script src="../../../my-route.js"></script>
|
<script src="../../../my-route.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -387,5 +387,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
<script src="../../../guide-feedback.js"></script>
|
<script src="../../../guide-feedback.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -404,5 +404,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
<script src="../../../guide-feedback.js"></script>
|
<script src="../../../guide-feedback.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -349,5 +349,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
<script src="../../../guide-feedback.js"></script>
|
<script src="../../../guide-feedback.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -358,5 +358,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
<script src="../../../guide-feedback.js"></script>
|
<script src="../../../guide-feedback.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -398,5 +398,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
<script src="../../../guide-feedback.js"></script>
|
<script src="../../../guide-feedback.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -398,5 +398,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
<script src="../../../guide-feedback.js"></script>
|
<script src="../../../guide-feedback.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -368,5 +368,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
<script src="../../../guide-feedback.js"></script>
|
<script src="../../../guide-feedback.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -356,5 +356,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
<script src="../../../guide-feedback.js"></script>
|
<script src="../../../guide-feedback.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -393,5 +393,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
<script src="../../../guide-feedback.js"></script>
|
<script src="../../../guide-feedback.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -410,5 +410,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
<script src="../../../guide-feedback.js"></script>
|
<script src="../../../guide-feedback.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -377,5 +377,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
<script src="../../../guide-feedback.js"></script>
|
<script src="../../../guide-feedback.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -351,5 +351,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
<script src="../../../guide-feedback.js"></script>
|
<script src="../../../guide-feedback.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -383,5 +383,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
<script src="../../../guide-feedback.js"></script>
|
<script src="../../../guide-feedback.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -353,5 +353,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
<script src="../../../guide-feedback.js"></script>
|
<script src="../../../guide-feedback.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -380,5 +380,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
<script src="../../../guide-feedback.js"></script>
|
<script src="../../../guide-feedback.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -347,5 +347,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
<script src="../../../guide-feedback.js"></script>
|
<script src="../../../guide-feedback.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -418,5 +418,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
<script src="../../../guide-feedback.js"></script>
|
<script src="../../../guide-feedback.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -423,5 +423,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../main.js"></script>
|
<script src="../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -503,5 +503,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../main.js"></script>
|
<script src="../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
@ -422,5 +422,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../main.js"></script>
|
<script src="../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -607,5 +607,7 @@
|
||||||
<script src="../../main.js"></script>
|
<script src="../../main.js"></script>
|
||||||
<script src="../../member-form.js"></script>
|
<script src="../../member-form.js"></script>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -314,5 +314,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../main.js"></script>
|
<script src="../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -529,5 +529,7 @@
|
||||||
</footer>
|
</footer>
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -382,5 +382,7 @@
|
||||||
</footer>
|
</footer>
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -391,5 +391,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -397,5 +397,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -364,5 +364,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../main.js"></script>
|
<script src="../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -397,5 +397,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -389,5 +389,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -379,5 +379,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -376,5 +376,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -381,5 +381,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -364,5 +364,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../main.js"></script>
|
<script src="../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -377,5 +377,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -367,5 +367,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -398,5 +398,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -383,5 +383,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -354,5 +354,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -533,5 +533,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../main.js"></script>
|
<script src="../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
@ -289,5 +289,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../main.js"></script>
|
<script src="../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -406,5 +406,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../main.js"></script>
|
<script src="../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -469,5 +469,7 @@
|
||||||
<script src="../../main.js"></script>
|
<script src="../../main.js"></script>
|
||||||
<script src="../../news-filter.js"></script>
|
<script src="../../news-filter.js"></script>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -295,5 +295,7 @@
|
||||||
|
|
||||||
<script src="../../../main.js"></script>
|
<script src="../../../main.js"></script>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -357,5 +357,7 @@
|
||||||
<!-- END_FOOTER -->
|
<!-- END_FOOTER -->
|
||||||
|
|
||||||
<script src="../../main.js"></script>
|
<script src="../../main.js"></script>
|
||||||
|
<link rel="stylesheet" href="/assistant.css">
|
||||||
|
<script src="/assistant.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue