update site
This commit is contained in:
parent
377e9f2395
commit
10f2c55643
@ -1,34 +1,34 @@
|
||||
function fallbackCopyTextToClipboard(text) {
|
||||
var textArea = document.createElement("textarea");
|
||||
textArea.value = text;
|
||||
|
||||
// Avoid scrolling to bottom
|
||||
textArea.style.top = "0";
|
||||
textArea.style.left = "0";
|
||||
textArea.style.position = "fixed";
|
||||
|
||||
document.body.appendChild(textArea);
|
||||
textArea.focus();
|
||||
textArea.select();
|
||||
|
||||
try {
|
||||
var successful = document.execCommand('copy');
|
||||
var msg = successful ? 'successful' : 'unsuccessful';
|
||||
console.log('Fallback: Copying text command was ' + msg);
|
||||
} catch (err) {
|
||||
console.error('Fallback: Oops, unable to copy', err);
|
||||
}
|
||||
|
||||
document.body.removeChild(textArea);
|
||||
}
|
||||
export function copyTextToClipboard(text) {
|
||||
if (!navigator.clipboard) {
|
||||
fallbackCopyTextToClipboard(text);
|
||||
return;
|
||||
}
|
||||
navigator.clipboard.writeText(text).then(function() {
|
||||
console.log('Async: Copying to clipboard was successful!');
|
||||
}, function(err) {
|
||||
console.error('Async: Could not copy text: ', err);
|
||||
});
|
||||
function fallbackCopyTextToClipboard(text) {
|
||||
var textArea = document.createElement("textarea");
|
||||
textArea.value = text;
|
||||
|
||||
// Avoid scrolling to bottom
|
||||
textArea.style.top = "0";
|
||||
textArea.style.left = "0";
|
||||
textArea.style.position = "fixed";
|
||||
|
||||
document.body.appendChild(textArea);
|
||||
textArea.focus();
|
||||
textArea.select();
|
||||
|
||||
try {
|
||||
var successful = document.execCommand('copy');
|
||||
var msg = successful ? 'successful' : 'unsuccessful';
|
||||
console.log('Fallback: Copying text command was ' + msg);
|
||||
} catch (err) {
|
||||
console.error('Fallback: Oops, unable to copy', err);
|
||||
}
|
||||
|
||||
document.body.removeChild(textArea);
|
||||
}
|
||||
export function copyTextToClipboard(text) {
|
||||
if (!navigator.clipboard) {
|
||||
fallbackCopyTextToClipboard(text);
|
||||
return;
|
||||
}
|
||||
navigator.clipboard.writeText(text).then(function() {
|
||||
console.log('Async: Copying to clipboard was successful!');
|
||||
}, function(err) {
|
||||
console.error('Async: Could not copy text: ', err);
|
||||
});
|
||||
}
|
@ -1,47 +1,47 @@
|
||||
if (!window.atob) {
|
||||
var tableStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||
var table = tableStr.split("");
|
||||
|
||||
window.atob = function (base64) {
|
||||
if (/(=[^=]+|={3,})$/.test(base64)) throw new Error("String contains an invalid character");
|
||||
base64 = base64.replace(/=/g, "");
|
||||
var n = base64.length & 3;
|
||||
if (n === 1) throw new Error("String contains an invalid character");
|
||||
for (var i = 0, j = 0, len = base64.length / 4, bin = []; i < len; ++i) {
|
||||
var a = tableStr.indexOf(base64[j++] || "A"), b = tableStr.indexOf(base64[j++] || "A");
|
||||
var c = tableStr.indexOf(base64[j++] || "A"), d = tableStr.indexOf(base64[j++] || "A");
|
||||
if ((a | b | c | d) < 0) throw new Error("String contains an invalid character");
|
||||
bin[bin.length] = ((a << 2) | (b >> 4)) & 255;
|
||||
bin[bin.length] = ((b << 4) | (c >> 2)) & 255;
|
||||
bin[bin.length] = ((c << 6) | d) & 255;
|
||||
};
|
||||
return String.fromCharCode.apply(null, bin).substr(0, bin.length + n - 4);
|
||||
};
|
||||
|
||||
window.btoa = function (bin) {
|
||||
for (var i = 0, j = 0, len = bin.length / 3, base64 = []; i < len; ++i) {
|
||||
var a = bin.charCodeAt(j++), b = bin.charCodeAt(j++), c = bin.charCodeAt(j++);
|
||||
if ((a | b | c) > 255) throw new Error("String contains an invalid character");
|
||||
base64[base64.length] = table[a >> 2] + table[((a << 4) & 63) | (b >> 4)] +
|
||||
(isNaN(b) ? "=" : table[((b << 2) & 63) | (c >> 6)]) +
|
||||
(isNaN(b + c) ? "=" : table[c & 63]);
|
||||
}
|
||||
return base64.join("");
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
export function hexToBase64(str) {
|
||||
return btoa(String.fromCharCode.apply(null,
|
||||
str.replace(/\r|\n/g, "").replace(/([\da-fA-F]{2}) ?/g, "0x$1 ").replace(/ +$/, "").split(" "))
|
||||
);
|
||||
}
|
||||
|
||||
export function base64ToHex(str) {
|
||||
for (var i = 0, bin = atob(str.replace(/[ \r\n]+$/, "")), hex = []; i < bin.length; ++i) {
|
||||
var tmp = bin.charCodeAt(i).toString(16);
|
||||
if (tmp.length === 1) tmp = "0" + tmp;
|
||||
hex[hex.length] = tmp;
|
||||
}
|
||||
return hex.join(" ");
|
||||
if (!window.atob) {
|
||||
var tableStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||
var table = tableStr.split("");
|
||||
|
||||
window.atob = function (base64) {
|
||||
if (/(=[^=]+|={3,})$/.test(base64)) throw new Error("String contains an invalid character");
|
||||
base64 = base64.replace(/=/g, "");
|
||||
var n = base64.length & 3;
|
||||
if (n === 1) throw new Error("String contains an invalid character");
|
||||
for (var i = 0, j = 0, len = base64.length / 4, bin = []; i < len; ++i) {
|
||||
var a = tableStr.indexOf(base64[j++] || "A"), b = tableStr.indexOf(base64[j++] || "A");
|
||||
var c = tableStr.indexOf(base64[j++] || "A"), d = tableStr.indexOf(base64[j++] || "A");
|
||||
if ((a | b | c | d) < 0) throw new Error("String contains an invalid character");
|
||||
bin[bin.length] = ((a << 2) | (b >> 4)) & 255;
|
||||
bin[bin.length] = ((b << 4) | (c >> 2)) & 255;
|
||||
bin[bin.length] = ((c << 6) | d) & 255;
|
||||
};
|
||||
return String.fromCharCode.apply(null, bin).substr(0, bin.length + n - 4);
|
||||
};
|
||||
|
||||
window.btoa = function (bin) {
|
||||
for (var i = 0, j = 0, len = bin.length / 3, base64 = []; i < len; ++i) {
|
||||
var a = bin.charCodeAt(j++), b = bin.charCodeAt(j++), c = bin.charCodeAt(j++);
|
||||
if ((a | b | c) > 255) throw new Error("String contains an invalid character");
|
||||
base64[base64.length] = table[a >> 2] + table[((a << 4) & 63) | (b >> 4)] +
|
||||
(isNaN(b) ? "=" : table[((b << 2) & 63) | (c >> 6)]) +
|
||||
(isNaN(b + c) ? "=" : table[c & 63]);
|
||||
}
|
||||
return base64.join("");
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
export function hexToBase64(str) {
|
||||
return btoa(String.fromCharCode.apply(null,
|
||||
str.replace(/\r|\n/g, "").replace(/([\da-fA-F]{2}) ?/g, "0x$1 ").replace(/ +$/, "").split(" "))
|
||||
);
|
||||
}
|
||||
|
||||
export function base64ToHex(str) {
|
||||
for (var i = 0, bin = atob(str.replace(/[ \r\n]+$/, "")), hex = []; i < bin.length; ++i) {
|
||||
var tmp = bin.charCodeAt(i).toString(16);
|
||||
if (tmp.length === 1) tmp = "0" + tmp;
|
||||
hex[hex.length] = tmp;
|
||||
}
|
||||
return hex.join(" ");
|
||||
}
|
200
assets/main.css
200
assets/main.css
@ -1,101 +1,101 @@
|
||||
.carousel > .carousel-inner > .carousel-item > img {
|
||||
width : 100vh;
|
||||
height : calc(100vh - 56px);
|
||||
/* height : 10vh; */
|
||||
}
|
||||
|
||||
/*.main-window-alt {
|
||||
width : 100vh;
|
||||
height : calc(100vh - 56px);
|
||||
}*/
|
||||
|
||||
.centered-el {
|
||||
padding-top : 45vh;
|
||||
}
|
||||
|
||||
.bg {
|
||||
background-color : #1A1A1A;
|
||||
}
|
||||
|
||||
.release-menu {
|
||||
/* Margin */
|
||||
margin-left : 35vh;
|
||||
margin-right : 35vh;
|
||||
margin-top : 5vh;
|
||||
/* Padding */
|
||||
padding-left : 5vh;
|
||||
padding-right : 5vh;
|
||||
padding-top : 5vh;
|
||||
padding-bottom : 5vh;
|
||||
/* Style */
|
||||
border-radius : 2.0vh;
|
||||
background-color : #1F1F1F;
|
||||
}
|
||||
|
||||
.release-item {
|
||||
/* Margin */
|
||||
margin-left : 5vh;
|
||||
margin-right : 45vh;
|
||||
margin-top : 5vh;
|
||||
/* Padding */
|
||||
padding-left : 5vh;
|
||||
padding-right : 5vh;
|
||||
padding-top : 5vh;
|
||||
padding-bottom : 5vh;
|
||||
/* Style */
|
||||
border-radius : 2.0vh;
|
||||
background-color : #252525;
|
||||
}
|
||||
|
||||
.sys-win-img {
|
||||
margin-top: 24vh;
|
||||
margin-bottom: 1vh;
|
||||
width : 25vh;
|
||||
height : 25vh;
|
||||
}
|
||||
|
||||
.blog-post-card {
|
||||
border-radius : 25px;
|
||||
background-color: #212121;
|
||||
min-width: 250px;
|
||||
min-height : 250px;
|
||||
margin-left : 25%;
|
||||
margin-right : 25%;
|
||||
}
|
||||
|
||||
.blog-post-image-carousel {
|
||||
margin-left: 10%;
|
||||
margin-right: 10%;
|
||||
max-height: 512px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.blog-post-image-carousel img {
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.modal-img-view {
|
||||
width: 1920px;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.password-manger-form {
|
||||
margin-left : 30%;
|
||||
margin-right : 30%;
|
||||
padding : 10px;
|
||||
padding-left : 65px;
|
||||
padding-right : 65px;
|
||||
border-radius : 15px;
|
||||
}
|
||||
|
||||
/* $accordion-color:green; */
|
||||
/* $accordion-padding-y:1.3rem; */
|
||||
/* $accordion-padding-x:2.5rem; */
|
||||
/* $accordion-border-color:black; */
|
||||
/* $accordion-border-width:3.5px; */
|
||||
/* $accordion-border-radius: 3rem; */
|
||||
/* $accordion-button-color:white; */
|
||||
/* $accordion-button-bg:green; */
|
||||
/* $accordion-button-active-bg: white; */
|
||||
/* $accordion-button-active-color:green; */
|
||||
.carousel > .carousel-inner > .carousel-item > img {
|
||||
width : 100vh;
|
||||
height : calc(100vh - 56px);
|
||||
/* height : 10vh; */
|
||||
}
|
||||
|
||||
/*.main-window-alt {
|
||||
width : 100vh;
|
||||
height : calc(100vh - 56px);
|
||||
}*/
|
||||
|
||||
.centered-el {
|
||||
padding-top : 45vh;
|
||||
}
|
||||
|
||||
.bg {
|
||||
background-color : #1A1A1A;
|
||||
}
|
||||
|
||||
.release-menu {
|
||||
/* Margin */
|
||||
margin-left : 35vh;
|
||||
margin-right : 35vh;
|
||||
margin-top : 5vh;
|
||||
/* Padding */
|
||||
padding-left : 5vh;
|
||||
padding-right : 5vh;
|
||||
padding-top : 5vh;
|
||||
padding-bottom : 5vh;
|
||||
/* Style */
|
||||
border-radius : 2.0vh;
|
||||
background-color : #1F1F1F;
|
||||
}
|
||||
|
||||
.release-item {
|
||||
/* Margin */
|
||||
margin-left : 5vh;
|
||||
margin-right : 45vh;
|
||||
margin-top : 5vh;
|
||||
/* Padding */
|
||||
padding-left : 5vh;
|
||||
padding-right : 5vh;
|
||||
padding-top : 5vh;
|
||||
padding-bottom : 5vh;
|
||||
/* Style */
|
||||
border-radius : 2.0vh;
|
||||
background-color : #252525;
|
||||
}
|
||||
|
||||
.sys-win-img {
|
||||
margin-top: 24vh;
|
||||
margin-bottom: 1vh;
|
||||
width : 25vh;
|
||||
height : 25vh;
|
||||
}
|
||||
|
||||
.blog-post-card {
|
||||
border-radius : 25px;
|
||||
background-color: #212121;
|
||||
min-width: 250px;
|
||||
min-height : 250px;
|
||||
margin-left : 25%;
|
||||
margin-right : 25%;
|
||||
}
|
||||
|
||||
.blog-post-image-carousel {
|
||||
margin-left: 10%;
|
||||
margin-right: 10%;
|
||||
max-height: 512px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.blog-post-image-carousel img {
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.modal-img-view {
|
||||
width: 1920px;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.password-manger-form {
|
||||
margin-left : 30%;
|
||||
margin-right : 30%;
|
||||
padding : 10px;
|
||||
padding-left : 65px;
|
||||
padding-right : 65px;
|
||||
border-radius : 15px;
|
||||
}
|
||||
|
||||
/* $accordion-color:green; */
|
||||
/* $accordion-padding-y:1.3rem; */
|
||||
/* $accordion-padding-x:2.5rem; */
|
||||
/* $accordion-border-color:black; */
|
||||
/* $accordion-border-width:3.5px; */
|
||||
/* $accordion-border-radius: 3rem; */
|
||||
/* $accordion-button-color:white; */
|
||||
/* $accordion-button-bg:green; */
|
||||
/* $accordion-button-active-bg: white; */
|
||||
/* $accordion-button-active-color:green; */
|
||||
/* @import "./node_modules/bootstrap/scss/bootstrap" */
|
@ -1,4 +1,4 @@
|
||||
.carousel {
|
||||
width:640px;
|
||||
height:360px;
|
||||
.carousel {
|
||||
width:640px;
|
||||
height:360px;
|
||||
}
|
|
180
assets/main.js
180
assets/main.js
@ -1,91 +1,91 @@
|
||||
import { blog } from "./pages/blog.js";
|
||||
import { passwordManager } from "./pages/password-manager.js";
|
||||
/* Альтернативное главное меню */
|
||||
let altMenuSelectedPage = 1;
|
||||
const altPages = [
|
||||
`<h5 style="color: white;">Добро пожаловать на мой ресурс</h5><p style="color: white;">Это официальный ресурс FullGreaM.</p><button onclick="fl.go('/contacts');" type="button" class="btn btn-outline-light">Мои контакты</button>`,
|
||||
`<h5 style="color: white;">О проектах и работах</h5>
|
||||
<p style="color: white;">Здесь представлены мои проекты, работы с активными и актуальными ссылками на скачивание.</p>
|
||||
<button onclick="fl.go('/projects');" type="button" class="btn btn-outline-light">Мои проекты</button>`,
|
||||
`<h5 style="color: white;">О прочей информации</h5>
|
||||
<p style="color: white;">Также здесь представлен (или будет представлен) мой личный блог, а также, блог, касающийся моих проектов или проектов моей команды.</p>
|
||||
<button onclick="fl.go('/blog');" type="button" class="btn btn-outline-light">Мой блог</button>`
|
||||
];
|
||||
function setAltMenuPage(pageNumber) {
|
||||
altMenuSelectedPage = pageNumber;
|
||||
if (altMenuSelectedPage <= 0) {
|
||||
altMenuSelectedPage = 3;
|
||||
}
|
||||
else if (altMenuSelectedPage > 3) {
|
||||
altMenuSelectedPage = 1;
|
||||
}
|
||||
document.getElementsByTagName('body')[0].style.backgroundImage = `url("/assets/hello/m/${altMenuSelectedPage}.png")`;
|
||||
document.getElementById('alt-carousel-viewer').innerHTML = altPages[altMenuSelectedPage - 1];
|
||||
};
|
||||
/* Альтернативное главное меню */
|
||||
setTimeout(async () => {
|
||||
fl.go(window.location.pathname + location.search)
|
||||
}, 50);
|
||||
|
||||
let isMobile = window.screen.availWidth / window.screen.availHeight <= 1.45;
|
||||
|
||||
function goFromMobileWarning () {
|
||||
const currentURL = new URL(location.href);
|
||||
if (!document.cookie.includes('warning_showed=true')) document.cookie += 'warning_showed=true;';
|
||||
fl.go(currentURL.searchParams.get("go"));
|
||||
}
|
||||
|
||||
if (isMobile && !document.cookie.includes('warning_showed=true')) {
|
||||
// Я это уберу как только буду уверен, что на мобильной версии нет никаких проблем
|
||||
fl.go('/mobile-warning?go=' + new URLSearchParams(location.pathname + location.search).toString().slice(0, -1));
|
||||
}
|
||||
|
||||
fl.bindLoad('/blog', () => {
|
||||
blog();
|
||||
});
|
||||
fl.bindLoad('/password-manager', () => {
|
||||
passwordManager();
|
||||
});
|
||||
|
||||
fl.bindLoad('/main-mobile', () => {
|
||||
document.getElementById('alt-main-prev').onclick = () => setAltMenuPage(altMenuSelectedPage - 1);
|
||||
document.getElementById('alt-main-next').onclick = () => setAltMenuPage(altMenuSelectedPage + 1);
|
||||
});
|
||||
|
||||
fl.bindLoad('/mobile-warning', () => {
|
||||
document.getElementById('mobile-warning-go').onclick = () => goFromMobileWarning();
|
||||
});
|
||||
|
||||
let mainMenuErrorHandled = false;
|
||||
|
||||
setInterval(async () => {
|
||||
// setTimeout(async () => {
|
||||
const navbarHeight = +(document.getElementById("navbar-main")?.offsetHeight);
|
||||
if (!mainMenuErrorHandled && location.pathname == "/" && document.getElementById('main_img1')?.src) {
|
||||
document.getElementById('main_img1').src = window.screen.availWidth / window.screen.availHeight > 1.45 ? "/assets/hello/1.png" : "/assets/hello/m/1.png";
|
||||
document.getElementById('main_img2').src = window.screen.availWidth / window.screen.availHeight > 1.45 ? "/assets/hello/2.png" : "/assets/hello/m/2.png";
|
||||
document.getElementById('main_img3').src = window.screen.availWidth / window.screen.availHeight > 1.45 ? "/assets/hello/3.png" : "/assets/hello/m/3.png";
|
||||
}
|
||||
const selectedCSS = Object.entries(document.styleSheets).filter(([key, cssFileObject]) => cssFileObject.href == `${location.origin}/assets/main.css`)[0][1];
|
||||
Object.entries(selectedCSS.rules).filter(([key, rule]) => rule.selectorText == '.carousel > .carousel-inner > .carousel-item > img')[0][1].style.height = `calc(100vh - ${navbarHeight}px)`
|
||||
|
||||
const currHtml = document.getElementById('alt-carousel-viewer')?.innerHTML;
|
||||
mainMenuErrorHandled = currHtml?.trim() == altPages[altMenuSelectedPage - 1]?.trim();
|
||||
|
||||
if (!mainMenuErrorHandled && window.screen.availWidth < 768 && location.pathname == "/") { // Обработка ошибки вёрстки на главной странице
|
||||
mainMenuErrorHandled = true;
|
||||
setTimeout(async () => {
|
||||
fl.goJust('/main-mobile', false);
|
||||
document.getElementsByTagName('body')[0].style.backgroundImage = 'url("/assets/hello/m/1.png")';
|
||||
}, 150);
|
||||
}
|
||||
else if (mainMenuErrorHandled && window.screen.availWidth >= 768 && location.pathname == "/") { // Вернуть нормальную версию вёрстки
|
||||
mainMenuErrorHandled = false;
|
||||
document.getElementsByTagName('body')[0].style.backgroundImage = '';
|
||||
fl.goJust('/', false);
|
||||
}
|
||||
else if (location.pathname !== "/") {
|
||||
mainMenuErrorHandled = false;
|
||||
document.getElementsByTagName('body')[0].style.backgroundImage = '';
|
||||
}
|
||||
import { blog } from "./pages/blog.js";
|
||||
import { passwordManager } from "./pages/password-manager.js";
|
||||
/* Альтернативное главное меню */
|
||||
let altMenuSelectedPage = 1;
|
||||
const altPages = [
|
||||
`<h5 style="color: white;">Добро пожаловать на мой ресурс</h5><p style="color: white;">Это официальный ресурс FullGreaM.</p><button onclick="fl.go('/contacts');" type="button" class="btn btn-outline-light">Мои контакты</button>`,
|
||||
`<h5 style="color: white;">О проектах и работах</h5>
|
||||
<p style="color: white;">Здесь представлены мои проекты, работы с активными и актуальными ссылками на скачивание.</p>
|
||||
<button onclick="fl.go('/projects');" type="button" class="btn btn-outline-light">Мои проекты</button>`,
|
||||
`<h5 style="color: white;">О прочей информации</h5>
|
||||
<p style="color: white;">Также здесь представлен (или будет представлен) мой личный блог, а также, блог, касающийся моих проектов или проектов моей команды.</p>
|
||||
<button onclick="fl.go('/blog');" type="button" class="btn btn-outline-light">Мой блог</button>`
|
||||
];
|
||||
function setAltMenuPage(pageNumber) {
|
||||
altMenuSelectedPage = pageNumber;
|
||||
if (altMenuSelectedPage <= 0) {
|
||||
altMenuSelectedPage = 3;
|
||||
}
|
||||
else if (altMenuSelectedPage > 3) {
|
||||
altMenuSelectedPage = 1;
|
||||
}
|
||||
document.getElementsByTagName('body')[0].style.backgroundImage = `url("/assets/hello/m/${altMenuSelectedPage}.png")`;
|
||||
document.getElementById('alt-carousel-viewer').innerHTML = altPages[altMenuSelectedPage - 1];
|
||||
};
|
||||
/* Альтернативное главное меню */
|
||||
setTimeout(async () => {
|
||||
fl.go(window.location.pathname + location.search)
|
||||
}, 50);
|
||||
|
||||
let isMobile = window.screen.availWidth / window.screen.availHeight <= 1.45;
|
||||
|
||||
function goFromMobileWarning () {
|
||||
const currentURL = new URL(location.href);
|
||||
if (!document.cookie.includes('warning_showed=true')) document.cookie += 'warning_showed=true;';
|
||||
fl.go(currentURL.searchParams.get("go"));
|
||||
}
|
||||
|
||||
if (isMobile && !document.cookie.includes('warning_showed=true')) {
|
||||
// Я это уберу как только буду уверен, что на мобильной версии нет никаких проблем
|
||||
fl.go('/mobile-warning?go=' + new URLSearchParams(location.pathname + location.search).toString().slice(0, -1));
|
||||
}
|
||||
|
||||
fl.bindLoad('/blog', () => {
|
||||
blog();
|
||||
});
|
||||
fl.bindLoad('/password-manager', () => {
|
||||
passwordManager();
|
||||
});
|
||||
|
||||
fl.bindLoad('/main-mobile', () => {
|
||||
document.getElementById('alt-main-prev').onclick = () => setAltMenuPage(altMenuSelectedPage - 1);
|
||||
document.getElementById('alt-main-next').onclick = () => setAltMenuPage(altMenuSelectedPage + 1);
|
||||
});
|
||||
|
||||
fl.bindLoad('/mobile-warning', () => {
|
||||
document.getElementById('mobile-warning-go').onclick = () => goFromMobileWarning();
|
||||
});
|
||||
|
||||
let mainMenuErrorHandled = false;
|
||||
|
||||
setInterval(async () => {
|
||||
// setTimeout(async () => {
|
||||
const navbarHeight = +(document.getElementById("navbar-main")?.offsetHeight);
|
||||
if (!mainMenuErrorHandled && location.pathname == "/" && document.getElementById('main_img1')?.src) {
|
||||
document.getElementById('main_img1').src = window.screen.availWidth / window.screen.availHeight > 1.45 ? "/assets/hello/1.png" : "/assets/hello/m/1.png";
|
||||
document.getElementById('main_img2').src = window.screen.availWidth / window.screen.availHeight > 1.45 ? "/assets/hello/2.png" : "/assets/hello/m/2.png";
|
||||
document.getElementById('main_img3').src = window.screen.availWidth / window.screen.availHeight > 1.45 ? "/assets/hello/3.png" : "/assets/hello/m/3.png";
|
||||
}
|
||||
const selectedCSS = Object.entries(document.styleSheets).filter(([key, cssFileObject]) => cssFileObject.href == `${location.origin}/assets/main.css`)[0][1];
|
||||
Object.entries(selectedCSS.rules).filter(([key, rule]) => rule.selectorText == '.carousel > .carousel-inner > .carousel-item > img')[0][1].style.height = `calc(100vh - ${navbarHeight}px)`
|
||||
|
||||
const currHtml = document.getElementById('alt-carousel-viewer')?.innerHTML;
|
||||
mainMenuErrorHandled = currHtml?.trim() == altPages[altMenuSelectedPage - 1]?.trim();
|
||||
|
||||
if (!mainMenuErrorHandled && window.screen.availWidth < 768 && location.pathname == "/") { // Обработка ошибки вёрстки на главной странице
|
||||
mainMenuErrorHandled = true;
|
||||
setTimeout(async () => {
|
||||
fl.goJust('/main-mobile', false);
|
||||
document.getElementsByTagName('body')[0].style.backgroundImage = 'url("/assets/hello/m/1.png")';
|
||||
}, 150);
|
||||
}
|
||||
else if (mainMenuErrorHandled && window.screen.availWidth >= 768 && location.pathname == "/") { // Вернуть нормальную версию вёрстки
|
||||
mainMenuErrorHandled = false;
|
||||
document.getElementsByTagName('body')[0].style.backgroundImage = '';
|
||||
fl.goJust('/', false);
|
||||
}
|
||||
else if (location.pathname !== "/") {
|
||||
mainMenuErrorHandled = false;
|
||||
document.getElementsByTagName('body')[0].style.backgroundImage = '';
|
||||
}
|
||||
}, 1);
|
@ -1,122 +1,130 @@
|
||||
const blogpostsUrl = "/blog/posts.json";
|
||||
|
||||
function bindImageView (id, url) {
|
||||
document.getElementById(id).onclick = () => {
|
||||
const imageModal = new bootstrap.Modal(document.getElementById('imageModal'), {});
|
||||
imageModal.show();
|
||||
document.getElementById('image-viewer-url').src = url;
|
||||
};
|
||||
}
|
||||
|
||||
function testBlock () {
|
||||
return; // uncomment this at realese
|
||||
bindImageView('blog-img-0:0', 'https://warhammerart.com/wp-content/uploads/2021/08/Adeptus-Mechanicus.jpg');
|
||||
bindImageView('blog-img-0:1', 'https://warzonestudio.com/image/catalog/blog/Admech-review/Admech-codex-review-02.jpg');
|
||||
bindImageView('blog-img-0:2', 'https://i.pinimg.com/originals/7a/5c/0a/7a5c0a3a91db6011a49781c4016124a2.jpg');
|
||||
}
|
||||
|
||||
function dateFormater (value) {
|
||||
value = value.toString();
|
||||
if (value.length === 1) value = '0' + value;
|
||||
return value;
|
||||
}
|
||||
|
||||
function imagesDisplay (item, index) {
|
||||
const items = item.attachments.images.map((imageUrl, imageId) => {
|
||||
setTimeout(() => bindImageView(`blog-img-${index}:${imageId}`, imageUrl), 0);
|
||||
return `<div class="carousel-item blog-post-image${imageId === 0 ? ' active' : ''}" id="blog-img-${index}:${imageId}"><img src=${JSON.stringify(imageUrl)} class="d-block w-100" alt="..."></div>`
|
||||
});
|
||||
const buttons = items.map((_, id) => `<button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="${id}"${id === 0 ? ' class="active" aria-current="true"' : ''} aria-label="Slide ${id}"></button>`);
|
||||
return { items, buttons };
|
||||
}
|
||||
|
||||
function generateItem (item, index) {
|
||||
const date = new Date(item.date * 1000);
|
||||
const images = item.attachments.images.length === 0 ? {
|
||||
buttons : [],
|
||||
items : []
|
||||
} : imagesDisplay(item, index);
|
||||
// console.log(date);
|
||||
|
||||
const page = `<div class="blog-post-card" id="post-${index}" style="margin-bottom: 1.5%;">
|
||||
<center>
|
||||
<h3 style="padding-top: 1.5%;">${item.title}</h3>
|
||||
<small style="color: rgba(255,255,255,0.5); padding-bottom: 0.5%;">
|
||||
<div>Опубликовано: ${dateFormater(date.getDate())}.${dateFormater(date.getMonth())}.${date.getFullYear()} в ${date.getHours()}:${dateFormater(date.getMinutes())}</div>
|
||||
<div id="posted-by-${index}" hidden>Через telegram</div>
|
||||
</small>
|
||||
</center>
|
||||
<p style="padding: 2%;">${item.data.replace(/\n/g, "<br/>")}</p>
|
||||
<!-- Изображения -->
|
||||
<center><div id="carouselExampleIndicators" class="carousel slide blog-post-image-carousel" data-bs-ride="carousel" id="post-images-${index}"${item.attachments.images.length === 0 ? ' hidden' : ''}>
|
||||
<div class="carousel-indicators"${item.attachments.images.length === 1 ? ' hidden' : ''}>
|
||||
${images.buttons.join('\n')}
|
||||
</div>
|
||||
<div class="carousel-inner">
|
||||
${images.items.join('\n')}
|
||||
</div>
|
||||
<button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide="prev"${item.attachments.images.length === 1 ? ' hidden' : ''}>
|
||||
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
|
||||
<span class="visually-hidden">Предыдущий</span>
|
||||
</button>
|
||||
<button class="carousel-control-next" type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide="next"${item.attachments.images.length === 1 ? ' hidden' : ''}>
|
||||
<span class="carousel-control-next-icon" aria-hidden="true"></span>
|
||||
<span class="visually-hidden">Следующий</span>
|
||||
</button>
|
||||
</div></center>
|
||||
<!-- Файлы -->
|
||||
<div class="accordion text-dark bg-dark" id="accordionExample" style="margin-left: 2.5%; margin-right: 2.5%; margin-top: 2.5%;" hidden>
|
||||
<div class="accordion-item">
|
||||
<h5 class="accordion-header" id="headingOne">
|
||||
<button class="accordion-button bg-dark text-light" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
|
||||
Файлы
|
||||
</button>
|
||||
</h5>
|
||||
<div id="collapseOne" class="accordion-collapse bg-dark text-light collapse show" aria-labelledby="headingOne" data-bs-parent="#accordionExample">
|
||||
<div class="accordion-body">
|
||||
<!-- <strong>Это тело аккордеона первого элемента.</strong> По умолчанию оно скрыто, пока плагин сворачивания не добавит соответствующие классы, которые мы используем для стилизации каждого элемента. Эти классы управляют общим внешним видом, а также отображением и скрытием с помощью переходов CSS. Вы можете изменить все это с помощью собственного CSS или переопределить наши переменные по умолчанию. Также стоит отметить, что практически любой HTML может быть помещен в <code>.accordion-body</code>, хотя переход ограничивает переполнение. -->
|
||||
<p><a href="https://github.com/student-manager/student-manager/releases/download/1.1.1/windows.x64.Student.manager.portabel.zip">windows.x64.Student.manager.portabel.zip (111 Mb)</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Рекации -->
|
||||
<button type="button" class="btn btn-outline-success" style="margin-left: 2.5%; margin-top: 1.5%; margin-bottom: 1.5%;" onclick="alert('Функция в разработке!');">Нравится (0)</button>
|
||||
<button type="button" class="btn btn-outline-secondary" style="margin-left: 0.5%; margin-top: 1.5%; margin-bottom: 1.5%;" onclick="alert('Функция в разработке!');">Комментарии (0)</button>
|
||||
</div>`;
|
||||
|
||||
return page;
|
||||
}
|
||||
|
||||
export function blog () {
|
||||
//testBlock();
|
||||
const xhr = new XMLHttpRequest();
|
||||
xhr.open('GET', blogpostsUrl, true);
|
||||
|
||||
xhr.onerror = () => {
|
||||
document.getElementById('blog-posts').innerHTML = `<center><img src="/assets/404.png" class="sys-win-img"></img><h2>Упс..</h2><p>Во время работы произошла ошибка, повторите запрос позже</p></center>`;
|
||||
}
|
||||
|
||||
xhr.onload = () => {
|
||||
try {
|
||||
if (xhr.status === 200) {
|
||||
// console.log(xhr.response);
|
||||
const data = JSON.parse(xhr.response);
|
||||
// console.log(data);
|
||||
document.getElementById('blog-posts').innerHTML = '<hr/>';
|
||||
data.posts.sort((a, b) => b.date - a.date).forEach((item, index) => {
|
||||
document.getElementById('blog-posts').innerHTML += generateItem(item, index);
|
||||
});
|
||||
}
|
||||
else {
|
||||
xhr.onerror();
|
||||
}
|
||||
}
|
||||
catch (err) {
|
||||
console.log(err);
|
||||
return xhr.onerror();
|
||||
}
|
||||
};
|
||||
|
||||
xhr.send();
|
||||
}
|
||||
const blogpostsUrl = "/blog/posts.json";
|
||||
|
||||
function bindImageView (id, url) {
|
||||
document.getElementById(id).onclick = () => {
|
||||
const imageModal = new bootstrap.Modal(document.getElementById('imageModal'), {});
|
||||
imageModal.show();
|
||||
document.getElementById('image-viewer-url').src = url;
|
||||
};
|
||||
}
|
||||
|
||||
function testBlock () {
|
||||
return; // uncomment this at realese
|
||||
bindImageView('blog-img-0:0', 'https://warhammerart.com/wp-content/uploads/2021/08/Adeptus-Mechanicus.jpg');
|
||||
bindImageView('blog-img-0:1', 'https://warzonestudio.com/image/catalog/blog/Admech-review/Admech-codex-review-02.jpg');
|
||||
bindImageView('blog-img-0:2', 'https://i.pinimg.com/originals/7a/5c/0a/7a5c0a3a91db6011a49781c4016124a2.jpg');
|
||||
}
|
||||
|
||||
function dateFormater (value, isMonth = false) {
|
||||
if (isMonth) {
|
||||
return [
|
||||
"01", "02", "03",
|
||||
"04", "05", "06",
|
||||
"07", "08", "09",
|
||||
"10", "11", "12"
|
||||
][+value];
|
||||
}
|
||||
value = value.toString();
|
||||
if (value.length === 1) value = '0' + value;
|
||||
return value;
|
||||
}
|
||||
|
||||
function imagesDisplay (item, index) {
|
||||
const items = item.attachments.images.map((imageUrl, imageId) => {
|
||||
setTimeout(() => bindImageView(`blog-img-${index}:${imageId}`, imageUrl), 0);
|
||||
return `<div class="carousel-item blog-post-image${imageId === 0 ? ' active' : ''}" id="blog-img-${index}:${imageId}"><img src=${JSON.stringify(imageUrl)} class="d-block w-100" alt="..."></div>`
|
||||
});
|
||||
const buttons = items.map((_, id) => `<button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="${id}"${id === 0 ? ' class="active" aria-current="true"' : ''} aria-label="Slide ${id}"></button>`);
|
||||
return { items, buttons };
|
||||
}
|
||||
|
||||
function generateItem (item, index) {
|
||||
const date = new Date(item.date * 1000);
|
||||
const images = item.attachments.images.length === 0 ? {
|
||||
buttons : [],
|
||||
items : []
|
||||
} : imagesDisplay(item, index);
|
||||
// console.log(date);
|
||||
|
||||
const page = ` <div class="blog-post-card" id="post-${index}" style="margin-bottom: 1.5%;">
|
||||
<center>
|
||||
<h3 style="padding-top: 1.5%;">${item.title}</h3>
|
||||
<small style="color: rgba(255,255,255,0.5); padding-bottom: 0.5%;">
|
||||
<div>Опубликовано: ${dateFormater(date.getDate())}.${dateFormater(date.getMonth(), true)}.${date.getFullYear()} в ${date.getHours()}:${dateFormater(date.getMinutes())}</div>
|
||||
<div id="posted-by-${index}" hidden>Через telegram</div>
|
||||
</small>
|
||||
</center>
|
||||
<p style="padding: 2%;">${item.data.replace(/\n/g, "<br/>")}</p>
|
||||
<!-- Изображения -->
|
||||
<center><div id="carouselExampleIndicators" class="carousel slide blog-post-image-carousel" data-bs-ride="carousel" id="post-images-${index}"${item.attachments.images.length === 0 ? ' hidden' : ''}>
|
||||
<div class="carousel-indicators"${item.attachments.images.length === 1 ? ' hidden' : ''}>
|
||||
${images.buttons.join('\n')}
|
||||
</div>
|
||||
<div class="carousel-inner">
|
||||
${images.items.join('\n')}
|
||||
</div>
|
||||
<button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide="prev"${item.attachments.images.length === 1 ? ' hidden' : ''}>
|
||||
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
|
||||
<span class="visually-hidden">Предыдущий</span>
|
||||
</button>
|
||||
<button class="carousel-control-next" type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide="next"${item.attachments.images.length === 1 ? ' hidden' : ''}>
|
||||
<span class="carousel-control-next-icon" aria-hidden="true"></span>
|
||||
<span class="visually-hidden">Следующий</span>
|
||||
</button>
|
||||
</div></center>
|
||||
<!-- Файлы -->
|
||||
<div class="accordion text-dark bg-dark" id="accordionExample" style="margin-left: 2.5%; margin-right: 2.5%; margin-top: 2.5%;" hidden>
|
||||
<div class="accordion-item">
|
||||
<h5 class="accordion-header" id="headingOne">
|
||||
<button class="accordion-button bg-dark text-light" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
|
||||
Файлы
|
||||
</button>
|
||||
</h5>
|
||||
<div id="collapseOne" class="accordion-collapse bg-dark text-light collapse show" aria-labelledby="headingOne" data-bs-parent="#accordionExample">
|
||||
<div class="accordion-body">
|
||||
<!-- <strong>Это тело аккордеона первого элемента.</strong> По умолчанию оно скрыто, пока плагин сворачивания не добавит соответствующие классы, которые мы используем для стилизации каждого элемента. Эти классы управляют общим внешним видом, а также отображением и скрытием с помощью переходов CSS. Вы можете изменить все это с помощью собственного CSS или переопределить наши переменные по умолчанию. Также стоит отметить, что практически любой HTML может быть помещен в <code>.accordion-body</code>, хотя переход ограничивает переполнение. -->
|
||||
<p><a href="https://github.com/student-manager/student-manager/releases/download/1.1.1/windows.x64.Student.manager.portabel.zip">windows.x64.Student.manager.portabel.zip (111 Mb)</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Рекации -->
|
||||
<button type="button" class="btn btn-outline-success" style="margin-left: 2.5%; margin-top: 1.5%; margin-bottom: 1.5%;" onclick="alert('Функция в разработке!');">Нравится (0)</button>
|
||||
<button type="button" class="btn btn-outline-secondary" style="margin-left: 0.5%; margin-top: 1.5%; margin-bottom: 1.5%;" onclick="alert('Функция в разработке!');">Комментарии (0)</button>
|
||||
</div>`;
|
||||
|
||||
return page;
|
||||
}
|
||||
|
||||
export function blog () {
|
||||
//testBlock();
|
||||
const xhr = new XMLHttpRequest();
|
||||
xhr.open('GET', blogpostsUrl, true);
|
||||
|
||||
xhr.onerror = () => {
|
||||
document.getElementById('blog-posts').innerHTML = `<center><img src="/assets/404.png" class="sys-win-img"></img><h2>Упс..</h2><p>Во время работы произошла ошибка, повторите запрос позже</p></center>`;
|
||||
}
|
||||
|
||||
xhr.onload = () => {
|
||||
try {
|
||||
if (xhr.status === 200) {
|
||||
// console.log(xhr.response);
|
||||
const data = JSON.parse(xhr.response);
|
||||
// console.log(data);
|
||||
document.getElementById('blog-posts').innerHTML = '<hr/>';
|
||||
data.posts.sort((a, b) => b.date - a.date).forEach((item, index) => {
|
||||
document.getElementById('blog-posts').innerHTML += generateItem(item, index);
|
||||
});
|
||||
}
|
||||
else {
|
||||
xhr.onerror();
|
||||
}
|
||||
}
|
||||
catch (err) {
|
||||
console.log(err);
|
||||
return xhr.onerror();
|
||||
}
|
||||
};
|
||||
|
||||
xhr.send();
|
||||
}
|
||||
|
@ -1,18 +1,18 @@
|
||||
import {} from "/assets/sha1.js";
|
||||
import { hexToBase64 } from "/assets/encode-converter.js";
|
||||
import { copyTextToClipboard } from "/assets/clipboard.js";
|
||||
|
||||
function generatePassword () {
|
||||
const generatedPasswordElement = document.getElementById('generated-password');
|
||||
const keyword = document.getElementById('keyword').value;
|
||||
const service = document.getElementById('service').value.toLowerCase();;
|
||||
const login = document.getElementById('login').value.toLowerCase();;
|
||||
|
||||
const generatedPassword = hexToBase64(sha1(`${keyword}::${service}::${login}`)) + "#";
|
||||
generatedPasswordElement.value = generatedPassword;
|
||||
}
|
||||
|
||||
export function passwordManager () {
|
||||
document.getElementById('generate-password').onclick = generatePassword;
|
||||
document.getElementById('copy-password').onclick = () => copyTextToClipboard(document.getElementById('generated-password').value);
|
||||
import {} from "/assets/sha1.js";
|
||||
import { hexToBase64 } from "/assets/encode-converter.js";
|
||||
import { copyTextToClipboard } from "/assets/clipboard.js";
|
||||
|
||||
function generatePassword () {
|
||||
const generatedPasswordElement = document.getElementById('generated-password');
|
||||
const keyword = document.getElementById('keyword').value;
|
||||
const service = document.getElementById('service').value.toLowerCase();;
|
||||
const login = document.getElementById('login').value.toLowerCase();;
|
||||
|
||||
const generatedPassword = hexToBase64(sha1(`${keyword}::${service}::${login}`)) + "#";
|
||||
generatedPasswordElement.value = generatedPassword;
|
||||
}
|
||||
|
||||
export function passwordManager () {
|
||||
document.getElementById('generate-password').onclick = generatePassword;
|
||||
document.getElementById('copy-password').onclick = () => copyTextToClipboard(document.getElementById('generated-password').value);
|
||||
}
|
BIN
assets/posts/photo_2024-05-28_21-15-13.jpg
Normal file
BIN
assets/posts/photo_2024-05-28_21-15-13.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 109 KiB |
976
assets/sha1.js
976
assets/sha1.js
@ -1,489 +1,489 @@
|
||||
/*
|
||||
* [js-sha1]{@link https://github.com/emn178/js-sha1}
|
||||
*
|
||||
* @version 0.6.0
|
||||
* @author Chen, Yi-Cyuan [emn178@gmail.com]
|
||||
* @copyright Chen, Yi-Cyuan 2014-2017
|
||||
* @license MIT
|
||||
*/
|
||||
!(function () {
|
||||
"use strict";
|
||||
function t(t) {
|
||||
t
|
||||
? ((f[0] =
|
||||
f[16] =
|
||||
f[1] =
|
||||
f[2] =
|
||||
f[3] =
|
||||
f[4] =
|
||||
f[5] =
|
||||
f[6] =
|
||||
f[7] =
|
||||
f[8] =
|
||||
f[9] =
|
||||
f[10] =
|
||||
f[11] =
|
||||
f[12] =
|
||||
f[13] =
|
||||
f[14] =
|
||||
f[15] =
|
||||
0),
|
||||
(this.blocks = f))
|
||||
: (this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
|
||||
(this.h0 = 1732584193),
|
||||
(this.h1 = 4023233417),
|
||||
(this.h2 = 2562383102),
|
||||
(this.h3 = 271733878),
|
||||
(this.h4 = 3285377520),
|
||||
(this.block = this.start = this.bytes = this.hBytes = 0),
|
||||
(this.finalized = this.hashed = !1),
|
||||
(this.first = !0);
|
||||
}
|
||||
var h = "object" == typeof window ? window : {},
|
||||
s =
|
||||
!h.JS_SHA1_NO_NODE_JS &&
|
||||
"object" == typeof process &&
|
||||
process.versions &&
|
||||
process.versions.node;
|
||||
s && (h = global);
|
||||
var i =
|
||||
!h.JS_SHA1_NO_COMMON_JS && "object" == typeof module && module.exports,
|
||||
e = "function" == typeof define && define.amd,
|
||||
r = "0123456789abcdef".split(""),
|
||||
o = [-2147483648, 8388608, 32768, 128],
|
||||
n = [24, 16, 8, 0],
|
||||
a = ["hex", "array", "digest", "arrayBuffer"],
|
||||
f = [],
|
||||
u = function (h) {
|
||||
return function (s) {
|
||||
return new t(!0).update(s)[h]();
|
||||
};
|
||||
},
|
||||
c = function () {
|
||||
var h = u("hex");
|
||||
s && (h = p(h)),
|
||||
(h.create = function () {
|
||||
return new t();
|
||||
}),
|
||||
(h.update = function (t) {
|
||||
return h.create().update(t);
|
||||
});
|
||||
for (var i = 0; i < a.length; ++i) {
|
||||
var e = a[i];
|
||||
h[e] = u(e);
|
||||
}
|
||||
return h;
|
||||
},
|
||||
p = function (t) {
|
||||
var h = eval("require('crypto')"),
|
||||
s = eval("require('buffer').Buffer"),
|
||||
i = function (i) {
|
||||
if ("string" == typeof i)
|
||||
return h.createHash("sha1").update(i, "utf8").digest("hex");
|
||||
if (i.constructor === ArrayBuffer) i = new Uint8Array(i);
|
||||
else if (void 0 === i.length) return t(i);
|
||||
return h.createHash("sha1").update(new s(i)).digest("hex");
|
||||
};
|
||||
return i;
|
||||
};
|
||||
(t.prototype.update = function (t) {
|
||||
if (!this.finalized) {
|
||||
var s = "string" != typeof t;
|
||||
s && t.constructor === h.ArrayBuffer && (t = new Uint8Array(t));
|
||||
for (var i, e, r = 0, o = t.length || 0, a = this.blocks; r < o; ) {
|
||||
if (
|
||||
(this.hashed &&
|
||||
((this.hashed = !1),
|
||||
(a[0] = this.block),
|
||||
(a[16] =
|
||||
a[1] =
|
||||
a[2] =
|
||||
a[3] =
|
||||
a[4] =
|
||||
a[5] =
|
||||
a[6] =
|
||||
a[7] =
|
||||
a[8] =
|
||||
a[9] =
|
||||
a[10] =
|
||||
a[11] =
|
||||
a[12] =
|
||||
a[13] =
|
||||
a[14] =
|
||||
a[15] =
|
||||
0)),
|
||||
s)
|
||||
)
|
||||
for (e = this.start; r < o && e < 64; ++r)
|
||||
a[e >> 2] |= t[r] << n[3 & e++];
|
||||
else
|
||||
for (e = this.start; r < o && e < 64; ++r)
|
||||
(i = t.charCodeAt(r)) < 128
|
||||
? (a[e >> 2] |= i << n[3 & e++])
|
||||
: i < 2048
|
||||
? ((a[e >> 2] |= (192 | (i >> 6)) << n[3 & e++]),
|
||||
(a[e >> 2] |= (128 | (63 & i)) << n[3 & e++]))
|
||||
: i < 55296 || i >= 57344
|
||||
? ((a[e >> 2] |= (224 | (i >> 12)) << n[3 & e++]),
|
||||
(a[e >> 2] |= (128 | ((i >> 6) & 63)) << n[3 & e++]),
|
||||
(a[e >> 2] |= (128 | (63 & i)) << n[3 & e++]))
|
||||
: ((i =
|
||||
65536 + (((1023 & i) << 10) | (1023 & t.charCodeAt(++r)))),
|
||||
(a[e >> 2] |= (240 | (i >> 18)) << n[3 & e++]),
|
||||
(a[e >> 2] |= (128 | ((i >> 12) & 63)) << n[3 & e++]),
|
||||
(a[e >> 2] |= (128 | ((i >> 6) & 63)) << n[3 & e++]),
|
||||
(a[e >> 2] |= (128 | (63 & i)) << n[3 & e++]));
|
||||
(this.lastByteIndex = e),
|
||||
(this.bytes += e - this.start),
|
||||
e >= 64
|
||||
? ((this.block = a[16]),
|
||||
(this.start = e - 64),
|
||||
this.hash(),
|
||||
(this.hashed = !0))
|
||||
: (this.start = e);
|
||||
}
|
||||
return (
|
||||
this.bytes > 4294967295 &&
|
||||
((this.hBytes += (this.bytes / 4294967296) << 0),
|
||||
(this.bytes = this.bytes % 4294967296)),
|
||||
this
|
||||
);
|
||||
}
|
||||
}),
|
||||
(t.prototype.finalize = function () {
|
||||
if (!this.finalized) {
|
||||
this.finalized = !0;
|
||||
var t = this.blocks,
|
||||
h = this.lastByteIndex;
|
||||
(t[16] = this.block),
|
||||
(t[h >> 2] |= o[3 & h]),
|
||||
(this.block = t[16]),
|
||||
h >= 56 &&
|
||||
(this.hashed || this.hash(),
|
||||
(t[0] = this.block),
|
||||
(t[16] =
|
||||
t[1] =
|
||||
t[2] =
|
||||
t[3] =
|
||||
t[4] =
|
||||
t[5] =
|
||||
t[6] =
|
||||
t[7] =
|
||||
t[8] =
|
||||
t[9] =
|
||||
t[10] =
|
||||
t[11] =
|
||||
t[12] =
|
||||
t[13] =
|
||||
t[14] =
|
||||
t[15] =
|
||||
0)),
|
||||
(t[14] = (this.hBytes << 3) | (this.bytes >>> 29)),
|
||||
(t[15] = this.bytes << 3),
|
||||
this.hash();
|
||||
}
|
||||
}),
|
||||
(t.prototype.hash = function () {
|
||||
var t,
|
||||
h,
|
||||
s = this.h0,
|
||||
i = this.h1,
|
||||
e = this.h2,
|
||||
r = this.h3,
|
||||
o = this.h4,
|
||||
n = this.blocks;
|
||||
for (t = 16; t < 80; ++t)
|
||||
(h = n[t - 3] ^ n[t - 8] ^ n[t - 14] ^ n[t - 16]),
|
||||
(n[t] = (h << 1) | (h >>> 31));
|
||||
for (t = 0; t < 20; t += 5)
|
||||
(s =
|
||||
((h =
|
||||
((i =
|
||||
((h =
|
||||
((e =
|
||||
((h =
|
||||
((r =
|
||||
((h =
|
||||
((o =
|
||||
((h = (s << 5) | (s >>> 27)) +
|
||||
((i & e) | (~i & r)) +
|
||||
o +
|
||||
1518500249 +
|
||||
n[t]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(o >>> 27)) +
|
||||
((s & (i = (i << 30) | (i >>> 2))) | (~s & e)) +
|
||||
r +
|
||||
1518500249 +
|
||||
n[t + 1]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(r >>> 27)) +
|
||||
((o & (s = (s << 30) | (s >>> 2))) | (~o & i)) +
|
||||
e +
|
||||
1518500249 +
|
||||
n[t + 2]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(e >>> 27)) +
|
||||
((r & (o = (o << 30) | (o >>> 2))) | (~r & s)) +
|
||||
i +
|
||||
1518500249 +
|
||||
n[t + 3]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(i >>> 27)) +
|
||||
((e & (r = (r << 30) | (r >>> 2))) | (~e & o)) +
|
||||
s +
|
||||
1518500249 +
|
||||
n[t + 4]) <<
|
||||
0),
|
||||
(e = (e << 30) | (e >>> 2));
|
||||
for (; t < 40; t += 5)
|
||||
(s =
|
||||
((h =
|
||||
((i =
|
||||
((h =
|
||||
((e =
|
||||
((h =
|
||||
((r =
|
||||
((h =
|
||||
((o =
|
||||
((h = (s << 5) | (s >>> 27)) +
|
||||
(i ^ e ^ r) +
|
||||
o +
|
||||
1859775393 +
|
||||
n[t]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(o >>> 27)) +
|
||||
(s ^ (i = (i << 30) | (i >>> 2)) ^ e) +
|
||||
r +
|
||||
1859775393 +
|
||||
n[t + 1]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(r >>> 27)) +
|
||||
(o ^ (s = (s << 30) | (s >>> 2)) ^ i) +
|
||||
e +
|
||||
1859775393 +
|
||||
n[t + 2]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(e >>> 27)) +
|
||||
(r ^ (o = (o << 30) | (o >>> 2)) ^ s) +
|
||||
i +
|
||||
1859775393 +
|
||||
n[t + 3]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(i >>> 27)) +
|
||||
(e ^ (r = (r << 30) | (r >>> 2)) ^ o) +
|
||||
s +
|
||||
1859775393 +
|
||||
n[t + 4]) <<
|
||||
0),
|
||||
(e = (e << 30) | (e >>> 2));
|
||||
for (; t < 60; t += 5)
|
||||
(s =
|
||||
((h =
|
||||
((i =
|
||||
((h =
|
||||
((e =
|
||||
((h =
|
||||
((r =
|
||||
((h =
|
||||
((o =
|
||||
((h = (s << 5) | (s >>> 27)) +
|
||||
((i & e) | (i & r) | (e & r)) +
|
||||
o -
|
||||
1894007588 +
|
||||
n[t]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(o >>> 27)) +
|
||||
((s & (i = (i << 30) | (i >>> 2))) |
|
||||
(s & e) |
|
||||
(i & e)) +
|
||||
r -
|
||||
1894007588 +
|
||||
n[t + 1]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(r >>> 27)) +
|
||||
((o & (s = (s << 30) | (s >>> 2))) | (o & i) | (s & i)) +
|
||||
e -
|
||||
1894007588 +
|
||||
n[t + 2]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(e >>> 27)) +
|
||||
((r & (o = (o << 30) | (o >>> 2))) | (r & s) | (o & s)) +
|
||||
i -
|
||||
1894007588 +
|
||||
n[t + 3]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(i >>> 27)) +
|
||||
((e & (r = (r << 30) | (r >>> 2))) | (e & o) | (r & o)) +
|
||||
s -
|
||||
1894007588 +
|
||||
n[t + 4]) <<
|
||||
0),
|
||||
(e = (e << 30) | (e >>> 2));
|
||||
for (; t < 80; t += 5)
|
||||
(s =
|
||||
((h =
|
||||
((i =
|
||||
((h =
|
||||
((e =
|
||||
((h =
|
||||
((r =
|
||||
((h =
|
||||
((o =
|
||||
((h = (s << 5) | (s >>> 27)) +
|
||||
(i ^ e ^ r) +
|
||||
o -
|
||||
899497514 +
|
||||
n[t]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(o >>> 27)) +
|
||||
(s ^ (i = (i << 30) | (i >>> 2)) ^ e) +
|
||||
r -
|
||||
899497514 +
|
||||
n[t + 1]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(r >>> 27)) +
|
||||
(o ^ (s = (s << 30) | (s >>> 2)) ^ i) +
|
||||
e -
|
||||
899497514 +
|
||||
n[t + 2]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(e >>> 27)) +
|
||||
(r ^ (o = (o << 30) | (o >>> 2)) ^ s) +
|
||||
i -
|
||||
899497514 +
|
||||
n[t + 3]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(i >>> 27)) +
|
||||
(e ^ (r = (r << 30) | (r >>> 2)) ^ o) +
|
||||
s -
|
||||
899497514 +
|
||||
n[t + 4]) <<
|
||||
0),
|
||||
(e = (e << 30) | (e >>> 2));
|
||||
(this.h0 = (this.h0 + s) << 0),
|
||||
(this.h1 = (this.h1 + i) << 0),
|
||||
(this.h2 = (this.h2 + e) << 0),
|
||||
(this.h3 = (this.h3 + r) << 0),
|
||||
(this.h4 = (this.h4 + o) << 0);
|
||||
}),
|
||||
(t.prototype.hex = function () {
|
||||
this.finalize();
|
||||
var t = this.h0,
|
||||
h = this.h1,
|
||||
s = this.h2,
|
||||
i = this.h3,
|
||||
e = this.h4;
|
||||
return (
|
||||
r[(t >> 28) & 15] +
|
||||
r[(t >> 24) & 15] +
|
||||
r[(t >> 20) & 15] +
|
||||
r[(t >> 16) & 15] +
|
||||
r[(t >> 12) & 15] +
|
||||
r[(t >> 8) & 15] +
|
||||
r[(t >> 4) & 15] +
|
||||
r[15 & t] +
|
||||
r[(h >> 28) & 15] +
|
||||
r[(h >> 24) & 15] +
|
||||
r[(h >> 20) & 15] +
|
||||
r[(h >> 16) & 15] +
|
||||
r[(h >> 12) & 15] +
|
||||
r[(h >> 8) & 15] +
|
||||
r[(h >> 4) & 15] +
|
||||
r[15 & h] +
|
||||
r[(s >> 28) & 15] +
|
||||
r[(s >> 24) & 15] +
|
||||
r[(s >> 20) & 15] +
|
||||
r[(s >> 16) & 15] +
|
||||
r[(s >> 12) & 15] +
|
||||
r[(s >> 8) & 15] +
|
||||
r[(s >> 4) & 15] +
|
||||
r[15 & s] +
|
||||
r[(i >> 28) & 15] +
|
||||
r[(i >> 24) & 15] +
|
||||
r[(i >> 20) & 15] +
|
||||
r[(i >> 16) & 15] +
|
||||
r[(i >> 12) & 15] +
|
||||
r[(i >> 8) & 15] +
|
||||
r[(i >> 4) & 15] +
|
||||
r[15 & i] +
|
||||
r[(e >> 28) & 15] +
|
||||
r[(e >> 24) & 15] +
|
||||
r[(e >> 20) & 15] +
|
||||
r[(e >> 16) & 15] +
|
||||
r[(e >> 12) & 15] +
|
||||
r[(e >> 8) & 15] +
|
||||
r[(e >> 4) & 15] +
|
||||
r[15 & e]
|
||||
);
|
||||
}),
|
||||
(t.prototype.toString = t.prototype.hex),
|
||||
(t.prototype.digest = function () {
|
||||
this.finalize();
|
||||
var t = this.h0,
|
||||
h = this.h1,
|
||||
s = this.h2,
|
||||
i = this.h3,
|
||||
e = this.h4;
|
||||
return [
|
||||
(t >> 24) & 255,
|
||||
(t >> 16) & 255,
|
||||
(t >> 8) & 255,
|
||||
255 & t,
|
||||
(h >> 24) & 255,
|
||||
(h >> 16) & 255,
|
||||
(h >> 8) & 255,
|
||||
255 & h,
|
||||
(s >> 24) & 255,
|
||||
(s >> 16) & 255,
|
||||
(s >> 8) & 255,
|
||||
255 & s,
|
||||
(i >> 24) & 255,
|
||||
(i >> 16) & 255,
|
||||
(i >> 8) & 255,
|
||||
255 & i,
|
||||
(e >> 24) & 255,
|
||||
(e >> 16) & 255,
|
||||
(e >> 8) & 255,
|
||||
255 & e,
|
||||
];
|
||||
}),
|
||||
(t.prototype.array = t.prototype.digest),
|
||||
(t.prototype.arrayBuffer = function () {
|
||||
this.finalize();
|
||||
var t = new ArrayBuffer(20),
|
||||
h = new DataView(t);
|
||||
return (
|
||||
h.setUint32(0, this.h0),
|
||||
h.setUint32(4, this.h1),
|
||||
h.setUint32(8, this.h2),
|
||||
h.setUint32(12, this.h3),
|
||||
h.setUint32(16, this.h4),
|
||||
t
|
||||
);
|
||||
});
|
||||
var y = c();
|
||||
i
|
||||
? (module.exports = y)
|
||||
: ((h.sha1 = y),
|
||||
e &&
|
||||
define(function () {
|
||||
return y;
|
||||
}));
|
||||
/*
|
||||
* [js-sha1]{@link https://github.com/emn178/js-sha1}
|
||||
*
|
||||
* @version 0.6.0
|
||||
* @author Chen, Yi-Cyuan [emn178@gmail.com]
|
||||
* @copyright Chen, Yi-Cyuan 2014-2017
|
||||
* @license MIT
|
||||
*/
|
||||
!(function () {
|
||||
"use strict";
|
||||
function t(t) {
|
||||
t
|
||||
? ((f[0] =
|
||||
f[16] =
|
||||
f[1] =
|
||||
f[2] =
|
||||
f[3] =
|
||||
f[4] =
|
||||
f[5] =
|
||||
f[6] =
|
||||
f[7] =
|
||||
f[8] =
|
||||
f[9] =
|
||||
f[10] =
|
||||
f[11] =
|
||||
f[12] =
|
||||
f[13] =
|
||||
f[14] =
|
||||
f[15] =
|
||||
0),
|
||||
(this.blocks = f))
|
||||
: (this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
|
||||
(this.h0 = 1732584193),
|
||||
(this.h1 = 4023233417),
|
||||
(this.h2 = 2562383102),
|
||||
(this.h3 = 271733878),
|
||||
(this.h4 = 3285377520),
|
||||
(this.block = this.start = this.bytes = this.hBytes = 0),
|
||||
(this.finalized = this.hashed = !1),
|
||||
(this.first = !0);
|
||||
}
|
||||
var h = "object" == typeof window ? window : {},
|
||||
s =
|
||||
!h.JS_SHA1_NO_NODE_JS &&
|
||||
"object" == typeof process &&
|
||||
process.versions &&
|
||||
process.versions.node;
|
||||
s && (h = global);
|
||||
var i =
|
||||
!h.JS_SHA1_NO_COMMON_JS && "object" == typeof module && module.exports,
|
||||
e = "function" == typeof define && define.amd,
|
||||
r = "0123456789abcdef".split(""),
|
||||
o = [-2147483648, 8388608, 32768, 128],
|
||||
n = [24, 16, 8, 0],
|
||||
a = ["hex", "array", "digest", "arrayBuffer"],
|
||||
f = [],
|
||||
u = function (h) {
|
||||
return function (s) {
|
||||
return new t(!0).update(s)[h]();
|
||||
};
|
||||
},
|
||||
c = function () {
|
||||
var h = u("hex");
|
||||
s && (h = p(h)),
|
||||
(h.create = function () {
|
||||
return new t();
|
||||
}),
|
||||
(h.update = function (t) {
|
||||
return h.create().update(t);
|
||||
});
|
||||
for (var i = 0; i < a.length; ++i) {
|
||||
var e = a[i];
|
||||
h[e] = u(e);
|
||||
}
|
||||
return h;
|
||||
},
|
||||
p = function (t) {
|
||||
var h = eval("require('crypto')"),
|
||||
s = eval("require('buffer').Buffer"),
|
||||
i = function (i) {
|
||||
if ("string" == typeof i)
|
||||
return h.createHash("sha1").update(i, "utf8").digest("hex");
|
||||
if (i.constructor === ArrayBuffer) i = new Uint8Array(i);
|
||||
else if (void 0 === i.length) return t(i);
|
||||
return h.createHash("sha1").update(new s(i)).digest("hex");
|
||||
};
|
||||
return i;
|
||||
};
|
||||
(t.prototype.update = function (t) {
|
||||
if (!this.finalized) {
|
||||
var s = "string" != typeof t;
|
||||
s && t.constructor === h.ArrayBuffer && (t = new Uint8Array(t));
|
||||
for (var i, e, r = 0, o = t.length || 0, a = this.blocks; r < o; ) {
|
||||
if (
|
||||
(this.hashed &&
|
||||
((this.hashed = !1),
|
||||
(a[0] = this.block),
|
||||
(a[16] =
|
||||
a[1] =
|
||||
a[2] =
|
||||
a[3] =
|
||||
a[4] =
|
||||
a[5] =
|
||||
a[6] =
|
||||
a[7] =
|
||||
a[8] =
|
||||
a[9] =
|
||||
a[10] =
|
||||
a[11] =
|
||||
a[12] =
|
||||
a[13] =
|
||||
a[14] =
|
||||
a[15] =
|
||||
0)),
|
||||
s)
|
||||
)
|
||||
for (e = this.start; r < o && e < 64; ++r)
|
||||
a[e >> 2] |= t[r] << n[3 & e++];
|
||||
else
|
||||
for (e = this.start; r < o && e < 64; ++r)
|
||||
(i = t.charCodeAt(r)) < 128
|
||||
? (a[e >> 2] |= i << n[3 & e++])
|
||||
: i < 2048
|
||||
? ((a[e >> 2] |= (192 | (i >> 6)) << n[3 & e++]),
|
||||
(a[e >> 2] |= (128 | (63 & i)) << n[3 & e++]))
|
||||
: i < 55296 || i >= 57344
|
||||
? ((a[e >> 2] |= (224 | (i >> 12)) << n[3 & e++]),
|
||||
(a[e >> 2] |= (128 | ((i >> 6) & 63)) << n[3 & e++]),
|
||||
(a[e >> 2] |= (128 | (63 & i)) << n[3 & e++]))
|
||||
: ((i =
|
||||
65536 + (((1023 & i) << 10) | (1023 & t.charCodeAt(++r)))),
|
||||
(a[e >> 2] |= (240 | (i >> 18)) << n[3 & e++]),
|
||||
(a[e >> 2] |= (128 | ((i >> 12) & 63)) << n[3 & e++]),
|
||||
(a[e >> 2] |= (128 | ((i >> 6) & 63)) << n[3 & e++]),
|
||||
(a[e >> 2] |= (128 | (63 & i)) << n[3 & e++]));
|
||||
(this.lastByteIndex = e),
|
||||
(this.bytes += e - this.start),
|
||||
e >= 64
|
||||
? ((this.block = a[16]),
|
||||
(this.start = e - 64),
|
||||
this.hash(),
|
||||
(this.hashed = !0))
|
||||
: (this.start = e);
|
||||
}
|
||||
return (
|
||||
this.bytes > 4294967295 &&
|
||||
((this.hBytes += (this.bytes / 4294967296) << 0),
|
||||
(this.bytes = this.bytes % 4294967296)),
|
||||
this
|
||||
);
|
||||
}
|
||||
}),
|
||||
(t.prototype.finalize = function () {
|
||||
if (!this.finalized) {
|
||||
this.finalized = !0;
|
||||
var t = this.blocks,
|
||||
h = this.lastByteIndex;
|
||||
(t[16] = this.block),
|
||||
(t[h >> 2] |= o[3 & h]),
|
||||
(this.block = t[16]),
|
||||
h >= 56 &&
|
||||
(this.hashed || this.hash(),
|
||||
(t[0] = this.block),
|
||||
(t[16] =
|
||||
t[1] =
|
||||
t[2] =
|
||||
t[3] =
|
||||
t[4] =
|
||||
t[5] =
|
||||
t[6] =
|
||||
t[7] =
|
||||
t[8] =
|
||||
t[9] =
|
||||
t[10] =
|
||||
t[11] =
|
||||
t[12] =
|
||||
t[13] =
|
||||
t[14] =
|
||||
t[15] =
|
||||
0)),
|
||||
(t[14] = (this.hBytes << 3) | (this.bytes >>> 29)),
|
||||
(t[15] = this.bytes << 3),
|
||||
this.hash();
|
||||
}
|
||||
}),
|
||||
(t.prototype.hash = function () {
|
||||
var t,
|
||||
h,
|
||||
s = this.h0,
|
||||
i = this.h1,
|
||||
e = this.h2,
|
||||
r = this.h3,
|
||||
o = this.h4,
|
||||
n = this.blocks;
|
||||
for (t = 16; t < 80; ++t)
|
||||
(h = n[t - 3] ^ n[t - 8] ^ n[t - 14] ^ n[t - 16]),
|
||||
(n[t] = (h << 1) | (h >>> 31));
|
||||
for (t = 0; t < 20; t += 5)
|
||||
(s =
|
||||
((h =
|
||||
((i =
|
||||
((h =
|
||||
((e =
|
||||
((h =
|
||||
((r =
|
||||
((h =
|
||||
((o =
|
||||
((h = (s << 5) | (s >>> 27)) +
|
||||
((i & e) | (~i & r)) +
|
||||
o +
|
||||
1518500249 +
|
||||
n[t]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(o >>> 27)) +
|
||||
((s & (i = (i << 30) | (i >>> 2))) | (~s & e)) +
|
||||
r +
|
||||
1518500249 +
|
||||
n[t + 1]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(r >>> 27)) +
|
||||
((o & (s = (s << 30) | (s >>> 2))) | (~o & i)) +
|
||||
e +
|
||||
1518500249 +
|
||||
n[t + 2]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(e >>> 27)) +
|
||||
((r & (o = (o << 30) | (o >>> 2))) | (~r & s)) +
|
||||
i +
|
||||
1518500249 +
|
||||
n[t + 3]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(i >>> 27)) +
|
||||
((e & (r = (r << 30) | (r >>> 2))) | (~e & o)) +
|
||||
s +
|
||||
1518500249 +
|
||||
n[t + 4]) <<
|
||||
0),
|
||||
(e = (e << 30) | (e >>> 2));
|
||||
for (; t < 40; t += 5)
|
||||
(s =
|
||||
((h =
|
||||
((i =
|
||||
((h =
|
||||
((e =
|
||||
((h =
|
||||
((r =
|
||||
((h =
|
||||
((o =
|
||||
((h = (s << 5) | (s >>> 27)) +
|
||||
(i ^ e ^ r) +
|
||||
o +
|
||||
1859775393 +
|
||||
n[t]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(o >>> 27)) +
|
||||
(s ^ (i = (i << 30) | (i >>> 2)) ^ e) +
|
||||
r +
|
||||
1859775393 +
|
||||
n[t + 1]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(r >>> 27)) +
|
||||
(o ^ (s = (s << 30) | (s >>> 2)) ^ i) +
|
||||
e +
|
||||
1859775393 +
|
||||
n[t + 2]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(e >>> 27)) +
|
||||
(r ^ (o = (o << 30) | (o >>> 2)) ^ s) +
|
||||
i +
|
||||
1859775393 +
|
||||
n[t + 3]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(i >>> 27)) +
|
||||
(e ^ (r = (r << 30) | (r >>> 2)) ^ o) +
|
||||
s +
|
||||
1859775393 +
|
||||
n[t + 4]) <<
|
||||
0),
|
||||
(e = (e << 30) | (e >>> 2));
|
||||
for (; t < 60; t += 5)
|
||||
(s =
|
||||
((h =
|
||||
((i =
|
||||
((h =
|
||||
((e =
|
||||
((h =
|
||||
((r =
|
||||
((h =
|
||||
((o =
|
||||
((h = (s << 5) | (s >>> 27)) +
|
||||
((i & e) | (i & r) | (e & r)) +
|
||||
o -
|
||||
1894007588 +
|
||||
n[t]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(o >>> 27)) +
|
||||
((s & (i = (i << 30) | (i >>> 2))) |
|
||||
(s & e) |
|
||||
(i & e)) +
|
||||
r -
|
||||
1894007588 +
|
||||
n[t + 1]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(r >>> 27)) +
|
||||
((o & (s = (s << 30) | (s >>> 2))) | (o & i) | (s & i)) +
|
||||
e -
|
||||
1894007588 +
|
||||
n[t + 2]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(e >>> 27)) +
|
||||
((r & (o = (o << 30) | (o >>> 2))) | (r & s) | (o & s)) +
|
||||
i -
|
||||
1894007588 +
|
||||
n[t + 3]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(i >>> 27)) +
|
||||
((e & (r = (r << 30) | (r >>> 2))) | (e & o) | (r & o)) +
|
||||
s -
|
||||
1894007588 +
|
||||
n[t + 4]) <<
|
||||
0),
|
||||
(e = (e << 30) | (e >>> 2));
|
||||
for (; t < 80; t += 5)
|
||||
(s =
|
||||
((h =
|
||||
((i =
|
||||
((h =
|
||||
((e =
|
||||
((h =
|
||||
((r =
|
||||
((h =
|
||||
((o =
|
||||
((h = (s << 5) | (s >>> 27)) +
|
||||
(i ^ e ^ r) +
|
||||
o -
|
||||
899497514 +
|
||||
n[t]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(o >>> 27)) +
|
||||
(s ^ (i = (i << 30) | (i >>> 2)) ^ e) +
|
||||
r -
|
||||
899497514 +
|
||||
n[t + 1]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(r >>> 27)) +
|
||||
(o ^ (s = (s << 30) | (s >>> 2)) ^ i) +
|
||||
e -
|
||||
899497514 +
|
||||
n[t + 2]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(e >>> 27)) +
|
||||
(r ^ (o = (o << 30) | (o >>> 2)) ^ s) +
|
||||
i -
|
||||
899497514 +
|
||||
n[t + 3]) <<
|
||||
0) <<
|
||||
5) |
|
||||
(i >>> 27)) +
|
||||
(e ^ (r = (r << 30) | (r >>> 2)) ^ o) +
|
||||
s -
|
||||
899497514 +
|
||||
n[t + 4]) <<
|
||||
0),
|
||||
(e = (e << 30) | (e >>> 2));
|
||||
(this.h0 = (this.h0 + s) << 0),
|
||||
(this.h1 = (this.h1 + i) << 0),
|
||||
(this.h2 = (this.h2 + e) << 0),
|
||||
(this.h3 = (this.h3 + r) << 0),
|
||||
(this.h4 = (this.h4 + o) << 0);
|
||||
}),
|
||||
(t.prototype.hex = function () {
|
||||
this.finalize();
|
||||
var t = this.h0,
|
||||
h = this.h1,
|
||||
s = this.h2,
|
||||
i = this.h3,
|
||||
e = this.h4;
|
||||
return (
|
||||
r[(t >> 28) & 15] +
|
||||
r[(t >> 24) & 15] +
|
||||
r[(t >> 20) & 15] +
|
||||
r[(t >> 16) & 15] +
|
||||
r[(t >> 12) & 15] +
|
||||
r[(t >> 8) & 15] +
|
||||
r[(t >> 4) & 15] +
|
||||
r[15 & t] +
|
||||
r[(h >> 28) & 15] +
|
||||
r[(h >> 24) & 15] +
|
||||
r[(h >> 20) & 15] +
|
||||
r[(h >> 16) & 15] +
|
||||
r[(h >> 12) & 15] +
|
||||
r[(h >> 8) & 15] +
|
||||
r[(h >> 4) & 15] +
|
||||
r[15 & h] +
|
||||
r[(s >> 28) & 15] +
|
||||
r[(s >> 24) & 15] +
|
||||
r[(s >> 20) & 15] +
|
||||
r[(s >> 16) & 15] +
|
||||
r[(s >> 12) & 15] +
|
||||
r[(s >> 8) & 15] +
|
||||
r[(s >> 4) & 15] +
|
||||
r[15 & s] +
|
||||
r[(i >> 28) & 15] +
|
||||
r[(i >> 24) & 15] +
|
||||
r[(i >> 20) & 15] +
|
||||
r[(i >> 16) & 15] +
|
||||
r[(i >> 12) & 15] +
|
||||
r[(i >> 8) & 15] +
|
||||
r[(i >> 4) & 15] +
|
||||
r[15 & i] +
|
||||
r[(e >> 28) & 15] +
|
||||
r[(e >> 24) & 15] +
|
||||
r[(e >> 20) & 15] +
|
||||
r[(e >> 16) & 15] +
|
||||
r[(e >> 12) & 15] +
|
||||
r[(e >> 8) & 15] +
|
||||
r[(e >> 4) & 15] +
|
||||
r[15 & e]
|
||||
);
|
||||
}),
|
||||
(t.prototype.toString = t.prototype.hex),
|
||||
(t.prototype.digest = function () {
|
||||
this.finalize();
|
||||
var t = this.h0,
|
||||
h = this.h1,
|
||||
s = this.h2,
|
||||
i = this.h3,
|
||||
e = this.h4;
|
||||
return [
|
||||
(t >> 24) & 255,
|
||||
(t >> 16) & 255,
|
||||
(t >> 8) & 255,
|
||||
255 & t,
|
||||
(h >> 24) & 255,
|
||||
(h >> 16) & 255,
|
||||
(h >> 8) & 255,
|
||||
255 & h,
|
||||
(s >> 24) & 255,
|
||||
(s >> 16) & 255,
|
||||
(s >> 8) & 255,
|
||||
255 & s,
|
||||
(i >> 24) & 255,
|
||||
(i >> 16) & 255,
|
||||
(i >> 8) & 255,
|
||||
255 & i,
|
||||
(e >> 24) & 255,
|
||||
(e >> 16) & 255,
|
||||
(e >> 8) & 255,
|
||||
255 & e,
|
||||
];
|
||||
}),
|
||||
(t.prototype.array = t.prototype.digest),
|
||||
(t.prototype.arrayBuffer = function () {
|
||||
this.finalize();
|
||||
var t = new ArrayBuffer(20),
|
||||
h = new DataView(t);
|
||||
return (
|
||||
h.setUint32(0, this.h0),
|
||||
h.setUint32(4, this.h1),
|
||||
h.setUint32(8, this.h2),
|
||||
h.setUint32(12, this.h3),
|
||||
h.setUint32(16, this.h4),
|
||||
t
|
||||
);
|
||||
});
|
||||
var y = c();
|
||||
i
|
||||
? (module.exports = y)
|
||||
: ((h.sha1 = y),
|
||||
e &&
|
||||
define(function () {
|
||||
return y;
|
||||
}));
|
||||
})();
|
@ -1,32 +1,32 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="/assets/main.css">
|
||||
<link rel="icon" type="image/png" href="/favicon.png"/>
|
||||
<title>FullGreaM</title>
|
||||
</head>
|
||||
<body class="bg text-white">
|
||||
<script src="/fl_framework/index.js"></script>
|
||||
<nav id="navbar-main" class="navbar navbar-dark bg-dark">
|
||||
<a class="navbar-brand" href="#" onclick="fl.go('/');">
|
||||
FullGreaM
|
||||
</a>
|
||||
<button onclick="fl.go('/contacts');" class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">Мои контакты</button>
|
||||
</nav>
|
||||
<div id="turn-on-js">
|
||||
<h1>Включите поддержку JavaScript!</h1>
|
||||
<p>В противном случае, компоненты сайте не смогут быть загружены</p>
|
||||
</div>
|
||||
<script>
|
||||
document.getElementById("turn-on-js").innerHTML = '<div id="fl.area"><p>Loading...</p></div>';
|
||||
</script>
|
||||
<!-- Finalize loading bootstrap js -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz" crossorigin="anonymous"></script>
|
||||
<!-- Go to root -->
|
||||
<!-- <script>setTimeout(async () => fl.go(window.location.pathname), 50);</script> -->
|
||||
<script src="/assets/main.js" type="module"></script>
|
||||
</body>
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="/assets/main.css">
|
||||
<link rel="icon" type="image/png" href="/favicon.png"/>
|
||||
<title>FullGreaM</title>
|
||||
</head>
|
||||
<body class="bg text-white">
|
||||
<script src="/fl_framework/index.js"></script>
|
||||
<nav id="navbar-main" class="navbar navbar-dark bg-dark">
|
||||
<a class="navbar-brand" href="#" onclick="fl.go('/');">
|
||||
FullGreaM
|
||||
</a>
|
||||
<button onclick="fl.go('/contacts');" class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">Мои контакты</button>
|
||||
</nav>
|
||||
<div id="turn-on-js">
|
||||
<h1>Включите поддержку JavaScript!</h1>
|
||||
<p>В противном случае, компоненты сайте не смогут быть загружены</p>
|
||||
</div>
|
||||
<script>
|
||||
document.getElementById("turn-on-js").innerHTML = '<div id="fl.area"><p>Loading...</p></div>';
|
||||
</script>
|
||||
<!-- Finalize loading bootstrap js -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz" crossorigin="anonymous"></script>
|
||||
<!-- Go to root -->
|
||||
<!-- <script>setTimeout(async () => fl.go(window.location.pathname), 50);</script> -->
|
||||
<script src="/assets/main.js" type="module"></script>
|
||||
</body>
|
||||
</html>
|
121
blog/posts.json
121
blog/posts.json
@ -1,52 +1,69 @@
|
||||
{
|
||||
"categories" : [
|
||||
{
|
||||
"tag" : "news",
|
||||
"name" : "Новости"
|
||||
},
|
||||
{
|
||||
"tag" : "updates",
|
||||
"name" : "Обновления"
|
||||
},
|
||||
{
|
||||
"tag" : "personal",
|
||||
"name" : "Личное"
|
||||
}
|
||||
],
|
||||
"posts" : [
|
||||
{
|
||||
"title" : "Открыт блог",
|
||||
"date" : 1697329458,
|
||||
"data" : "Сегодня я запустил блог на сайте и это первый пост в нём.\n...В блоге будут публиковаться новости, анонсы, а также, мои личные мысли. Впрочем, если вам интересно что-то одно или, наоборот, не интересно иное, то я добавил поддержку \"категорий\", которые вы можете включать и отключать.\n\n<i>UPD: Категории я добавлю позже.</i>",
|
||||
"categories" : ["news", "updates"],
|
||||
"attachments" : {
|
||||
"images" : [
|
||||
"/assets/posts/15102023.png"
|
||||
],
|
||||
"files" : [],
|
||||
"video" : [],
|
||||
"youtube" : [],
|
||||
"audio" : [],
|
||||
"voice" : []
|
||||
},
|
||||
"forward" : null
|
||||
},
|
||||
{
|
||||
"title" : "Купил себе SD-Карты",
|
||||
"date" : 1697385474,
|
||||
"data" : "Купил себе карты памяти в DNS, ща буду гонять, смотреть как работают.\n\nВообще, мне нехватало места на телефоне и посему решил докупить себе одну на 128 и одну на 64 гига.",
|
||||
"categories" : ["personal"],
|
||||
"attachments" : {
|
||||
"images" : [
|
||||
"/assets/posts/IMG_20231015_185244_587.jpg"
|
||||
],
|
||||
"files" : [],
|
||||
"video" : [],
|
||||
"youtube" : [],
|
||||
"audio" : [],
|
||||
"voice" : []
|
||||
},
|
||||
"forward" : null
|
||||
}
|
||||
]
|
||||
}
|
||||
{
|
||||
"categories" : [
|
||||
{
|
||||
"tag" : "news",
|
||||
"name" : "Новости"
|
||||
},
|
||||
{
|
||||
"tag" : "updates",
|
||||
"name" : "Обновления"
|
||||
},
|
||||
{
|
||||
"tag" : "personal",
|
||||
"name" : "Личное"
|
||||
}
|
||||
],
|
||||
"posts" : [
|
||||
{
|
||||
"title" : "Открыт блог",
|
||||
"date" : 1697329458,
|
||||
"data" : "Сегодня я запустил блог на сайте и это первый пост в нём.\n...В блоге будут публиковаться новости, анонсы, а также, мои личные мысли. Впрочем, если вам интересно что-то одно или, наоборот, не интересно иное, то я добавил поддержку \"категорий\", которые вы можете включать и отключать.\n\n<i>UPD: Категории я добавлю позже.</i>",
|
||||
"categories" : ["news", "updates"],
|
||||
"attachments" : {
|
||||
"images" : [
|
||||
"/assets/posts/15102023.png"
|
||||
],
|
||||
"files" : [],
|
||||
"video" : [],
|
||||
"youtube" : [],
|
||||
"audio" : [],
|
||||
"voice" : []
|
||||
},
|
||||
"forward" : null
|
||||
},
|
||||
{
|
||||
"title" : "Купил себе SD-Карты",
|
||||
"date" : 1697385474,
|
||||
"data" : "Купил себе карты памяти в DNS, ща буду гонять, смотреть как работают.\n\nВообще, мне нехватало места на телефоне и посему решил докупить себе одну на 128 и одну на 64 гига.",
|
||||
"categories" : ["personal"],
|
||||
"attachments" : {
|
||||
"images" : [
|
||||
"/assets/posts/IMG_20231015_185244_587.jpg"
|
||||
],
|
||||
"files" : [],
|
||||
"video" : [],
|
||||
"youtube" : [],
|
||||
"audio" : [],
|
||||
"voice" : []
|
||||
},
|
||||
"forward" : null
|
||||
},
|
||||
{
|
||||
"title" : "Привод Arcturus",
|
||||
"date" : 1718360744,
|
||||
"data" : "Купил себе привод от Arcturus. Потестил - норм, буду гонять с ним дальше",
|
||||
"categories" : ["personal"],
|
||||
"attachments" : {
|
||||
"images" : [
|
||||
"/assets/posts/photo_2024-05-28_21-15-13.jpg"
|
||||
],
|
||||
"files" : [],
|
||||
"video" : [],
|
||||
"youtube" : [],
|
||||
"audio" : [],
|
||||
"voice" : []
|
||||
},
|
||||
"forward" : null
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@ -1,32 +1,32 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="/assets/main.css">
|
||||
<link rel="icon" type="image/png" href="/favicon.png"/>
|
||||
<title>FullGreaM</title>
|
||||
</head>
|
||||
<body class="bg text-white">
|
||||
<script src="/fl_framework/index.js"></script>
|
||||
<nav id="navbar-main" class="navbar navbar-dark bg-dark">
|
||||
<a class="navbar-brand" href="#" onclick="fl.go('/');">
|
||||
FullGreaM
|
||||
</a>
|
||||
<button onclick="fl.go('/contacts');" class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">Мои контакты</button>
|
||||
</nav>
|
||||
<div id="turn-on-js">
|
||||
<h1>Включите поддержку JavaScript!</h1>
|
||||
<p>В противном случае, компоненты сайте не смогут быть загружены</p>
|
||||
</div>
|
||||
<script>
|
||||
document.getElementById("turn-on-js").innerHTML = '<div id="fl.area"><p>Loading...</p></div>';
|
||||
</script>
|
||||
<!-- Finalize loading bootstrap js -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz" crossorigin="anonymous"></script>
|
||||
<!-- Go to root -->
|
||||
<!-- <script>setTimeout(async () => fl.go(window.location.pathname), 50);</script> -->
|
||||
<script src="/assets/main.js" type="module"></script>
|
||||
</body>
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="/assets/main.css">
|
||||
<link rel="icon" type="image/png" href="/favicon.png"/>
|
||||
<title>FullGreaM</title>
|
||||
</head>
|
||||
<body class="bg text-white">
|
||||
<script src="/fl_framework/index.js"></script>
|
||||
<nav id="navbar-main" class="navbar navbar-dark bg-dark">
|
||||
<a class="navbar-brand" href="#" onclick="fl.go('/');">
|
||||
FullGreaM
|
||||
</a>
|
||||
<button onclick="fl.go('/contacts');" class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">Мои контакты</button>
|
||||
</nav>
|
||||
<div id="turn-on-js">
|
||||
<h1>Включите поддержку JavaScript!</h1>
|
||||
<p>В противном случае, компоненты сайте не смогут быть загружены</p>
|
||||
</div>
|
||||
<script>
|
||||
document.getElementById("turn-on-js").innerHTML = '<div id="fl.area"><p>Loading...</p></div>';
|
||||
</script>
|
||||
<!-- Finalize loading bootstrap js -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz" crossorigin="anonymous"></script>
|
||||
<!-- Go to root -->
|
||||
<!-- <script>setTimeout(async () => fl.go(window.location.pathname), 50);</script> -->
|
||||
<script src="/assets/main.js" type="module"></script>
|
||||
</body>
|
||||
</html>
|
@ -1,233 +1,233 @@
|
||||
#Mod_Priority,#Mod_Name,#Mod_Nexus_URL
|
||||
"0000","Unmanaged: FNIS",""
|
||||
"0002","DLC: HearthFires",""
|
||||
"0003","DLC: Dragonborn",""
|
||||
"0004","DLC: Dawnguard",""
|
||||
"0006","Address Library for SKSE Plugins","https://www.nexusmods.com/skyrimspecialedition/mods/32444"
|
||||
"0007","Unofficial Skyrim Special Edition Patch-RUS-RUS","https://www.nexusmods.com/skyrimspecialedition/mods/266"
|
||||
"0008","powerofthree's Tweaks","https://www.nexusmods.com/skyrimspecialedition/mods/51073"
|
||||
"0009","JContainers SE","https://www.nexusmods.com/skyrimspecialedition/mods/16495"
|
||||
"0010","ConsoleUtilSSE","https://www.nexusmods.com/skyrimspecialedition/mods/24858"
|
||||
"0011","ENB Helper SE 1.5 for SSE 1.5.97","https://www.nexusmods.com/skyrimspecialedition/mods/23174"
|
||||
"0012","Weapons Armor Clothing and Clutter Fixes","https://www.nexusmods.com/skyrimspecialedition/mods/18994"
|
||||
"0013","Weapons Armor Clothing and Clutter Fixes 2.9 RUS","https://www.nexusmods.com/skyrimspecialedition/mods/19284"
|
||||
"0014","SkyUI_5_2_SE","https://www.nexusmods.com/skyrimspecialedition/mods/12604"
|
||||
"0015","UIExtensions","https://www.nexusmods.com/skyrimspecialedition/mods/17561"
|
||||
"0016","DynDOLOD Resources SE","https://www.nexusmods.com/skyrimspecialedition/mods/32382"
|
||||
"0018","RaceCompatibility with fixes for SSE","https://www.nexusmods.com/skyrimspecialedition/mods/2853"
|
||||
"0019","more HUD SE Light Master- Pre AE","https://www.nexusmods.com/skyrimspecialedition/mods/12688"
|
||||
"0020","MCM Helper SE","https://www.nexusmods.com/skyrimspecialedition/mods/53000"
|
||||
"0021","FileAccess Interface for Skyrim SE Scripts - FISSES (FISS)","https://www.nexusmods.com/skyrimspecialedition/mods/13956"
|
||||
"0022","Papyrus API","https://www.nexusmods.com/skyrimspecialedition/mods/24858"
|
||||
"0023","IFrame Generator RE","https://www.nexusmods.com/skyrimspecialedition/mods/74401"
|
||||
"0024","dTry's Key Utils SE","https://www.nexusmods.com/skyrimspecialedition/mods/69944"
|
||||
"0025","Papyrus Ini Manipulator","https://www.nexusmods.com/skyrimspecialedition/mods/65634"
|
||||
"0027","SSE Display Tweaks","https://www.nexusmods.com/skyrimspecialedition/mods/34705"
|
||||
"0028","CrashLogger","https://www.nexusmods.com/skyrimspecialedition/mods/59818"
|
||||
"0029","CrashLoggerSE","https://www.nexusmods.com/skyrimspecialedition/mods/59818"
|
||||
"0035","BodySlide and Outfit Studio","https://www.nexusmods.com/skyrimspecialedition/mods/201"
|
||||
"0036","Перевод BodySlide and Outfit Studio",""
|
||||
"0038","Caliente's Beautiful Bodies Enhancer -CBBE-","https://www.nexusmods.com/skyrimspecialedition/mods/198"
|
||||
"0039","CBPC - Physics with Collisions","https://www.nexusmods.com/skyrimspecialedition/mods/21224"
|
||||
"0041","HDT-SMP for SSE 1.5.97 (avx on)","https://www.nexusmods.com/skyrimspecialedition/mods/30872"
|
||||
"0045","CBBE 3BA","https://www.nexusmods.com/skyrimspecialedition/mods/30174"
|
||||
"0046","XP32 Maximum Skeleton Special Extended","https://www.nexusmods.com/skyrimspecialedition/mods/1988"
|
||||
"0047","XP32 Maximum Skeleton Special Extended - Fixed Scripts","https://www.nexusmods.com/skyrimspecialedition/mods/44252"
|
||||
"0049","AddItemMenu - NG","https://www.nexusmods.com/skyrimspecialedition/mods/71409"
|
||||
"0054","NAT Stand Alone - 0.4.2 c","https://www.nexusmods.com/skyrimspecialedition/mods/12842"
|
||||
"0055","Enhanced Lights and FX","https://www.nexusmods.com/skyrimspecialedition/mods/2424"
|
||||
"0056","Cathedral - 3D Pine Grass - Full 3D Coverage","https://www.nexusmods.com/skyrimspecialedition/mods/42032"
|
||||
"0057","Nature of the Wild Lands - Landscape textures","https://www.nexusmods.com/skyrimspecialedition/mods/63604"
|
||||
"0058","Nature of the Wild Lands 2.0","https://www.nexusmods.com/skyrimspecialedition/mods/63604"
|
||||
"0059","Northern Roads","https://www.nexusmods.com/skyrimspecialedition/mods/77530"
|
||||
"0060","Northern Roads (SE-AE) - RU","https://www.nexusmods.com/skyrimspecialedition/mods/77652"
|
||||
"0061","Nature of the Wild Lands - Grass","https://www.nexusmods.com/skyrimspecialedition/mods/63604"
|
||||
"0062","Enhanced Landscapes","https://www.nexusmods.com/skyrimspecialedition/mods/18162"
|
||||
"0063","EVLaS","https://www.nexusmods.com/skyrimspecialedition/mods/63725"
|
||||
"0064","Morning Fogs SSE - Thin Fog","https://www.nexusmods.com/skyrimspecialedition/mods/21436"
|
||||
"0065","Water for ENB","https://www.nexusmods.com/skyrimspecialedition/mods/37061"
|
||||
"0066","ELFX Fixes (RUS)","https://www.nexusmods.com/skyrimspecialedition/mods/39765"
|
||||
"0067","Picta Series - Improved Sky Meshes","https://www.nexusmods.com/skyrimspecialedition/mods/58263"
|
||||
"0068","Storm Lightning for SSE and VR (Minty Lightning 2019)","https://www.nexusmods.com/skyrimspecialedition/mods/29243"
|
||||
"0070","Serious HD sse 1.2","https://www.nexusmods.com/skyrimspecialedition/mods/7435"
|
||||
"0071","HD Lods Textures SE 1K","https://www.nexusmods.com/skyrimspecialedition/mods/3333"
|
||||
"0072","B. Noble Skyrim - FULL PACK_Performance Edition","https://www.nexusmods.com/skyrimspecialedition/mods/21423"
|
||||
"0073","Static Mesh Improvement Mod (SMIM)","https://www.nexusmods.com/skyrimspecialedition/mods/659"
|
||||
"0074","Bellyaches Animal and Creature Pack",""
|
||||
"0075","Majestic Mountains Main","https://www.nexusmods.com/skyrimspecialedition/mods/11052"
|
||||
"0077","Schlongs of Skyrim SE",""
|
||||
"0079","Bijin Skin - CBBE","https://www.nexusmods.com/skyrimspecialedition/mods/20078"
|
||||
"0080","Fair Skin Complexion for CBBE",""
|
||||
"0082","Tempered Skins for Males - SOS Full Version","https://www.nexusmods.com/skyrimspecialedition/mods/7902"
|
||||
"0085","Kalilies Brows - High Poly Head","https://www.nexusmods.com/skyrimspecialedition/mods/57115"
|
||||
"0086","High Poly Head SE",""
|
||||
"0087","Expressive Facegen Morphs SE","https://www.nexusmods.com/skyrimspecialedition/mods/35785"
|
||||
"0088","Expressive Facial Animation - Female Edition","https://www.nexusmods.com/skyrimspecialedition/mods/19181"
|
||||
"0089","Kalilies Brows","https://www.nexusmods.com/skyrimspecialedition/mods/40595"
|
||||
"0091","ApachiiSkyHair_v_1_6_Full_optimized","https://www.nexusmods.com/skyrimspecialedition/mods/2014"
|
||||
"0092","ApachiiSkyHairMale_v_1_3","https://www.nexusmods.com/skyrimspecialedition/mods/2014"
|
||||
"0093","ApachiiSkyHairFemale_v_1_5_1","https://www.nexusmods.com/skyrimspecialedition/mods/2014"
|
||||
"0094","The Witcher 3 Eyes","https://www.nexusmods.com/skyrimspecialedition/mods/2921"
|
||||
"0095","HDT-SMP Racemenu Hairs and Wigs",""
|
||||
"0096","Female Makeup Suite - Face - 2K","https://www.nexusmods.com/skyrimspecialedition/mods/24495"
|
||||
"0097","The Eyes of Beauty SSE","https://www.nexusmods.com/skyrimspecialedition/mods/16185"
|
||||
"0098","KS Hairdos - HDT SMP (Physics)","https://www.nexusmods.com/skyrimspecialedition/mods/31300"
|
||||
"0099","Freckle Mania High Quality","https://www.nexusmods.com/skyrimspecialedition/mods/52841"
|
||||
"0100","SE SG Brows","https://www.nexusmods.com/skyrimspecialedition/mods/25890"
|
||||
"0101","Hvergelmir's Aesthetics - Brows","https://www.nexusmods.com/skyrimspecialedition/mods/1062"
|
||||
"0102","Hvergelmir Brows - For High Poly Head","https://www.nexusmods.com/skyrimspecialedition/mods/38493"
|
||||
"0103","Womens_Eyebrows",""
|
||||
"0104","Female Basic Makeup STANDALONE","https://www.nexusmods.com/skyrimspecialedition/mods/44716"
|
||||
"0105","Empyrean CS SSE 2.1","https://www.nexusmods.com/skyrimspecialedition/mods/38965"
|
||||
"0106","Great modders' SMP Hair pack and Xing","https://www.nexusmods.com/skyrimspecialedition/mods/31405"
|
||||
"0107","llygaid Eye - Unreal 1K","https://www.nexusmods.com/skyrimspecialedition/mods/91422"
|
||||
"0109","Dynamic Animation Replacer (DAR) v1.0.0 for SkyrimSE","https://www.nexusmods.com/skyrimspecialedition/mods/33746"
|
||||
"0110","Animation Motion Revolution","https://www.nexusmods.com/skyrimspecialedition/mods/50258"
|
||||
"0111","Nemesis Unlimited Behavior Engine","https://www.nexusmods.com/skyrimspecialedition/mods/60033"
|
||||
"0112","Gesture Animation Remix (DAR) - main archive","https://www.nexusmods.com/skyrimspecialedition/mods/64420"
|
||||
"0113","Conditional Gender Animations","https://www.nexusmods.com/skyrimspecialedition/mods/73446"
|
||||
"0116","Audio Overhaul for Skyrim 2","https://www.nexusmods.com/skyrimspecialedition/mods/12466"
|
||||
"0117","MLVUCSSE - English Original Voices","https://www.nexusmods.com/skyrimspecialedition/mods/91265"
|
||||
"0119","Holds SSE Complete - 0.0.9","https://www.nexusmods.com/skyrimspecialedition/mods/10609"
|
||||
"0120","Guards Armor Replacer","https://www.nexusmods.com/skyrimspecialedition/mods/22671"
|
||||
"0121","Guards Armor Replacer [RUS]",""
|
||||
"0122","NordWarUA's Vanilla Armor Replacers SSE","https://www.nexusmods.com/skyrimspecialedition/mods/31679"
|
||||
"0123","NordWarUA's Vanilla Armor Replacers SSE -RUS-","https://www.nexusmods.com/skyrimspecialedition/mods/39681"
|
||||
"0124","Lanterns Of Skyrim II",""
|
||||
"0125","Lanterns Of Skyrim II - FOMOD","https://www.nexusmods.com/skyrimspecialedition/mods/30817"
|
||||
"0128","HD HAIR(SE)",""
|
||||
"0129","NecDaz Feet v",""
|
||||
"0130","Feminine Hands for SE","https://www.nexusmods.com/skyrimspecialedition/mods/67522"
|
||||
"0131","Pandorable's NPCs","https://www.nexusmods.com/skyrimspecialedition/mods/19012"
|
||||
"0132","PAN_AIO",""
|
||||
"0133","PAN_DashingDefenders SE","https://www.nexusmods.com/skyrimspecialedition/mods/78600"
|
||||
"0134","Pandorable's Wicked Witches","https://www.nexusmods.com/skyrimspecialedition/mods/77478"
|
||||
"0135","Pandorable's NPCs - Sovngarde","https://www.nexusmods.com/skyrimspecialedition/mods/55877"
|
||||
"0136","PAN_DevotedDames","https://www.nexusmods.com/skyrimspecialedition/mods/59531"
|
||||
"0137","Pandorable's Serana","https://www.nexusmods.com/skyrimspecialedition/mods/24931"
|
||||
"0138","Pandorable's Marvellous Miners","https://www.nexusmods.com/skyrimspecialedition/mods/56399"
|
||||
"0139","Pandorable's Valerica","https://www.nexusmods.com/skyrimspecialedition/mods/35799"
|
||||
"0140","Pandorable's Frea and Frida","https://www.nexusmods.com/skyrimspecialedition/mods/31273"
|
||||
"0141","PAN_Nevri","https://www.nexusmods.com/skyrimspecialedition/mods/45128"
|
||||
"0142","PAN_Brelyna","https://www.nexusmods.com/skyrimspecialedition/mods/45128"
|
||||
"0143","Pandorable's Black-Briar Ladies","https://www.nexusmods.com/skyrimspecialedition/mods/33731"
|
||||
"0144","Pandorable's Warrior Women","https://www.nexusmods.com/skyrimspecialedition/mods/34464"
|
||||
"0145","Pandorable's Lethal Ladies","https://www.nexusmods.com/skyrimspecialedition/mods/36827"
|
||||
"0146","PAN_ShieldSisters","https://www.nexusmods.com/skyrimspecialedition/mods/42480"
|
||||
"0147","Pandorable's NPCs - Males","https://www.nexusmods.com/skyrimspecialedition/mods/42043"
|
||||
"0148","Pandorable's NPCs - Males 2","https://www.nexusmods.com/skyrimspecialedition/mods/50617"
|
||||
"0149","Bijin Warmaidens SE","https://www.nexusmods.com/skyrimspecialedition/mods/1825"
|
||||
"0150","Bijin Warmaidens SE - High-res skin textures for CBBE","https://www.nexusmods.com/skyrimspecialedition/mods/1825"
|
||||
"0151","Bijin Wives SE 1.1.2","https://www.nexusmods.com/skyrimspecialedition/mods/11247"
|
||||
"0152","Bijin NPCs SE 1.2.1","https://www.nexusmods.com/skyrimspecialedition/mods/11287"
|
||||
"0153","Bijin AIO SE for USSEP","https://www.nexusmods.com/skyrimspecialedition/mods/11287"
|
||||
"0161","Dragonborn Voice Overhaul","https://www.nexusmods.com/skyrimspecialedition/mods/84329"
|
||||
"0162","Bella Voice DBVO","https://www.nexusmods.com/skyrimspecialedition/mods/89810"
|
||||
"0163","Bella Voice Fix",""
|
||||
"0164","voicebella maingame and dlc","https://www.nexusmods.com/skyrimspecialedition/mods/89810"
|
||||
"0165","Name heroine DBVO","https://www.nexusmods.com/skyrimspecialedition/mods/89810"
|
||||
"0169","IFPV","https://www.nexusmods.com/skyrimspecialedition/mods/22306"
|
||||
"0170","RaceMenu Special Edition",""
|
||||
"0171","RaceMenu Special Edition RUS",""
|
||||
"0172","Alternate Start - Live Another Life","https://www.nexusmods.com/skyrimspecialedition/mods/272"
|
||||
"0174","Alternate Conversation Camera","https://www.nexusmods.com/skyrimspecialedition/mods/21220"
|
||||
"0175","SkyHUD","https://www.nexusmods.com/skyrimspecialedition/mods/463"
|
||||
"0176","Spell Perk Item Distributor (SPID)","https://www.nexusmods.com/skyrimspecialedition/mods/36869"
|
||||
"0177","Vokrii 3.8.2","https://www.nexusmods.com/skyrimspecialedition/mods/26176"
|
||||
"0178","Vokrii - Scaling Rebalance","https://www.nexusmods.com/skyrimspecialedition/mods/55091"
|
||||
"0179","NORDIC UI - Interface Overhaul","https://www.nexusmods.com/skyrimspecialedition/mods/49881"
|
||||
"0180","iNeed - Food, Water and Sleep - Continued","https://www.nexusmods.com/skyrimspecialedition/mods/19390"
|
||||
"0181","Frostfall 3.4.1 SE Release","https://www.nexusmods.com/skyrimspecialedition/mods/671"
|
||||
"0182","Campfire 1.12.1SEVR Release","https://www.nexusmods.com/skyrimspecialedition/mods/667"
|
||||
"0183","SkyrimForBattleV",""
|
||||
"0184","PC Head Tracking - MCM v4.8 SE","https://www.nexusmods.com/skyrimspecialedition/mods/11993"
|
||||
"0186","SummonShadowMERCHANT","https://www.nexusmods.com/skyrimspecialedition/mods/2177"
|
||||
"0188","VioLens - A Killmove Mod SE","https://www.nexusmods.com/skyrimspecialedition/mods/668"
|
||||
"0189","True Directional Movement","https://www.nexusmods.com/skyrimspecialedition/mods/51614"
|
||||
"0190","True Directional Movement RU","https://www.nexusmods.com/skyrimspecialedition/mods/53188"
|
||||
"0191","SkySA",""
|
||||
"0192","Grip Switch SkySA 1.2.1","https://www.nexusmods.com/skyrim/mods/54056"
|
||||
"0194","TK Dodge SE","https://www.nexusmods.com/skyrimspecialedition/mods/15309"
|
||||
"0195","JH Combat Animation Pack","https://www.nexusmods.com/skyrimspecialedition/mods/48500"
|
||||
"0197","Elder Souls - Sword 2.0 SE","https://www.nexusmods.com/skyrimspecialedition/mods/47191"
|
||||
"0198","Part 1) SEKIRO HUD by Inpa Skyrim","https://www.nexusmods.com/skyrimspecialedition/mods/41428"
|
||||
"0199","Part 2) SEKIRO COMBAT","https://www.nexusmods.com/skyrimspecialedition/mods/41428"
|
||||
"0200","Stances - Add-On","https://www.nexusmods.com/skyrimspecialedition/mods/41251"
|
||||
"0201","Stances - Dynamic Animation Sets","https://www.nexusmods.com/skyrimspecialedition/mods/40484"
|
||||
"0202","AMR Stance Framework","https://www.nexusmods.com/skyrimspecialedition/mods/54674"
|
||||
"0203","Enhanced Enemy AI","https://www.nexusmods.com/skyrimspecialedition/mods/32063"
|
||||
"0204","Precision","https://www.nexusmods.com/skyrimspecialedition/mods/72347"
|
||||
"0205","Keytrace","https://www.nexusmods.com/skyrimspecialedition/mods/63362"
|
||||
"0206","Elden Power Attack","https://www.nexusmods.com/skyrimspecialedition/mods/66711"
|
||||
"0207","Dark Souls Movement And Stamina Regen","https://www.nexusmods.com/skyrimspecialedition/mods/33135"
|
||||
"0208","Animated Potions","https://www.nexusmods.com/skyrimspecialedition/mods/73819"
|
||||
"0209","3PCO - 3rd Person Camera Overhaul","https://www.nexusmods.com/skyrimspecialedition/mods/89516"
|
||||
"0210","Nock to Tip",""
|
||||
"0211","Deadly Mutilation","https://www.nexusmods.com/skyrimspecialedition/mods/34917"
|
||||
"0213","Heroes Of Sovngarde","https://www.nexusmods.com/skyrimspecialedition/mods/3053"
|
||||
"0214","Populated Dungeons Caves Ruins Legendary Edition","https://www.nexusmods.com/skyrimspecialedition/mods/2820"
|
||||
"0216","[immyneedscake] Skydraenei by Eriayai CBBE SSE",""
|
||||
"0217","3BA SkyDraenei","https://www.nexusmods.com/skyrimspecialedition/mods/57617"
|
||||
"0218","True Demon Race","https://www.nexusmods.com/skyrimspecialedition/mods/58141"
|
||||
"0222","Acalypha - Fully Voiced Follower",""
|
||||
"0223","INIGO_V2.4C SE","https://www.nexusmods.com/skyrimspecialedition/mods/1461"
|
||||
"0224","Song Of The Green 1.4","https://www.nexusmods.com/skyrimspecialedition/mods/11278"
|
||||
"0225","Refined Auri SSE","https://www.nexusmods.com/skyrimspecialedition/mods/36444"
|
||||
"0226","SkyMirai Standalone Follower 2_11 SSE","https://www.nexusmods.com/skyrimspecialedition/mods/10908"
|
||||
"0227","Nicola Avenicci SE 0.3","https://www.nexusmods.com/skyrimspecialedition/mods/6862"
|
||||
"0229","WIC (Whinter is Coming) Cloaks SSE 2_4","https://www.nexusmods.com/skyrimspecialedition/mods/4933"
|
||||
"0230","Winter Is Coming - Cloaks RU SE","https://www.nexusmods.com/skyrimspecialedition/mods/62756"
|
||||
"0231","True Weapons","https://www.nexusmods.com/skyrimspecialedition/mods/38596"
|
||||
"0232","Eclipse_Mage_Outfit_HDT",""
|
||||
"0233","[SE] BDOR Navillera",""
|
||||
"0235","Dominica Preset RM SSE","https://www.nexusmods.com/skyrimspecialedition/mods/70448"
|
||||
"0236","Irena High Poly Head preset by ElleShet SE",""
|
||||
"0237","Nirani Indoril Body preset SE by ElleShet",""
|
||||
"0239","MainMenuRandomizerSE","https://www.nexusmods.com/skyrimspecialedition/mods/33574"
|
||||
"0240","Main Menu Redone - 1080p","https://www.nexusmods.com/skyrimspecialedition/mods/59993"
|
||||
"0241","Main Menu Design Replacer","https://www.nexusmods.com/skyrimspecialedition/mods/30810"
|
||||
"0242","Simple Load Screens","https://www.nexusmods.com/skyrimspecialedition/mods/49529"
|
||||
"0243","NORDIC UI - Alternate loading screen and start menu","https://www.nexusmods.com/skyrimspecialedition/mods/54153"
|
||||
"0245","Fantasy Soundtrack Project SE","https://www.nexusmods.com/skyrimspecialedition/mods/5268"
|
||||
"0246","Dreyma Mod [new Music of Skyrim]","https://www.nexusmods.com/skyrimspecialedition/mods/23386"
|
||||
"0248","NAT.ENB - ESP WEATHER PLUGIN","https://www.nexusmods.com/skyrimspecialedition/mods/27141"
|
||||
"0250","NordWarUA's Vanilla Armor Replacers SSE -Patches-","https://www.nexusmods.com/skyrimspecialedition/mods/31679"
|
||||
"0251","Northern Roads - Patches Compendium","https://www.nexusmods.com/skyrimspecialedition/mods/77893"
|
||||
"0252","Holds The City Overhaul -RUS-",""
|
||||
"0253","Majestic Mountains [RUS]",""
|
||||
"0254","Face Discoloration Fix SE","https://www.nexusmods.com/skyrimspecialedition/mods/42441"
|
||||
"0255","Simple Load Screens - Russian translation","https://www.nexusmods.com/skyrimspecialedition/mods/50912"
|
||||
"0256","Precision - Accurate Melee Collisions - RU","https://www.nexusmods.com/skyrimspecialedition/mods/72584"
|
||||
"0257","Pandorable's NPCs_SSE_v1.4_RU","https://www.nexusmods.com/skyrimspecialedition/mods/27582"
|
||||
"0258","Pandorables NPCs Males [RUS]",""
|
||||
"0259","Pandorables NPCs - Males 2 [RUS]",""
|
||||
"0260","PAN_AIO_small - AI Overhaul SSE patch-1-4-Rus",""
|
||||
"0261","Irena High Poly Head preset by ElleShet SE 3BBB Body",""
|
||||
"0262","Nirani Indoril High Poly Head preset SE by ElleShet",""
|
||||
"0263","Deadly Mutilation V1_3_3 CBBE meshes Pack","https://www.nexusmods.com/skyrimspecialedition/mods/34917"
|
||||
"0264","Bijin skin compability patch Alternative normal map","https://www.nexusmods.com/skyrimspecialedition/mods/27405"
|
||||
"0265","SEKIRO COMBAT SE - RU","https://www.nexusmods.com/skyrimspecialedition/mods/57678"
|
||||
"0266","Nordic UI -RUS-",""
|
||||
"0267","Campfire 1.12.1 and Frostfall 3.4.1SE","https://www.nexusmods.com/skyrimspecialedition/mods/17925"
|
||||
"0268","SkyrimForBattleV-Patch",""
|
||||
"0269","IFPV Detector Plugin","https://www.nexusmods.com/skyrimspecialedition/mods/22306"
|
||||
"0270","Jaxonz MCM Kicker SE_rus_",""
|
||||
"0271","SkyUI -RUS-","https://www.nexusmods.com/skyrimspecialedition/mods/21088"
|
||||
"0272","INIGO -RUS-",""
|
||||
"0273","Song of the Green _RUS_",""
|
||||
"0274","Inigo Banter patch",""
|
||||
"0275","Refined Auri SSE -PATCH-","https://www.nexusmods.com/skyrimspecialedition/mods/36444"
|
||||
"0276","Refined Auri SSE -RUS-",""
|
||||
"0277","Vokrii(26176)-2-0-1-RU","https://www.nexusmods.com/skyrimspecialedition/mods/28035"
|
||||
"0278","Саурон",""
|
||||
"0279","Sweety Preset",""
|
||||
"0280","Console font fix - RU","https://www.nexusmods.com/skyrimspecialedition/mods/55792"
|
||||
"0281","BodySlide output",""
|
||||
"0282","DBVO NordicUI Patch","https://www.nexusmods.com/skyrimspecialedition/mods/84329"
|
||||
"0284","Dragonborn Voice Over - Stereo Plugin Replacer","https://www.nexusmods.com/skyrimspecialedition/mods/90417"
|
||||
"0285","FNIS Overwrite",""
|
||||
"0286","Nemesis overwrite",""
|
||||
"0288","Pipe Smoking SE","https://www.nexusmods.com/skyrimspecialedition/mods/13061"
|
||||
"0289","Pipe Smoking SE RUS",""
|
||||
"0291","PapyrusUtil SE - Scripting Utility Functions","https://www.nexusmods.com/skyrimspecialedition/mods/13048"
|
||||
"0292","powerofthree's Papyrus Extender","https://www.nexusmods.com/skyrimspecialedition/mods/22854"
|
||||
#Mod_Priority,#Mod_Name,#Mod_Nexus_URL
|
||||
"0000","Unmanaged: FNIS",""
|
||||
"0002","DLC: HearthFires",""
|
||||
"0003","DLC: Dragonborn",""
|
||||
"0004","DLC: Dawnguard",""
|
||||
"0006","Address Library for SKSE Plugins","https://www.nexusmods.com/skyrimspecialedition/mods/32444"
|
||||
"0007","Unofficial Skyrim Special Edition Patch-RUS-RUS","https://www.nexusmods.com/skyrimspecialedition/mods/266"
|
||||
"0008","powerofthree's Tweaks","https://www.nexusmods.com/skyrimspecialedition/mods/51073"
|
||||
"0009","JContainers SE","https://www.nexusmods.com/skyrimspecialedition/mods/16495"
|
||||
"0010","ConsoleUtilSSE","https://www.nexusmods.com/skyrimspecialedition/mods/24858"
|
||||
"0011","ENB Helper SE 1.5 for SSE 1.5.97","https://www.nexusmods.com/skyrimspecialedition/mods/23174"
|
||||
"0012","Weapons Armor Clothing and Clutter Fixes","https://www.nexusmods.com/skyrimspecialedition/mods/18994"
|
||||
"0013","Weapons Armor Clothing and Clutter Fixes 2.9 RUS","https://www.nexusmods.com/skyrimspecialedition/mods/19284"
|
||||
"0014","SkyUI_5_2_SE","https://www.nexusmods.com/skyrimspecialedition/mods/12604"
|
||||
"0015","UIExtensions","https://www.nexusmods.com/skyrimspecialedition/mods/17561"
|
||||
"0016","DynDOLOD Resources SE","https://www.nexusmods.com/skyrimspecialedition/mods/32382"
|
||||
"0018","RaceCompatibility with fixes for SSE","https://www.nexusmods.com/skyrimspecialedition/mods/2853"
|
||||
"0019","more HUD SE Light Master- Pre AE","https://www.nexusmods.com/skyrimspecialedition/mods/12688"
|
||||
"0020","MCM Helper SE","https://www.nexusmods.com/skyrimspecialedition/mods/53000"
|
||||
"0021","FileAccess Interface for Skyrim SE Scripts - FISSES (FISS)","https://www.nexusmods.com/skyrimspecialedition/mods/13956"
|
||||
"0022","Papyrus API","https://www.nexusmods.com/skyrimspecialedition/mods/24858"
|
||||
"0023","IFrame Generator RE","https://www.nexusmods.com/skyrimspecialedition/mods/74401"
|
||||
"0024","dTry's Key Utils SE","https://www.nexusmods.com/skyrimspecialedition/mods/69944"
|
||||
"0025","Papyrus Ini Manipulator","https://www.nexusmods.com/skyrimspecialedition/mods/65634"
|
||||
"0027","SSE Display Tweaks","https://www.nexusmods.com/skyrimspecialedition/mods/34705"
|
||||
"0028","CrashLogger","https://www.nexusmods.com/skyrimspecialedition/mods/59818"
|
||||
"0029","CrashLoggerSE","https://www.nexusmods.com/skyrimspecialedition/mods/59818"
|
||||
"0035","BodySlide and Outfit Studio","https://www.nexusmods.com/skyrimspecialedition/mods/201"
|
||||
"0036","Перевод BodySlide and Outfit Studio",""
|
||||
"0038","Caliente's Beautiful Bodies Enhancer -CBBE-","https://www.nexusmods.com/skyrimspecialedition/mods/198"
|
||||
"0039","CBPC - Physics with Collisions","https://www.nexusmods.com/skyrimspecialedition/mods/21224"
|
||||
"0041","HDT-SMP for SSE 1.5.97 (avx on)","https://www.nexusmods.com/skyrimspecialedition/mods/30872"
|
||||
"0045","CBBE 3BA","https://www.nexusmods.com/skyrimspecialedition/mods/30174"
|
||||
"0046","XP32 Maximum Skeleton Special Extended","https://www.nexusmods.com/skyrimspecialedition/mods/1988"
|
||||
"0047","XP32 Maximum Skeleton Special Extended - Fixed Scripts","https://www.nexusmods.com/skyrimspecialedition/mods/44252"
|
||||
"0049","AddItemMenu - NG","https://www.nexusmods.com/skyrimspecialedition/mods/71409"
|
||||
"0054","NAT Stand Alone - 0.4.2 c","https://www.nexusmods.com/skyrimspecialedition/mods/12842"
|
||||
"0055","Enhanced Lights and FX","https://www.nexusmods.com/skyrimspecialedition/mods/2424"
|
||||
"0056","Cathedral - 3D Pine Grass - Full 3D Coverage","https://www.nexusmods.com/skyrimspecialedition/mods/42032"
|
||||
"0057","Nature of the Wild Lands - Landscape textures","https://www.nexusmods.com/skyrimspecialedition/mods/63604"
|
||||
"0058","Nature of the Wild Lands 2.0","https://www.nexusmods.com/skyrimspecialedition/mods/63604"
|
||||
"0059","Northern Roads","https://www.nexusmods.com/skyrimspecialedition/mods/77530"
|
||||
"0060","Northern Roads (SE-AE) - RU","https://www.nexusmods.com/skyrimspecialedition/mods/77652"
|
||||
"0061","Nature of the Wild Lands - Grass","https://www.nexusmods.com/skyrimspecialedition/mods/63604"
|
||||
"0062","Enhanced Landscapes","https://www.nexusmods.com/skyrimspecialedition/mods/18162"
|
||||
"0063","EVLaS","https://www.nexusmods.com/skyrimspecialedition/mods/63725"
|
||||
"0064","Morning Fogs SSE - Thin Fog","https://www.nexusmods.com/skyrimspecialedition/mods/21436"
|
||||
"0065","Water for ENB","https://www.nexusmods.com/skyrimspecialedition/mods/37061"
|
||||
"0066","ELFX Fixes (RUS)","https://www.nexusmods.com/skyrimspecialedition/mods/39765"
|
||||
"0067","Picta Series - Improved Sky Meshes","https://www.nexusmods.com/skyrimspecialedition/mods/58263"
|
||||
"0068","Storm Lightning for SSE and VR (Minty Lightning 2019)","https://www.nexusmods.com/skyrimspecialedition/mods/29243"
|
||||
"0070","Serious HD sse 1.2","https://www.nexusmods.com/skyrimspecialedition/mods/7435"
|
||||
"0071","HD Lods Textures SE 1K","https://www.nexusmods.com/skyrimspecialedition/mods/3333"
|
||||
"0072","B. Noble Skyrim - FULL PACK_Performance Edition","https://www.nexusmods.com/skyrimspecialedition/mods/21423"
|
||||
"0073","Static Mesh Improvement Mod (SMIM)","https://www.nexusmods.com/skyrimspecialedition/mods/659"
|
||||
"0074","Bellyaches Animal and Creature Pack",""
|
||||
"0075","Majestic Mountains Main","https://www.nexusmods.com/skyrimspecialedition/mods/11052"
|
||||
"0077","Schlongs of Skyrim SE",""
|
||||
"0079","Bijin Skin - CBBE","https://www.nexusmods.com/skyrimspecialedition/mods/20078"
|
||||
"0080","Fair Skin Complexion for CBBE",""
|
||||
"0082","Tempered Skins for Males - SOS Full Version","https://www.nexusmods.com/skyrimspecialedition/mods/7902"
|
||||
"0085","Kalilies Brows - High Poly Head","https://www.nexusmods.com/skyrimspecialedition/mods/57115"
|
||||
"0086","High Poly Head SE",""
|
||||
"0087","Expressive Facegen Morphs SE","https://www.nexusmods.com/skyrimspecialedition/mods/35785"
|
||||
"0088","Expressive Facial Animation - Female Edition","https://www.nexusmods.com/skyrimspecialedition/mods/19181"
|
||||
"0089","Kalilies Brows","https://www.nexusmods.com/skyrimspecialedition/mods/40595"
|
||||
"0091","ApachiiSkyHair_v_1_6_Full_optimized","https://www.nexusmods.com/skyrimspecialedition/mods/2014"
|
||||
"0092","ApachiiSkyHairMale_v_1_3","https://www.nexusmods.com/skyrimspecialedition/mods/2014"
|
||||
"0093","ApachiiSkyHairFemale_v_1_5_1","https://www.nexusmods.com/skyrimspecialedition/mods/2014"
|
||||
"0094","The Witcher 3 Eyes","https://www.nexusmods.com/skyrimspecialedition/mods/2921"
|
||||
"0095","HDT-SMP Racemenu Hairs and Wigs",""
|
||||
"0096","Female Makeup Suite - Face - 2K","https://www.nexusmods.com/skyrimspecialedition/mods/24495"
|
||||
"0097","The Eyes of Beauty SSE","https://www.nexusmods.com/skyrimspecialedition/mods/16185"
|
||||
"0098","KS Hairdos - HDT SMP (Physics)","https://www.nexusmods.com/skyrimspecialedition/mods/31300"
|
||||
"0099","Freckle Mania High Quality","https://www.nexusmods.com/skyrimspecialedition/mods/52841"
|
||||
"0100","SE SG Brows","https://www.nexusmods.com/skyrimspecialedition/mods/25890"
|
||||
"0101","Hvergelmir's Aesthetics - Brows","https://www.nexusmods.com/skyrimspecialedition/mods/1062"
|
||||
"0102","Hvergelmir Brows - For High Poly Head","https://www.nexusmods.com/skyrimspecialedition/mods/38493"
|
||||
"0103","Womens_Eyebrows",""
|
||||
"0104","Female Basic Makeup STANDALONE","https://www.nexusmods.com/skyrimspecialedition/mods/44716"
|
||||
"0105","Empyrean CS SSE 2.1","https://www.nexusmods.com/skyrimspecialedition/mods/38965"
|
||||
"0106","Great modders' SMP Hair pack and Xing","https://www.nexusmods.com/skyrimspecialedition/mods/31405"
|
||||
"0107","llygaid Eye - Unreal 1K","https://www.nexusmods.com/skyrimspecialedition/mods/91422"
|
||||
"0109","Dynamic Animation Replacer (DAR) v1.0.0 for SkyrimSE","https://www.nexusmods.com/skyrimspecialedition/mods/33746"
|
||||
"0110","Animation Motion Revolution","https://www.nexusmods.com/skyrimspecialedition/mods/50258"
|
||||
"0111","Nemesis Unlimited Behavior Engine","https://www.nexusmods.com/skyrimspecialedition/mods/60033"
|
||||
"0112","Gesture Animation Remix (DAR) - main archive","https://www.nexusmods.com/skyrimspecialedition/mods/64420"
|
||||
"0113","Conditional Gender Animations","https://www.nexusmods.com/skyrimspecialedition/mods/73446"
|
||||
"0116","Audio Overhaul for Skyrim 2","https://www.nexusmods.com/skyrimspecialedition/mods/12466"
|
||||
"0117","MLVUCSSE - English Original Voices","https://www.nexusmods.com/skyrimspecialedition/mods/91265"
|
||||
"0119","Holds SSE Complete - 0.0.9","https://www.nexusmods.com/skyrimspecialedition/mods/10609"
|
||||
"0120","Guards Armor Replacer","https://www.nexusmods.com/skyrimspecialedition/mods/22671"
|
||||
"0121","Guards Armor Replacer [RUS]",""
|
||||
"0122","NordWarUA's Vanilla Armor Replacers SSE","https://www.nexusmods.com/skyrimspecialedition/mods/31679"
|
||||
"0123","NordWarUA's Vanilla Armor Replacers SSE -RUS-","https://www.nexusmods.com/skyrimspecialedition/mods/39681"
|
||||
"0124","Lanterns Of Skyrim II",""
|
||||
"0125","Lanterns Of Skyrim II - FOMOD","https://www.nexusmods.com/skyrimspecialedition/mods/30817"
|
||||
"0128","HD HAIR(SE)",""
|
||||
"0129","NecDaz Feet v",""
|
||||
"0130","Feminine Hands for SE","https://www.nexusmods.com/skyrimspecialedition/mods/67522"
|
||||
"0131","Pandorable's NPCs","https://www.nexusmods.com/skyrimspecialedition/mods/19012"
|
||||
"0132","PAN_AIO",""
|
||||
"0133","PAN_DashingDefenders SE","https://www.nexusmods.com/skyrimspecialedition/mods/78600"
|
||||
"0134","Pandorable's Wicked Witches","https://www.nexusmods.com/skyrimspecialedition/mods/77478"
|
||||
"0135","Pandorable's NPCs - Sovngarde","https://www.nexusmods.com/skyrimspecialedition/mods/55877"
|
||||
"0136","PAN_DevotedDames","https://www.nexusmods.com/skyrimspecialedition/mods/59531"
|
||||
"0137","Pandorable's Serana","https://www.nexusmods.com/skyrimspecialedition/mods/24931"
|
||||
"0138","Pandorable's Marvellous Miners","https://www.nexusmods.com/skyrimspecialedition/mods/56399"
|
||||
"0139","Pandorable's Valerica","https://www.nexusmods.com/skyrimspecialedition/mods/35799"
|
||||
"0140","Pandorable's Frea and Frida","https://www.nexusmods.com/skyrimspecialedition/mods/31273"
|
||||
"0141","PAN_Nevri","https://www.nexusmods.com/skyrimspecialedition/mods/45128"
|
||||
"0142","PAN_Brelyna","https://www.nexusmods.com/skyrimspecialedition/mods/45128"
|
||||
"0143","Pandorable's Black-Briar Ladies","https://www.nexusmods.com/skyrimspecialedition/mods/33731"
|
||||
"0144","Pandorable's Warrior Women","https://www.nexusmods.com/skyrimspecialedition/mods/34464"
|
||||
"0145","Pandorable's Lethal Ladies","https://www.nexusmods.com/skyrimspecialedition/mods/36827"
|
||||
"0146","PAN_ShieldSisters","https://www.nexusmods.com/skyrimspecialedition/mods/42480"
|
||||
"0147","Pandorable's NPCs - Males","https://www.nexusmods.com/skyrimspecialedition/mods/42043"
|
||||
"0148","Pandorable's NPCs - Males 2","https://www.nexusmods.com/skyrimspecialedition/mods/50617"
|
||||
"0149","Bijin Warmaidens SE","https://www.nexusmods.com/skyrimspecialedition/mods/1825"
|
||||
"0150","Bijin Warmaidens SE - High-res skin textures for CBBE","https://www.nexusmods.com/skyrimspecialedition/mods/1825"
|
||||
"0151","Bijin Wives SE 1.1.2","https://www.nexusmods.com/skyrimspecialedition/mods/11247"
|
||||
"0152","Bijin NPCs SE 1.2.1","https://www.nexusmods.com/skyrimspecialedition/mods/11287"
|
||||
"0153","Bijin AIO SE for USSEP","https://www.nexusmods.com/skyrimspecialedition/mods/11287"
|
||||
"0161","Dragonborn Voice Overhaul","https://www.nexusmods.com/skyrimspecialedition/mods/84329"
|
||||
"0162","Bella Voice DBVO","https://www.nexusmods.com/skyrimspecialedition/mods/89810"
|
||||
"0163","Bella Voice Fix",""
|
||||
"0164","voicebella maingame and dlc","https://www.nexusmods.com/skyrimspecialedition/mods/89810"
|
||||
"0165","Name heroine DBVO","https://www.nexusmods.com/skyrimspecialedition/mods/89810"
|
||||
"0169","IFPV","https://www.nexusmods.com/skyrimspecialedition/mods/22306"
|
||||
"0170","RaceMenu Special Edition",""
|
||||
"0171","RaceMenu Special Edition RUS",""
|
||||
"0172","Alternate Start - Live Another Life","https://www.nexusmods.com/skyrimspecialedition/mods/272"
|
||||
"0174","Alternate Conversation Camera","https://www.nexusmods.com/skyrimspecialedition/mods/21220"
|
||||
"0175","SkyHUD","https://www.nexusmods.com/skyrimspecialedition/mods/463"
|
||||
"0176","Spell Perk Item Distributor (SPID)","https://www.nexusmods.com/skyrimspecialedition/mods/36869"
|
||||
"0177","Vokrii 3.8.2","https://www.nexusmods.com/skyrimspecialedition/mods/26176"
|
||||
"0178","Vokrii - Scaling Rebalance","https://www.nexusmods.com/skyrimspecialedition/mods/55091"
|
||||
"0179","NORDIC UI - Interface Overhaul","https://www.nexusmods.com/skyrimspecialedition/mods/49881"
|
||||
"0180","iNeed - Food, Water and Sleep - Continued","https://www.nexusmods.com/skyrimspecialedition/mods/19390"
|
||||
"0181","Frostfall 3.4.1 SE Release","https://www.nexusmods.com/skyrimspecialedition/mods/671"
|
||||
"0182","Campfire 1.12.1SEVR Release","https://www.nexusmods.com/skyrimspecialedition/mods/667"
|
||||
"0183","SkyrimForBattleV",""
|
||||
"0184","PC Head Tracking - MCM v4.8 SE","https://www.nexusmods.com/skyrimspecialedition/mods/11993"
|
||||
"0186","SummonShadowMERCHANT","https://www.nexusmods.com/skyrimspecialedition/mods/2177"
|
||||
"0188","VioLens - A Killmove Mod SE","https://www.nexusmods.com/skyrimspecialedition/mods/668"
|
||||
"0189","True Directional Movement","https://www.nexusmods.com/skyrimspecialedition/mods/51614"
|
||||
"0190","True Directional Movement RU","https://www.nexusmods.com/skyrimspecialedition/mods/53188"
|
||||
"0191","SkySA",""
|
||||
"0192","Grip Switch SkySA 1.2.1","https://www.nexusmods.com/skyrim/mods/54056"
|
||||
"0194","TK Dodge SE","https://www.nexusmods.com/skyrimspecialedition/mods/15309"
|
||||
"0195","JH Combat Animation Pack","https://www.nexusmods.com/skyrimspecialedition/mods/48500"
|
||||
"0197","Elder Souls - Sword 2.0 SE","https://www.nexusmods.com/skyrimspecialedition/mods/47191"
|
||||
"0198","Part 1) SEKIRO HUD by Inpa Skyrim","https://www.nexusmods.com/skyrimspecialedition/mods/41428"
|
||||
"0199","Part 2) SEKIRO COMBAT","https://www.nexusmods.com/skyrimspecialedition/mods/41428"
|
||||
"0200","Stances - Add-On","https://www.nexusmods.com/skyrimspecialedition/mods/41251"
|
||||
"0201","Stances - Dynamic Animation Sets","https://www.nexusmods.com/skyrimspecialedition/mods/40484"
|
||||
"0202","AMR Stance Framework","https://www.nexusmods.com/skyrimspecialedition/mods/54674"
|
||||
"0203","Enhanced Enemy AI","https://www.nexusmods.com/skyrimspecialedition/mods/32063"
|
||||
"0204","Precision","https://www.nexusmods.com/skyrimspecialedition/mods/72347"
|
||||
"0205","Keytrace","https://www.nexusmods.com/skyrimspecialedition/mods/63362"
|
||||
"0206","Elden Power Attack","https://www.nexusmods.com/skyrimspecialedition/mods/66711"
|
||||
"0207","Dark Souls Movement And Stamina Regen","https://www.nexusmods.com/skyrimspecialedition/mods/33135"
|
||||
"0208","Animated Potions","https://www.nexusmods.com/skyrimspecialedition/mods/73819"
|
||||
"0209","3PCO - 3rd Person Camera Overhaul","https://www.nexusmods.com/skyrimspecialedition/mods/89516"
|
||||
"0210","Nock to Tip",""
|
||||
"0211","Deadly Mutilation","https://www.nexusmods.com/skyrimspecialedition/mods/34917"
|
||||
"0213","Heroes Of Sovngarde","https://www.nexusmods.com/skyrimspecialedition/mods/3053"
|
||||
"0214","Populated Dungeons Caves Ruins Legendary Edition","https://www.nexusmods.com/skyrimspecialedition/mods/2820"
|
||||
"0216","[immyneedscake] Skydraenei by Eriayai CBBE SSE",""
|
||||
"0217","3BA SkyDraenei","https://www.nexusmods.com/skyrimspecialedition/mods/57617"
|
||||
"0218","True Demon Race","https://www.nexusmods.com/skyrimspecialedition/mods/58141"
|
||||
"0222","Acalypha - Fully Voiced Follower",""
|
||||
"0223","INIGO_V2.4C SE","https://www.nexusmods.com/skyrimspecialedition/mods/1461"
|
||||
"0224","Song Of The Green 1.4","https://www.nexusmods.com/skyrimspecialedition/mods/11278"
|
||||
"0225","Refined Auri SSE","https://www.nexusmods.com/skyrimspecialedition/mods/36444"
|
||||
"0226","SkyMirai Standalone Follower 2_11 SSE","https://www.nexusmods.com/skyrimspecialedition/mods/10908"
|
||||
"0227","Nicola Avenicci SE 0.3","https://www.nexusmods.com/skyrimspecialedition/mods/6862"
|
||||
"0229","WIC (Whinter is Coming) Cloaks SSE 2_4","https://www.nexusmods.com/skyrimspecialedition/mods/4933"
|
||||
"0230","Winter Is Coming - Cloaks RU SE","https://www.nexusmods.com/skyrimspecialedition/mods/62756"
|
||||
"0231","True Weapons","https://www.nexusmods.com/skyrimspecialedition/mods/38596"
|
||||
"0232","Eclipse_Mage_Outfit_HDT",""
|
||||
"0233","[SE] BDOR Navillera",""
|
||||
"0235","Dominica Preset RM SSE","https://www.nexusmods.com/skyrimspecialedition/mods/70448"
|
||||
"0236","Irena High Poly Head preset by ElleShet SE",""
|
||||
"0237","Nirani Indoril Body preset SE by ElleShet",""
|
||||
"0239","MainMenuRandomizerSE","https://www.nexusmods.com/skyrimspecialedition/mods/33574"
|
||||
"0240","Main Menu Redone - 1080p","https://www.nexusmods.com/skyrimspecialedition/mods/59993"
|
||||
"0241","Main Menu Design Replacer","https://www.nexusmods.com/skyrimspecialedition/mods/30810"
|
||||
"0242","Simple Load Screens","https://www.nexusmods.com/skyrimspecialedition/mods/49529"
|
||||
"0243","NORDIC UI - Alternate loading screen and start menu","https://www.nexusmods.com/skyrimspecialedition/mods/54153"
|
||||
"0245","Fantasy Soundtrack Project SE","https://www.nexusmods.com/skyrimspecialedition/mods/5268"
|
||||
"0246","Dreyma Mod [new Music of Skyrim]","https://www.nexusmods.com/skyrimspecialedition/mods/23386"
|
||||
"0248","NAT.ENB - ESP WEATHER PLUGIN","https://www.nexusmods.com/skyrimspecialedition/mods/27141"
|
||||
"0250","NordWarUA's Vanilla Armor Replacers SSE -Patches-","https://www.nexusmods.com/skyrimspecialedition/mods/31679"
|
||||
"0251","Northern Roads - Patches Compendium","https://www.nexusmods.com/skyrimspecialedition/mods/77893"
|
||||
"0252","Holds The City Overhaul -RUS-",""
|
||||
"0253","Majestic Mountains [RUS]",""
|
||||
"0254","Face Discoloration Fix SE","https://www.nexusmods.com/skyrimspecialedition/mods/42441"
|
||||
"0255","Simple Load Screens - Russian translation","https://www.nexusmods.com/skyrimspecialedition/mods/50912"
|
||||
"0256","Precision - Accurate Melee Collisions - RU","https://www.nexusmods.com/skyrimspecialedition/mods/72584"
|
||||
"0257","Pandorable's NPCs_SSE_v1.4_RU","https://www.nexusmods.com/skyrimspecialedition/mods/27582"
|
||||
"0258","Pandorables NPCs Males [RUS]",""
|
||||
"0259","Pandorables NPCs - Males 2 [RUS]",""
|
||||
"0260","PAN_AIO_small - AI Overhaul SSE patch-1-4-Rus",""
|
||||
"0261","Irena High Poly Head preset by ElleShet SE 3BBB Body",""
|
||||
"0262","Nirani Indoril High Poly Head preset SE by ElleShet",""
|
||||
"0263","Deadly Mutilation V1_3_3 CBBE meshes Pack","https://www.nexusmods.com/skyrimspecialedition/mods/34917"
|
||||
"0264","Bijin skin compability patch Alternative normal map","https://www.nexusmods.com/skyrimspecialedition/mods/27405"
|
||||
"0265","SEKIRO COMBAT SE - RU","https://www.nexusmods.com/skyrimspecialedition/mods/57678"
|
||||
"0266","Nordic UI -RUS-",""
|
||||
"0267","Campfire 1.12.1 and Frostfall 3.4.1SE","https://www.nexusmods.com/skyrimspecialedition/mods/17925"
|
||||
"0268","SkyrimForBattleV-Patch",""
|
||||
"0269","IFPV Detector Plugin","https://www.nexusmods.com/skyrimspecialedition/mods/22306"
|
||||
"0270","Jaxonz MCM Kicker SE_rus_",""
|
||||
"0271","SkyUI -RUS-","https://www.nexusmods.com/skyrimspecialedition/mods/21088"
|
||||
"0272","INIGO -RUS-",""
|
||||
"0273","Song of the Green _RUS_",""
|
||||
"0274","Inigo Banter patch",""
|
||||
"0275","Refined Auri SSE -PATCH-","https://www.nexusmods.com/skyrimspecialedition/mods/36444"
|
||||
"0276","Refined Auri SSE -RUS-",""
|
||||
"0277","Vokrii(26176)-2-0-1-RU","https://www.nexusmods.com/skyrimspecialedition/mods/28035"
|
||||
"0278","Саурон",""
|
||||
"0279","Sweety Preset",""
|
||||
"0280","Console font fix - RU","https://www.nexusmods.com/skyrimspecialedition/mods/55792"
|
||||
"0281","BodySlide output",""
|
||||
"0282","DBVO NordicUI Patch","https://www.nexusmods.com/skyrimspecialedition/mods/84329"
|
||||
"0284","Dragonborn Voice Over - Stereo Plugin Replacer","https://www.nexusmods.com/skyrimspecialedition/mods/90417"
|
||||
"0285","FNIS Overwrite",""
|
||||
"0286","Nemesis overwrite",""
|
||||
"0288","Pipe Smoking SE","https://www.nexusmods.com/skyrimspecialedition/mods/13061"
|
||||
"0289","Pipe Smoking SE RUS",""
|
||||
"0291","PapyrusUtil SE - Scripting Utility Functions","https://www.nexusmods.com/skyrimspecialedition/mods/13048"
|
||||
"0292","powerofthree's Papyrus Extender","https://www.nexusmods.com/skyrimspecialedition/mods/22854"
|
||||
|
|
@ -1,85 +1,85 @@
|
||||
<center>
|
||||
<h1>Блог</h1>
|
||||
</center>
|
||||
<div id="blog-posts">
|
||||
<center><p>Загрузка новостей...</p></center>
|
||||
<!-- <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#imageModal">...</button> -->
|
||||
|
||||
<div class="blog-post-card" id="post-0" style="margin-bottom: 1.5%;">
|
||||
<center>
|
||||
<h3 style="padding-top: 1.5%;">Пример заголовка</h3>
|
||||
<small style="color: rgba(255,255,255,0.5); padding-bottom: 0.5%;">
|
||||
<div>Опубликовано: 22.09.2003 в 7:00</div>
|
||||
<div id="posted-by-0" hidden>Через telegram</div>
|
||||
</small>
|
||||
</center>
|
||||
<p style="padding: 2%;">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
|
||||
<!-- Изображения -->
|
||||
<center><div id="carouselExampleIndicators" class="carousel slide blog-post-image-carousel" data-bs-ride="carousel" id="post-images-0" hidden>
|
||||
<div class="carousel-indicators">
|
||||
<button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button>
|
||||
<button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="1" aria-label="Slide 2"></button>
|
||||
<button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="2" aria-label="Slide 3"></button>
|
||||
</div>
|
||||
<div class="carousel-inner">
|
||||
<div class="carousel-item blog-post-image active" id="blog-img-0:0">
|
||||
<img src="https://warhammerart.com/wp-content/uploads/2021/08/Adeptus-Mechanicus.jpg" class="d-block w-100" alt="...">
|
||||
</div>
|
||||
<div class="carousel-item blog-post-image" id="blog-img-0:1">
|
||||
<img src="https://warzonestudio.com/image/catalog/blog/Admech-review/Admech-codex-review-02.jpg" class="d-block w-100" alt="...">
|
||||
</div>
|
||||
<div class="carousel-item blog-post-image" id="blog-img-0:2">
|
||||
<img src="https://i.pinimg.com/originals/7a/5c/0a/7a5c0a3a91db6011a49781c4016124a2.jpg" class="d-block w-100" alt="...">
|
||||
</div>
|
||||
</div>
|
||||
<button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide="prev">
|
||||
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
|
||||
<span class="visually-hidden">Предыдущий</span>
|
||||
</button>
|
||||
<button class="carousel-control-next" type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide="next">
|
||||
<span class="carousel-control-next-icon" aria-hidden="true"></span>
|
||||
<span class="visually-hidden">Следующий</span>
|
||||
</button>
|
||||
</div></center>
|
||||
<!-- Файлы -->
|
||||
<div class="accordion text-dark bg-dark" id="accordionExample" style="margin-left: 2.5%; margin-right: 2.5%; margin-top: 2.5%;" hidden>
|
||||
<div class="accordion-item">
|
||||
<h5 class="accordion-header" id="headingOne">
|
||||
<button class="accordion-button bg-dark text-light" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
|
||||
Файлы
|
||||
</button>
|
||||
</h5>
|
||||
<div id="collapseOne" class="accordion-collapse bg-dark text-light collapse show" aria-labelledby="headingOne" data-bs-parent="#accordionExample">
|
||||
<div class="accordion-body">
|
||||
<!-- <strong>Это тело аккордеона первого элемента.</strong> По умолчанию оно скрыто, пока плагин сворачивания не добавит соответствующие классы, которые мы используем для стилизации каждого элемента. Эти классы управляют общим внешним видом, а также отображением и скрытием с помощью переходов CSS. Вы можете изменить все это с помощью собственного CSS или переопределить наши переменные по умолчанию. Также стоит отметить, что практически любой HTML может быть помещен в <code>.accordion-body</code>, хотя переход ограничивает переполнение. -->
|
||||
<p><a href="https://github.com/student-manager/student-manager/releases/download/1.1.1/windows.x64.Student.manager.portabel.zip">windows.x64.Student.manager.portabel.zip (111 Mb)</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Рекации -->
|
||||
<button type="button" class="btn btn-outline-success" style="margin-left: 2.5%; margin-top: 1.5%; margin-bottom: 1.5%;" onclick="alert('Функция в разработке!');">Нравится (0)</button>
|
||||
<button type="button" class="btn btn-outline-secondary" style="margin-left: 0.5%; margin-top: 1.5%; margin-bottom: 1.5%;" onclick="alert('Функция в разработке!');">Комментарии (0)</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Модальное окно просмотра изображений -->
|
||||
<div class="modal fade text-light" id="imageModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog modal-lg modal-img-view modal-dialog-centered modal-dialog-scrollable">
|
||||
<!-- <div class="modal-dialog modal-img-view"> -->
|
||||
<div class="modal-content text-light bg-dark">
|
||||
<!-- <img src="https://warhammerart.com/wp-content/uploads/2021/08/Adeptus-Mechanicus.jpg"> -->
|
||||
<div class="modal-header">
|
||||
<h1 class="modal-title fs-5" id="exampleModalLabel">Просмотр изображения</h1>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Закрыть"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<center><img id="image-viewer-url" src="https://warhammerart.com/wp-content/uploads/2021/08/Adeptus-Mechanicus.jpg" style="width: 100%;"></center>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Закрыть</button>
|
||||
<!-- <button type="button" class="btn btn-primary">Сохранить изменения</button> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<center>
|
||||
<h1>Блог</h1>
|
||||
</center>
|
||||
<div id="blog-posts">
|
||||
<center><p>Загрузка новостей...</p></center>
|
||||
<!-- <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#imageModal">...</button> -->
|
||||
|
||||
<div class="blog-post-card" id="post-0" style="margin-bottom: 1.5%;">
|
||||
<center>
|
||||
<h3 style="padding-top: 1.5%;">Пример заголовка</h3>
|
||||
<small style="color: rgba(255,255,255,0.5); padding-bottom: 0.5%;">
|
||||
<div>Опубликовано: 22.09.2003 в 7:00</div>
|
||||
<div id="posted-by-0" hidden>Через telegram</div>
|
||||
</small>
|
||||
</center>
|
||||
<p style="padding: 2%;">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
|
||||
<!-- Изображения -->
|
||||
<center><div id="carouselExampleIndicators" class="carousel slide blog-post-image-carousel" data-bs-ride="carousel" id="post-images-0" hidden>
|
||||
<div class="carousel-indicators">
|
||||
<button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button>
|
||||
<button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="1" aria-label="Slide 2"></button>
|
||||
<button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="2" aria-label="Slide 3"></button>
|
||||
</div>
|
||||
<div class="carousel-inner">
|
||||
<div class="carousel-item blog-post-image active" id="blog-img-0:0">
|
||||
<img src="https://warhammerart.com/wp-content/uploads/2021/08/Adeptus-Mechanicus.jpg" class="d-block w-100" alt="...">
|
||||
</div>
|
||||
<div class="carousel-item blog-post-image" id="blog-img-0:1">
|
||||
<img src="https://warzonestudio.com/image/catalog/blog/Admech-review/Admech-codex-review-02.jpg" class="d-block w-100" alt="...">
|
||||
</div>
|
||||
<div class="carousel-item blog-post-image" id="blog-img-0:2">
|
||||
<img src="https://i.pinimg.com/originals/7a/5c/0a/7a5c0a3a91db6011a49781c4016124a2.jpg" class="d-block w-100" alt="...">
|
||||
</div>
|
||||
</div>
|
||||
<button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide="prev">
|
||||
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
|
||||
<span class="visually-hidden">Предыдущий</span>
|
||||
</button>
|
||||
<button class="carousel-control-next" type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide="next">
|
||||
<span class="carousel-control-next-icon" aria-hidden="true"></span>
|
||||
<span class="visually-hidden">Следующий</span>
|
||||
</button>
|
||||
</div></center>
|
||||
<!-- Файлы -->
|
||||
<div class="accordion text-dark bg-dark" id="accordionExample" style="margin-left: 2.5%; margin-right: 2.5%; margin-top: 2.5%;" hidden>
|
||||
<div class="accordion-item">
|
||||
<h5 class="accordion-header" id="headingOne">
|
||||
<button class="accordion-button bg-dark text-light" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
|
||||
Файлы
|
||||
</button>
|
||||
</h5>
|
||||
<div id="collapseOne" class="accordion-collapse bg-dark text-light collapse show" aria-labelledby="headingOne" data-bs-parent="#accordionExample">
|
||||
<div class="accordion-body">
|
||||
<!-- <strong>Это тело аккордеона первого элемента.</strong> По умолчанию оно скрыто, пока плагин сворачивания не добавит соответствующие классы, которые мы используем для стилизации каждого элемента. Эти классы управляют общим внешним видом, а также отображением и скрытием с помощью переходов CSS. Вы можете изменить все это с помощью собственного CSS или переопределить наши переменные по умолчанию. Также стоит отметить, что практически любой HTML может быть помещен в <code>.accordion-body</code>, хотя переход ограничивает переполнение. -->
|
||||
<p><a href="https://github.com/student-manager/student-manager/releases/download/1.1.1/windows.x64.Student.manager.portabel.zip">windows.x64.Student.manager.portabel.zip (111 Mb)</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Рекации -->
|
||||
<button type="button" class="btn btn-outline-success" style="margin-left: 2.5%; margin-top: 1.5%; margin-bottom: 1.5%;" onclick="alert('Функция в разработке!');">Нравится (0)</button>
|
||||
<button type="button" class="btn btn-outline-secondary" style="margin-left: 0.5%; margin-top: 1.5%; margin-bottom: 1.5%;" onclick="alert('Функция в разработке!');">Комментарии (0)</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Модальное окно просмотра изображений -->
|
||||
<div class="modal fade text-light" id="imageModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog modal-lg modal-img-view modal-dialog-centered modal-dialog-scrollable">
|
||||
<!-- <div class="modal-dialog modal-img-view"> -->
|
||||
<div class="modal-content text-light bg-dark">
|
||||
<!-- <img src="https://warhammerart.com/wp-content/uploads/2021/08/Adeptus-Mechanicus.jpg"> -->
|
||||
<div class="modal-header">
|
||||
<h1 class="modal-title fs-5" id="exampleModalLabel">Просмотр изображения</h1>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Закрыть"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<center><img id="image-viewer-url" src="https://warhammerart.com/wp-content/uploads/2021/08/Adeptus-Mechanicus.jpg" style="width: 100%;"></center>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Закрыть</button>
|
||||
<!-- <button type="button" class="btn btn-primary">Сохранить изменения</button> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -1,19 +1,19 @@
|
||||
<center>
|
||||
<h1 style="margin-top: 5px;">Мои контакты</h1>
|
||||
<h2><img src="/assets/avatar.png" class="rounded" alt="...", style="width:25vh"></h2>
|
||||
<h2>Обратная связь</h2>
|
||||
<div class="btn-group" role="group" aria-label="Basic example">
|
||||
<button type="button" class="btn btn-dark btn-outline-light" onclick='fl.goToLocation("https://vk.com/decimus_crew")'>Вконтакте</button>
|
||||
<button type="button" class="btn btn-dark btn-outline-light" onclick='fl.goToLocation("https://t.me/Nikiroy78")'>Telegram</button>
|
||||
<button type="button" class="btn btn-dark btn-outline-light" onclick='fl.goToLocation("https://www.facebook.com/profile.php?id=100093948516820")'>Facebook</button>
|
||||
</div><p></p>
|
||||
<div class="btn-group" role="group" aria-label="Basic example">
|
||||
<button type="button" class="btn btn-dark btn-outline-light" onclick='fl.goToLocation("https://github.com/Nikiroy78")'>GitHub</button>
|
||||
<button type="button" class="btn btn-dark btn-outline-light" onclick='fl.goToLocation("https://gamer-mods.ru/index/8-1000260")'>gamer-mods.ru</button>
|
||||
</div>
|
||||
<h2>Паблики, блоги, иные ресурсы</h2>
|
||||
<div class="btn-group" role="group" aria-label="Basic example">
|
||||
<button type="button" class="btn btn-dark btn-outline-light" onclick='fl.goToLocation("https://vk.com/imperium_human")'>Вконтакте</button>
|
||||
<!-- <button type="button" class="btn btn-dark btn-outline-light" onclick='fl.goToLocation("https://t.me/FullGreaM")'>Телеграм</button> -->
|
||||
</div>
|
||||
<center>
|
||||
<h1 style="margin-top: 5px;">Мои контакты</h1>
|
||||
<h2><img src="/assets/avatar.png" class="rounded" alt="...", style="width:25vh"></h2>
|
||||
<h2>Обратная связь</h2>
|
||||
<div class="btn-group" role="group" aria-label="Basic example">
|
||||
<button type="button" class="btn btn-dark btn-outline-light" onclick='fl.goToLocation("https://vk.com/decimus_crew")'>Вконтакте</button>
|
||||
<button type="button" class="btn btn-dark btn-outline-light" onclick='fl.goToLocation("https://t.me/Nikiroy78")'>Telegram</button>
|
||||
<button type="button" class="btn btn-dark btn-outline-light" onclick='fl.goToLocation("https://www.facebook.com/profile.php?id=100093948516820")'>Facebook</button>
|
||||
</div><p></p>
|
||||
<div class="btn-group" role="group" aria-label="Basic example">
|
||||
<button type="button" class="btn btn-dark btn-outline-light" onclick='fl.goToLocation("https://github.com/Nikiroy78")'>GitHub</button>
|
||||
<button type="button" class="btn btn-dark btn-outline-light" onclick='fl.goToLocation("https://gamer-mods.ru/index/8-1000260")'>gamer-mods.ru</button>
|
||||
</div>
|
||||
<h2>Паблики, блоги, иные ресурсы</h2>
|
||||
<div class="btn-group" role="group" aria-label="Basic example">
|
||||
<button type="button" class="btn btn-dark btn-outline-light" onclick='fl.goToLocation("https://vk.com/imperium_human")'>Вконтакте</button>
|
||||
<!-- <button type="button" class="btn btn-dark btn-outline-light" onclick='fl.goToLocation("https://t.me/FullGreaM")'>Телеграм</button> -->
|
||||
</div>
|
||||
</center>
|
@ -1,22 +1,22 @@
|
||||
<center><h1>Документация технических стандартов IWW</h1></center>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">№</th>
|
||||
<th scope="col">Материал</th>
|
||||
<th scope="col">Дата опубликования</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th scope="row">1</th>
|
||||
<td>-</td>
|
||||
<td>22/11/2011</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">2</th>
|
||||
<td>-</td>
|
||||
<td>22/11/2011</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<center><h1>Документация технических стандартов IWW</h1></center>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">№</th>
|
||||
<th scope="col">Материал</th>
|
||||
<th scope="col">Дата опубликования</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th scope="row">1</th>
|
||||
<td>-</td>
|
||||
<td>22/11/2011</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">2</th>
|
||||
<td>-</td>
|
||||
<td>22/11/2011</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
@ -1,47 +1,47 @@
|
||||
<center>
|
||||
<!-- <h1>Добро пожаловать</h1> -->
|
||||
<div id="carouselExampleDark" class="carousel carousel-dark slide">
|
||||
<div class="carousel-indicators">
|
||||
<button type="button" data-bs-target="#carouselExampleDark" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button>
|
||||
<button type="button" data-bs-target="#carouselExampleDark" data-bs-slide-to="1" aria-label="Slide 2"></button>
|
||||
<button type="button" data-bs-target="#carouselExampleDark" data-bs-slide-to="2" aria-label="Slide 3"></button>
|
||||
</div>
|
||||
<div class="carousel-inner">
|
||||
<div class="carousel-item active" data-bs-interval="10000">
|
||||
<img id="main_img1" src="/assets/hello/1.png" class="d-block w-100" alt="...">
|
||||
<div class="carousel-caption d-none d-md-block">
|
||||
<h5 style="color: white;">Добро пожаловать на мой ресурс</h5>
|
||||
<p style="color: white;">Это официальный ресурс FullGreaM.</p>
|
||||
<button onclick="fl.go('/contacts');" type="button" class="btn btn-outline-light">Мои контакты</button>
|
||||
<div class="centered-el"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="carousel-item" data-bs-interval="2000">
|
||||
<img id="main_img2" src="/assets/hello/2.png" class="d-block w-100" alt="...">
|
||||
<div class="carousel-caption d-none d-md-block">
|
||||
<h5 style="color: white;">О проектах и работах</h5>
|
||||
<p style="color: white;">Здесь представлены мои проекты, работы с активными и актуальными ссылками на скачивание.</p>
|
||||
<button onclick="fl.go('/projects');" type="button" class="btn btn-outline-light">Мои проекты</button>
|
||||
<div class="centered-el"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="carousel-item">
|
||||
<img id="main_img3" src="/assets/hello/3.png" class="d-block w-100" alt="...">
|
||||
<div class="carousel-caption d-none d-md-block">
|
||||
<h5 style="color: white;">О прочей информации</h5>
|
||||
<p style="color: white;">Также здесь представлен (или будет представлен) мой личный блог, а также, блог, касающийся моих проектов или проектов моей команды.</p>
|
||||
<button onclick="fl.go('/blog');" type="button" class="btn btn-outline-light">Мой блог</button>
|
||||
<div class="centered-el"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleDark" data-bs-slide="prev">
|
||||
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
|
||||
<span class="visually-hidden">Предыдущий</span>
|
||||
</button>
|
||||
<button class="carousel-control-next" type="button" data-bs-target="#carouselExampleDark" data-bs-slide="next">
|
||||
<span class="carousel-control-next-icon" aria-hidden="true"></span>
|
||||
<span class="visually-hidden">Следующий</span>
|
||||
</button>
|
||||
</div>
|
||||
<center>
|
||||
<!-- <h1>Добро пожаловать</h1> -->
|
||||
<div id="carouselExampleDark" class="carousel carousel-dark slide">
|
||||
<div class="carousel-indicators">
|
||||
<button type="button" data-bs-target="#carouselExampleDark" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button>
|
||||
<button type="button" data-bs-target="#carouselExampleDark" data-bs-slide-to="1" aria-label="Slide 2"></button>
|
||||
<button type="button" data-bs-target="#carouselExampleDark" data-bs-slide-to="2" aria-label="Slide 3"></button>
|
||||
</div>
|
||||
<div class="carousel-inner">
|
||||
<div class="carousel-item active" data-bs-interval="10000">
|
||||
<img id="main_img1" src="/assets/hello/1.png" class="d-block w-100" alt="...">
|
||||
<div class="carousel-caption d-none d-md-block">
|
||||
<h5 style="color: white;">Добро пожаловать на мой ресурс</h5>
|
||||
<p style="color: white;">Это официальный ресурс FullGreaM.</p>
|
||||
<button onclick="fl.go('/contacts');" type="button" class="btn btn-outline-light">Мои контакты</button>
|
||||
<div class="centered-el"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="carousel-item" data-bs-interval="2000">
|
||||
<img id="main_img2" src="/assets/hello/2.png" class="d-block w-100" alt="...">
|
||||
<div class="carousel-caption d-none d-md-block">
|
||||
<h5 style="color: white;">О проектах и работах</h5>
|
||||
<p style="color: white;">Здесь представлены мои проекты, работы с активными и актуальными ссылками на скачивание.</p>
|
||||
<button onclick="fl.go('/projects');" type="button" class="btn btn-outline-light">Мои проекты</button>
|
||||
<div class="centered-el"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="carousel-item">
|
||||
<img id="main_img3" src="/assets/hello/3.png" class="d-block w-100" alt="...">
|
||||
<div class="carousel-caption d-none d-md-block">
|
||||
<h5 style="color: white;">О прочей информации</h5>
|
||||
<p style="color: white;">Также здесь представлен (или будет представлен) мой личный блог, а также, блог, касающийся моих проектов или проектов моей команды.</p>
|
||||
<button onclick="fl.go('/blog');" type="button" class="btn btn-outline-light">Мой блог</button>
|
||||
<div class="centered-el"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleDark" data-bs-slide="prev">
|
||||
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
|
||||
<span class="visually-hidden">Предыдущий</span>
|
||||
</button>
|
||||
<button class="carousel-control-next" type="button" data-bs-target="#carouselExampleDark" data-bs-slide="next">
|
||||
<span class="carousel-control-next-icon" aria-hidden="true"></span>
|
||||
<span class="visually-hidden">Следующий</span>
|
||||
</button>
|
||||
</div>
|
||||
</center>
|
@ -1,19 +1,19 @@
|
||||
<center>
|
||||
<div class="centered-el"></div>
|
||||
<!-- <h1>It's all worked!</h1> -->
|
||||
<div id="alt-carousel-viewer">
|
||||
<h5 style="color: white;">Добро пожаловать на мой ресурс</h5><p style="color: white;">Это официальный ресурс FullGreaM.</p><button onclick="fl.go('/contacts');" type="button" class="btn btn-outline-light">Мои контакты</button>
|
||||
</div>
|
||||
<div id="main-window-alt" class="carousel main-window-alt">
|
||||
<!-- <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleDark" data-bs-slide="prev" id="alt-main-prev" onclick="setAltMenuPage(altMenuSelectedPage - 1)"> -->
|
||||
<button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleDark" data-bs-slide="prev" id="alt-main-prev">
|
||||
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
|
||||
<span class="visually-hidden">Предыдущий</span>
|
||||
</button>
|
||||
<!-- <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleDark" data-bs-slide="next" id="alt-main-next" onclick="setAltMenuPage(altMenuSelectedPage + 1)"> -->
|
||||
<button class="carousel-control-next" type="button" data-bs-target="#carouselExampleDark" data-bs-slide="next" id="alt-main-next">
|
||||
<span class="carousel-control-next-icon" aria-hidden="true"></span>
|
||||
<span class="visually-hidden">Предыдущий</span>
|
||||
</button>
|
||||
</div>
|
||||
<center>
|
||||
<div class="centered-el"></div>
|
||||
<!-- <h1>It's all worked!</h1> -->
|
||||
<div id="alt-carousel-viewer">
|
||||
<h5 style="color: white;">Добро пожаловать на мой ресурс</h5><p style="color: white;">Это официальный ресурс FullGreaM.</p><button onclick="fl.go('/contacts');" type="button" class="btn btn-outline-light">Мои контакты</button>
|
||||
</div>
|
||||
<div id="main-window-alt" class="carousel main-window-alt">
|
||||
<!-- <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleDark" data-bs-slide="prev" id="alt-main-prev" onclick="setAltMenuPage(altMenuSelectedPage - 1)"> -->
|
||||
<button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleDark" data-bs-slide="prev" id="alt-main-prev">
|
||||
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
|
||||
<span class="visually-hidden">Предыдущий</span>
|
||||
</button>
|
||||
<!-- <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleDark" data-bs-slide="next" id="alt-main-next" onclick="setAltMenuPage(altMenuSelectedPage + 1)"> -->
|
||||
<button class="carousel-control-next" type="button" data-bs-target="#carouselExampleDark" data-bs-slide="next" id="alt-main-next">
|
||||
<span class="carousel-control-next-icon" aria-hidden="true"></span>
|
||||
<span class="visually-hidden">Предыдущий</span>
|
||||
</button>
|
||||
</div>
|
||||
</center>
|
@ -1,7 +1,7 @@
|
||||
<center>
|
||||
<img src="/assets/no_mobile.png" class="sys-win-img"></img>
|
||||
<h1>Внимание!</h1>
|
||||
<h2>Не адаптировано под мобильные устройства</h2>
|
||||
<p>Мой ресурс пока что не адаптирован под мобильные устройства, тем не менее, вы всё ещё можете пользоваться сайтом</p>
|
||||
<button type="button" class="btn btn-dark btn-outline-light" id="mobile-warning-go">Продолжить</button>
|
||||
<center>
|
||||
<img src="/assets/no_mobile.png" class="sys-win-img"></img>
|
||||
<h1>Внимание!</h1>
|
||||
<h2>Не адаптировано под мобильные устройства</h2>
|
||||
<p>Мой ресурс пока что не адаптирован под мобильные устройства, тем не менее, вы всё ещё можете пользоваться сайтом</p>
|
||||
<button type="button" class="btn btn-dark btn-outline-light" id="mobile-warning-go">Продолжить</button>
|
||||
</center>
|
@ -1,28 +1,28 @@
|
||||
<center>
|
||||
<h1 style="margin-top: 5px; margin-bottom: 15px;">Менеджер паролей онлайн</h1>
|
||||
</center>
|
||||
<div class="password-manger-form bg-light text-dark">
|
||||
<form>
|
||||
<div class="mb-3">
|
||||
<center><label class="form-label">Ключевое слово</label></center>
|
||||
<input type="password" class="form-control" id="keyword" aria-describedby="kwHelp">
|
||||
<div id="kwHelp" class="form-text">Является "корневым паролем" для генерации паролей</div>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<center><label class="form-label">Логин в системе</label></center>
|
||||
<input type="text" class="form-control" id="login" aria-describedby="loginHelp">
|
||||
<div id="loginHelp" class="form-text">Желательно использовать следующий приоритет: логин->почта->номер телефона; это поможет вам знать корректный пароль от системы</div>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<center><label class="form-label">Сервис</label></center>
|
||||
<input type="text" class="form-control" id="service" aria-describedby="serviceHelp">
|
||||
<div id="serviceHelp" class="form-text">Используйте доменные имена без сокращений (vk.com; yandex.ru; mail.yandex.ru; youtube.com; etc.)</div>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<center><label class="form-label">Сгенерированный пароль</label></center>
|
||||
<input type="password" class="form-control" id="generated-password" aria-describedby="genHelp" readonly>
|
||||
<div id="genHelp" class="form-text">Сгенерированный пароль по формуле: base64(sha1(`${keyword}::${service}::${login}`)) + "#"</div>
|
||||
</div>
|
||||
</form>
|
||||
<center><button type="submit" class="btn btn-primary" id="generate-password">Сгенерировать</button> <button class="btn btn-secondary" id="copy-password">Скопировать</button></center>
|
||||
<center>
|
||||
<h1 style="margin-top: 5px; margin-bottom: 15px;">Менеджер паролей онлайн</h1>
|
||||
</center>
|
||||
<div class="password-manger-form bg-light text-dark">
|
||||
<form>
|
||||
<div class="mb-3">
|
||||
<center><label class="form-label">Ключевое слово</label></center>
|
||||
<input type="password" class="form-control" id="keyword" aria-describedby="kwHelp">
|
||||
<div id="kwHelp" class="form-text">Является "корневым паролем" для генерации паролей</div>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<center><label class="form-label">Логин в системе</label></center>
|
||||
<input type="text" class="form-control" id="login" aria-describedby="loginHelp">
|
||||
<div id="loginHelp" class="form-text">Желательно использовать следующий приоритет: логин->почта->номер телефона; это поможет вам знать корректный пароль от системы</div>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<center><label class="form-label">Сервис</label></center>
|
||||
<input type="text" class="form-control" id="service" aria-describedby="serviceHelp">
|
||||
<div id="serviceHelp" class="form-text">Используйте доменные имена без сокращений (vk.com; yandex.ru; mail.yandex.ru; youtube.com; etc.)</div>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<center><label class="form-label">Сгенерированный пароль</label></center>
|
||||
<input type="password" class="form-control" id="generated-password" aria-describedby="genHelp" readonly>
|
||||
<div id="genHelp" class="form-text">Сгенерированный пароль по формуле: base64(sha1(`${keyword}::${service}::${login}`)) + "#"</div>
|
||||
</div>
|
||||
</form>
|
||||
<center><button type="submit" class="btn btn-primary" id="generate-password">Сгенерировать</button> <button class="btn btn-secondary" id="copy-password">Скопировать</button></center>
|
||||
</div>
|
@ -1,27 +1,27 @@
|
||||
<div id="releases" class="release-menu">
|
||||
<h1>Релизы программ</h1>
|
||||
<hr>
|
||||
<div id="realese-item-1" class="release-item">
|
||||
<h3>Планировщик студента</h3>
|
||||
<hr>
|
||||
<p><strong>Описание</strong></p>
|
||||
<p>Планировщик студента - программа для планирования своего учебного времени, планировании задач и целей. Программа помогает в организации времени и досуга.</p>
|
||||
<p><strong>Установка</strong></p>
|
||||
<div class="accordion text-bg-info" id="accordionExample">
|
||||
<div class="accordion-item">
|
||||
<h5 class="accordion-header" id="headingOne">
|
||||
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
|
||||
Актуальные версии релиза
|
||||
</button>
|
||||
</h5>
|
||||
<div id="collapseOne" class="accordion-collapse collapse show" aria-labelledby="headingOne" data-bs-parent="#accordionExample">
|
||||
<div class="accordion-body">
|
||||
<!-- <strong>Это тело аккордеона первого элемента.</strong> По умолчанию оно скрыто, пока плагин сворачивания не добавит соответствующие классы, которые мы используем для стилизации каждого элемента. Эти классы управляют общим внешним видом, а также отображением и скрытием с помощью переходов CSS. Вы можете изменить все это с помощью собственного CSS или переопределить наши переменные по умолчанию. Также стоит отметить, что практически любой HTML может быть помещен в <code>.accordion-body</code>, хотя переход ограничивает переполнение. -->
|
||||
<p><a href="https://github.com/student-manager/student-manager/releases/download/1.1.1/windows.x64.Student.manager.portabel.zip"><svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M0 93.7l183.6-25.3v177.4H0V93.7zm0 324.6l183.6 25.3V268.4H0v149.9zm203.8 28L448 480V268.4H203.8v177.9zm0-380.6v180.1H448V32L203.8 65.7z"/></svg> Windows x64 (10/11) v.1.1.1 (111 mb)</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="releases" class="release-menu">
|
||||
<h1>Релизы программ</h1>
|
||||
<hr>
|
||||
<div id="realese-item-1" class="release-item">
|
||||
<h3>Планировщик студента</h3>
|
||||
<hr>
|
||||
<p><strong>Описание</strong></p>
|
||||
<p>Планировщик студента - программа для планирования своего учебного времени, планировании задач и целей. Программа помогает в организации времени и досуга.</p>
|
||||
<p><strong>Установка</strong></p>
|
||||
<div class="accordion text-bg-info" id="accordionExample">
|
||||
<div class="accordion-item">
|
||||
<h5 class="accordion-header" id="headingOne">
|
||||
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
|
||||
Актуальные версии релиза
|
||||
</button>
|
||||
</h5>
|
||||
<div id="collapseOne" class="accordion-collapse collapse show" aria-labelledby="headingOne" data-bs-parent="#accordionExample">
|
||||
<div class="accordion-body">
|
||||
<!-- <strong>Это тело аккордеона первого элемента.</strong> По умолчанию оно скрыто, пока плагин сворачивания не добавит соответствующие классы, которые мы используем для стилизации каждого элемента. Эти классы управляют общим внешним видом, а также отображением и скрытием с помощью переходов CSS. Вы можете изменить все это с помощью собственного CSS или переопределить наши переменные по умолчанию. Также стоит отметить, что практически любой HTML может быть помещен в <code>.accordion-body</code>, хотя переход ограничивает переполнение. -->
|
||||
<p><a href="https://github.com/student-manager/student-manager/releases/download/1.1.1/windows.x64.Student.manager.portabel.zip"><svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M0 93.7l183.6-25.3v177.4H0V93.7zm0 324.6l183.6 25.3V268.4H0v149.9zm203.8 28L448 480V268.4H203.8v177.9zm0-380.6v180.1H448V32L203.8 65.7z"/></svg> Windows x64 (10/11) v.1.1.1 (111 mb)</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
@ -1,5 +1,5 @@
|
||||
<center>
|
||||
<img src="/assets/at_work.png" class="sys-win-img"></img>
|
||||
<h1>Страница в разработке</h1>
|
||||
<p>Страница находится в разработке и на данный момент не доступна :(</p>
|
||||
<center>
|
||||
<img src="/assets/at_work.png" class="sys-win-img"></img>
|
||||
<h1>Страница в разработке</h1>
|
||||
<p>Страница находится в разработке и на данный момент не доступна :(</p>
|
||||
</center>
|
@ -1,133 +1,133 @@
|
||||
function setLocation(curLoc){
|
||||
try {
|
||||
history.pushState(null, null, curLoc);
|
||||
return;
|
||||
}
|
||||
catch(e) {}
|
||||
location.hash = '#' + curLoc;
|
||||
}
|
||||
|
||||
class FlCursor {
|
||||
constructor (options) {
|
||||
this.options = options;
|
||||
if (!options) {
|
||||
this.options = {
|
||||
saveCache : true,
|
||||
ignoreCachePath : [],
|
||||
saveOnlyPath : ["/fl_system/load_page.html"]
|
||||
}
|
||||
}
|
||||
this.cache = new Object();
|
||||
if (!Array.isArray(this.options.ignoreCachePath)) {
|
||||
this.options.ignoreCachePath = new Array();
|
||||
}
|
||||
|
||||
this.curLoc = location.pathname;
|
||||
this.events = {};
|
||||
|
||||
// Включаем автоматическое обновление содержимого страницы при нажатии кнопки "Назад"
|
||||
window.onpopstate = (event) => {
|
||||
this.go(location.pathname, false);
|
||||
}
|
||||
}
|
||||
|
||||
isCanCachePage (url) {
|
||||
return (this.options.saveCache && this.options.ignoreCachePath.indexOf(url) == -1) ||
|
||||
(!this.options.saveCache && this.options.saveOnlyPath.indexOf(url) != -1);
|
||||
}
|
||||
|
||||
bindLoad (page, handler) {
|
||||
this.events[page] = handler;
|
||||
}
|
||||
|
||||
getHttpContent (url) {
|
||||
if (!this.cache[url]) {
|
||||
let rq = new XMLHttpRequest();
|
||||
rq.open('GET', url, false);
|
||||
rq.send();
|
||||
|
||||
if (rq.status == 200) {
|
||||
if (this.isCanCachePage(url)) {
|
||||
this.cache[url] = rq.responseText;
|
||||
}
|
||||
return rq.responseText;
|
||||
}
|
||||
else if (rq.status == 404) {
|
||||
rq = new XMLHttpRequest();
|
||||
rq.open('GET', `/fl_system/404.html`, false);
|
||||
rq.send();
|
||||
|
||||
let page = "404. Not found.";
|
||||
if (rq.status == 200) {
|
||||
page = rq.responseText;
|
||||
}
|
||||
|
||||
if (this.isCanCachePage(url)) {
|
||||
this.cache[url] = page;
|
||||
}
|
||||
return page;
|
||||
}
|
||||
else {
|
||||
let page = `Http error: ${rq.status}`;
|
||||
|
||||
rq = new XMLHttpRequest();
|
||||
rq.open('GET', `/fl_system/${rq.status}.html`, false);
|
||||
rq.send();
|
||||
|
||||
if (rq.status == 200) {
|
||||
page = rq.responseText;
|
||||
}
|
||||
|
||||
if (this.isCanCachePage(url)) {
|
||||
this.cache[url] = page;
|
||||
}
|
||||
return page;
|
||||
}
|
||||
}
|
||||
else return this.cache[url];
|
||||
}
|
||||
|
||||
loading () {
|
||||
/*let rq = new XMLHttpRequest();
|
||||
rq.open('GET', `/fl_system/load_page.html`, false);
|
||||
rq.send();
|
||||
if (rq.status == 200) {
|
||||
let page = rq.responseText;
|
||||
document.getElementById('fl.area').innerHTML = page;
|
||||
}*/
|
||||
document.getElementById('fl.area').innerHTML = this.getHttpContent("/fl_system/load_page.html");
|
||||
}
|
||||
|
||||
goToLocation (href) {
|
||||
window.location.href = href;
|
||||
}
|
||||
|
||||
goJust (href, refEdit = true, callFromGo = false) {
|
||||
if (refEdit && !callFromGo) {
|
||||
this.loading();
|
||||
setLocation(href);
|
||||
this.curLoc = href;
|
||||
}
|
||||
|
||||
document.getElementById('fl.area').innerHTML = this.getHttpContent(`/fl_dir${href}`);
|
||||
|
||||
setTimeout(() => {
|
||||
let page = href.split('#')[0].split('?')[0];
|
||||
while (page.at(-1) === '/')
|
||||
page = page.slice(0, page.length - 1);
|
||||
this.events[page]?.();
|
||||
}, 0);
|
||||
}
|
||||
|
||||
go (href, refEdit = true) {
|
||||
if (refEdit) {
|
||||
this.loading();
|
||||
setLocation(href);
|
||||
this.curLoc = href;
|
||||
}
|
||||
|
||||
setTimeout(async () => this.goJust(href, refEdit, true), 1);
|
||||
}
|
||||
}
|
||||
|
||||
function setLocation(curLoc){
|
||||
try {
|
||||
history.pushState(null, null, curLoc);
|
||||
return;
|
||||
}
|
||||
catch(e) {}
|
||||
location.hash = '#' + curLoc;
|
||||
}
|
||||
|
||||
class FlCursor {
|
||||
constructor (options) {
|
||||
this.options = options;
|
||||
if (!options) {
|
||||
this.options = {
|
||||
saveCache : true,
|
||||
ignoreCachePath : [],
|
||||
saveOnlyPath : ["/fl_system/load_page.html"]
|
||||
}
|
||||
}
|
||||
this.cache = new Object();
|
||||
if (!Array.isArray(this.options.ignoreCachePath)) {
|
||||
this.options.ignoreCachePath = new Array();
|
||||
}
|
||||
|
||||
this.curLoc = location.pathname;
|
||||
this.events = {};
|
||||
|
||||
// Включаем автоматическое обновление содержимого страницы при нажатии кнопки "Назад"
|
||||
window.onpopstate = (event) => {
|
||||
this.go(location.pathname, false);
|
||||
}
|
||||
}
|
||||
|
||||
isCanCachePage (url) {
|
||||
return (this.options.saveCache && this.options.ignoreCachePath.indexOf(url) == -1) ||
|
||||
(!this.options.saveCache && this.options.saveOnlyPath.indexOf(url) != -1);
|
||||
}
|
||||
|
||||
bindLoad (page, handler) {
|
||||
this.events[page] = handler;
|
||||
}
|
||||
|
||||
getHttpContent (url) {
|
||||
if (!this.cache[url]) {
|
||||
let rq = new XMLHttpRequest();
|
||||
rq.open('GET', url, false);
|
||||
rq.send();
|
||||
|
||||
if (rq.status == 200) {
|
||||
if (this.isCanCachePage(url)) {
|
||||
this.cache[url] = rq.responseText;
|
||||
}
|
||||
return rq.responseText;
|
||||
}
|
||||
else if (rq.status == 404) {
|
||||
rq = new XMLHttpRequest();
|
||||
rq.open('GET', `/fl_system/404.html`, false);
|
||||
rq.send();
|
||||
|
||||
let page = "404. Not found.";
|
||||
if (rq.status == 200) {
|
||||
page = rq.responseText;
|
||||
}
|
||||
|
||||
if (this.isCanCachePage(url)) {
|
||||
this.cache[url] = page;
|
||||
}
|
||||
return page;
|
||||
}
|
||||
else {
|
||||
let page = `Http error: ${rq.status}`;
|
||||
|
||||
rq = new XMLHttpRequest();
|
||||
rq.open('GET', `/fl_system/${rq.status}.html`, false);
|
||||
rq.send();
|
||||
|
||||
if (rq.status == 200) {
|
||||
page = rq.responseText;
|
||||
}
|
||||
|
||||
if (this.isCanCachePage(url)) {
|
||||
this.cache[url] = page;
|
||||
}
|
||||
return page;
|
||||
}
|
||||
}
|
||||
else return this.cache[url];
|
||||
}
|
||||
|
||||
loading () {
|
||||
/*let rq = new XMLHttpRequest();
|
||||
rq.open('GET', `/fl_system/load_page.html`, false);
|
||||
rq.send();
|
||||
if (rq.status == 200) {
|
||||
let page = rq.responseText;
|
||||
document.getElementById('fl.area').innerHTML = page;
|
||||
}*/
|
||||
document.getElementById('fl.area').innerHTML = this.getHttpContent("/fl_system/load_page.html");
|
||||
}
|
||||
|
||||
goToLocation (href) {
|
||||
window.location.href = href;
|
||||
}
|
||||
|
||||
goJust (href, refEdit = true, callFromGo = false) {
|
||||
if (refEdit && !callFromGo) {
|
||||
this.loading();
|
||||
setLocation(href);
|
||||
this.curLoc = href;
|
||||
}
|
||||
|
||||
document.getElementById('fl.area').innerHTML = this.getHttpContent(`/fl_dir${href}`);
|
||||
|
||||
setTimeout(() => {
|
||||
let page = href.split('#')[0].split('?')[0];
|
||||
while (page.at(-1) === '/')
|
||||
page = page.slice(0, page.length - 1);
|
||||
this.events[page]?.();
|
||||
}, 0);
|
||||
}
|
||||
|
||||
go (href, refEdit = true) {
|
||||
if (refEdit) {
|
||||
this.loading();
|
||||
setLocation(href);
|
||||
this.curLoc = href;
|
||||
}
|
||||
|
||||
setTimeout(async () => this.goJust(href, refEdit, true), 1);
|
||||
}
|
||||
}
|
||||
|
||||
const fl = new FlCursor();
|
@ -1,4 +1,4 @@
|
||||
<center>
|
||||
<img src="/assets/404.png" class="sys-win-img"></img>
|
||||
<h1>404. Страница не найдена :(</h1>
|
||||
<center>
|
||||
<img src="/assets/404.png" class="sys-win-img"></img>
|
||||
<h1>404. Страница не найдена :(</h1>
|
||||
</center>
|
66
index.html
66
index.html
@ -1,34 +1,34 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="/assets/main.css">
|
||||
<link rel="icon" type="image/png" href="/favicon.png"/>
|
||||
|
||||
<link rel="stylesheet" href="/assets/font-awesome/css/all.css" />
|
||||
<title>FullGreaM</title>
|
||||
</head>
|
||||
<body class="bg text-white">
|
||||
<script src="/fl_framework/index.js"></script>
|
||||
<nav id="navbar-main" class="navbar navbar-dark bg-dark">
|
||||
<a class="navbar-brand" href="#" onclick="fl.go('/');">
|
||||
FullGreaM
|
||||
</a>
|
||||
<button onclick="fl.go('/contacts');" class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">Мои контакты</button>
|
||||
</nav>
|
||||
<div id="turn-on-js">
|
||||
<h1>Включите поддержку JavaScript!</h1>
|
||||
<p>В противном случае, компоненты сайте не смогут быть загружены</p>
|
||||
</div>
|
||||
<script>
|
||||
document.getElementById("turn-on-js").innerHTML = '<div id="fl.area"><p>Loading...</p></div>';
|
||||
</script>
|
||||
<!-- Finalize loading bootstrap js -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz" crossorigin="anonymous"></script>
|
||||
<!-- Go to root -->
|
||||
<!-- <script>setTimeout(async () => fl.go(window.location.pathname), 50);</script> -->
|
||||
<script src="/assets/main.js" type="module"></script>
|
||||
</body>
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="/assets/main.css">
|
||||
<link rel="icon" type="image/png" href="/favicon.png"/>
|
||||
|
||||
<link rel="stylesheet" href="/assets/font-awesome/css/all.css" />
|
||||
<title>FullGreaM</title>
|
||||
</head>
|
||||
<body class="bg text-white">
|
||||
<script src="/fl_framework/index.js"></script>
|
||||
<nav id="navbar-main" class="navbar navbar-dark bg-dark">
|
||||
<a class="navbar-brand" href="#" onclick="fl.go('/');">
|
||||
FullGreaM
|
||||
</a>
|
||||
<button onclick="fl.go('/contacts');" class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">Мои контакты</button>
|
||||
</nav>
|
||||
<div id="turn-on-js">
|
||||
<h1>Включите поддержку JavaScript!</h1>
|
||||
<p>В противном случае, компоненты сайте не смогут быть загружены</p>
|
||||
</div>
|
||||
<script>
|
||||
document.getElementById("turn-on-js").innerHTML = '<div id="fl.area"><p>Loading...</p></div>';
|
||||
</script>
|
||||
<!-- Finalize loading bootstrap js -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz" crossorigin="anonymous"></script>
|
||||
<!-- Go to root -->
|
||||
<!-- <script>setTimeout(async () => fl.go(window.location.pathname), 50);</script> -->
|
||||
<script src="/assets/main.js" type="module"></script>
|
||||
</body>
|
||||
</html>
|
@ -1,32 +1,32 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="/assets/main.css">
|
||||
<link rel="icon" type="image/png" href="/favicon.png"/>
|
||||
<title>FullGreaM</title>
|
||||
</head>
|
||||
<body class="bg text-white">
|
||||
<script src="/fl_framework/index.js"></script>
|
||||
<nav id="navbar-main" class="navbar navbar-dark bg-dark">
|
||||
<a class="navbar-brand" href="#" onclick="fl.go('/');">
|
||||
FullGreaM
|
||||
</a>
|
||||
<button onclick="fl.go('/contacts');" class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">Мои контакты</button>
|
||||
</nav>
|
||||
<div id="turn-on-js">
|
||||
<h1>Включите поддержку JavaScript!</h1>
|
||||
<p>В противном случае, компоненты сайте не смогут быть загружены</p>
|
||||
</div>
|
||||
<script>
|
||||
document.getElementById("turn-on-js").innerHTML = '<div id="fl.area"><p>Loading...</p></div>';
|
||||
</script>
|
||||
<!-- Finalize loading bootstrap js -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz" crossorigin="anonymous"></script>
|
||||
<!-- Go to root -->
|
||||
<!-- <script>setTimeout(async () => fl.go(window.location.pathname), 50);</script> -->
|
||||
<script src="/assets/main.js" type="module"></script>
|
||||
</body>
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="/assets/main.css">
|
||||
<link rel="icon" type="image/png" href="/favicon.png"/>
|
||||
<title>FullGreaM</title>
|
||||
</head>
|
||||
<body class="bg text-white">
|
||||
<script src="/fl_framework/index.js"></script>
|
||||
<nav id="navbar-main" class="navbar navbar-dark bg-dark">
|
||||
<a class="navbar-brand" href="#" onclick="fl.go('/');">
|
||||
FullGreaM
|
||||
</a>
|
||||
<button onclick="fl.go('/contacts');" class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">Мои контакты</button>
|
||||
</nav>
|
||||
<div id="turn-on-js">
|
||||
<h1>Включите поддержку JavaScript!</h1>
|
||||
<p>В противном случае, компоненты сайте не смогут быть загружены</p>
|
||||
</div>
|
||||
<script>
|
||||
document.getElementById("turn-on-js").innerHTML = '<div id="fl.area"><p>Loading...</p></div>';
|
||||
</script>
|
||||
<!-- Finalize loading bootstrap js -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz" crossorigin="anonymous"></script>
|
||||
<!-- Go to root -->
|
||||
<!-- <script>setTimeout(async () => fl.go(window.location.pathname), 50);</script> -->
|
||||
<script src="/assets/main.js" type="module"></script>
|
||||
</body>
|
||||
</html>
|
@ -1,34 +1,34 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="/assets/main.css">
|
||||
<link rel="icon" type="image/png" href="/favicon.png"/>
|
||||
|
||||
<link rel="stylesheet" href="/assets/font-awesome/css/all.css" />
|
||||
<title>FullGreaM</title>
|
||||
</head>
|
||||
<body class="bg text-white">
|
||||
<script src="/fl_framework/index.js"></script>
|
||||
<nav id="navbar-main" class="navbar navbar-dark bg-dark">
|
||||
<a class="navbar-brand" href="#" onclick="fl.go('/');">
|
||||
FullGreaM
|
||||
</a>
|
||||
<button onclick="fl.go('/contacts');" class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">Мои контакты</button>
|
||||
</nav>
|
||||
<div id="turn-on-js">
|
||||
<h1>Включите поддержку JavaScript!</h1>
|
||||
<p>В противном случае, компоненты сайте не смогут быть загружены</p>
|
||||
</div>
|
||||
<script>
|
||||
document.getElementById("turn-on-js").innerHTML = '<div id="fl.area"><p>Loading...</p></div>';
|
||||
</script>
|
||||
<!-- Finalize loading bootstrap js -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz" crossorigin="anonymous"></script>
|
||||
<!-- Go to root -->
|
||||
<!-- <script>setTimeout(async () => fl.go(window.location.pathname), 50);</script> -->
|
||||
<script src="/assets/main.js" type="module"></script>
|
||||
</body>
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="/assets/main.css">
|
||||
<link rel="icon" type="image/png" href="/favicon.png"/>
|
||||
|
||||
<link rel="stylesheet" href="/assets/font-awesome/css/all.css" />
|
||||
<title>FullGreaM</title>
|
||||
</head>
|
||||
<body class="bg text-white">
|
||||
<script src="/fl_framework/index.js"></script>
|
||||
<nav id="navbar-main" class="navbar navbar-dark bg-dark">
|
||||
<a class="navbar-brand" href="#" onclick="fl.go('/');">
|
||||
FullGreaM
|
||||
</a>
|
||||
<button onclick="fl.go('/contacts');" class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">Мои контакты</button>
|
||||
</nav>
|
||||
<div id="turn-on-js">
|
||||
<h1>Включите поддержку JavaScript!</h1>
|
||||
<p>В противном случае, компоненты сайте не смогут быть загружены</p>
|
||||
</div>
|
||||
<script>
|
||||
document.getElementById("turn-on-js").innerHTML = '<div id="fl.area"><p>Loading...</p></div>';
|
||||
</script>
|
||||
<!-- Finalize loading bootstrap js -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz" crossorigin="anonymous"></script>
|
||||
<!-- Go to root -->
|
||||
<!-- <script>setTimeout(async () => fl.go(window.location.pathname), 50);</script> -->
|
||||
<script src="/assets/main.js" type="module"></script>
|
||||
</body>
|
||||
</html>
|
@ -1,32 +1,32 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="/assets/main.css">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.3/font/bootstrap-icons.css">
|
||||
<title>FullGreaM</title>
|
||||
</head>
|
||||
<body class="bg text-white">
|
||||
<script src="/fl_framework/index.js"></script>
|
||||
<nav id="navbar-main" class="navbar navbar-dark bg-dark">
|
||||
<a class="navbar-brand" href="#" onclick="fl.go('/');">
|
||||
FullGreaM
|
||||
</a>
|
||||
<button onclick="fl.go('/contacts');" class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">Мои контакты</button>
|
||||
</nav>
|
||||
<div id="turn-on-js">
|
||||
<h1>Включите поддержку JavaScript!</h1>
|
||||
<p>В противном случае, компоненты сайте не смогут быть загружены</p>
|
||||
</div>
|
||||
<script>
|
||||
document.getElementById("turn-on-js").innerHTML = '<div id="fl.area"><p>Loading...</p></div>';
|
||||
</script>
|
||||
<!-- Finalize loading bootstrap js -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz" crossorigin="anonymous"></script>
|
||||
<!-- Go to root -->
|
||||
<script>setTimeout(async () => fl.go(window.location.pathname), 50);</script>
|
||||
<script src="/assets/main.js"></script>
|
||||
</body>
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="/assets/main.css">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.3/font/bootstrap-icons.css">
|
||||
<title>FullGreaM</title>
|
||||
</head>
|
||||
<body class="bg text-white">
|
||||
<script src="/fl_framework/index.js"></script>
|
||||
<nav id="navbar-main" class="navbar navbar-dark bg-dark">
|
||||
<a class="navbar-brand" href="#" onclick="fl.go('/');">
|
||||
FullGreaM
|
||||
</a>
|
||||
<button onclick="fl.go('/contacts');" class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">Мои контакты</button>
|
||||
</nav>
|
||||
<div id="turn-on-js">
|
||||
<h1>Включите поддержку JavaScript!</h1>
|
||||
<p>В противном случае, компоненты сайте не смогут быть загружены</p>
|
||||
</div>
|
||||
<script>
|
||||
document.getElementById("turn-on-js").innerHTML = '<div id="fl.area"><p>Loading...</p></div>';
|
||||
</script>
|
||||
<!-- Finalize loading bootstrap js -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz" crossorigin="anonymous"></script>
|
||||
<!-- Go to root -->
|
||||
<script>setTimeout(async () => fl.go(window.location.pathname), 50);</script>
|
||||
<script src="/assets/main.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -1,34 +1,34 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="/assets/main.css">
|
||||
<link rel="icon" type="image/png" href="/favicon.png"/>
|
||||
|
||||
<link rel="stylesheet" href="/assets/font-awesome/css/all.css" />
|
||||
<title>FullGreaM</title>
|
||||
</head>
|
||||
<body class="bg text-white">
|
||||
<script src="/fl_framework/index.js"></script>
|
||||
<nav id="navbar-main" class="navbar navbar-dark bg-dark">
|
||||
<a class="navbar-brand" href="#" onclick="fl.go('/');">
|
||||
FullGreaM
|
||||
</a>
|
||||
<button onclick="fl.go('/contacts');" class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">Мои контакты</button>
|
||||
</nav>
|
||||
<div id="turn-on-js">
|
||||
<h1>Включите поддержку JavaScript!</h1>
|
||||
<p>В противном случае, компоненты сайте не смогут быть загружены</p>
|
||||
</div>
|
||||
<script>
|
||||
document.getElementById("turn-on-js").innerHTML = '<div id="fl.area"><p>Loading...</p></div>';
|
||||
</script>
|
||||
<!-- Finalize loading bootstrap js -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz" crossorigin="anonymous"></script>
|
||||
<!-- Go to root -->
|
||||
<!-- <script>setTimeout(async () => fl.go(window.location.pathname), 50);</script> -->
|
||||
<script src="/assets/main.js" type="module"></script>
|
||||
</body>
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="/assets/main.css">
|
||||
<link rel="icon" type="image/png" href="/favicon.png"/>
|
||||
|
||||
<link rel="stylesheet" href="/assets/font-awesome/css/all.css" />
|
||||
<title>FullGreaM</title>
|
||||
</head>
|
||||
<body class="bg text-white">
|
||||
<script src="/fl_framework/index.js"></script>
|
||||
<nav id="navbar-main" class="navbar navbar-dark bg-dark">
|
||||
<a class="navbar-brand" href="#" onclick="fl.go('/');">
|
||||
FullGreaM
|
||||
</a>
|
||||
<button onclick="fl.go('/contacts');" class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">Мои контакты</button>
|
||||
</nav>
|
||||
<div id="turn-on-js">
|
||||
<h1>Включите поддержку JavaScript!</h1>
|
||||
<p>В противном случае, компоненты сайте не смогут быть загружены</p>
|
||||
</div>
|
||||
<script>
|
||||
document.getElementById("turn-on-js").innerHTML = '<div id="fl.area"><p>Loading...</p></div>';
|
||||
</script>
|
||||
<!-- Finalize loading bootstrap js -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz" crossorigin="anonymous"></script>
|
||||
<!-- Go to root -->
|
||||
<!-- <script>setTimeout(async () => fl.go(window.location.pathname), 50);</script> -->
|
||||
<script src="/assets/main.js" type="module"></script>
|
||||
</body>
|
||||
</html>
|
Reference in New Issue
Block a user