mirror of
https://github.com/BreizhHardware/sansdomainefixe.xyz.git
synced 2026-01-18 19:47:19 +01:00
Switch from react to natvie + pocketbase
This commit is contained in:
1
.cache/0c/0e6761a05df0530bb816721d242456.json
Normal file
1
.cache/0c/0e6761a05df0530bb816721d242456.json
Normal file
File diff suppressed because one or more lines are too long
1
.cache/32/0aa86c5b8c2ffdb8b37031f81c1874.json
Normal file
1
.cache/32/0aa86c5b8c2ffdb8b37031f81c1874.json
Normal file
@@ -0,0 +1 @@
|
||||
{"id":"src/ts/navigate.ts","dependencies":[{"name":"C:\\Users\\BreizhHardware\\Nextcloud\\Programation\\Front-end\\LGP\\sansdomainefixe.xyz\\package.json","includedInParent":true,"mtime":1700817342336}],"generated":{"js":"function goToLogin() {\n window.location.href = \"login.html\";\n}\ndocument.getElementById(\"goToLogin\").addEventListener(\"click\", goToLogin);"},"sourceMaps":{"js":{"mappings":[{"source":"src/ts/navigate.ts","name":null,"original":{"line":1,"column":0},"generated":{"line":1,"column":0}},{"source":"src/ts/navigate.ts","name":null,"original":{"line":1,"column":9},"generated":{"line":1,"column":9}},{"source":"src/ts/navigate.ts","name":null,"original":{"line":1,"column":18},"generated":{"line":1,"column":18}},{"source":"src/ts/navigate.ts","name":null,"original":{"line":1,"column":18},"generated":{"line":1,"column":19}},{"source":"src/ts/navigate.ts","name":null,"original":{"line":1,"column":18},"generated":{"line":1,"column":21}},{"source":"src/ts/navigate.ts","name":null,"original":{"line":2,"column":4},"generated":{"line":2,"column":2}},{"source":"src/ts/navigate.ts","name":null,"original":{"line":2,"column":10},"generated":{"line":2,"column":8}},{"source":"src/ts/navigate.ts","name":null,"original":{"line":2,"column":11},"generated":{"line":2,"column":9}},{"source":"src/ts/navigate.ts","name":null,"original":{"line":2,"column":19},"generated":{"line":2,"column":17}},{"source":"src/ts/navigate.ts","name":null,"original":{"line":2,"column":20},"generated":{"line":2,"column":18}},{"source":"src/ts/navigate.ts","name":null,"original":{"line":2,"column":24},"generated":{"line":2,"column":22}},{"source":"src/ts/navigate.ts","name":null,"original":{"line":2,"column":27},"generated":{"line":2,"column":25}},{"source":"src/ts/navigate.ts","name":null,"original":{"line":2,"column":39},"generated":{"line":2,"column":37}},{"source":"src/ts/navigate.ts","name":null,"original":{"line":3,"column":0},"generated":{"line":3,"column":0}},{"source":"src/ts/navigate.ts","name":null,"original":{"line":5,"column":0},"generated":{"line":4,"column":0}},{"source":"src/ts/navigate.ts","name":null,"original":{"line":5,"column":8},"generated":{"line":4,"column":8}},{"source":"src/ts/navigate.ts","name":null,"original":{"line":5,"column":9},"generated":{"line":4,"column":9}},{"source":"src/ts/navigate.ts","name":null,"original":{"line":5,"column":23},"generated":{"line":4,"column":23}},{"source":"src/ts/navigate.ts","name":null,"original":{"line":5,"column":24},"generated":{"line":4,"column":24}},{"source":"src/ts/navigate.ts","name":null,"original":{"line":5,"column":35},"generated":{"line":4,"column":35}},{"source":"src/ts/navigate.ts","name":null,"original":{"line":5,"column":36},"generated":{"line":4,"column":36}},{"source":"src/ts/navigate.ts","name":null,"original":{"line":5,"column":37},"generated":{"line":4,"column":37}},{"source":"src/ts/navigate.ts","name":null,"original":{"line":5,"column":53},"generated":{"line":4,"column":53}},{"source":"src/ts/navigate.ts","name":null,"original":{"line":5,"column":54},"generated":{"line":4,"column":54}},{"source":"src/ts/navigate.ts","name":null,"original":{"line":5,"column":61},"generated":{"line":4,"column":61}},{"source":"src/ts/navigate.ts","name":null,"original":{"line":5,"column":63},"generated":{"line":4,"column":63}},{"source":"src/ts/navigate.ts","name":null,"original":{"line":5,"column":72},"generated":{"line":4,"column":72}},{"source":"src/ts/navigate.ts","name":null,"original":{"line":5,"column":73},"generated":{"line":4,"column":73}}],"sources":{"src/ts/navigate.ts":"function goToLogin(){\r\n window.location.href = \"login.html\";\r\n}\r\n\r\ndocument.getElementById(\"goToLogin\").addEventListener(\"click\", goToLogin);"},"lineCount":null}},"error":null,"hash":"bce31c4ea3da6f3d059a949e90b27f6f","cacheData":{"env":{}}}
|
||||
1
.cache/34/d0517ea1514685ef2e6d1d15fdab37.json
Normal file
1
.cache/34/d0517ea1514685ef2e6d1d15fdab37.json
Normal file
File diff suppressed because one or more lines are too long
1
.cache/35/56ed2b5882274c9743d78dc72dbfa5.json
Normal file
1
.cache/35/56ed2b5882274c9743d78dc72dbfa5.json
Normal file
File diff suppressed because one or more lines are too long
1
.cache/43/d4e435e110681e922fae18e5b9cfff.json
Normal file
1
.cache/43/d4e435e110681e922fae18e5b9cfff.json
Normal file
@@ -0,0 +1 @@
|
||||
{"id":"base.css","dependencies":[{"name":"_css_loader","parent":"C:\\Users\\BreizhHardware\\Nextcloud\\Programation\\Front-end\\LGP\\sansdomainefixe.xyz\\base.css","resolved":"C:\\Users\\BreizhHardware\\Nextcloud\\Programation\\Front-end\\LGP\\sansdomainefixe.xyz\\node_modules\\parcel-bundler\\src\\builtins\\css-loader.js"},{"name":"C:\\Users\\BreizhHardware\\Nextcloud\\Programation\\Front-end\\LGP\\sansdomainefixe.xyz\\package.json","includedInParent":true,"mtime":1700817342336}],"generated":{"css":"@tailwind base;\r\n@tailwind components;\r\n@tailwind utilities;","js":"var reloadCSS = require('_css_loader');\nmodule.hot.dispose(reloadCSS);\nmodule.hot.accept(reloadCSS);"},"sourceMaps":{"css":{"mappings":[{"source":"base.css","original":{"line":1,"column":0},"generated":{"line":1,"column":0}},{"source":"base.css","original":{"line":2,"column":0},"generated":{"line":2,"column":0}},{"source":"base.css","original":{"line":3,"column":0},"generated":{"line":3,"column":0}}],"sources":{"base.css":"@tailwind base;\r\n@tailwind components;\r\n@tailwind utilities;"},"lineCount":3}},"error":null,"hash":"9a88cc3486c563d57beae9f06b3fb342","cacheData":{"env":{}}}
|
||||
1
.cache/6b/91adb1056434c9acbc013158c8f0f5.json
Normal file
1
.cache/6b/91adb1056434c9acbc013158c8f0f5.json
Normal file
@@ -0,0 +1 @@
|
||||
{"id":"script.js","dependencies":[{"name":"C:\\Users\\BreizhHardware\\Nextcloud\\Programation\\Front-end\\LGP\\sansdomainefixe.xyz\\package.json","includedInParent":true,"mtime":1700817342336}],"generated":{"js":""},"sourceMaps":{"js":{"mappings":[],"sources":{"script.js":""},"lineCount":null}},"error":null,"hash":"f969b62c4d7cf1c3ab37791ea231c954","cacheData":{"env":{}}}
|
||||
1
.cache/7b/a488e943ddd6b3b925cfe517781844.json
Normal file
1
.cache/7b/a488e943ddd6b3b925cfe517781844.json
Normal file
@@ -0,0 +1 @@
|
||||
{"id":"src/img/software_img.png","dependencies":[{"name":"C:\\Users\\BreizhHardware\\Nextcloud\\Programation\\Front-end\\LGP\\sansdomainefixe.xyz\\package.json","includedInParent":true,"mtime":1700817342336}],"generated":{"js":"module.exports = \"/104741d29f376260ad384b874f617fd5.png\";"},"sourceMaps":null,"error":null,"hash":"3271ff59534ed81b60f2000e93e6222a","cacheData":{"env":{}}}
|
||||
1
.cache/9b/c49b6de904a0cba5e3bcd3863d4941.json
Normal file
1
.cache/9b/c49b6de904a0cba5e3bcd3863d4941.json
Normal file
File diff suppressed because one or more lines are too long
1
.cache/bd/0fa27f0424c8ed2d3521ef05ffe630.json
Normal file
1
.cache/bd/0fa27f0424c8ed2d3521ef05ffe630.json
Normal file
@@ -0,0 +1 @@
|
||||
{"id":"src/img/favicon.png","dependencies":[{"name":"C:\\Users\\BreizhHardware\\Nextcloud\\Programation\\Front-end\\LGP\\sansdomainefixe.xyz\\package.json","includedInParent":true,"mtime":1700817342336}],"generated":{"js":"module.exports = \"/21bafc643eba3111099931d8beecaf59.png\";"},"sourceMaps":null,"error":null,"hash":"54f95ff974784dde2f704ba69e450f68","cacheData":{"env":{}}}
|
||||
1
.cache/c8/d6148de7eea153fd5a366fe5deac5f.json
Normal file
1
.cache/c8/d6148de7eea153fd5a366fe5deac5f.json
Normal file
@@ -0,0 +1 @@
|
||||
{"id":"style.css","dependencies":[{"name":"_css_loader","parent":"C:\\Users\\BreizhHardware\\Nextcloud\\Programation\\Front-end\\LGP\\sansdomainefixe.xyz\\style.css","resolved":"C:\\Users\\BreizhHardware\\Nextcloud\\Programation\\Front-end\\LGP\\sansdomainefixe.xyz\\node_modules\\parcel-bundler\\src\\builtins\\css-loader.js"},{"name":"C:\\Users\\BreizhHardware\\Nextcloud\\Programation\\Front-end\\LGP\\sansdomainefixe.xyz\\package.json","includedInParent":true,"mtime":1700813756421}],"generated":{"css":"","js":"var reloadCSS = require('_css_loader');\nmodule.hot.dispose(reloadCSS);\nmodule.hot.accept(reloadCSS);"},"sourceMaps":{"css":{"mappings":[{"source":"style.css","original":{"line":1,"column":0},"generated":{"line":1,"column":0}}],"sources":{"style.css":""},"lineCount":1}},"error":null,"hash":"810b61624644d5e307d0d97ecf1964ba","cacheData":{"env":{}}}
|
||||
1
.cache/cc/f9cf526bc87665c863027482b23163.json
Normal file
1
.cache/cc/f9cf526bc87665c863027482b23163.json
Normal file
@@ -0,0 +1 @@
|
||||
{"id":"V5.png","dependencies":[{"name":"C:\\Users\\BreizhHardware\\Nextcloud\\Programation\\Front-end\\LGP\\sansdomainefixe.xyz\\package.json","includedInParent":true,"mtime":1700814309404}],"generated":{"js":"module.exports = \"/07db4c92aa641e50d5a3fc614a83a103.png\";"},"sourceMaps":null,"error":null,"hash":"313d609af4365c44ecef2a848139a4a1","cacheData":{"env":{}}}
|
||||
1
.cache/d8/3fe475883e02fc570840dae102a238.json
Normal file
1
.cache/d8/3fe475883e02fc570840dae102a238.json
Normal file
File diff suppressed because one or more lines are too long
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
node_modules
|
||||
5
.idea/.gitignore
generated
vendored
Normal file
5
.idea/.gitignore
generated
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
1
.idea/.name
generated
Normal file
1
.idea/.name
generated
Normal file
@@ -0,0 +1 @@
|
||||
sansdomainefixe
|
||||
7
.idea/discord.xml
generated
Normal file
7
.idea/discord.xml
generated
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="DiscordProjectSettings">
|
||||
<option name="show" value="PROJECT_FILES" />
|
||||
<option name="description" value="" />
|
||||
</component>
|
||||
</project>
|
||||
6
.idea/jsLibraryMappings.xml
generated
Normal file
6
.idea/jsLibraryMappings.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="JavaScriptLibraryMappings">
|
||||
<file url="PROJECT" libraries="{5b8b37978c}" />
|
||||
</component>
|
||||
</project>
|
||||
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/sansdomainefixe.xyz.iml" filepath="$PROJECT_DIR$/.idea/sansdomainefixe.xyz.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
14
.idea/sansdomainefixe.xyz.iml
generated
Normal file
14
.idea/sansdomainefixe.xyz.iml
generated
Normal file
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="WEB_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/temp" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/tmp" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" name="5b8b37978c" level="application" />
|
||||
<orderEntry type="library" name="5b8b37978c" level="application" />
|
||||
</component>
|
||||
</module>
|
||||
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
BIN
.parcel-cache/12a08e81f39700a1
Normal file
BIN
.parcel-cache/12a08e81f39700a1
Normal file
Binary file not shown.
BIN
.parcel-cache/data.mdb
Normal file
BIN
.parcel-cache/data.mdb
Normal file
Binary file not shown.
BIN
.parcel-cache/f41c6a597c6629db
Normal file
BIN
.parcel-cache/f41c6a597c6629db
Normal file
Binary file not shown.
17522
.parcel-cache/f5cb5caddee0a574.txt
Normal file
17522
.parcel-cache/f5cb5caddee0a574.txt
Normal file
File diff suppressed because it is too large
Load Diff
BIN
.parcel-cache/lock.mdb
Normal file
BIN
.parcel-cache/lock.mdb
Normal file
Binary file not shown.
3
base.css
Normal file
3
base.css
Normal file
@@ -0,0 +1,3 @@
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
36
dashboard.html
Normal file
36
dashboard.html
Normal file
@@ -0,0 +1,36 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title> Sansdomainefixe.xyz </title>
|
||||
<link rel="stylesheet" href="base.css">
|
||||
<script src="script.js" defer></script>
|
||||
<link rel="icon" href="src/img/favicon.png" type="image/x-icon">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap" rel="stylesheet">
|
||||
<script src="https://kit.fontawesome.com/5b8b37978c.js" crossorigin="anonymous"></script>
|
||||
<script src="src/js/navigate.js" defer></script>
|
||||
<script src="src/js/componant/sidebar.js" defer></script>
|
||||
<script src="src/js/componant/actualdomain.js" type="module" defer></script>
|
||||
<link rel="stylesheet" href="output.css">
|
||||
</head>
|
||||
<body>
|
||||
<!-- Navbar Latéral fix avec Tailwind -->
|
||||
<div class="grid grid-cols-4 grid-rows-5 gap-4 min-h-screen bg-gradient-to-b from-primary to-secondary">
|
||||
<div class="col-start-1 col-span-4 row-start-1">
|
||||
<h1 class="l:text-4xl md:text-xl text-base font-sans mb-4 text-white mt-4 ml-2">sansdomainefixe.xyz</h1>
|
||||
</div>
|
||||
<div class="row-span-4 col-start-1 row-start-2 text-white ml-2">
|
||||
<div id="sidebar"></div>
|
||||
</div>
|
||||
<div class="col-span-3 row-span-5 col-start-2 row-start-2 text-white">
|
||||
<div id="ActualDomain"></div>
|
||||
<label for="newdomain" class="xl:text-4xl md:text-xl text-base font-sans mb-4 text-white">Ajouter un nom de domaine:</label>
|
||||
<input type="text" name="newdomain" id="newdomain" class="px-4 py-2 border rounded-md text-black ml-3 text-center" placeholder="Rentrez votre nom de domaine" />
|
||||
<br>
|
||||
<button class="my-3 text-white border-solid border-2 border-white rounded-md px-1 py-2" onclick="sendData()">Ajouter</button>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
BIN
dist/V5.4a83a103.png
vendored
Normal file
BIN
dist/V5.4a83a103.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 253 KiB |
5
dist/base.ee376513.css
vendored
Normal file
5
dist/base.ee376513.css
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
/*# sourceMappingURL=/base.ee376513.css.map */
|
||||
1
dist/base.ee376513.css.map
vendored
Normal file
1
dist/base.ee376513.css.map
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["base.css"],"names":[],"mappings":"AAAA;AACA;AACA","file":"base.ee376513.css","sourceRoot":"..","sourcesContent":["@tailwind base;\r\n@tailwind components;\r\n@tailwind utilities;"]}
|
||||
345
dist/base.ee376513.js
vendored
Normal file
345
dist/base.ee376513.js
vendored
Normal file
@@ -0,0 +1,345 @@
|
||||
// modules are defined as an array
|
||||
// [ module function, map of requires ]
|
||||
//
|
||||
// map of requires is short require name -> numeric require
|
||||
//
|
||||
// anything defined in a previous bundle is accessed via the
|
||||
// orig method which is the require for previous bundles
|
||||
parcelRequire = (function (modules, cache, entry, globalName) {
|
||||
// Save the require from previous bundle to this closure if any
|
||||
var previousRequire = typeof parcelRequire === 'function' && parcelRequire;
|
||||
var nodeRequire = typeof require === 'function' && require;
|
||||
|
||||
function newRequire(name, jumped) {
|
||||
if (!cache[name]) {
|
||||
if (!modules[name]) {
|
||||
// if we cannot find the module within our internal map or
|
||||
// cache jump to the current global require ie. the last bundle
|
||||
// that was added to the page.
|
||||
var currentRequire = typeof parcelRequire === 'function' && parcelRequire;
|
||||
if (!jumped && currentRequire) {
|
||||
return currentRequire(name, true);
|
||||
}
|
||||
|
||||
// If there are other bundles on this page the require from the
|
||||
// previous one is saved to 'previousRequire'. Repeat this as
|
||||
// many times as there are bundles until the module is found or
|
||||
// we exhaust the require chain.
|
||||
if (previousRequire) {
|
||||
return previousRequire(name, true);
|
||||
}
|
||||
|
||||
// Try the node require function if it exists.
|
||||
if (nodeRequire && typeof name === 'string') {
|
||||
return nodeRequire(name);
|
||||
}
|
||||
|
||||
var err = new Error('Cannot find module \'' + name + '\'');
|
||||
err.code = 'MODULE_NOT_FOUND';
|
||||
throw err;
|
||||
}
|
||||
|
||||
localRequire.resolve = resolve;
|
||||
localRequire.cache = {};
|
||||
|
||||
var module = cache[name] = new newRequire.Module(name);
|
||||
|
||||
modules[name][0].call(module.exports, localRequire, module, module.exports, this);
|
||||
}
|
||||
|
||||
return cache[name].exports;
|
||||
|
||||
function localRequire(x){
|
||||
return newRequire(localRequire.resolve(x));
|
||||
}
|
||||
|
||||
function resolve(x){
|
||||
return modules[name][1][x] || x;
|
||||
}
|
||||
}
|
||||
|
||||
function Module(moduleName) {
|
||||
this.id = moduleName;
|
||||
this.bundle = newRequire;
|
||||
this.exports = {};
|
||||
}
|
||||
|
||||
newRequire.isParcelRequire = true;
|
||||
newRequire.Module = Module;
|
||||
newRequire.modules = modules;
|
||||
newRequire.cache = cache;
|
||||
newRequire.parent = previousRequire;
|
||||
newRequire.register = function (id, exports) {
|
||||
modules[id] = [function (require, module) {
|
||||
module.exports = exports;
|
||||
}, {}];
|
||||
};
|
||||
|
||||
var error;
|
||||
for (var i = 0; i < entry.length; i++) {
|
||||
try {
|
||||
newRequire(entry[i]);
|
||||
} catch (e) {
|
||||
// Save first error but execute all entries
|
||||
if (!error) {
|
||||
error = e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (entry.length) {
|
||||
// Expose entry point to Node, AMD or browser globals
|
||||
// Based on https://github.com/ForbesLindesay/umd/blob/master/template.js
|
||||
var mainExports = newRequire(entry[entry.length - 1]);
|
||||
|
||||
// CommonJS
|
||||
if (typeof exports === "object" && typeof module !== "undefined") {
|
||||
module.exports = mainExports;
|
||||
|
||||
// RequireJS
|
||||
} else if (typeof define === "function" && define.amd) {
|
||||
define(function () {
|
||||
return mainExports;
|
||||
});
|
||||
|
||||
// <script>
|
||||
} else if (globalName) {
|
||||
this[globalName] = mainExports;
|
||||
}
|
||||
}
|
||||
|
||||
// Override the current require with this new one
|
||||
parcelRequire = newRequire;
|
||||
|
||||
if (error) {
|
||||
// throw error from earlier, _after updating parcelRequire_
|
||||
throw error;
|
||||
}
|
||||
|
||||
return newRequire;
|
||||
})({"node_modules/parcel-bundler/src/builtins/bundle-url.js":[function(require,module,exports) {
|
||||
var bundleURL = null;
|
||||
function getBundleURLCached() {
|
||||
if (!bundleURL) {
|
||||
bundleURL = getBundleURL();
|
||||
}
|
||||
return bundleURL;
|
||||
}
|
||||
function getBundleURL() {
|
||||
// Attempt to find the URL of the current script and use that as the base URL
|
||||
try {
|
||||
throw new Error();
|
||||
} catch (err) {
|
||||
var matches = ('' + err.stack).match(/(https?|file|ftp|chrome-extension|moz-extension):\/\/[^)\n]+/g);
|
||||
if (matches) {
|
||||
return getBaseURL(matches[0]);
|
||||
}
|
||||
}
|
||||
return '/';
|
||||
}
|
||||
function getBaseURL(url) {
|
||||
return ('' + url).replace(/^((?:https?|file|ftp|chrome-extension|moz-extension):\/\/.+)?\/[^/]+(?:\?.*)?$/, '$1') + '/';
|
||||
}
|
||||
exports.getBundleURL = getBundleURLCached;
|
||||
exports.getBaseURL = getBaseURL;
|
||||
},{}],"node_modules/parcel-bundler/src/builtins/css-loader.js":[function(require,module,exports) {
|
||||
var bundle = require('./bundle-url');
|
||||
function updateLink(link) {
|
||||
var newLink = link.cloneNode();
|
||||
newLink.onload = function () {
|
||||
link.remove();
|
||||
};
|
||||
newLink.href = link.href.split('?')[0] + '?' + Date.now();
|
||||
link.parentNode.insertBefore(newLink, link.nextSibling);
|
||||
}
|
||||
var cssTimeout = null;
|
||||
function reloadCSS() {
|
||||
if (cssTimeout) {
|
||||
return;
|
||||
}
|
||||
cssTimeout = setTimeout(function () {
|
||||
var links = document.querySelectorAll('link[rel="stylesheet"]');
|
||||
for (var i = 0; i < links.length; i++) {
|
||||
if (bundle.getBaseURL(links[i].href) === bundle.getBundleURL()) {
|
||||
updateLink(links[i]);
|
||||
}
|
||||
}
|
||||
cssTimeout = null;
|
||||
}, 50);
|
||||
}
|
||||
module.exports = reloadCSS;
|
||||
},{"./bundle-url":"node_modules/parcel-bundler/src/builtins/bundle-url.js"}],"base.css":[function(require,module,exports) {
|
||||
var reloadCSS = require('_css_loader');
|
||||
module.hot.dispose(reloadCSS);
|
||||
module.hot.accept(reloadCSS);
|
||||
},{"_css_loader":"node_modules/parcel-bundler/src/builtins/css-loader.js"}],"node_modules/parcel-bundler/src/builtins/hmr-runtime.js":[function(require,module,exports) {
|
||||
var global = arguments[3];
|
||||
var OVERLAY_ID = '__parcel__error__overlay__';
|
||||
var OldModule = module.bundle.Module;
|
||||
function Module(moduleName) {
|
||||
OldModule.call(this, moduleName);
|
||||
this.hot = {
|
||||
data: module.bundle.hotData,
|
||||
_acceptCallbacks: [],
|
||||
_disposeCallbacks: [],
|
||||
accept: function (fn) {
|
||||
this._acceptCallbacks.push(fn || function () {});
|
||||
},
|
||||
dispose: function (fn) {
|
||||
this._disposeCallbacks.push(fn);
|
||||
}
|
||||
};
|
||||
module.bundle.hotData = null;
|
||||
}
|
||||
module.bundle.Module = Module;
|
||||
var checkedAssets, assetsToAccept;
|
||||
var parent = module.bundle.parent;
|
||||
if ((!parent || !parent.isParcelRequire) && typeof WebSocket !== 'undefined') {
|
||||
var hostname = "" || location.hostname;
|
||||
var protocol = location.protocol === 'https:' ? 'wss' : 'ws';
|
||||
var ws = new WebSocket(protocol + '://' + hostname + ':' + "41549" + '/');
|
||||
ws.onmessage = function (event) {
|
||||
checkedAssets = {};
|
||||
assetsToAccept = [];
|
||||
var data = JSON.parse(event.data);
|
||||
if (data.type === 'update') {
|
||||
var handled = false;
|
||||
data.assets.forEach(function (asset) {
|
||||
if (!asset.isNew) {
|
||||
var didAccept = hmrAcceptCheck(global.parcelRequire, asset.id);
|
||||
if (didAccept) {
|
||||
handled = true;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Enable HMR for CSS by default.
|
||||
handled = handled || data.assets.every(function (asset) {
|
||||
return asset.type === 'css' && asset.generated.js;
|
||||
});
|
||||
if (handled) {
|
||||
console.clear();
|
||||
data.assets.forEach(function (asset) {
|
||||
hmrApply(global.parcelRequire, asset);
|
||||
});
|
||||
assetsToAccept.forEach(function (v) {
|
||||
hmrAcceptRun(v[0], v[1]);
|
||||
});
|
||||
} else if (location.reload) {
|
||||
// `location` global exists in a web worker context but lacks `.reload()` function.
|
||||
location.reload();
|
||||
}
|
||||
}
|
||||
if (data.type === 'reload') {
|
||||
ws.close();
|
||||
ws.onclose = function () {
|
||||
location.reload();
|
||||
};
|
||||
}
|
||||
if (data.type === 'error-resolved') {
|
||||
console.log('[parcel] ✨ Error resolved');
|
||||
removeErrorOverlay();
|
||||
}
|
||||
if (data.type === 'error') {
|
||||
console.error('[parcel] 🚨 ' + data.error.message + '\n' + data.error.stack);
|
||||
removeErrorOverlay();
|
||||
var overlay = createErrorOverlay(data);
|
||||
document.body.appendChild(overlay);
|
||||
}
|
||||
};
|
||||
}
|
||||
function removeErrorOverlay() {
|
||||
var overlay = document.getElementById(OVERLAY_ID);
|
||||
if (overlay) {
|
||||
overlay.remove();
|
||||
}
|
||||
}
|
||||
function createErrorOverlay(data) {
|
||||
var overlay = document.createElement('div');
|
||||
overlay.id = OVERLAY_ID;
|
||||
|
||||
// html encode message and stack trace
|
||||
var message = document.createElement('div');
|
||||
var stackTrace = document.createElement('pre');
|
||||
message.innerText = data.error.message;
|
||||
stackTrace.innerText = data.error.stack;
|
||||
overlay.innerHTML = '<div style="background: black; font-size: 16px; color: white; position: fixed; height: 100%; width: 100%; top: 0px; left: 0px; padding: 30px; opacity: 0.85; font-family: Menlo, Consolas, monospace; z-index: 9999;">' + '<span style="background: red; padding: 2px 4px; border-radius: 2px;">ERROR</span>' + '<span style="top: 2px; margin-left: 5px; position: relative;">🚨</span>' + '<div style="font-size: 18px; font-weight: bold; margin-top: 20px;">' + message.innerHTML + '</div>' + '<pre>' + stackTrace.innerHTML + '</pre>' + '</div>';
|
||||
return overlay;
|
||||
}
|
||||
function getParents(bundle, id) {
|
||||
var modules = bundle.modules;
|
||||
if (!modules) {
|
||||
return [];
|
||||
}
|
||||
var parents = [];
|
||||
var k, d, dep;
|
||||
for (k in modules) {
|
||||
for (d in modules[k][1]) {
|
||||
dep = modules[k][1][d];
|
||||
if (dep === id || Array.isArray(dep) && dep[dep.length - 1] === id) {
|
||||
parents.push(k);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (bundle.parent) {
|
||||
parents = parents.concat(getParents(bundle.parent, id));
|
||||
}
|
||||
return parents;
|
||||
}
|
||||
function hmrApply(bundle, asset) {
|
||||
var modules = bundle.modules;
|
||||
if (!modules) {
|
||||
return;
|
||||
}
|
||||
if (modules[asset.id] || !bundle.parent) {
|
||||
var fn = new Function('require', 'module', 'exports', asset.generated.js);
|
||||
asset.isNew = !modules[asset.id];
|
||||
modules[asset.id] = [fn, asset.deps];
|
||||
} else if (bundle.parent) {
|
||||
hmrApply(bundle.parent, asset);
|
||||
}
|
||||
}
|
||||
function hmrAcceptCheck(bundle, id) {
|
||||
var modules = bundle.modules;
|
||||
if (!modules) {
|
||||
return;
|
||||
}
|
||||
if (!modules[id] && bundle.parent) {
|
||||
return hmrAcceptCheck(bundle.parent, id);
|
||||
}
|
||||
if (checkedAssets[id]) {
|
||||
return;
|
||||
}
|
||||
checkedAssets[id] = true;
|
||||
var cached = bundle.cache[id];
|
||||
assetsToAccept.push([bundle, id]);
|
||||
if (cached && cached.hot && cached.hot._acceptCallbacks.length) {
|
||||
return true;
|
||||
}
|
||||
return getParents(global.parcelRequire, id).some(function (id) {
|
||||
return hmrAcceptCheck(global.parcelRequire, id);
|
||||
});
|
||||
}
|
||||
function hmrAcceptRun(bundle, id) {
|
||||
var cached = bundle.cache[id];
|
||||
bundle.hotData = {};
|
||||
if (cached) {
|
||||
cached.hot.data = bundle.hotData;
|
||||
}
|
||||
if (cached && cached.hot && cached.hot._disposeCallbacks.length) {
|
||||
cached.hot._disposeCallbacks.forEach(function (cb) {
|
||||
cb(bundle.hotData);
|
||||
});
|
||||
}
|
||||
delete bundle.cache[id];
|
||||
bundle(id);
|
||||
cached = bundle.cache[id];
|
||||
if (cached && cached.hot && cached.hot._acceptCallbacks.length) {
|
||||
cached.hot._acceptCallbacks.forEach(function (cb) {
|
||||
cb();
|
||||
});
|
||||
return true;
|
||||
}
|
||||
}
|
||||
},{}]},{},["node_modules/parcel-bundler/src/builtins/hmr-runtime.js"], null)
|
||||
//# sourceMappingURL=/base.ee376513.js.map
|
||||
1
dist/base.ee376513.js.map
vendored
Normal file
1
dist/base.ee376513.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
dist/favicon.beecaf59.png
vendored
Normal file
BIN
dist/favicon.beecaf59.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 34 KiB |
43
dist/index.html
vendored
Normal file
43
dist/index.html
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title> Sansdomainefixe.xyz </title>
|
||||
<link rel="stylesheet" href="/base.ee376513.css">
|
||||
<script src="/script.75da7f30.js" defer=""></script>
|
||||
<link rel="icon" href="/favicon.beecaf59.png" type="image/x-icon">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap" rel="stylesheet">
|
||||
<script src="https://kit.fontawesome.com/5b8b37978c.js" crossorigin="anonymous"></script>
|
||||
<script src="/navigate.31abac12.js" defer=""></script>
|
||||
<link rel="stylesheet" href="/output.c16d2514.css">
|
||||
<script src="/base.ee376513.js"></script><script src="/output.c16d2514.js"></script></head>
|
||||
<body>
|
||||
<div class="flex flex-col items-center justify-center min-h-screen bg-gradient-to-b from-primary to-secondary">
|
||||
<div>
|
||||
<h1 class="xl:text-9xl font-sans mb-4 text-white text-5xl">sansdomainefixe.xyz</h1>
|
||||
<div class="flex flex-row justify-center space-x-4">
|
||||
<a href="https://facebook.com"><i class="fa-brands fa-facebook" style="color: white; cursor: pointer; font-size: 3em"></i></a>
|
||||
<a href="https://twitter.com"><i class="fa-brands fa-twitter" style="color: white; cursor: pointer; font-size: 3em"></i></a>
|
||||
<a href="https://instagram.com"><i class="fa-brands fa-instagram" style="color: white; cursor: pointer; font-size: 3em"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<button class="my-3 text-white border-solid border-2 border-white rounded-md px-1 py-2" id="goToLogin">Admistrez vos nom de domaine</button>
|
||||
<div class="flex xl:flex-row flex-col justify-center space-x-4 mt-4 p-2 ">
|
||||
<div class="flex flex-col items-center justify-center">
|
||||
<h2 class="xl:text-4xl font-sans mb-4 text-white text-2xl">sansdomainefixe.xyz</h2>
|
||||
<p class="xl:text-2xl text-xl font-sans mb-4 text-white border-solid border-2 border-white rounded-md px-1 py-2">Pour tous les gens qui n'ont pas de quoi se payer un nom de domaines, enregistrement gratuit offert par LGP Corp</p>
|
||||
</div>
|
||||
<div class="justify-center">
|
||||
<img src="/software_img.4f617fd5.png" alt="software">
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex flex-col justify-center space-x-4 mt-4 p-2">
|
||||
<h2 class="xl:text-4xl text-2xl font-sans mb-4 text-white">Verifiez si votre nom de domaine est diponible :</h2>
|
||||
<input type="text" class="px-4 py-2 border rounded-md text-black ml-3 text-center" placeholder="Rentrez votre nom de domaine">
|
||||
<button type="button" class="my-3 text-white border-solid border-2 border-white rounded-md px-1 py-2">Verifier</button>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
341
dist/index.js
vendored
Normal file
341
dist/index.js
vendored
Normal file
@@ -0,0 +1,341 @@
|
||||
// modules are defined as an array
|
||||
// [ module function, map of requires ]
|
||||
//
|
||||
// map of requires is short require name -> numeric require
|
||||
//
|
||||
// anything defined in a previous bundle is accessed via the
|
||||
// orig method which is the require for previous bundles
|
||||
parcelRequire = (function (modules, cache, entry, globalName) {
|
||||
// Save the require from previous bundle to this closure if any
|
||||
var previousRequire = typeof parcelRequire === 'function' && parcelRequire;
|
||||
var nodeRequire = typeof require === 'function' && require;
|
||||
|
||||
function newRequire(name, jumped) {
|
||||
if (!cache[name]) {
|
||||
if (!modules[name]) {
|
||||
// if we cannot find the module within our internal map or
|
||||
// cache jump to the current global require ie. the last bundle
|
||||
// that was added to the page.
|
||||
var currentRequire = typeof parcelRequire === 'function' && parcelRequire;
|
||||
if (!jumped && currentRequire) {
|
||||
return currentRequire(name, true);
|
||||
}
|
||||
|
||||
// If there are other bundles on this page the require from the
|
||||
// previous one is saved to 'previousRequire'. Repeat this as
|
||||
// many times as there are bundles until the module is found or
|
||||
// we exhaust the require chain.
|
||||
if (previousRequire) {
|
||||
return previousRequire(name, true);
|
||||
}
|
||||
|
||||
// Try the node require function if it exists.
|
||||
if (nodeRequire && typeof name === 'string') {
|
||||
return nodeRequire(name);
|
||||
}
|
||||
|
||||
var err = new Error('Cannot find module \'' + name + '\'');
|
||||
err.code = 'MODULE_NOT_FOUND';
|
||||
throw err;
|
||||
}
|
||||
|
||||
localRequire.resolve = resolve;
|
||||
localRequire.cache = {};
|
||||
|
||||
var module = cache[name] = new newRequire.Module(name);
|
||||
|
||||
modules[name][0].call(module.exports, localRequire, module, module.exports, this);
|
||||
}
|
||||
|
||||
return cache[name].exports;
|
||||
|
||||
function localRequire(x){
|
||||
return newRequire(localRequire.resolve(x));
|
||||
}
|
||||
|
||||
function resolve(x){
|
||||
return modules[name][1][x] || x;
|
||||
}
|
||||
}
|
||||
|
||||
function Module(moduleName) {
|
||||
this.id = moduleName;
|
||||
this.bundle = newRequire;
|
||||
this.exports = {};
|
||||
}
|
||||
|
||||
newRequire.isParcelRequire = true;
|
||||
newRequire.Module = Module;
|
||||
newRequire.modules = modules;
|
||||
newRequire.cache = cache;
|
||||
newRequire.parent = previousRequire;
|
||||
newRequire.register = function (id, exports) {
|
||||
modules[id] = [function (require, module) {
|
||||
module.exports = exports;
|
||||
}, {}];
|
||||
};
|
||||
|
||||
var error;
|
||||
for (var i = 0; i < entry.length; i++) {
|
||||
try {
|
||||
newRequire(entry[i]);
|
||||
} catch (e) {
|
||||
// Save first error but execute all entries
|
||||
if (!error) {
|
||||
error = e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (entry.length) {
|
||||
// Expose entry point to Node, AMD or browser globals
|
||||
// Based on https://github.com/ForbesLindesay/umd/blob/master/template.js
|
||||
var mainExports = newRequire(entry[entry.length - 1]);
|
||||
|
||||
// CommonJS
|
||||
if (typeof exports === "object" && typeof module !== "undefined") {
|
||||
module.exports = mainExports;
|
||||
|
||||
// RequireJS
|
||||
} else if (typeof define === "function" && define.amd) {
|
||||
define(function () {
|
||||
return mainExports;
|
||||
});
|
||||
|
||||
// <script>
|
||||
} else if (globalName) {
|
||||
this[globalName] = mainExports;
|
||||
}
|
||||
}
|
||||
|
||||
// Override the current require with this new one
|
||||
parcelRequire = newRequire;
|
||||
|
||||
if (error) {
|
||||
// throw error from earlier, _after updating parcelRequire_
|
||||
throw error;
|
||||
}
|
||||
|
||||
return newRequire;
|
||||
})({"node_modules/parcel-bundler/src/builtins/bundle-url.js":[function(require,module,exports) {
|
||||
var bundleURL = null;
|
||||
function getBundleURLCached() {
|
||||
if (!bundleURL) {
|
||||
bundleURL = getBundleURL();
|
||||
}
|
||||
return bundleURL;
|
||||
}
|
||||
function getBundleURL() {
|
||||
// Attempt to find the URL of the current script and use that as the base URL
|
||||
try {
|
||||
throw new Error();
|
||||
} catch (err) {
|
||||
var matches = ('' + err.stack).match(/(https?|file|ftp|chrome-extension|moz-extension):\/\/[^)\n]+/g);
|
||||
if (matches) {
|
||||
return getBaseURL(matches[0]);
|
||||
}
|
||||
}
|
||||
return '/';
|
||||
}
|
||||
function getBaseURL(url) {
|
||||
return ('' + url).replace(/^((?:https?|file|ftp|chrome-extension|moz-extension):\/\/.+)?\/[^/]+(?:\?.*)?$/, '$1') + '/';
|
||||
}
|
||||
exports.getBundleURL = getBundleURLCached;
|
||||
exports.getBaseURL = getBaseURL;
|
||||
},{}],"node_modules/parcel-bundler/src/builtins/css-loader.js":[function(require,module,exports) {
|
||||
var bundle = require('./bundle-url');
|
||||
function updateLink(link) {
|
||||
var newLink = link.cloneNode();
|
||||
newLink.onload = function () {
|
||||
link.remove();
|
||||
};
|
||||
newLink.href = link.href.split('?')[0] + '?' + Date.now();
|
||||
link.parentNode.insertBefore(newLink, link.nextSibling);
|
||||
}
|
||||
var cssTimeout = null;
|
||||
function reloadCSS() {
|
||||
if (cssTimeout) {
|
||||
return;
|
||||
}
|
||||
cssTimeout = setTimeout(function () {
|
||||
var links = document.querySelectorAll('link[rel="stylesheet"]');
|
||||
for (var i = 0; i < links.length; i++) {
|
||||
if (bundle.getBaseURL(links[i].href) === bundle.getBundleURL()) {
|
||||
updateLink(links[i]);
|
||||
}
|
||||
}
|
||||
cssTimeout = null;
|
||||
}, 50);
|
||||
}
|
||||
module.exports = reloadCSS;
|
||||
},{"./bundle-url":"node_modules/parcel-bundler/src/builtins/bundle-url.js"}],"node_modules/parcel-bundler/src/builtins/hmr-runtime.js":[function(require,module,exports) {
|
||||
var global = arguments[3];
|
||||
var OVERLAY_ID = '__parcel__error__overlay__';
|
||||
var OldModule = module.bundle.Module;
|
||||
function Module(moduleName) {
|
||||
OldModule.call(this, moduleName);
|
||||
this.hot = {
|
||||
data: module.bundle.hotData,
|
||||
_acceptCallbacks: [],
|
||||
_disposeCallbacks: [],
|
||||
accept: function (fn) {
|
||||
this._acceptCallbacks.push(fn || function () {});
|
||||
},
|
||||
dispose: function (fn) {
|
||||
this._disposeCallbacks.push(fn);
|
||||
}
|
||||
};
|
||||
module.bundle.hotData = null;
|
||||
}
|
||||
module.bundle.Module = Module;
|
||||
var checkedAssets, assetsToAccept;
|
||||
var parent = module.bundle.parent;
|
||||
if ((!parent || !parent.isParcelRequire) && typeof WebSocket !== 'undefined') {
|
||||
var hostname = "" || location.hostname;
|
||||
var protocol = location.protocol === 'https:' ? 'wss' : 'ws';
|
||||
var ws = new WebSocket(protocol + '://' + hostname + ':' + "41549" + '/');
|
||||
ws.onmessage = function (event) {
|
||||
checkedAssets = {};
|
||||
assetsToAccept = [];
|
||||
var data = JSON.parse(event.data);
|
||||
if (data.type === 'update') {
|
||||
var handled = false;
|
||||
data.assets.forEach(function (asset) {
|
||||
if (!asset.isNew) {
|
||||
var didAccept = hmrAcceptCheck(global.parcelRequire, asset.id);
|
||||
if (didAccept) {
|
||||
handled = true;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Enable HMR for CSS by default.
|
||||
handled = handled || data.assets.every(function (asset) {
|
||||
return asset.type === 'css' && asset.generated.js;
|
||||
});
|
||||
if (handled) {
|
||||
console.clear();
|
||||
data.assets.forEach(function (asset) {
|
||||
hmrApply(global.parcelRequire, asset);
|
||||
});
|
||||
assetsToAccept.forEach(function (v) {
|
||||
hmrAcceptRun(v[0], v[1]);
|
||||
});
|
||||
} else if (location.reload) {
|
||||
// `location` global exists in a web worker context but lacks `.reload()` function.
|
||||
location.reload();
|
||||
}
|
||||
}
|
||||
if (data.type === 'reload') {
|
||||
ws.close();
|
||||
ws.onclose = function () {
|
||||
location.reload();
|
||||
};
|
||||
}
|
||||
if (data.type === 'error-resolved') {
|
||||
console.log('[parcel] ✨ Error resolved');
|
||||
removeErrorOverlay();
|
||||
}
|
||||
if (data.type === 'error') {
|
||||
console.error('[parcel] 🚨 ' + data.error.message + '\n' + data.error.stack);
|
||||
removeErrorOverlay();
|
||||
var overlay = createErrorOverlay(data);
|
||||
document.body.appendChild(overlay);
|
||||
}
|
||||
};
|
||||
}
|
||||
function removeErrorOverlay() {
|
||||
var overlay = document.getElementById(OVERLAY_ID);
|
||||
if (overlay) {
|
||||
overlay.remove();
|
||||
}
|
||||
}
|
||||
function createErrorOverlay(data) {
|
||||
var overlay = document.createElement('div');
|
||||
overlay.id = OVERLAY_ID;
|
||||
|
||||
// html encode message and stack trace
|
||||
var message = document.createElement('div');
|
||||
var stackTrace = document.createElement('pre');
|
||||
message.innerText = data.error.message;
|
||||
stackTrace.innerText = data.error.stack;
|
||||
overlay.innerHTML = '<div style="background: black; font-size: 16px; color: white; position: fixed; height: 100%; width: 100%; top: 0px; left: 0px; padding: 30px; opacity: 0.85; font-family: Menlo, Consolas, monospace; z-index: 9999;">' + '<span style="background: red; padding: 2px 4px; border-radius: 2px;">ERROR</span>' + '<span style="top: 2px; margin-left: 5px; position: relative;">🚨</span>' + '<div style="font-size: 18px; font-weight: bold; margin-top: 20px;">' + message.innerHTML + '</div>' + '<pre>' + stackTrace.innerHTML + '</pre>' + '</div>';
|
||||
return overlay;
|
||||
}
|
||||
function getParents(bundle, id) {
|
||||
var modules = bundle.modules;
|
||||
if (!modules) {
|
||||
return [];
|
||||
}
|
||||
var parents = [];
|
||||
var k, d, dep;
|
||||
for (k in modules) {
|
||||
for (d in modules[k][1]) {
|
||||
dep = modules[k][1][d];
|
||||
if (dep === id || Array.isArray(dep) && dep[dep.length - 1] === id) {
|
||||
parents.push(k);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (bundle.parent) {
|
||||
parents = parents.concat(getParents(bundle.parent, id));
|
||||
}
|
||||
return parents;
|
||||
}
|
||||
function hmrApply(bundle, asset) {
|
||||
var modules = bundle.modules;
|
||||
if (!modules) {
|
||||
return;
|
||||
}
|
||||
if (modules[asset.id] || !bundle.parent) {
|
||||
var fn = new Function('require', 'module', 'exports', asset.generated.js);
|
||||
asset.isNew = !modules[asset.id];
|
||||
modules[asset.id] = [fn, asset.deps];
|
||||
} else if (bundle.parent) {
|
||||
hmrApply(bundle.parent, asset);
|
||||
}
|
||||
}
|
||||
function hmrAcceptCheck(bundle, id) {
|
||||
var modules = bundle.modules;
|
||||
if (!modules) {
|
||||
return;
|
||||
}
|
||||
if (!modules[id] && bundle.parent) {
|
||||
return hmrAcceptCheck(bundle.parent, id);
|
||||
}
|
||||
if (checkedAssets[id]) {
|
||||
return;
|
||||
}
|
||||
checkedAssets[id] = true;
|
||||
var cached = bundle.cache[id];
|
||||
assetsToAccept.push([bundle, id]);
|
||||
if (cached && cached.hot && cached.hot._acceptCallbacks.length) {
|
||||
return true;
|
||||
}
|
||||
return getParents(global.parcelRequire, id).some(function (id) {
|
||||
return hmrAcceptCheck(global.parcelRequire, id);
|
||||
});
|
||||
}
|
||||
function hmrAcceptRun(bundle, id) {
|
||||
var cached = bundle.cache[id];
|
||||
bundle.hotData = {};
|
||||
if (cached) {
|
||||
cached.hot.data = bundle.hotData;
|
||||
}
|
||||
if (cached && cached.hot && cached.hot._disposeCallbacks.length) {
|
||||
cached.hot._disposeCallbacks.forEach(function (cb) {
|
||||
cb(bundle.hotData);
|
||||
});
|
||||
}
|
||||
delete bundle.cache[id];
|
||||
bundle(id);
|
||||
cached = bundle.cache[id];
|
||||
if (cached && cached.hot && cached.hot._acceptCallbacks.length) {
|
||||
cached.hot._acceptCallbacks.forEach(function (cb) {
|
||||
cb();
|
||||
});
|
||||
return true;
|
||||
}
|
||||
}
|
||||
},{}]},{},["node_modules/parcel-bundler/src/builtins/hmr-runtime.js"], null)
|
||||
//# sourceMappingURL=/index.js.map
|
||||
1
dist/index.js.map
vendored
Normal file
1
dist/index.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
295
dist/navigate.31abac12.js
vendored
Normal file
295
dist/navigate.31abac12.js
vendored
Normal file
@@ -0,0 +1,295 @@
|
||||
// modules are defined as an array
|
||||
// [ module function, map of requires ]
|
||||
//
|
||||
// map of requires is short require name -> numeric require
|
||||
//
|
||||
// anything defined in a previous bundle is accessed via the
|
||||
// orig method which is the require for previous bundles
|
||||
parcelRequire = (function (modules, cache, entry, globalName) {
|
||||
// Save the require from previous bundle to this closure if any
|
||||
var previousRequire = typeof parcelRequire === 'function' && parcelRequire;
|
||||
var nodeRequire = typeof require === 'function' && require;
|
||||
|
||||
function newRequire(name, jumped) {
|
||||
if (!cache[name]) {
|
||||
if (!modules[name]) {
|
||||
// if we cannot find the module within our internal map or
|
||||
// cache jump to the current global require ie. the last bundle
|
||||
// that was added to the page.
|
||||
var currentRequire = typeof parcelRequire === 'function' && parcelRequire;
|
||||
if (!jumped && currentRequire) {
|
||||
return currentRequire(name, true);
|
||||
}
|
||||
|
||||
// If there are other bundles on this page the require from the
|
||||
// previous one is saved to 'previousRequire'. Repeat this as
|
||||
// many times as there are bundles until the module is found or
|
||||
// we exhaust the require chain.
|
||||
if (previousRequire) {
|
||||
return previousRequire(name, true);
|
||||
}
|
||||
|
||||
// Try the node require function if it exists.
|
||||
if (nodeRequire && typeof name === 'string') {
|
||||
return nodeRequire(name);
|
||||
}
|
||||
|
||||
var err = new Error('Cannot find module \'' + name + '\'');
|
||||
err.code = 'MODULE_NOT_FOUND';
|
||||
throw err;
|
||||
}
|
||||
|
||||
localRequire.resolve = resolve;
|
||||
localRequire.cache = {};
|
||||
|
||||
var module = cache[name] = new newRequire.Module(name);
|
||||
|
||||
modules[name][0].call(module.exports, localRequire, module, module.exports, this);
|
||||
}
|
||||
|
||||
return cache[name].exports;
|
||||
|
||||
function localRequire(x){
|
||||
return newRequire(localRequire.resolve(x));
|
||||
}
|
||||
|
||||
function resolve(x){
|
||||
return modules[name][1][x] || x;
|
||||
}
|
||||
}
|
||||
|
||||
function Module(moduleName) {
|
||||
this.id = moduleName;
|
||||
this.bundle = newRequire;
|
||||
this.exports = {};
|
||||
}
|
||||
|
||||
newRequire.isParcelRequire = true;
|
||||
newRequire.Module = Module;
|
||||
newRequire.modules = modules;
|
||||
newRequire.cache = cache;
|
||||
newRequire.parent = previousRequire;
|
||||
newRequire.register = function (id, exports) {
|
||||
modules[id] = [function (require, module) {
|
||||
module.exports = exports;
|
||||
}, {}];
|
||||
};
|
||||
|
||||
var error;
|
||||
for (var i = 0; i < entry.length; i++) {
|
||||
try {
|
||||
newRequire(entry[i]);
|
||||
} catch (e) {
|
||||
// Save first error but execute all entries
|
||||
if (!error) {
|
||||
error = e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (entry.length) {
|
||||
// Expose entry point to Node, AMD or browser globals
|
||||
// Based on https://github.com/ForbesLindesay/umd/blob/master/template.js
|
||||
var mainExports = newRequire(entry[entry.length - 1]);
|
||||
|
||||
// CommonJS
|
||||
if (typeof exports === "object" && typeof module !== "undefined") {
|
||||
module.exports = mainExports;
|
||||
|
||||
// RequireJS
|
||||
} else if (typeof define === "function" && define.amd) {
|
||||
define(function () {
|
||||
return mainExports;
|
||||
});
|
||||
|
||||
// <script>
|
||||
} else if (globalName) {
|
||||
this[globalName] = mainExports;
|
||||
}
|
||||
}
|
||||
|
||||
// Override the current require with this new one
|
||||
parcelRequire = newRequire;
|
||||
|
||||
if (error) {
|
||||
// throw error from earlier, _after updating parcelRequire_
|
||||
throw error;
|
||||
}
|
||||
|
||||
return newRequire;
|
||||
})({"src/ts/navigate.ts":[function(require,module,exports) {
|
||||
function goToLogin() {
|
||||
window.location.href = "login.html";
|
||||
}
|
||||
document.getElementById("goToLogin").addEventListener("click", goToLogin);
|
||||
},{}],"node_modules/parcel-bundler/src/builtins/hmr-runtime.js":[function(require,module,exports) {
|
||||
var global = arguments[3];
|
||||
var OVERLAY_ID = '__parcel__error__overlay__';
|
||||
var OldModule = module.bundle.Module;
|
||||
function Module(moduleName) {
|
||||
OldModule.call(this, moduleName);
|
||||
this.hot = {
|
||||
data: module.bundle.hotData,
|
||||
_acceptCallbacks: [],
|
||||
_disposeCallbacks: [],
|
||||
accept: function (fn) {
|
||||
this._acceptCallbacks.push(fn || function () {});
|
||||
},
|
||||
dispose: function (fn) {
|
||||
this._disposeCallbacks.push(fn);
|
||||
}
|
||||
};
|
||||
module.bundle.hotData = null;
|
||||
}
|
||||
module.bundle.Module = Module;
|
||||
var checkedAssets, assetsToAccept;
|
||||
var parent = module.bundle.parent;
|
||||
if ((!parent || !parent.isParcelRequire) && typeof WebSocket !== 'undefined') {
|
||||
var hostname = "" || location.hostname;
|
||||
var protocol = location.protocol === 'https:' ? 'wss' : 'ws';
|
||||
var ws = new WebSocket(protocol + '://' + hostname + ':' + "41549" + '/');
|
||||
ws.onmessage = function (event) {
|
||||
checkedAssets = {};
|
||||
assetsToAccept = [];
|
||||
var data = JSON.parse(event.data);
|
||||
if (data.type === 'update') {
|
||||
var handled = false;
|
||||
data.assets.forEach(function (asset) {
|
||||
if (!asset.isNew) {
|
||||
var didAccept = hmrAcceptCheck(global.parcelRequire, asset.id);
|
||||
if (didAccept) {
|
||||
handled = true;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Enable HMR for CSS by default.
|
||||
handled = handled || data.assets.every(function (asset) {
|
||||
return asset.type === 'css' && asset.generated.js;
|
||||
});
|
||||
if (handled) {
|
||||
console.clear();
|
||||
data.assets.forEach(function (asset) {
|
||||
hmrApply(global.parcelRequire, asset);
|
||||
});
|
||||
assetsToAccept.forEach(function (v) {
|
||||
hmrAcceptRun(v[0], v[1]);
|
||||
});
|
||||
} else if (location.reload) {
|
||||
// `location` global exists in a web worker context but lacks `.reload()` function.
|
||||
location.reload();
|
||||
}
|
||||
}
|
||||
if (data.type === 'reload') {
|
||||
ws.close();
|
||||
ws.onclose = function () {
|
||||
location.reload();
|
||||
};
|
||||
}
|
||||
if (data.type === 'error-resolved') {
|
||||
console.log('[parcel] ✨ Error resolved');
|
||||
removeErrorOverlay();
|
||||
}
|
||||
if (data.type === 'error') {
|
||||
console.error('[parcel] 🚨 ' + data.error.message + '\n' + data.error.stack);
|
||||
removeErrorOverlay();
|
||||
var overlay = createErrorOverlay(data);
|
||||
document.body.appendChild(overlay);
|
||||
}
|
||||
};
|
||||
}
|
||||
function removeErrorOverlay() {
|
||||
var overlay = document.getElementById(OVERLAY_ID);
|
||||
if (overlay) {
|
||||
overlay.remove();
|
||||
}
|
||||
}
|
||||
function createErrorOverlay(data) {
|
||||
var overlay = document.createElement('div');
|
||||
overlay.id = OVERLAY_ID;
|
||||
|
||||
// html encode message and stack trace
|
||||
var message = document.createElement('div');
|
||||
var stackTrace = document.createElement('pre');
|
||||
message.innerText = data.error.message;
|
||||
stackTrace.innerText = data.error.stack;
|
||||
overlay.innerHTML = '<div style="background: black; font-size: 16px; color: white; position: fixed; height: 100%; width: 100%; top: 0px; left: 0px; padding: 30px; opacity: 0.85; font-family: Menlo, Consolas, monospace; z-index: 9999;">' + '<span style="background: red; padding: 2px 4px; border-radius: 2px;">ERROR</span>' + '<span style="top: 2px; margin-left: 5px; position: relative;">🚨</span>' + '<div style="font-size: 18px; font-weight: bold; margin-top: 20px;">' + message.innerHTML + '</div>' + '<pre>' + stackTrace.innerHTML + '</pre>' + '</div>';
|
||||
return overlay;
|
||||
}
|
||||
function getParents(bundle, id) {
|
||||
var modules = bundle.modules;
|
||||
if (!modules) {
|
||||
return [];
|
||||
}
|
||||
var parents = [];
|
||||
var k, d, dep;
|
||||
for (k in modules) {
|
||||
for (d in modules[k][1]) {
|
||||
dep = modules[k][1][d];
|
||||
if (dep === id || Array.isArray(dep) && dep[dep.length - 1] === id) {
|
||||
parents.push(k);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (bundle.parent) {
|
||||
parents = parents.concat(getParents(bundle.parent, id));
|
||||
}
|
||||
return parents;
|
||||
}
|
||||
function hmrApply(bundle, asset) {
|
||||
var modules = bundle.modules;
|
||||
if (!modules) {
|
||||
return;
|
||||
}
|
||||
if (modules[asset.id] || !bundle.parent) {
|
||||
var fn = new Function('require', 'module', 'exports', asset.generated.js);
|
||||
asset.isNew = !modules[asset.id];
|
||||
modules[asset.id] = [fn, asset.deps];
|
||||
} else if (bundle.parent) {
|
||||
hmrApply(bundle.parent, asset);
|
||||
}
|
||||
}
|
||||
function hmrAcceptCheck(bundle, id) {
|
||||
var modules = bundle.modules;
|
||||
if (!modules) {
|
||||
return;
|
||||
}
|
||||
if (!modules[id] && bundle.parent) {
|
||||
return hmrAcceptCheck(bundle.parent, id);
|
||||
}
|
||||
if (checkedAssets[id]) {
|
||||
return;
|
||||
}
|
||||
checkedAssets[id] = true;
|
||||
var cached = bundle.cache[id];
|
||||
assetsToAccept.push([bundle, id]);
|
||||
if (cached && cached.hot && cached.hot._acceptCallbacks.length) {
|
||||
return true;
|
||||
}
|
||||
return getParents(global.parcelRequire, id).some(function (id) {
|
||||
return hmrAcceptCheck(global.parcelRequire, id);
|
||||
});
|
||||
}
|
||||
function hmrAcceptRun(bundle, id) {
|
||||
var cached = bundle.cache[id];
|
||||
bundle.hotData = {};
|
||||
if (cached) {
|
||||
cached.hot.data = bundle.hotData;
|
||||
}
|
||||
if (cached && cached.hot && cached.hot._disposeCallbacks.length) {
|
||||
cached.hot._disposeCallbacks.forEach(function (cb) {
|
||||
cb(bundle.hotData);
|
||||
});
|
||||
}
|
||||
delete bundle.cache[id];
|
||||
bundle(id);
|
||||
cached = bundle.cache[id];
|
||||
if (cached && cached.hot && cached.hot._acceptCallbacks.length) {
|
||||
cached.hot._acceptCallbacks.forEach(function (cb) {
|
||||
cb();
|
||||
});
|
||||
return true;
|
||||
}
|
||||
}
|
||||
},{}]},{},["node_modules/parcel-bundler/src/builtins/hmr-runtime.js","src/ts/navigate.ts"], null)
|
||||
//# sourceMappingURL=/navigate.31abac12.js.map
|
||||
1
dist/navigate.31abac12.js.map
vendored
Normal file
1
dist/navigate.31abac12.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
3346
dist/output.c16d2514.css
vendored
Normal file
3346
dist/output.c16d2514.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
dist/output.c16d2514.css.map
vendored
Normal file
1
dist/output.c16d2514.css.map
vendored
Normal file
File diff suppressed because one or more lines are too long
345
dist/output.c16d2514.js
vendored
Normal file
345
dist/output.c16d2514.js
vendored
Normal file
@@ -0,0 +1,345 @@
|
||||
// modules are defined as an array
|
||||
// [ module function, map of requires ]
|
||||
//
|
||||
// map of requires is short require name -> numeric require
|
||||
//
|
||||
// anything defined in a previous bundle is accessed via the
|
||||
// orig method which is the require for previous bundles
|
||||
parcelRequire = (function (modules, cache, entry, globalName) {
|
||||
// Save the require from previous bundle to this closure if any
|
||||
var previousRequire = typeof parcelRequire === 'function' && parcelRequire;
|
||||
var nodeRequire = typeof require === 'function' && require;
|
||||
|
||||
function newRequire(name, jumped) {
|
||||
if (!cache[name]) {
|
||||
if (!modules[name]) {
|
||||
// if we cannot find the module within our internal map or
|
||||
// cache jump to the current global require ie. the last bundle
|
||||
// that was added to the page.
|
||||
var currentRequire = typeof parcelRequire === 'function' && parcelRequire;
|
||||
if (!jumped && currentRequire) {
|
||||
return currentRequire(name, true);
|
||||
}
|
||||
|
||||
// If there are other bundles on this page the require from the
|
||||
// previous one is saved to 'previousRequire'. Repeat this as
|
||||
// many times as there are bundles until the module is found or
|
||||
// we exhaust the require chain.
|
||||
if (previousRequire) {
|
||||
return previousRequire(name, true);
|
||||
}
|
||||
|
||||
// Try the node require function if it exists.
|
||||
if (nodeRequire && typeof name === 'string') {
|
||||
return nodeRequire(name);
|
||||
}
|
||||
|
||||
var err = new Error('Cannot find module \'' + name + '\'');
|
||||
err.code = 'MODULE_NOT_FOUND';
|
||||
throw err;
|
||||
}
|
||||
|
||||
localRequire.resolve = resolve;
|
||||
localRequire.cache = {};
|
||||
|
||||
var module = cache[name] = new newRequire.Module(name);
|
||||
|
||||
modules[name][0].call(module.exports, localRequire, module, module.exports, this);
|
||||
}
|
||||
|
||||
return cache[name].exports;
|
||||
|
||||
function localRequire(x){
|
||||
return newRequire(localRequire.resolve(x));
|
||||
}
|
||||
|
||||
function resolve(x){
|
||||
return modules[name][1][x] || x;
|
||||
}
|
||||
}
|
||||
|
||||
function Module(moduleName) {
|
||||
this.id = moduleName;
|
||||
this.bundle = newRequire;
|
||||
this.exports = {};
|
||||
}
|
||||
|
||||
newRequire.isParcelRequire = true;
|
||||
newRequire.Module = Module;
|
||||
newRequire.modules = modules;
|
||||
newRequire.cache = cache;
|
||||
newRequire.parent = previousRequire;
|
||||
newRequire.register = function (id, exports) {
|
||||
modules[id] = [function (require, module) {
|
||||
module.exports = exports;
|
||||
}, {}];
|
||||
};
|
||||
|
||||
var error;
|
||||
for (var i = 0; i < entry.length; i++) {
|
||||
try {
|
||||
newRequire(entry[i]);
|
||||
} catch (e) {
|
||||
// Save first error but execute all entries
|
||||
if (!error) {
|
||||
error = e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (entry.length) {
|
||||
// Expose entry point to Node, AMD or browser globals
|
||||
// Based on https://github.com/ForbesLindesay/umd/blob/master/template.js
|
||||
var mainExports = newRequire(entry[entry.length - 1]);
|
||||
|
||||
// CommonJS
|
||||
if (typeof exports === "object" && typeof module !== "undefined") {
|
||||
module.exports = mainExports;
|
||||
|
||||
// RequireJS
|
||||
} else if (typeof define === "function" && define.amd) {
|
||||
define(function () {
|
||||
return mainExports;
|
||||
});
|
||||
|
||||
// <script>
|
||||
} else if (globalName) {
|
||||
this[globalName] = mainExports;
|
||||
}
|
||||
}
|
||||
|
||||
// Override the current require with this new one
|
||||
parcelRequire = newRequire;
|
||||
|
||||
if (error) {
|
||||
// throw error from earlier, _after updating parcelRequire_
|
||||
throw error;
|
||||
}
|
||||
|
||||
return newRequire;
|
||||
})({"node_modules/parcel-bundler/src/builtins/bundle-url.js":[function(require,module,exports) {
|
||||
var bundleURL = null;
|
||||
function getBundleURLCached() {
|
||||
if (!bundleURL) {
|
||||
bundleURL = getBundleURL();
|
||||
}
|
||||
return bundleURL;
|
||||
}
|
||||
function getBundleURL() {
|
||||
// Attempt to find the URL of the current script and use that as the base URL
|
||||
try {
|
||||
throw new Error();
|
||||
} catch (err) {
|
||||
var matches = ('' + err.stack).match(/(https?|file|ftp|chrome-extension|moz-extension):\/\/[^)\n]+/g);
|
||||
if (matches) {
|
||||
return getBaseURL(matches[0]);
|
||||
}
|
||||
}
|
||||
return '/';
|
||||
}
|
||||
function getBaseURL(url) {
|
||||
return ('' + url).replace(/^((?:https?|file|ftp|chrome-extension|moz-extension):\/\/.+)?\/[^/]+(?:\?.*)?$/, '$1') + '/';
|
||||
}
|
||||
exports.getBundleURL = getBundleURLCached;
|
||||
exports.getBaseURL = getBaseURL;
|
||||
},{}],"node_modules/parcel-bundler/src/builtins/css-loader.js":[function(require,module,exports) {
|
||||
var bundle = require('./bundle-url');
|
||||
function updateLink(link) {
|
||||
var newLink = link.cloneNode();
|
||||
newLink.onload = function () {
|
||||
link.remove();
|
||||
};
|
||||
newLink.href = link.href.split('?')[0] + '?' + Date.now();
|
||||
link.parentNode.insertBefore(newLink, link.nextSibling);
|
||||
}
|
||||
var cssTimeout = null;
|
||||
function reloadCSS() {
|
||||
if (cssTimeout) {
|
||||
return;
|
||||
}
|
||||
cssTimeout = setTimeout(function () {
|
||||
var links = document.querySelectorAll('link[rel="stylesheet"]');
|
||||
for (var i = 0; i < links.length; i++) {
|
||||
if (bundle.getBaseURL(links[i].href) === bundle.getBundleURL()) {
|
||||
updateLink(links[i]);
|
||||
}
|
||||
}
|
||||
cssTimeout = null;
|
||||
}, 50);
|
||||
}
|
||||
module.exports = reloadCSS;
|
||||
},{"./bundle-url":"node_modules/parcel-bundler/src/builtins/bundle-url.js"}],"output.css":[function(require,module,exports) {
|
||||
var reloadCSS = require('_css_loader');
|
||||
module.hot.dispose(reloadCSS);
|
||||
module.hot.accept(reloadCSS);
|
||||
},{"_css_loader":"node_modules/parcel-bundler/src/builtins/css-loader.js"}],"node_modules/parcel-bundler/src/builtins/hmr-runtime.js":[function(require,module,exports) {
|
||||
var global = arguments[3];
|
||||
var OVERLAY_ID = '__parcel__error__overlay__';
|
||||
var OldModule = module.bundle.Module;
|
||||
function Module(moduleName) {
|
||||
OldModule.call(this, moduleName);
|
||||
this.hot = {
|
||||
data: module.bundle.hotData,
|
||||
_acceptCallbacks: [],
|
||||
_disposeCallbacks: [],
|
||||
accept: function (fn) {
|
||||
this._acceptCallbacks.push(fn || function () {});
|
||||
},
|
||||
dispose: function (fn) {
|
||||
this._disposeCallbacks.push(fn);
|
||||
}
|
||||
};
|
||||
module.bundle.hotData = null;
|
||||
}
|
||||
module.bundle.Module = Module;
|
||||
var checkedAssets, assetsToAccept;
|
||||
var parent = module.bundle.parent;
|
||||
if ((!parent || !parent.isParcelRequire) && typeof WebSocket !== 'undefined') {
|
||||
var hostname = "" || location.hostname;
|
||||
var protocol = location.protocol === 'https:' ? 'wss' : 'ws';
|
||||
var ws = new WebSocket(protocol + '://' + hostname + ':' + "41549" + '/');
|
||||
ws.onmessage = function (event) {
|
||||
checkedAssets = {};
|
||||
assetsToAccept = [];
|
||||
var data = JSON.parse(event.data);
|
||||
if (data.type === 'update') {
|
||||
var handled = false;
|
||||
data.assets.forEach(function (asset) {
|
||||
if (!asset.isNew) {
|
||||
var didAccept = hmrAcceptCheck(global.parcelRequire, asset.id);
|
||||
if (didAccept) {
|
||||
handled = true;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Enable HMR for CSS by default.
|
||||
handled = handled || data.assets.every(function (asset) {
|
||||
return asset.type === 'css' && asset.generated.js;
|
||||
});
|
||||
if (handled) {
|
||||
console.clear();
|
||||
data.assets.forEach(function (asset) {
|
||||
hmrApply(global.parcelRequire, asset);
|
||||
});
|
||||
assetsToAccept.forEach(function (v) {
|
||||
hmrAcceptRun(v[0], v[1]);
|
||||
});
|
||||
} else if (location.reload) {
|
||||
// `location` global exists in a web worker context but lacks `.reload()` function.
|
||||
location.reload();
|
||||
}
|
||||
}
|
||||
if (data.type === 'reload') {
|
||||
ws.close();
|
||||
ws.onclose = function () {
|
||||
location.reload();
|
||||
};
|
||||
}
|
||||
if (data.type === 'error-resolved') {
|
||||
console.log('[parcel] ✨ Error resolved');
|
||||
removeErrorOverlay();
|
||||
}
|
||||
if (data.type === 'error') {
|
||||
console.error('[parcel] 🚨 ' + data.error.message + '\n' + data.error.stack);
|
||||
removeErrorOverlay();
|
||||
var overlay = createErrorOverlay(data);
|
||||
document.body.appendChild(overlay);
|
||||
}
|
||||
};
|
||||
}
|
||||
function removeErrorOverlay() {
|
||||
var overlay = document.getElementById(OVERLAY_ID);
|
||||
if (overlay) {
|
||||
overlay.remove();
|
||||
}
|
||||
}
|
||||
function createErrorOverlay(data) {
|
||||
var overlay = document.createElement('div');
|
||||
overlay.id = OVERLAY_ID;
|
||||
|
||||
// html encode message and stack trace
|
||||
var message = document.createElement('div');
|
||||
var stackTrace = document.createElement('pre');
|
||||
message.innerText = data.error.message;
|
||||
stackTrace.innerText = data.error.stack;
|
||||
overlay.innerHTML = '<div style="background: black; font-size: 16px; color: white; position: fixed; height: 100%; width: 100%; top: 0px; left: 0px; padding: 30px; opacity: 0.85; font-family: Menlo, Consolas, monospace; z-index: 9999;">' + '<span style="background: red; padding: 2px 4px; border-radius: 2px;">ERROR</span>' + '<span style="top: 2px; margin-left: 5px; position: relative;">🚨</span>' + '<div style="font-size: 18px; font-weight: bold; margin-top: 20px;">' + message.innerHTML + '</div>' + '<pre>' + stackTrace.innerHTML + '</pre>' + '</div>';
|
||||
return overlay;
|
||||
}
|
||||
function getParents(bundle, id) {
|
||||
var modules = bundle.modules;
|
||||
if (!modules) {
|
||||
return [];
|
||||
}
|
||||
var parents = [];
|
||||
var k, d, dep;
|
||||
for (k in modules) {
|
||||
for (d in modules[k][1]) {
|
||||
dep = modules[k][1][d];
|
||||
if (dep === id || Array.isArray(dep) && dep[dep.length - 1] === id) {
|
||||
parents.push(k);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (bundle.parent) {
|
||||
parents = parents.concat(getParents(bundle.parent, id));
|
||||
}
|
||||
return parents;
|
||||
}
|
||||
function hmrApply(bundle, asset) {
|
||||
var modules = bundle.modules;
|
||||
if (!modules) {
|
||||
return;
|
||||
}
|
||||
if (modules[asset.id] || !bundle.parent) {
|
||||
var fn = new Function('require', 'module', 'exports', asset.generated.js);
|
||||
asset.isNew = !modules[asset.id];
|
||||
modules[asset.id] = [fn, asset.deps];
|
||||
} else if (bundle.parent) {
|
||||
hmrApply(bundle.parent, asset);
|
||||
}
|
||||
}
|
||||
function hmrAcceptCheck(bundle, id) {
|
||||
var modules = bundle.modules;
|
||||
if (!modules) {
|
||||
return;
|
||||
}
|
||||
if (!modules[id] && bundle.parent) {
|
||||
return hmrAcceptCheck(bundle.parent, id);
|
||||
}
|
||||
if (checkedAssets[id]) {
|
||||
return;
|
||||
}
|
||||
checkedAssets[id] = true;
|
||||
var cached = bundle.cache[id];
|
||||
assetsToAccept.push([bundle, id]);
|
||||
if (cached && cached.hot && cached.hot._acceptCallbacks.length) {
|
||||
return true;
|
||||
}
|
||||
return getParents(global.parcelRequire, id).some(function (id) {
|
||||
return hmrAcceptCheck(global.parcelRequire, id);
|
||||
});
|
||||
}
|
||||
function hmrAcceptRun(bundle, id) {
|
||||
var cached = bundle.cache[id];
|
||||
bundle.hotData = {};
|
||||
if (cached) {
|
||||
cached.hot.data = bundle.hotData;
|
||||
}
|
||||
if (cached && cached.hot && cached.hot._disposeCallbacks.length) {
|
||||
cached.hot._disposeCallbacks.forEach(function (cb) {
|
||||
cb(bundle.hotData);
|
||||
});
|
||||
}
|
||||
delete bundle.cache[id];
|
||||
bundle(id);
|
||||
cached = bundle.cache[id];
|
||||
if (cached && cached.hot && cached.hot._acceptCallbacks.length) {
|
||||
cached.hot._acceptCallbacks.forEach(function (cb) {
|
||||
cb();
|
||||
});
|
||||
return true;
|
||||
}
|
||||
}
|
||||
},{}]},{},["node_modules/parcel-bundler/src/builtins/hmr-runtime.js"], null)
|
||||
//# sourceMappingURL=/output.c16d2514.js.map
|
||||
1
dist/output.c16d2514.js.map
vendored
Normal file
1
dist/output.c16d2514.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
292
dist/script.75da7f30.js
vendored
Normal file
292
dist/script.75da7f30.js
vendored
Normal file
@@ -0,0 +1,292 @@
|
||||
// modules are defined as an array
|
||||
// [ module function, map of requires ]
|
||||
//
|
||||
// map of requires is short require name -> numeric require
|
||||
//
|
||||
// anything defined in a previous bundle is accessed via the
|
||||
// orig method which is the require for previous bundles
|
||||
parcelRequire = (function (modules, cache, entry, globalName) {
|
||||
// Save the require from previous bundle to this closure if any
|
||||
var previousRequire = typeof parcelRequire === 'function' && parcelRequire;
|
||||
var nodeRequire = typeof require === 'function' && require;
|
||||
|
||||
function newRequire(name, jumped) {
|
||||
if (!cache[name]) {
|
||||
if (!modules[name]) {
|
||||
// if we cannot find the module within our internal map or
|
||||
// cache jump to the current global require ie. the last bundle
|
||||
// that was added to the page.
|
||||
var currentRequire = typeof parcelRequire === 'function' && parcelRequire;
|
||||
if (!jumped && currentRequire) {
|
||||
return currentRequire(name, true);
|
||||
}
|
||||
|
||||
// If there are other bundles on this page the require from the
|
||||
// previous one is saved to 'previousRequire'. Repeat this as
|
||||
// many times as there are bundles until the module is found or
|
||||
// we exhaust the require chain.
|
||||
if (previousRequire) {
|
||||
return previousRequire(name, true);
|
||||
}
|
||||
|
||||
// Try the node require function if it exists.
|
||||
if (nodeRequire && typeof name === 'string') {
|
||||
return nodeRequire(name);
|
||||
}
|
||||
|
||||
var err = new Error('Cannot find module \'' + name + '\'');
|
||||
err.code = 'MODULE_NOT_FOUND';
|
||||
throw err;
|
||||
}
|
||||
|
||||
localRequire.resolve = resolve;
|
||||
localRequire.cache = {};
|
||||
|
||||
var module = cache[name] = new newRequire.Module(name);
|
||||
|
||||
modules[name][0].call(module.exports, localRequire, module, module.exports, this);
|
||||
}
|
||||
|
||||
return cache[name].exports;
|
||||
|
||||
function localRequire(x){
|
||||
return newRequire(localRequire.resolve(x));
|
||||
}
|
||||
|
||||
function resolve(x){
|
||||
return modules[name][1][x] || x;
|
||||
}
|
||||
}
|
||||
|
||||
function Module(moduleName) {
|
||||
this.id = moduleName;
|
||||
this.bundle = newRequire;
|
||||
this.exports = {};
|
||||
}
|
||||
|
||||
newRequire.isParcelRequire = true;
|
||||
newRequire.Module = Module;
|
||||
newRequire.modules = modules;
|
||||
newRequire.cache = cache;
|
||||
newRequire.parent = previousRequire;
|
||||
newRequire.register = function (id, exports) {
|
||||
modules[id] = [function (require, module) {
|
||||
module.exports = exports;
|
||||
}, {}];
|
||||
};
|
||||
|
||||
var error;
|
||||
for (var i = 0; i < entry.length; i++) {
|
||||
try {
|
||||
newRequire(entry[i]);
|
||||
} catch (e) {
|
||||
// Save first error but execute all entries
|
||||
if (!error) {
|
||||
error = e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (entry.length) {
|
||||
// Expose entry point to Node, AMD or browser globals
|
||||
// Based on https://github.com/ForbesLindesay/umd/blob/master/template.js
|
||||
var mainExports = newRequire(entry[entry.length - 1]);
|
||||
|
||||
// CommonJS
|
||||
if (typeof exports === "object" && typeof module !== "undefined") {
|
||||
module.exports = mainExports;
|
||||
|
||||
// RequireJS
|
||||
} else if (typeof define === "function" && define.amd) {
|
||||
define(function () {
|
||||
return mainExports;
|
||||
});
|
||||
|
||||
// <script>
|
||||
} else if (globalName) {
|
||||
this[globalName] = mainExports;
|
||||
}
|
||||
}
|
||||
|
||||
// Override the current require with this new one
|
||||
parcelRequire = newRequire;
|
||||
|
||||
if (error) {
|
||||
// throw error from earlier, _after updating parcelRequire_
|
||||
throw error;
|
||||
}
|
||||
|
||||
return newRequire;
|
||||
})({"script.js":[function(require,module,exports) {
|
||||
|
||||
},{}],"node_modules/parcel-bundler/src/builtins/hmr-runtime.js":[function(require,module,exports) {
|
||||
var global = arguments[3];
|
||||
var OVERLAY_ID = '__parcel__error__overlay__';
|
||||
var OldModule = module.bundle.Module;
|
||||
function Module(moduleName) {
|
||||
OldModule.call(this, moduleName);
|
||||
this.hot = {
|
||||
data: module.bundle.hotData,
|
||||
_acceptCallbacks: [],
|
||||
_disposeCallbacks: [],
|
||||
accept: function (fn) {
|
||||
this._acceptCallbacks.push(fn || function () {});
|
||||
},
|
||||
dispose: function (fn) {
|
||||
this._disposeCallbacks.push(fn);
|
||||
}
|
||||
};
|
||||
module.bundle.hotData = null;
|
||||
}
|
||||
module.bundle.Module = Module;
|
||||
var checkedAssets, assetsToAccept;
|
||||
var parent = module.bundle.parent;
|
||||
if ((!parent || !parent.isParcelRequire) && typeof WebSocket !== 'undefined') {
|
||||
var hostname = "" || location.hostname;
|
||||
var protocol = location.protocol === 'https:' ? 'wss' : 'ws';
|
||||
var ws = new WebSocket(protocol + '://' + hostname + ':' + "41549" + '/');
|
||||
ws.onmessage = function (event) {
|
||||
checkedAssets = {};
|
||||
assetsToAccept = [];
|
||||
var data = JSON.parse(event.data);
|
||||
if (data.type === 'update') {
|
||||
var handled = false;
|
||||
data.assets.forEach(function (asset) {
|
||||
if (!asset.isNew) {
|
||||
var didAccept = hmrAcceptCheck(global.parcelRequire, asset.id);
|
||||
if (didAccept) {
|
||||
handled = true;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Enable HMR for CSS by default.
|
||||
handled = handled || data.assets.every(function (asset) {
|
||||
return asset.type === 'css' && asset.generated.js;
|
||||
});
|
||||
if (handled) {
|
||||
console.clear();
|
||||
data.assets.forEach(function (asset) {
|
||||
hmrApply(global.parcelRequire, asset);
|
||||
});
|
||||
assetsToAccept.forEach(function (v) {
|
||||
hmrAcceptRun(v[0], v[1]);
|
||||
});
|
||||
} else if (location.reload) {
|
||||
// `location` global exists in a web worker context but lacks `.reload()` function.
|
||||
location.reload();
|
||||
}
|
||||
}
|
||||
if (data.type === 'reload') {
|
||||
ws.close();
|
||||
ws.onclose = function () {
|
||||
location.reload();
|
||||
};
|
||||
}
|
||||
if (data.type === 'error-resolved') {
|
||||
console.log('[parcel] ✨ Error resolved');
|
||||
removeErrorOverlay();
|
||||
}
|
||||
if (data.type === 'error') {
|
||||
console.error('[parcel] 🚨 ' + data.error.message + '\n' + data.error.stack);
|
||||
removeErrorOverlay();
|
||||
var overlay = createErrorOverlay(data);
|
||||
document.body.appendChild(overlay);
|
||||
}
|
||||
};
|
||||
}
|
||||
function removeErrorOverlay() {
|
||||
var overlay = document.getElementById(OVERLAY_ID);
|
||||
if (overlay) {
|
||||
overlay.remove();
|
||||
}
|
||||
}
|
||||
function createErrorOverlay(data) {
|
||||
var overlay = document.createElement('div');
|
||||
overlay.id = OVERLAY_ID;
|
||||
|
||||
// html encode message and stack trace
|
||||
var message = document.createElement('div');
|
||||
var stackTrace = document.createElement('pre');
|
||||
message.innerText = data.error.message;
|
||||
stackTrace.innerText = data.error.stack;
|
||||
overlay.innerHTML = '<div style="background: black; font-size: 16px; color: white; position: fixed; height: 100%; width: 100%; top: 0px; left: 0px; padding: 30px; opacity: 0.85; font-family: Menlo, Consolas, monospace; z-index: 9999;">' + '<span style="background: red; padding: 2px 4px; border-radius: 2px;">ERROR</span>' + '<span style="top: 2px; margin-left: 5px; position: relative;">🚨</span>' + '<div style="font-size: 18px; font-weight: bold; margin-top: 20px;">' + message.innerHTML + '</div>' + '<pre>' + stackTrace.innerHTML + '</pre>' + '</div>';
|
||||
return overlay;
|
||||
}
|
||||
function getParents(bundle, id) {
|
||||
var modules = bundle.modules;
|
||||
if (!modules) {
|
||||
return [];
|
||||
}
|
||||
var parents = [];
|
||||
var k, d, dep;
|
||||
for (k in modules) {
|
||||
for (d in modules[k][1]) {
|
||||
dep = modules[k][1][d];
|
||||
if (dep === id || Array.isArray(dep) && dep[dep.length - 1] === id) {
|
||||
parents.push(k);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (bundle.parent) {
|
||||
parents = parents.concat(getParents(bundle.parent, id));
|
||||
}
|
||||
return parents;
|
||||
}
|
||||
function hmrApply(bundle, asset) {
|
||||
var modules = bundle.modules;
|
||||
if (!modules) {
|
||||
return;
|
||||
}
|
||||
if (modules[asset.id] || !bundle.parent) {
|
||||
var fn = new Function('require', 'module', 'exports', asset.generated.js);
|
||||
asset.isNew = !modules[asset.id];
|
||||
modules[asset.id] = [fn, asset.deps];
|
||||
} else if (bundle.parent) {
|
||||
hmrApply(bundle.parent, asset);
|
||||
}
|
||||
}
|
||||
function hmrAcceptCheck(bundle, id) {
|
||||
var modules = bundle.modules;
|
||||
if (!modules) {
|
||||
return;
|
||||
}
|
||||
if (!modules[id] && bundle.parent) {
|
||||
return hmrAcceptCheck(bundle.parent, id);
|
||||
}
|
||||
if (checkedAssets[id]) {
|
||||
return;
|
||||
}
|
||||
checkedAssets[id] = true;
|
||||
var cached = bundle.cache[id];
|
||||
assetsToAccept.push([bundle, id]);
|
||||
if (cached && cached.hot && cached.hot._acceptCallbacks.length) {
|
||||
return true;
|
||||
}
|
||||
return getParents(global.parcelRequire, id).some(function (id) {
|
||||
return hmrAcceptCheck(global.parcelRequire, id);
|
||||
});
|
||||
}
|
||||
function hmrAcceptRun(bundle, id) {
|
||||
var cached = bundle.cache[id];
|
||||
bundle.hotData = {};
|
||||
if (cached) {
|
||||
cached.hot.data = bundle.hotData;
|
||||
}
|
||||
if (cached && cached.hot && cached.hot._disposeCallbacks.length) {
|
||||
cached.hot._disposeCallbacks.forEach(function (cb) {
|
||||
cb(bundle.hotData);
|
||||
});
|
||||
}
|
||||
delete bundle.cache[id];
|
||||
bundle(id);
|
||||
cached = bundle.cache[id];
|
||||
if (cached && cached.hot && cached.hot._acceptCallbacks.length) {
|
||||
cached.hot._acceptCallbacks.forEach(function (cb) {
|
||||
cb();
|
||||
});
|
||||
return true;
|
||||
}
|
||||
}
|
||||
},{}]},{},["node_modules/parcel-bundler/src/builtins/hmr-runtime.js","script.js"], null)
|
||||
//# sourceMappingURL=/script.75da7f30.js.map
|
||||
1
dist/script.75da7f30.js.map
vendored
Normal file
1
dist/script.75da7f30.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
dist/software_img.4f617fd5.png
vendored
Normal file
BIN
dist/software_img.4f617fd5.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 274 KiB |
2
dist/style.e308ff8e.css
vendored
Normal file
2
dist/style.e308ff8e.css
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
|
||||
/*# sourceMappingURL=/style.e308ff8e.css.map */
|
||||
1
dist/style.e308ff8e.css.map
vendored
Normal file
1
dist/style.e308ff8e.css.map
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["style.css"],"names":[],"mappings":"AAAA","file":"style.e308ff8e.css","sourceRoot":"..","sourcesContent":[""]}
|
||||
341
dist/style.e308ff8e.js
vendored
Normal file
341
dist/style.e308ff8e.js
vendored
Normal file
@@ -0,0 +1,341 @@
|
||||
// modules are defined as an array
|
||||
// [ module function, map of requires ]
|
||||
//
|
||||
// map of requires is short require name -> numeric require
|
||||
//
|
||||
// anything defined in a previous bundle is accessed via the
|
||||
// orig method which is the require for previous bundles
|
||||
parcelRequire = (function (modules, cache, entry, globalName) {
|
||||
// Save the require from previous bundle to this closure if any
|
||||
var previousRequire = typeof parcelRequire === 'function' && parcelRequire;
|
||||
var nodeRequire = typeof require === 'function' && require;
|
||||
|
||||
function newRequire(name, jumped) {
|
||||
if (!cache[name]) {
|
||||
if (!modules[name]) {
|
||||
// if we cannot find the module within our internal map or
|
||||
// cache jump to the current global require ie. the last bundle
|
||||
// that was added to the page.
|
||||
var currentRequire = typeof parcelRequire === 'function' && parcelRequire;
|
||||
if (!jumped && currentRequire) {
|
||||
return currentRequire(name, true);
|
||||
}
|
||||
|
||||
// If there are other bundles on this page the require from the
|
||||
// previous one is saved to 'previousRequire'. Repeat this as
|
||||
// many times as there are bundles until the module is found or
|
||||
// we exhaust the require chain.
|
||||
if (previousRequire) {
|
||||
return previousRequire(name, true);
|
||||
}
|
||||
|
||||
// Try the node require function if it exists.
|
||||
if (nodeRequire && typeof name === 'string') {
|
||||
return nodeRequire(name);
|
||||
}
|
||||
|
||||
var err = new Error('Cannot find module \'' + name + '\'');
|
||||
err.code = 'MODULE_NOT_FOUND';
|
||||
throw err;
|
||||
}
|
||||
|
||||
localRequire.resolve = resolve;
|
||||
localRequire.cache = {};
|
||||
|
||||
var module = cache[name] = new newRequire.Module(name);
|
||||
|
||||
modules[name][0].call(module.exports, localRequire, module, module.exports, this);
|
||||
}
|
||||
|
||||
return cache[name].exports;
|
||||
|
||||
function localRequire(x){
|
||||
return newRequire(localRequire.resolve(x));
|
||||
}
|
||||
|
||||
function resolve(x){
|
||||
return modules[name][1][x] || x;
|
||||
}
|
||||
}
|
||||
|
||||
function Module(moduleName) {
|
||||
this.id = moduleName;
|
||||
this.bundle = newRequire;
|
||||
this.exports = {};
|
||||
}
|
||||
|
||||
newRequire.isParcelRequire = true;
|
||||
newRequire.Module = Module;
|
||||
newRequire.modules = modules;
|
||||
newRequire.cache = cache;
|
||||
newRequire.parent = previousRequire;
|
||||
newRequire.register = function (id, exports) {
|
||||
modules[id] = [function (require, module) {
|
||||
module.exports = exports;
|
||||
}, {}];
|
||||
};
|
||||
|
||||
var error;
|
||||
for (var i = 0; i < entry.length; i++) {
|
||||
try {
|
||||
newRequire(entry[i]);
|
||||
} catch (e) {
|
||||
// Save first error but execute all entries
|
||||
if (!error) {
|
||||
error = e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (entry.length) {
|
||||
// Expose entry point to Node, AMD or browser globals
|
||||
// Based on https://github.com/ForbesLindesay/umd/blob/master/template.js
|
||||
var mainExports = newRequire(entry[entry.length - 1]);
|
||||
|
||||
// CommonJS
|
||||
if (typeof exports === "object" && typeof module !== "undefined") {
|
||||
module.exports = mainExports;
|
||||
|
||||
// RequireJS
|
||||
} else if (typeof define === "function" && define.amd) {
|
||||
define(function () {
|
||||
return mainExports;
|
||||
});
|
||||
|
||||
// <script>
|
||||
} else if (globalName) {
|
||||
this[globalName] = mainExports;
|
||||
}
|
||||
}
|
||||
|
||||
// Override the current require with this new one
|
||||
parcelRequire = newRequire;
|
||||
|
||||
if (error) {
|
||||
// throw error from earlier, _after updating parcelRequire_
|
||||
throw error;
|
||||
}
|
||||
|
||||
return newRequire;
|
||||
})({"node_modules/parcel-bundler/src/builtins/bundle-url.js":[function(require,module,exports) {
|
||||
var bundleURL = null;
|
||||
function getBundleURLCached() {
|
||||
if (!bundleURL) {
|
||||
bundleURL = getBundleURL();
|
||||
}
|
||||
return bundleURL;
|
||||
}
|
||||
function getBundleURL() {
|
||||
// Attempt to find the URL of the current script and use that as the base URL
|
||||
try {
|
||||
throw new Error();
|
||||
} catch (err) {
|
||||
var matches = ('' + err.stack).match(/(https?|file|ftp|chrome-extension|moz-extension):\/\/[^)\n]+/g);
|
||||
if (matches) {
|
||||
return getBaseURL(matches[0]);
|
||||
}
|
||||
}
|
||||
return '/';
|
||||
}
|
||||
function getBaseURL(url) {
|
||||
return ('' + url).replace(/^((?:https?|file|ftp|chrome-extension|moz-extension):\/\/.+)?\/[^/]+(?:\?.*)?$/, '$1') + '/';
|
||||
}
|
||||
exports.getBundleURL = getBundleURLCached;
|
||||
exports.getBaseURL = getBaseURL;
|
||||
},{}],"node_modules/parcel-bundler/src/builtins/css-loader.js":[function(require,module,exports) {
|
||||
var bundle = require('./bundle-url');
|
||||
function updateLink(link) {
|
||||
var newLink = link.cloneNode();
|
||||
newLink.onload = function () {
|
||||
link.remove();
|
||||
};
|
||||
newLink.href = link.href.split('?')[0] + '?' + Date.now();
|
||||
link.parentNode.insertBefore(newLink, link.nextSibling);
|
||||
}
|
||||
var cssTimeout = null;
|
||||
function reloadCSS() {
|
||||
if (cssTimeout) {
|
||||
return;
|
||||
}
|
||||
cssTimeout = setTimeout(function () {
|
||||
var links = document.querySelectorAll('link[rel="stylesheet"]');
|
||||
for (var i = 0; i < links.length; i++) {
|
||||
if (bundle.getBaseURL(links[i].href) === bundle.getBundleURL()) {
|
||||
updateLink(links[i]);
|
||||
}
|
||||
}
|
||||
cssTimeout = null;
|
||||
}, 50);
|
||||
}
|
||||
module.exports = reloadCSS;
|
||||
},{"./bundle-url":"node_modules/parcel-bundler/src/builtins/bundle-url.js"}],"node_modules/parcel-bundler/src/builtins/hmr-runtime.js":[function(require,module,exports) {
|
||||
var global = arguments[3];
|
||||
var OVERLAY_ID = '__parcel__error__overlay__';
|
||||
var OldModule = module.bundle.Module;
|
||||
function Module(moduleName) {
|
||||
OldModule.call(this, moduleName);
|
||||
this.hot = {
|
||||
data: module.bundle.hotData,
|
||||
_acceptCallbacks: [],
|
||||
_disposeCallbacks: [],
|
||||
accept: function (fn) {
|
||||
this._acceptCallbacks.push(fn || function () {});
|
||||
},
|
||||
dispose: function (fn) {
|
||||
this._disposeCallbacks.push(fn);
|
||||
}
|
||||
};
|
||||
module.bundle.hotData = null;
|
||||
}
|
||||
module.bundle.Module = Module;
|
||||
var checkedAssets, assetsToAccept;
|
||||
var parent = module.bundle.parent;
|
||||
if ((!parent || !parent.isParcelRequire) && typeof WebSocket !== 'undefined') {
|
||||
var hostname = "" || location.hostname;
|
||||
var protocol = location.protocol === 'https:' ? 'wss' : 'ws';
|
||||
var ws = new WebSocket(protocol + '://' + hostname + ':' + "51689" + '/');
|
||||
ws.onmessage = function (event) {
|
||||
checkedAssets = {};
|
||||
assetsToAccept = [];
|
||||
var data = JSON.parse(event.data);
|
||||
if (data.type === 'update') {
|
||||
var handled = false;
|
||||
data.assets.forEach(function (asset) {
|
||||
if (!asset.isNew) {
|
||||
var didAccept = hmrAcceptCheck(global.parcelRequire, asset.id);
|
||||
if (didAccept) {
|
||||
handled = true;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Enable HMR for CSS by default.
|
||||
handled = handled || data.assets.every(function (asset) {
|
||||
return asset.type === 'css' && asset.generated.js;
|
||||
});
|
||||
if (handled) {
|
||||
console.clear();
|
||||
data.assets.forEach(function (asset) {
|
||||
hmrApply(global.parcelRequire, asset);
|
||||
});
|
||||
assetsToAccept.forEach(function (v) {
|
||||
hmrAcceptRun(v[0], v[1]);
|
||||
});
|
||||
} else if (location.reload) {
|
||||
// `location` global exists in a web worker context but lacks `.reload()` function.
|
||||
location.reload();
|
||||
}
|
||||
}
|
||||
if (data.type === 'reload') {
|
||||
ws.close();
|
||||
ws.onclose = function () {
|
||||
location.reload();
|
||||
};
|
||||
}
|
||||
if (data.type === 'error-resolved') {
|
||||
console.log('[parcel] ✨ Error resolved');
|
||||
removeErrorOverlay();
|
||||
}
|
||||
if (data.type === 'error') {
|
||||
console.error('[parcel] 🚨 ' + data.error.message + '\n' + data.error.stack);
|
||||
removeErrorOverlay();
|
||||
var overlay = createErrorOverlay(data);
|
||||
document.body.appendChild(overlay);
|
||||
}
|
||||
};
|
||||
}
|
||||
function removeErrorOverlay() {
|
||||
var overlay = document.getElementById(OVERLAY_ID);
|
||||
if (overlay) {
|
||||
overlay.remove();
|
||||
}
|
||||
}
|
||||
function createErrorOverlay(data) {
|
||||
var overlay = document.createElement('div');
|
||||
overlay.id = OVERLAY_ID;
|
||||
|
||||
// html encode message and stack trace
|
||||
var message = document.createElement('div');
|
||||
var stackTrace = document.createElement('pre');
|
||||
message.innerText = data.error.message;
|
||||
stackTrace.innerText = data.error.stack;
|
||||
overlay.innerHTML = '<div style="background: black; font-size: 16px; color: white; position: fixed; height: 100%; width: 100%; top: 0px; left: 0px; padding: 30px; opacity: 0.85; font-family: Menlo, Consolas, monospace; z-index: 9999;">' + '<span style="background: red; padding: 2px 4px; border-radius: 2px;">ERROR</span>' + '<span style="top: 2px; margin-left: 5px; position: relative;">🚨</span>' + '<div style="font-size: 18px; font-weight: bold; margin-top: 20px;">' + message.innerHTML + '</div>' + '<pre>' + stackTrace.innerHTML + '</pre>' + '</div>';
|
||||
return overlay;
|
||||
}
|
||||
function getParents(bundle, id) {
|
||||
var modules = bundle.modules;
|
||||
if (!modules) {
|
||||
return [];
|
||||
}
|
||||
var parents = [];
|
||||
var k, d, dep;
|
||||
for (k in modules) {
|
||||
for (d in modules[k][1]) {
|
||||
dep = modules[k][1][d];
|
||||
if (dep === id || Array.isArray(dep) && dep[dep.length - 1] === id) {
|
||||
parents.push(k);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (bundle.parent) {
|
||||
parents = parents.concat(getParents(bundle.parent, id));
|
||||
}
|
||||
return parents;
|
||||
}
|
||||
function hmrApply(bundle, asset) {
|
||||
var modules = bundle.modules;
|
||||
if (!modules) {
|
||||
return;
|
||||
}
|
||||
if (modules[asset.id] || !bundle.parent) {
|
||||
var fn = new Function('require', 'module', 'exports', asset.generated.js);
|
||||
asset.isNew = !modules[asset.id];
|
||||
modules[asset.id] = [fn, asset.deps];
|
||||
} else if (bundle.parent) {
|
||||
hmrApply(bundle.parent, asset);
|
||||
}
|
||||
}
|
||||
function hmrAcceptCheck(bundle, id) {
|
||||
var modules = bundle.modules;
|
||||
if (!modules) {
|
||||
return;
|
||||
}
|
||||
if (!modules[id] && bundle.parent) {
|
||||
return hmrAcceptCheck(bundle.parent, id);
|
||||
}
|
||||
if (checkedAssets[id]) {
|
||||
return;
|
||||
}
|
||||
checkedAssets[id] = true;
|
||||
var cached = bundle.cache[id];
|
||||
assetsToAccept.push([bundle, id]);
|
||||
if (cached && cached.hot && cached.hot._acceptCallbacks.length) {
|
||||
return true;
|
||||
}
|
||||
return getParents(global.parcelRequire, id).some(function (id) {
|
||||
return hmrAcceptCheck(global.parcelRequire, id);
|
||||
});
|
||||
}
|
||||
function hmrAcceptRun(bundle, id) {
|
||||
var cached = bundle.cache[id];
|
||||
bundle.hotData = {};
|
||||
if (cached) {
|
||||
cached.hot.data = bundle.hotData;
|
||||
}
|
||||
if (cached && cached.hot && cached.hot._disposeCallbacks.length) {
|
||||
cached.hot._disposeCallbacks.forEach(function (cb) {
|
||||
cb(bundle.hotData);
|
||||
});
|
||||
}
|
||||
delete bundle.cache[id];
|
||||
bundle(id);
|
||||
cached = bundle.cache[id];
|
||||
if (cached && cached.hot && cached.hot._acceptCallbacks.length) {
|
||||
cached.hot._acceptCallbacks.forEach(function (cb) {
|
||||
cb();
|
||||
});
|
||||
return true;
|
||||
}
|
||||
}
|
||||
},{}]},{},["node_modules/parcel-bundler/src/builtins/hmr-runtime.js"], null)
|
||||
//# sourceMappingURL=/style.e308ff8e.js.map
|
||||
1
dist/style.e308ff8e.js.map
vendored
Normal file
1
dist/style.e308ff8e.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["node_modules/parcel-bundler/src/builtins/bundle-url.js","node_modules/parcel-bundler/src/builtins/css-loader.js"],"names":["bundleURL","getBundleURLCached","getBundleURL","Error","err","matches","stack","match","getBaseURL","url","replace","exports","bundle","require","updateLink","link","newLink","cloneNode","onload","remove","href","split","Date","now","parentNode","insertBefore","nextSibling","cssTimeout","reloadCSS","setTimeout","links","document","querySelectorAll","i","length","module"],"mappings":"AAAA,ACAA,IDAIA,ACAAY,MAAM,GDAG,ACAAC,GDAG,IAAI,ACAA,CAAC,cAAc,CAAC;ADCpC,ACCA,SDDSZ,ACCAa,UAAUA,CAACC,IAAI,EAAE,CDDCd,CAAA,EAAG;EAC5B,ACCA,IDDI,ACCAe,CDDChB,MCCM,GDDG,ACCAe,EDDE,ECCE,CAACE,SAAS,CAAC,CAAC;EAC9BD,EDDEhB,KCCK,CAACkB,GDDG,GAAGhB,ACCA,GAAG,SDDS,CAAC,CAAC,CCCC;EDA7B,ECCEa,IAAI,CAACI,MAAM,CAAC,CAAC;EDCf,ACAA,CAAC,MDAMnB,SAAS;AAClB,ECAEgB,OAAO,CAACI,IAAI,GAAGL,IAAI,CAACK,IAAI,CAACC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;ADE3D,ECDER,IAAI,CAACS,EDCEtB,QCDQ,CAACuB,GDCGvB,CAAA,EAAG,MCDM,CAACc,OAAO,EAAED,IAAI,CAACW,WAAW,CAAC;AACzD,EDCE;ACCF,EDAE,ECAEC,EDAE,QCAQ,GAAG,IAAI;AACrB,IDAI,KCAKC,CDAC,IAAIzB,ICAIyB,CDAC,ACAD,CDAA,CAAC,ACAE;EDCnB,ACAA,CDAC,CAAC,ECAED,KDAKvB,GAAG,EAAE,ACAA,EAAE;IDCd,ACAA,IDAIC,OAAO,GAAG,CAAC,EAAE,GAAGD,GAAG,CAACE,KAAK,EAAEC,KAAK,CAAC,+DAA+D,CAAC;ECCvG,EDAE,IAAIF,OAAO,EAAE;ECEfsB,IDDI,MCCM,CDDCnB,ECCEqB,QDDQ,CAACxB,CCCC,CAAC,KDDK,CAAC,CAAC,CAAC,CAAC,GCCG;IDAlC,ACCA,IAAIyB,KAAK,GAAGC,QAAQ,CAACC,gBAAgB,CAAC,wBAAwB,CAAC;EDAjE,ECCE,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,KAAK,CAACI,MAAM,EAAED,CAAC,EAAE,EAAE;EDCzC,ICAI,GDAG,CCACrB,EDAE,ICAI,CAACJ,UAAU,CAACsB,KAAK,CAACG,CAAC,CAAC,CAACb,IAAI,CAAC,KAAKR,MAAM,CAACV,YAAY,CAAC,CAAC,EAAE;ADCtE,QCAQY,UAAU,CAACgB,KAAK,CAACG,CAAC,CAAC,CAAC;ADE5B,MCDM,GDCGzB,UAAUA,CAACC,GAAG,EAAE;EACvB,ECDE,KDCK,CAAC,EAAE,GAAGA,GAAG,EAAEC,OAAO,CAAC,gFAAgF,EAAE,IAAI,CAAC,GAAG,GAAG;AACzH,ICAIiB,UAAU,GAAG,IAAI;ADErBhB,ECDE,CAAC,EAAE,EDCE,ACDA,CDCCT,ACDA,YDCY,GAAGD,kBAAkB;AACzCU,ACDA,ODCO,CAACH,UAAU,GAAGA,UAAU;ACC/B2B,MAAM,CAACxB,OAAO,GAAGiB,SAAS","file":"style.e308ff8e.js","sourceRoot":"..","sourcesContent":["var bundleURL = null;\nfunction getBundleURLCached() {\n if (!bundleURL) {\n bundleURL = getBundleURL();\n }\n\n return bundleURL;\n}\n\nfunction getBundleURL() {\n // Attempt to find the URL of the current script and use that as the base URL\n try {\n throw new Error;\n } catch (err) {\n var matches = ('' + err.stack).match(/(https?|file|ftp|chrome-extension|moz-extension):\\/\\/[^)\\n]+/g);\n if (matches) {\n return getBaseURL(matches[0]);\n }\n }\n\n return '/';\n}\n\nfunction getBaseURL(url) {\n return ('' + url).replace(/^((?:https?|file|ftp|chrome-extension|moz-extension):\\/\\/.+)?\\/[^/]+(?:\\?.*)?$/, '$1') + '/';\n}\n\nexports.getBundleURL = getBundleURLCached;\nexports.getBaseURL = getBaseURL;\n","var bundle = require('./bundle-url');\n\nfunction updateLink(link) {\n var newLink = link.cloneNode();\n newLink.onload = function () {\n link.remove();\n };\n newLink.href = link.href.split('?')[0] + '?' + Date.now();\n link.parentNode.insertBefore(newLink, link.nextSibling);\n}\n\nvar cssTimeout = null;\nfunction reloadCSS() {\n if (cssTimeout) {\n return;\n }\n\n cssTimeout = setTimeout(function () {\n var links = document.querySelectorAll('link[rel=\"stylesheet\"]');\n for (var i = 0; i < links.length; i++) {\n if (bundle.getBaseURL(links[i].href) === bundle.getBundleURL()) {\n updateLink(links[i]);\n }\n }\n\n cssTimeout = null;\n }, 50);\n}\n\nmodule.exports = reloadCSS;\n"]}
|
||||
30
gestion.html
Normal file
30
gestion.html
Normal file
@@ -0,0 +1,30 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title> Sansdomainefixe.xyz </title>
|
||||
<link rel="stylesheet" href="base.css">
|
||||
<script src="script.js" defer></script>
|
||||
<link rel="icon" href="src/img/favicon.png" type="image/x-icon">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap" rel="stylesheet">
|
||||
<script src="https://kit.fontawesome.com/5b8b37978c.js" crossorigin="anonymous"></script>
|
||||
<script src="src/js/componant/sidebar.js" defer></script>
|
||||
<script src="src/js/componant/dropdown.js" type="module" defer></script>
|
||||
<link rel="stylesheet" href="output.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="grid grid-cols-4 grid-rows-5 gap-4 min-h-screen bg-gradient-to-b from-primary to-secondary">
|
||||
<div class="col-start-1 col-span-4 row-start-1">
|
||||
<h1 class="xl:text-4xl md:text-xl text-base font-sans mb-4 text-white mt-4 ml-2">sansdomainefixe.xyz</h1>
|
||||
</div>
|
||||
<div class="row-span-4 col-start-1 row-start-2 text-white ml-2">
|
||||
<div id="sidebar"></div>
|
||||
</div>
|
||||
<div class="col-span-3 row-span-5 col-start-2 row-start-2 text-white">
|
||||
<div id="dropdowndomain"></div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
44
index.html
Normal file
44
index.html
Normal file
@@ -0,0 +1,44 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title> Sansdomainefixe.xyz </title>
|
||||
<link rel="stylesheet" href="base.css">
|
||||
<script src="script.js" defer></script>
|
||||
<link rel="icon" href="src/img/favicon.png" type="image/x-icon">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap" rel="stylesheet">
|
||||
<script src="https://kit.fontawesome.com/5b8b37978c.js" crossorigin="anonymous"></script>
|
||||
<script src="src/js/navigate.js" defer></script>
|
||||
<script src="src/js/navigate.js" defer></script>
|
||||
<link rel="stylesheet" href="output.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="flex flex-col items-center justify-center min-h-screen bg-gradient-to-b from-primary to-secondary">
|
||||
<div>
|
||||
<h1 class="xl:text-9xl font-sans mb-4 text-white text-5xl">sansdomainefixe.xyz</h1>
|
||||
<div class="flex flex-row justify-center space-x-4">
|
||||
<a href="https://facebook.com"><i class="fa-brands fa-facebook" style="color: white; cursor: pointer; font-size: 3em"></i></a>
|
||||
<a href="https://twitter.com"><i class="fa-brands fa-twitter" style="color: white; cursor: pointer; font-size: 3em"></i></a>
|
||||
<a href="https://instagram.com"><i class="fa-brands fa-instagram" style="color: white; cursor: pointer; font-size: 3em"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<button class="my-3 text-white border-solid border-2 border-white rounded-md px-1 py-2" id="goToLogin">Admistrez vos nom de domaine</button>
|
||||
<div class="flex xl:flex-row flex-col justify-center space-x-4 mt-4 p-2 ">
|
||||
<div class="flex flex-col items-center justify-center">
|
||||
<h2 class="xl:text-4xl font-sans mb-4 text-white text-2xl">sansdomainefixe.xyz</h2>
|
||||
<p class="xl:text-2xl text-xl font-sans mb-4 text-white border-solid border-2 border-white rounded-md px-1 py-2">Pour tous les gens qui n'ont pas de quoi se payer un nom de domaines, enregistrement gratuit offert par LGP Corp</p>
|
||||
</div>
|
||||
<div class="justify-center">
|
||||
<img src="src/img/software_img.png" alt="software" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex flex-col justify-center space-x-4 mt-4 p-2">
|
||||
<h2 class="xl:text-4xl text-2xl font-sans mb-4 text-white">Verifiez si votre nom de domaine est diponible :</h2>
|
||||
<input type="text" class="px-4 py-2 border rounded-md text-black ml-3 text-center" placeholder="Rentrez votre nom de domaine" />
|
||||
<button type="button" class="my-3 text-white border-solid border-2 border-white rounded-md px-1 py-2">Verifier</button>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
50
login.html
Normal file
50
login.html
Normal file
@@ -0,0 +1,50 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title> Sansdomainefixe.xyz </title>
|
||||
<link rel="stylesheet" href="base.css">
|
||||
<script src="script.js" defer></script>
|
||||
<link rel="icon" href="src/img/favicon.png" type="image/x-icon">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap" rel="stylesheet">
|
||||
<script src="https://kit.fontawesome.com/5b8b37978c.js" crossorigin="anonymous"></script>
|
||||
<script src="src/js/login.js" type="module" defer></script>
|
||||
<script src="src/js/navigate.js" defer></script>
|
||||
<link rel="stylesheet" href="output.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="flex flex-col items-center justify-center min-h-screen bg-gradient-to-b from-primary to-secondary">
|
||||
<div class="flex min-h-full flex-col justify-center px-6 py-12 lg:px-8 border-white border-solid border-2 rounded-md">
|
||||
<div class="sm:mx-auto sm:w-full sm:max-w-sm">
|
||||
<h2 class="mt-10 text-center text-2xl font-bold leading-9 tracking-tight text-white">Sign in to your account</h2>
|
||||
</div>
|
||||
|
||||
<div class="mt-10 sm:mx-auto sm:w-full sm:max-w-sm">
|
||||
<form class="space-y-6" action="#" method="POST">
|
||||
<div>
|
||||
<label for="email" class="block text-sm font-medium leading-6 text-white">Email</label>
|
||||
<div class="mt-2">
|
||||
<input id="email" name="email" type="email" autocomplete="email" required class="block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class="flex items-center justify-between">
|
||||
<label for="password" class="block text-sm font-medium leading-6 text-white">Password</label>
|
||||
</div>
|
||||
<div class="mt-2">
|
||||
<input id="password" name="password" type="password" autocomplete="current-password" required class="block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<button id="loginbutton" type="submit" class="flex w-full justify-center rounded-md bg-transparent px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm border-solid border-2 border-white">Sign in</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
3376
output.css
Normal file
3376
output.css
Normal file
File diff suppressed because it is too large
Load Diff
12
package.json
Normal file
12
package.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"name": "sansdomainefixe.xyz",
|
||||
"version": "1.0.0",
|
||||
"main": "index.html",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@tailwindcss/forms": "^0.5.7",
|
||||
"parcel-bundler": "^1.12.5",
|
||||
"tailwindcss": "^3.3.5",
|
||||
"typescript": "^5.3.3"
|
||||
}
|
||||
}
|
||||
761
pocketbase/CHANGELOG.md
Normal file
761
pocketbase/CHANGELOG.md
Normal file
@@ -0,0 +1,761 @@
|
||||
## v0.20.1
|
||||
|
||||
- Added `--dev` flag and its accompanying `app.IsDev()` method (_in place of the previosly removed `--debug`_) to assist during development ([#3918](https://github.com/pocketbase/pocketbase/discussions/3918)).
|
||||
The `--dev` flag prints in the console "everything" and more specifically:
|
||||
- the data DB SQL statements
|
||||
- all `app.Logger().*` logs (debug, info, warning, error, etc.), no matter of the logs persistence settings in the Admin UI
|
||||
|
||||
- Minor Admin UI fixes:
|
||||
- Fixed the log `error` label text wrapping.
|
||||
- Added the log `referer` (_when it is from a different source_) and `details` labels in the logs listing.
|
||||
- Removed the blank current time entry from the logs chart because it was causing confusion when used with custom time ranges.
|
||||
- Updated the SQL syntax highligher and keywords autocompletion in the Admin UI to recognize `CAST(x as bool)` expressions.
|
||||
|
||||
- Replaced the default API tests timeout with a new `ApiScenario.Timeout` option ([#3930](https://github.com/pocketbase/pocketbase/issues/3930)).
|
||||
A negative or zero value means no tests timeout.
|
||||
If a single API test takes more than 3s to complete it will have a log message visible when the test fails or when `go test -v` flag is used.
|
||||
|
||||
- Added timestamp at the beginning of the generated JSVM types file to avoid creating it everytime with the app startup.
|
||||
|
||||
|
||||
## v0.20.0
|
||||
|
||||
- Added `expand`, `filter`, `fields`, custom query and headers parameters support for the realtime subscriptions.
|
||||
_Requires JS SDK v0.20.0+ or Dart SDK v0.17.0+._
|
||||
|
||||
```js
|
||||
// JS SDK v0.20.0
|
||||
pb.collection("example").subscribe("*", (e) => {
|
||||
...
|
||||
}, {
|
||||
expand: "someRelField",
|
||||
filter: "status = 'active'",
|
||||
fields: "id,expand.someRelField.*:excerpt(100)",
|
||||
})
|
||||
```
|
||||
|
||||
```dart
|
||||
// Dart SDK v0.17.0
|
||||
pb.collection("example").subscribe("*", (e) {
|
||||
...
|
||||
},
|
||||
expand: "someRelField",
|
||||
filter: "status = 'active'",
|
||||
fields: "id,expand.someRelField.*:excerpt(100)",
|
||||
)
|
||||
```
|
||||
|
||||
- Generalized the logs to allow any kind of application logs, not just requests.
|
||||
|
||||
The new `app.Logger()` implements the standard [`log/slog` interfaces](https://pkg.go.dev/log/slog) available with Go 1.21.
|
||||
```
|
||||
// Go: https://pocketbase.io/docs/go-logging/
|
||||
app.Logger().Info("Example message", "total", 123, "details", "lorem ipsum...")
|
||||
|
||||
// JS: https://pocketbase.io/docs/js-logging/
|
||||
$app.logger().info("Example message", "total", 123, "details", "lorem ipsum...")
|
||||
```
|
||||
|
||||
For better performance and to minimize blocking on hot paths, logs are currently written with
|
||||
debounce and on batches:
|
||||
- 3 seconds after the last debounced log write
|
||||
- when the batch threshold is reached (currently 200)
|
||||
- right before app termination to attempt saving everything from the existing logs queue
|
||||
|
||||
Some notable log related changes:
|
||||
|
||||
- ⚠️ Bumped the minimum required Go version to 1.21.
|
||||
|
||||
- ⚠️ Removed `_requests` table in favor of the generalized `_logs`.
|
||||
_Note that existing logs will be deleted!_
|
||||
|
||||
- ⚠️ Renamed the following `Dao` log methods:
|
||||
```go
|
||||
Dao.RequestQuery(...) -> Dao.LogQuery(...)
|
||||
Dao.FindRequestById(...) -> Dao.FindLogById(...)
|
||||
Dao.RequestsStats(...) -> Dao.LogsStats(...)
|
||||
Dao.DeleteOldRequests(...) -> Dao.DeleteOldLogs(...)
|
||||
Dao.SaveRequest(...) -> Dao.SaveLog(...)
|
||||
```
|
||||
- ⚠️ Removed `app.IsDebug()` and the `--debug` flag.
|
||||
This was done to avoid the confusion with the new logger and its debug severity level.
|
||||
If you want to store debug logs you can set `-4` as min log level from the Admin UI.
|
||||
|
||||
- Refactored Admin UI Logs:
|
||||
- Added new logs table listing.
|
||||
- Added log settings option to toggle the IP logging for the activity logger.
|
||||
- Added log settings option to specify a minimum log level.
|
||||
- Added controls to export individual or bulk selected logs as json.
|
||||
- Other minor improvements and fixes.
|
||||
|
||||
- Added new `filesystem/System.Copy(src, dest)` method to copy existing files from one location to another.
|
||||
_This is usually useful when duplicating records with `file` field(s) programmatically._
|
||||
|
||||
- Added `filesystem.NewFileFromUrl(ctx, url)` helper method to construct a `*filesystem.BytesReader` file from the specified url.
|
||||
|
||||
- OAuth2 related additions:
|
||||
|
||||
- Added new `PKCE()` and `SetPKCE(enable)` OAuth2 methods to indicate whether the PKCE flow is supported or not.
|
||||
_The PKCE value is currently configurable from the UI only for the OIDC providers._
|
||||
_This was added to accommodate OIDC providers that may throw an error if unsupported PKCE params are submitted with the auth request (eg. LinkedIn; see [#3799](https://github.com/pocketbase/pocketbase/discussions/3799#discussioncomment-7640312))._
|
||||
|
||||
- Added new `displayName` field for each `listAuthMethods()` OAuth2 provider item.
|
||||
_The value of the `displayName` property is currently configurable from the UI only for the OIDC providers._
|
||||
|
||||
- Added `expiry` field to the OAuth2 user response containing the _optional_ expiration time of the OAuth2 access token ([#3617](https://github.com/pocketbase/pocketbase/discussions/3617)).
|
||||
|
||||
- Allow a single OAuth2 user to be used for authentication in multiple auth collection.
|
||||
_⚠️ Because now you can have more than one external provider with `collectionId-provider-providerId` pair, `Dao.FindExternalAuthByProvider(provider, providerId)` method was removed in favour of the more generic `Dao.FindFirstExternalAuthByExpr(expr)`._
|
||||
|
||||
- Added `onlyVerified` auth collection option to globally disallow authentication requests for unverified users.
|
||||
|
||||
- Added support for single line comments (ex. `// your comment`) in the API rules and filter expressions.
|
||||
|
||||
- Added support for specifying a collection alias in `@collection.someCollection:alias.*`.
|
||||
|
||||
- Soft-deprecated and renamed `app.Cache()` with `app.Store()`.
|
||||
|
||||
- Minor JSVM updates and fixes:
|
||||
|
||||
- Updated `$security.parseUnverifiedJWT(token)` and `$security.parseJWT(token, key)` to return the token payload result as plain object.
|
||||
|
||||
- Added `$apis.requireGuestOnly()` middleware JSVM binding ([#3896](https://github.com/pocketbase/pocketbase/issues/3896)).
|
||||
|
||||
- Use `IS NOT` instead of `!=` as not-equal SQL query operator to handle the cases when comparing with nullable columns or expressions (eg. `json_extract` over `json` field).
|
||||
_Based on my local dataset I wasn't able to find a significant difference in the performance between the 2 operators, but if you stumble on a query that you think may be affected negatively by this, please report it and I'll test it further._
|
||||
|
||||
- Added `MaxSize` `json` field option to prevent storing large json data in the db ([#3790](https://github.com/pocketbase/pocketbase/issues/3790)).
|
||||
_Existing `json` fields are updated with a system migration to have a ~2MB size limit (it can be adjusted from the Admin UI)._
|
||||
|
||||
- Fixed negative string number normalization support for the `json` field type.
|
||||
|
||||
- Trigger the `app.OnTerminate()` hook on `app.Restart()` call.
|
||||
_A new bool `IsRestart` field was also added to the `core.TerminateEvent` event._
|
||||
|
||||
- Fixed graceful shutdown handling and speed up a little the app termination time.
|
||||
|
||||
- Limit the concurrent thumbs generation to avoid high CPU and memory usage in spiky scenarios ([#3794](https://github.com/pocketbase/pocketbase/pull/3794); thanks @t-muehlberger).
|
||||
_Currently the max concurrent thumbs generation processes are limited to "total of logical process CPUs + 1"._
|
||||
_This is arbitrary chosen and may change in the future depending on the users feedback and usage patterns._
|
||||
_If you are experiencing OOM errors during large image thumb generations, especially in container environment, you can try defining the `GOMEMLIMIT=500MiB` env variable before starting the executable._
|
||||
|
||||
- Slightly speed up (~10%) the thumbs generation by changing from cubic (`CatmullRom`) to bilinear (`Linear`) resampling filter (_the quality difference is very little_).
|
||||
|
||||
- Added a default red colored Stderr output in case of a console command error.
|
||||
_You can now also silence individually custom commands errors using the `cobra.Command.SilenceErrors` field._
|
||||
|
||||
- Fixed links formatting in the autogenerated html->text mail body.
|
||||
|
||||
- Removed incorrectly imported empty `local('')` font-face declarations.
|
||||
|
||||
|
||||
## v0.19.4
|
||||
|
||||
- Fixed TinyMCE source code viewer textarea styles ([#3715](https://github.com/pocketbase/pocketbase/issues/3715)).
|
||||
|
||||
- Fixed `text` field min/max validators to properly count multi-byte characters ([#3735](https://github.com/pocketbase/pocketbase/issues/3735)).
|
||||
|
||||
- Allowed hyphens in `username` ([#3697](https://github.com/pocketbase/pocketbase/issues/3697)).
|
||||
_More control over the system fields settings will be available in the future._
|
||||
|
||||
- Updated the JSVM generated types to use directly the value type instead of `* | undefined` union in functions/methods return declarations.
|
||||
|
||||
|
||||
## v0.19.3
|
||||
|
||||
- Added the release notes to the console output of `./pocketbase update` ([#3685](https://github.com/pocketbase/pocketbase/discussions/3685)).
|
||||
|
||||
- Added missing documention for the JSVM `$mails.*` bindings.
|
||||
|
||||
- Relaxed the OAuth2 redirect url validation to allow any string value ([#3689](https://github.com/pocketbase/pocketbase/pull/3689); thanks @sergeypdev).
|
||||
_Note that the redirect url format is still bound to the accepted values by the specific OAuth2 provider._
|
||||
|
||||
|
||||
## v0.19.2
|
||||
|
||||
- Updated the JSVM generated types ([#3627](https://github.com/pocketbase/pocketbase/issues/3627), [#3662](https://github.com/pocketbase/pocketbase/issues/3662)).
|
||||
|
||||
|
||||
## v0.19.1
|
||||
|
||||
- Fixed `tokenizer.Scan()/ScanAll()` to ignore the separators from the default trim cutset.
|
||||
An option to return also the empty found tokens was also added via `Tokenizer.KeepEmptyTokens(true)`.
|
||||
_This should fix the parsing of whitespace characters around view query column names when no quotes are used ([#3616](https://github.com/pocketbase/pocketbase/discussions/3616#discussioncomment-7398564))._
|
||||
|
||||
- Fixed the `:excerpt(max, withEllipsis?)` `fields` query param modifier to properly add space to the generated text fragment after block tags.
|
||||
|
||||
|
||||
## v0.19.0
|
||||
|
||||
- Added Patreon OAuth2 provider ([#3323](https://github.com/pocketbase/pocketbase/pull/3323); thanks @ghostdevv).
|
||||
|
||||
- Added mailcow OAuth2 provider ([#3364](https://github.com/pocketbase/pocketbase/pull/3364); thanks @thisni1s).
|
||||
|
||||
- Added support for `:excerpt(max, withEllipsis?)` `fields` modifier that will return a short plain text version of any string value (html tags are stripped).
|
||||
This could be used to minimize the downloaded json data when listing records with large `editor` html values.
|
||||
```js
|
||||
await pb.collection("example").getList(1, 20, {
|
||||
"fields": "*,description:excerpt(100)"
|
||||
})
|
||||
```
|
||||
|
||||
- Several Admin UI improvements:
|
||||
- Count the total records separately to speed up the query execution for large datasets ([#3344](https://github.com/pocketbase/pocketbase/issues/3344)).
|
||||
- Enclosed the listing scrolling area within the table so that the horizontal scrollbar and table header are always reachable ([#2505](https://github.com/pocketbase/pocketbase/issues/2505)).
|
||||
- Allowed opening the record preview/update form via direct URL ([#2682](https://github.com/pocketbase/pocketbase/discussions/2682)).
|
||||
- Reintroduced the local `date` field tooltip on hover.
|
||||
- Speed up the listing loading times for records with large `editor` field values by initially fetching only a partial of the records data (the complete record data is loaded on record preview/update).
|
||||
- Added "Media library" (collection images picker) support for the TinyMCE `editor` field.
|
||||
- Added support to "pin" collections in the sidebar.
|
||||
- Added support to manually resize the collections sidebar.
|
||||
- More clear "Nonempty" field label style.
|
||||
- Removed the legacy `.woff` and `.ttf` fonts and keep only `.woff2`.
|
||||
|
||||
- Removed the explicit `Content-Type` charset from the realtime response due to compatibility issues with IIS ([#3461](https://github.com/pocketbase/pocketbase/issues/3461)).
|
||||
_The `Connection:keep-alive` realtime response header was also removed as it is not really used with HTTP2 anyway._
|
||||
|
||||
- Added new JSVM bindings:
|
||||
- `new Cookie({ ... })` constructor for creating `*http.Cookie` equivalent value.
|
||||
- `new SubscriptionMessage({ ... })` constructor for creating a custom realtime subscription payload.
|
||||
- Soft-deprecated `$os.exec()` in favour of `$os.cmd()` to make it more clear that the call only prepares the command and doesn't execute it.
|
||||
|
||||
- ⚠️ Bumped the min required Go version to 1.19.
|
||||
|
||||
|
||||
## v0.18.10
|
||||
|
||||
- Added global `raw` template function to allow outputting raw/verbatim HTML content in the JSVM templates ([#3476](https://github.com/pocketbase/pocketbase/discussions/3476)).
|
||||
```
|
||||
{{.description|raw}}
|
||||
```
|
||||
|
||||
- Trimmed view query semicolon and allowed single quotes for column aliases ([#3450](https://github.com/pocketbase/pocketbase/issues/3450#issuecomment-1748044641)).
|
||||
_Single quotes are usually [not a valid identifier quote characters](https://www.sqlite.org/lang_keywords.html), but for resilience and compatibility reasons SQLite allows them in some contexts where only an identifier is expected._
|
||||
|
||||
- Bumped the GitHub action to use [min Go 1.21.2](https://github.com/golang/go/issues?q=milestone%3AGo1.21.2) (_the fixed issues are not critical as they are mostly related to the compiler/build tools_).
|
||||
|
||||
|
||||
## v0.18.9
|
||||
|
||||
- Fixed empty thumbs directories not getting deleted on Windows after deleting a record img file ([#3382](https://github.com/pocketbase/pocketbase/issues/3382)).
|
||||
|
||||
- Updated the generated JSVM typings to silent the TS warnings when trying to access a field/method in a Go->TS interface.
|
||||
|
||||
|
||||
## v0.18.8
|
||||
|
||||
- Minor fix for the View collections API Preview and Admin UI listings incorrectly showing the `created` and `updated` fields as `N/A` when the view query doesn't have them.
|
||||
|
||||
|
||||
## v0.18.7
|
||||
|
||||
- Fixed JS error in the Admin UI when listing records with invalid `relation` field value ([#3372](https://github.com/pocketbase/pocketbase/issues/3372)).
|
||||
_This could happen usually only during custom SQL import scripts or when directly modifying the record field value without data validations._
|
||||
|
||||
- Updated Go deps and the generated JSVM types.
|
||||
|
||||
|
||||
## v0.18.6
|
||||
|
||||
- Return the response headers and cookies in the `$http.send()` result ([#3310](https://github.com/pocketbase/pocketbase/discussions/3310)).
|
||||
|
||||
- Added more descriptive internal error message for missing user/admin email on password reset requests.
|
||||
|
||||
- Updated Go deps.
|
||||
|
||||
|
||||
## v0.18.5
|
||||
|
||||
- Fixed minor Admin UI JS error in the auth collection options panel introduced with the change from v0.18.4.
|
||||
|
||||
|
||||
## v0.18.4
|
||||
|
||||
- Added escape character (`\`) support in the Admin UI to allow using `select` field values with comma ([#2197](https://github.com/pocketbase/pocketbase/discussions/2197)).
|
||||
|
||||
|
||||
## v0.18.3
|
||||
|
||||
- Exposed a global JSVM `readerToString(reader)` helper function to allow reading Go `io.Reader` values ([#3273](https://github.com/pocketbase/pocketbase/discussions/3273)).
|
||||
|
||||
- Bumped the GitHub action to use [min Go 1.21.1](https://github.com/golang/go/issues?q=milestone%3AGo1.21.1+label%3ACherryPickApproved) for the prebuilt executable since it contains some minor `html/template` and `net/http` security fixes.
|
||||
|
||||
|
||||
## v0.18.2
|
||||
|
||||
- Prevent breaking the record form in the Admin UI in case the browser's localStorage quota has been exceeded when uploading or storing large `editor` values ([#3265](https://github.com/pocketbase/pocketbase/issues/3265)).
|
||||
|
||||
- Updated docs and missing JSVM typings.
|
||||
|
||||
- Exposed additional crypto primitives under the `$security.*` JSVM namespace ([#3273](https://github.com/pocketbase/pocketbase/discussions/3273)):
|
||||
```js
|
||||
// HMAC with SHA256
|
||||
$security.hs256("hello", "secret")
|
||||
|
||||
// HMAC with SHA512
|
||||
$security.hs512("hello", "secret")
|
||||
|
||||
// compare 2 strings with a constant time
|
||||
$security.equal(hash1, hash2)
|
||||
```
|
||||
|
||||
|
||||
## v0.18.1
|
||||
|
||||
- Excluded the local temp dir from the backups ([#3261](https://github.com/pocketbase/pocketbase/issues/3261)).
|
||||
|
||||
|
||||
## v0.18.0
|
||||
|
||||
- Simplified the `serve` command to accept domain name(s) as argument to reduce any additional manual hosts setup that sometimes previously was needed when deploying on production ([#3190](https://github.com/pocketbase/pocketbase/discussions/3190)).
|
||||
```sh
|
||||
./pocketbase serve yourdomain.com
|
||||
```
|
||||
|
||||
- Added `fields` wildcard (`*`) support.
|
||||
|
||||
- Added option to upload a backup file from the Admin UI ([#2599](https://github.com/pocketbase/pocketbase/issues/2599)).
|
||||
|
||||
- Registered a custom Deflate compressor to speedup (_nearly 2-3x_) the backups generation for the sake of a small zip size increase.
|
||||
_Based on several local tests, `pb_data` of ~500MB (from which ~350MB+ are several hundred small files) results in a ~280MB zip generated for ~11s (previously it resulted in ~250MB zip but for ~35s)._
|
||||
|
||||
- Added the application name as part of the autogenerated backup name for easier identification ([#3066](https://github.com/pocketbase/pocketbase/issues/3066)).
|
||||
|
||||
- Added new `SmtpConfig.LocalName` option to specify a custom domain name (or IP address) for the initial EHLO/HELO exchange ([#3097](https://github.com/pocketbase/pocketbase/discussions/3097)).
|
||||
_This is usually required for verification purposes only by some SMTP providers, such as on-premise [Gmail SMTP-relay](https://support.google.com/a/answer/2956491)._
|
||||
|
||||
- Added `NoDecimal` `number` field option.
|
||||
|
||||
- `editor` field improvements:
|
||||
- Added new "Strip urls domain" option to allow controlling the default TinyMCE urls behavior (_default to `false` for new content_).
|
||||
- Normalized pasted text while still preserving links, lists, tables, etc. formatting ([#3257](https://github.com/pocketbase/pocketbase/issues/3257)).
|
||||
|
||||
- Added option to auto generate admin and auth record passwords from the Admin UI.
|
||||
|
||||
- Added JSON validation and syntax highlight for the `json` field in the Admin UI ([#3191](https://github.com/pocketbase/pocketbase/issues/3191)).
|
||||
|
||||
- Added datetime filter macros:
|
||||
```
|
||||
// all macros are UTC based
|
||||
@second - @now second number (0-59)
|
||||
@minute - @now minute number (0-59)
|
||||
@hour - @now hour number (0-23)
|
||||
@weekday - @now weekday number (0-6)
|
||||
@day - @now day number
|
||||
@month - @now month number
|
||||
@year - @now year number
|
||||
@todayStart - beginning of the current day as datetime string
|
||||
@todayEnd - end of the current day as datetime string
|
||||
@monthStart - beginning of the current month as datetime string
|
||||
@monthEnd - end of the current month as datetime string
|
||||
@yearStart - beginning of the current year as datetime string
|
||||
@yearEnd - end of the current year as datetime string
|
||||
```
|
||||
|
||||
- Added cron expression macros ([#3132](https://github.com/pocketbase/pocketbase/issues/3132)):
|
||||
```
|
||||
@yearly - "0 0 1 1 *"
|
||||
@annually - "0 0 1 1 *"
|
||||
@monthly - "0 0 1 * *"
|
||||
@weekly - "0 0 * * 0"
|
||||
@daily - "0 0 * * *"
|
||||
@midnight - "0 0 * * *"
|
||||
@hourly - "0 * * * *"
|
||||
```
|
||||
|
||||
- ⚠️ Added offset argument `Dao.FindRecordsByFilter(collection, filter, sort, limit, offset, [params...])`.
|
||||
_If you don't need an offset, you can set it to `0`._
|
||||
|
||||
- To minimize the footguns with `Dao.FindFirstRecordByFilter()` and `Dao.FindRecordsByFilter()`, the functions now supports an optional placeholder params argument that is safe to be populated with untrusted user input.
|
||||
The placeholders are in the same format as when binding regular SQL parameters.
|
||||
```go
|
||||
// unsanitized and untrusted filter variables
|
||||
status := "..."
|
||||
author := "..."
|
||||
|
||||
app.Dao().FindFirstRecordByFilter("articles", "status={:status} && author={:author}", dbx.Params{
|
||||
"status": status,
|
||||
"author": author,
|
||||
})
|
||||
|
||||
app.Dao().FindRecordsByFilter("articles", "status={:status} && author={:author}", "-created", 10, 0, dbx.Params{
|
||||
"status": status,
|
||||
"author": author,
|
||||
})
|
||||
```
|
||||
|
||||
- Added JSVM `$mails.*` binds for the corresponding Go [mails package](https://pkg.go.dev/github.com/pocketbase/pocketbase/mails) functions.
|
||||
|
||||
- Added JSVM helper crypto primitives under the `$security.*` namespace:
|
||||
```js
|
||||
$security.md5(text)
|
||||
$security.sha256(text)
|
||||
$security.sha512(text)
|
||||
```
|
||||
|
||||
- ⚠️ Deprecated `RelationOptions.DisplayFields` in favor of the new `SchemaField.Presentable` option to avoid the duplication when a single collection is referenced more than once and/or by multiple other collections.
|
||||
|
||||
- ⚠️ Fill the `LastVerificationSentAt` and `LastResetSentAt` fields only after a successfull email send ([#3121](https://github.com/pocketbase/pocketbase/issues/3121)).
|
||||
|
||||
- ⚠️ Skip API `fields` json transformations for non 20x responses ([#3176](https://github.com/pocketbase/pocketbase/issues/3176)).
|
||||
|
||||
- ⚠️ Changes to `tests.ApiScenario` struct:
|
||||
|
||||
- The `ApiScenario.AfterTestFunc` now receive as 3rd argument `*http.Response` pointer instead of `*echo.Echo` as the latter is not really useful in this context.
|
||||
```go
|
||||
// old
|
||||
AfterTestFunc: func(t *testing.T, app *tests.TestApp, e *echo.Echo)
|
||||
|
||||
// new
|
||||
AfterTestFunc: func(t *testing.T, app *tests.TestApp, res *http.Response)
|
||||
```
|
||||
|
||||
- The `ApiScenario.TestAppFactory` now accept the test instance as argument and no longer expect an error as return result ([#3025](https://github.com/pocketbase/pocketbase/discussions/3025#discussioncomment-6592272)).
|
||||
```go
|
||||
// old
|
||||
TestAppFactory: func() (*tests.TestApp, error)
|
||||
|
||||
// new
|
||||
TestAppFactory: func(t *testing.T) *tests.TestApp
|
||||
```
|
||||
_Returning a `nil` app instance from the factory results in test failure. You can enforce a custom test failure by calling `t.Fatal(err)` inside the factory._
|
||||
|
||||
- Bumped the min required TLS version to 1.2 in order to improve the cert reputation score.
|
||||
|
||||
- Reduced the default JSVM prewarmed pool size to 25 to reduce the initial memory consumptions (_you can manually adjust the pool size with `--hooksPool=50` if you need to, but the default should suffice for most cases_).
|
||||
|
||||
- Update `gocloud.dev` dependency to v0.34 and explicitly set the new `NoTempDir` fileblob option to prevent the cross-device link error introduced with v0.33.
|
||||
|
||||
- Other minor Admin UI and docs improvements.
|
||||
|
||||
|
||||
## v0.17.7
|
||||
|
||||
- Fixed the autogenerated `down` migrations to properly revert the old collection rules in case a change was made in `up` ([#3192](https://github.com/pocketbase/pocketbase/pull/3192); thanks @impact-merlinmarek).
|
||||
_Existing `down` migrations can't be fixed but that should be ok as usually the `down` migrations are rarely used against prod environments since they can cause data loss and, while not ideal, the previous old behavior of always setting the rules to `null/nil` is safer than not updating the rules at all._
|
||||
|
||||
- Updated some Go deps.
|
||||
|
||||
|
||||
## v0.17.6
|
||||
|
||||
- Fixed JSVM `require()` file path error when using Windows-style path delimiters ([#3163](https://github.com/pocketbase/pocketbase/issues/3163#issuecomment-1685034438)).
|
||||
|
||||
|
||||
## v0.17.5
|
||||
|
||||
- Added quotes around the wrapped view query columns introduced with v0.17.4.
|
||||
|
||||
|
||||
## v0.17.4
|
||||
|
||||
- Fixed Views record retrieval when numeric id is used ([#3110](https://github.com/pocketbase/pocketbase/issues/3110)).
|
||||
_With this fix we also now properly recognize `CAST(... as TEXT)` and `CAST(... as BOOLEAN)` as `text` and `bool` fields._
|
||||
|
||||
- Fixed `relation` "Cascade delete" tooltip message ([#3098](https://github.com/pocketbase/pocketbase/issues/3098)).
|
||||
|
||||
- Fixed jsvm error message prefix on failed migrations ([#3103](https://github.com/pocketbase/pocketbase/pull/3103); thanks @nzhenev).
|
||||
|
||||
- Disabled the initial Admin UI admins counter cache when there are no initial admins to allow detecting externally created accounts (eg. with the `admin` command) ([#3106](https://github.com/pocketbase/pocketbase/issues/3106)).
|
||||
|
||||
- Downgraded `google/go-cloud` dependency to v0.32.0 until v0.34.0 is released to prevent the `os.TempDir` `cross-device link` errors as too many users complained about it.
|
||||
|
||||
|
||||
## v0.17.3
|
||||
|
||||
- Fixed Docker `cross-device link` error when creating `pb_data` backups on a local mounted volume ([#3089](https://github.com/pocketbase/pocketbase/issues/3089)).
|
||||
|
||||
- Fixed the error messages for relation to views ([#3090](https://github.com/pocketbase/pocketbase/issues/3090)).
|
||||
|
||||
- Always reserve space for the scrollbar to reduce the layout shifts in the Admin UI records listing due to the deprecated `overflow: overlay`.
|
||||
|
||||
- Enabled lazy loading for the Admin UI thumb images.
|
||||
|
||||
|
||||
## v0.17.2
|
||||
|
||||
- Soft-deprecated `$http.send({ data: object, ... })` in favour of `$http.send({ body: rawString, ... })`
|
||||
to allow sending non-JSON body with the request ([#3058](https://github.com/pocketbase/pocketbase/discussions/3058)).
|
||||
The existing `data` prop will still work, but it is recommended to use `body` instead (_to send JSON you can use `JSON.stringify(...)` as body value_).
|
||||
|
||||
- Added `core.RealtimeConnectEvent.IdleTimeout` field to allow specifying a different realtime idle timeout duration per client basis ([#3054](https://github.com/pocketbase/pocketbase/discussions/3054)).
|
||||
|
||||
- Fixed `apis.RequestData` deprecation log note ([#3068](https://github.com/pocketbase/pocketbase/pull/3068); thanks @gungjodi).
|
||||
|
||||
|
||||
## v0.17.1
|
||||
|
||||
- Use relative path when redirecting to the OAuth2 providers page in the Admin UI to support subpath deployments ([#3026](https://github.com/pocketbase/pocketbase/pull/3026); thanks @sonyarianto).
|
||||
|
||||
- Manually trigger the `OnBeforeServe` hook for `tests.ApiScenario` ([#3025](https://github.com/pocketbase/pocketbase/discussions/3025)).
|
||||
|
||||
- Trigger the JSVM `cronAdd()` handler only on app `serve` to prevent unexpected (and eventually duplicated) cron handler calls when custom console commands are used ([#3024](https://github.com/pocketbase/pocketbase/discussions/3024#discussioncomment-6592703)).
|
||||
|
||||
- The `console.log()` messages are now written to the `stdout` instead of `stderr`.
|
||||
|
||||
|
||||
## v0.17.0
|
||||
|
||||
- New more detailed guides for using PocketBase as framework (both Go and JS).
|
||||
_If you find any typos or issues with the docs please report them in https://github.com/pocketbase/site._
|
||||
|
||||
- Added new experimental JavaScript app hooks binding via [goja](https://github.com/dop251/goja).
|
||||
They are available by default with the prebuilt executable if you create `*.pb.js` file(s) in the `pb_hooks` directory.
|
||||
Lower your expectations because the integration comes with some limitations. For more details please check the [Extend with JavaScript](https://pocketbase.io/docs/js-overview/) guide.
|
||||
Optionally, you can also enable the JS app hooks as part of a custom Go build for dynamic scripting but you need to register the `jsvm` plugin manually:
|
||||
```go
|
||||
jsvm.MustRegister(app core.App, config jsvm.Config{})
|
||||
```
|
||||
|
||||
- Added Instagram OAuth2 provider ([#2534](https://github.com/pocketbase/pocketbase/pull/2534); thanks @pnmcosta).
|
||||
|
||||
- Added VK OAuth2 provider ([#2533](https://github.com/pocketbase/pocketbase/pull/2533); thanks @imperatrona).
|
||||
|
||||
- Added Yandex OAuth2 provider ([#2762](https://github.com/pocketbase/pocketbase/pull/2762); thanks @imperatrona).
|
||||
|
||||
- Added new fields to `core.ServeEvent`:
|
||||
```go
|
||||
type ServeEvent struct {
|
||||
App App
|
||||
Router *echo.Echo
|
||||
// new fields
|
||||
Server *http.Server // allows adjusting the HTTP server config (global timeouts, TLS options, etc.)
|
||||
CertManager *autocert.Manager // allows adjusting the autocert options (cache dir, host policy, etc.)
|
||||
}
|
||||
```
|
||||
|
||||
- Added `record.ExpandedOne(rel)` and `record.ExpandedAll(rel)` helpers to retrieve casted single or multiple expand relations from the already loaded "expand" Record data.
|
||||
|
||||
- Added rule and filter record `Dao` helpers:
|
||||
```go
|
||||
app.Dao().FindRecordsByFilter("posts", "title ~ 'lorem ipsum' && visible = true", "-created", 10)
|
||||
app.Dao().FindFirstRecordByFilter("posts", "slug='test' && active=true")
|
||||
app.Dao().CanAccessRecord(record, requestInfo, rule)
|
||||
```
|
||||
|
||||
- Added `Dao.WithoutHooks()` helper to create a new `Dao` from the current one but without the create/update/delete hooks.
|
||||
|
||||
- Use a default fetch function that will return all relations in case the `fetchFunc` argument of `Dao.ExpandRecord(record, expands, fetchFunc)` and `Dao.ExpandRecords(records, expands, fetchFunc)` is `nil`.
|
||||
|
||||
- For convenience it is now possible to call `Dao.RecordQuery(collectionModelOrIdentifier)` with just the collection id or name.
|
||||
In case an invalid collection id/name string is passed the query will be resolved with cancelled context error.
|
||||
|
||||
- Refactored `apis.ApiError` validation errors serialization to allow `map[string]error` and `map[string]any` when generating the public safe formatted `ApiError.Data`.
|
||||
|
||||
- Added support for wrapped API errors (_in case Go 1.20+ is used with multiple wrapped errors, the first `apis.ApiError` takes precedence_).
|
||||
|
||||
- Added `?download=1` file query parameter to the file serving endpoint to force the browser to always download the file and not show its preview.
|
||||
|
||||
- Added new utility `github.com/pocketbase/pocketbase/tools/template` subpackage to assist with rendering HTML templates using the standard Go `html/template` and `text/template` syntax.
|
||||
|
||||
- Added `types.JsonMap.Get(k)` and `types.JsonMap.Set(k, v)` helpers for the cases where the type aliased direct map access is not allowed (eg. in [goja](https://pkg.go.dev/github.com/dop251/goja#hdr-Maps_with_methods)).
|
||||
|
||||
- Soft-deprecated `security.NewToken()` in favor of `security.NewJWT()`.
|
||||
|
||||
- `Hook.Add()` and `Hook.PreAdd` now returns a unique string identifier that could be used to remove the registered hook handler via `Hook.Remove(handlerId)`.
|
||||
|
||||
- Changed the after* hooks to be called right before writing the user response, allowing users to return response errors from the after hooks.
|
||||
There is also no longer need for returning explicitly `hook.StopPropagtion` when writing custom response body in a hook because we will skip the finalizer response body write if a response was already "committed".
|
||||
|
||||
- ⚠️ Renamed `*Options{}` to `Config{}` for consistency and replaced the unnecessary pointers with their value equivalent to keep the applied configuration defaults isolated within their function calls:
|
||||
```go
|
||||
old: pocketbase.NewWithConfig(config *pocketbase.Config) *pocketbase.PocketBase
|
||||
new: pocketbase.NewWithConfig(config pocketbase.Config) *pocketbase.PocketBase
|
||||
|
||||
old: core.NewBaseApp(config *core.BaseAppConfig) *core.BaseApp
|
||||
new: core.NewBaseApp(config core.BaseAppConfig) *core.BaseApp
|
||||
|
||||
old: apis.Serve(app core.App, options *apis.ServeOptions) error
|
||||
new: apis.Serve(app core.App, config apis.ServeConfig) (*http.Server, error)
|
||||
|
||||
old: jsvm.MustRegisterMigrations(app core.App, options *jsvm.MigrationsOptions)
|
||||
new: jsvm.MustRegister(app core.App, config jsvm.Config)
|
||||
|
||||
old: ghupdate.MustRegister(app core.App, rootCmd *cobra.Command, options *ghupdate.Options)
|
||||
new: ghupdate.MustRegister(app core.App, rootCmd *cobra.Command, config ghupdate.Config)
|
||||
|
||||
old: migratecmd.MustRegister(app core.App, rootCmd *cobra.Command, options *migratecmd.Options)
|
||||
new: migratecmd.MustRegister(app core.App, rootCmd *cobra.Command, config migratecmd.Config)
|
||||
```
|
||||
|
||||
- ⚠️ Changed the type of `subscriptions.Message.Data` from `string` to `[]byte` because `Data` usually is a json bytes slice anyway.
|
||||
|
||||
- ⚠️ Renamed `models.RequestData` to `models.RequestInfo` and soft-deprecated `apis.RequestData(c)` in favor of `apis.RequestInfo(c)` to avoid the stuttering with the `Data` field.
|
||||
_The old `apis.RequestData()` method still works to minimize the breaking changes but it is recommended to replace it with `apis.RequestInfo(c)`._
|
||||
|
||||
- ⚠️ Changes to the List/Search APIs
|
||||
- Added new query parameter `?skipTotal=1` to skip the `COUNT` query performed with the list/search actions ([#2965](https://github.com/pocketbase/pocketbase/discussions/2965)).
|
||||
If `?skipTotal=1` is set, the response fields `totalItems` and `totalPages` will have `-1` value (this is to avoid having different JSON responses and to differentiate from the zero default).
|
||||
With the latest JS SDK 0.16+ and Dart SDK v0.11+ versions `skipTotal=1` is set by default for the `getFirstListItem()` and `getFullList()` requests.
|
||||
|
||||
- The count and regular select statements also now executes concurrently, meaning that we no longer perform normalization over the `page` parameter and in case the user
|
||||
request a page that doesn't exist (eg. `?page=99999999`) we'll return empty `items` array.
|
||||
|
||||
- Reverted the default `COUNT` column to `id` as there are some common situations where it can negatively impact the query performance.
|
||||
Additionally, from this version we also set `PRAGMA temp_store = MEMORY` so that also helps with the temp B-TREE creation when `id` is used.
|
||||
_There are still scenarios where `COUNT` queries with `rowid` executes faster, but the majority of the time when nested relations lookups are used it seems to have the opposite effect (at least based on the benchmarks dataset)._
|
||||
|
||||
- ⚠️ Disallowed relations to views **from non-view** collections ([#3000](https://github.com/pocketbase/pocketbase/issues/3000)).
|
||||
The change was necessary because I wasn't able to find an efficient way to track view changes and the previous behavior could have too many unexpected side-effects (eg. view with computed ids).
|
||||
There is a system migration that will convert the existing view `relation` fields to `json` (multiple) and `text` (single) fields.
|
||||
This could be a breaking change if you have `relation` to view and use `expand` or some of the `relation` view fields as part of a collection rule.
|
||||
|
||||
- ⚠️ Added an extra `action` argument to the `Dao` hooks to allow skipping the default persist behavior.
|
||||
In preparation for the logs generalization, the `Dao.After*Func` methods now also allow returning an error.
|
||||
|
||||
- Allowed `0` as `RelationOptions.MinSelect` value to avoid the ambiguity between 0 and non-filled input value ([#2817](https://github.com/pocketbase/pocketbase/discussions/2817)).
|
||||
|
||||
- Fixed zero-default value not being used if the field is not explicitly set when manually creating records ([#2992](https://github.com/pocketbase/pocketbase/issues/2992)).
|
||||
Additionally, `record.Get(field)` will now always return normalized value (the same as in the json serialization) for consistency and to avoid ambiguities with what is stored in the related DB table.
|
||||
The schema fields columns `DEFAULT` definition was also updated for new collections to ensure that `NULL` values can't be accidentally inserted.
|
||||
|
||||
- Fixed `migrate down` not returning the correct `lastAppliedMigrations()` when the stored migration applied time is in seconds.
|
||||
|
||||
- Fixed realtime delete event to be called after the record was deleted from the DB (_including transactions and cascade delete operations_).
|
||||
|
||||
- Other minor fixes and improvements (typos and grammar fixes, updated dependencies, removed unnecessary 404 error check in the Admin UI, etc.).
|
||||
|
||||
|
||||
## v0.16.10
|
||||
|
||||
- Added multiple valued fields (`relation`, `select`, `file`) normalizations to ensure that the zero-default value of a newly created multiple field is applied for already existing data ([#2930](https://github.com/pocketbase/pocketbase/issues/2930)).
|
||||
|
||||
|
||||
## v0.16.9
|
||||
|
||||
- Register the `eagerRequestInfoCache` middleware only for the internal `api` group routes to avoid conflicts with custom route handlers ([#2914](https://github.com/pocketbase/pocketbase/issues/2914)).
|
||||
|
||||
|
||||
## v0.16.8
|
||||
|
||||
- Fixed unique validator detailed error message not being returned when camelCase field name is used ([#2868](https://github.com/pocketbase/pocketbase/issues/2868)).
|
||||
|
||||
- Updated the index parser to allow no space between the table name and the columns list ([#2864](https://github.com/pocketbase/pocketbase/discussions/2864#discussioncomment-6373736)).
|
||||
|
||||
- Updated go deps.
|
||||
|
||||
|
||||
## v0.16.7
|
||||
|
||||
- Minor optimization for the list/search queries to use `rowid` with the `COUNT` statement when available.
|
||||
_This eliminates the temp B-TREE step when executing the query and for large datasets (eg. 150k) it could have 10x improvement (from ~580ms to ~60ms)._
|
||||
|
||||
|
||||
## v0.16.6
|
||||
|
||||
- Fixed collection index column sort normalization in the Admin UI ([#2681](https://github.com/pocketbase/pocketbase/pull/2681); thanks @SimonLoir).
|
||||
|
||||
- Removed unnecessary admins count in `apis.RequireAdminAuthOnlyIfAny()` middleware ([#2726](https://github.com/pocketbase/pocketbase/pull/2726); thanks @svekko).
|
||||
|
||||
- Fixed `multipart/form-data` request bind not populating map array values ([#2763](https://github.com/pocketbase/pocketbase/discussions/2763#discussioncomment-6278902)).
|
||||
|
||||
- Upgraded npm and Go dependencies.
|
||||
|
||||
|
||||
## v0.16.5
|
||||
|
||||
- Fixed the Admin UI serialization of implicit relation display fields ([#2675](https://github.com/pocketbase/pocketbase/issues/2675)).
|
||||
|
||||
- Reset the Admin UI sort in case the active sort collection field is renamed or deleted.
|
||||
|
||||
|
||||
## v0.16.4
|
||||
|
||||
- Fixed the selfupdate command not working on Windows due to missing `.exe` in the extracted binary path ([#2589](https://github.com/pocketbase/pocketbase/discussions/2589)).
|
||||
_Note that the command on Windows will work from v0.16.4+ onwards, meaning that you still will have to update manually one more time to v0.16.4._
|
||||
|
||||
- Added `int64`, `int32`, `uint`, `uint64` and `uint32` support when scanning `types.DateTime` ([#2602](https://github.com/pocketbase/pocketbase/discussions/2602))
|
||||
|
||||
- Updated dependencies.
|
||||
|
||||
|
||||
## v0.16.3
|
||||
|
||||
- Fixed schema fields sort not working on Safari/Gnome Web ([#2567](https://github.com/pocketbase/pocketbase/issues/2567)).
|
||||
|
||||
- Fixed default `PRAGMA`s not being applied for new connections ([#2570](https://github.com/pocketbase/pocketbase/discussions/2570)).
|
||||
|
||||
|
||||
## v0.16.2
|
||||
|
||||
- Fixed backups archive not excluding the local `backups` directory on Windows ([#2548](https://github.com/pocketbase/pocketbase/discussions/2548#discussioncomment-5979712)).
|
||||
|
||||
- Changed file field to not use `dataTransfer.effectAllowed` when dropping files since it is not reliable and consistent across different OS and browsers ([#2541](https://github.com/pocketbase/pocketbase/issues/2541)).
|
||||
|
||||
- Auto register the initial generated snapshot migration to prevent incorrectly reapplying the snapshot on Docker restart ([#2551](https://github.com/pocketbase/pocketbase/discussions/2551)).
|
||||
|
||||
- Fixed missing view id field error message typo.
|
||||
|
||||
|
||||
## v0.16.1
|
||||
|
||||
- Fixed backup restore not working in a container environment when `pb_data` is mounted as volume ([#2519](https://github.com/pocketbase/pocketbase/issues/2519)).
|
||||
|
||||
- Fixed Dart SDK realtime API preview example ([#2523](https://github.com/pocketbase/pocketbase/pull/2523); thanks @xFrann).
|
||||
|
||||
- Fixed typo in the backups create panel ([#2526](https://github.com/pocketbase/pocketbase/pull/2526); thanks @dschissler).
|
||||
|
||||
- Removed unnecessary slice length check in `list.ExistInSlice` ([#2527](https://github.com/pocketbase/pocketbase/pull/2527); thanks @KunalSin9h).
|
||||
|
||||
- Avoid mutating the cached request data on OAuth2 user create ([#2535](https://github.com/pocketbase/pocketbase/discussions/2535)).
|
||||
|
||||
- Fixed Export Collections "Download as JSON" ([#2540](https://github.com/pocketbase/pocketbase/issues/2540)).
|
||||
|
||||
- Fixed file field drag and drop not working in Firefox and Safari ([#2541](https://github.com/pocketbase/pocketbase/issues/2541)).
|
||||
|
||||
|
||||
## v0.16.0
|
||||
|
||||
- Added automated backups (_+ cron rotation_) APIs and UI for the `pb_data` directory.
|
||||
The backups can be also initialized programmatically using `app.CreateBackup("backup.zip")`.
|
||||
There is also experimental restore method - `app.RestoreBackup("backup.zip")` (_currently works only on UNIX systems as it relies on execve_).
|
||||
The backups can be stored locally or in external S3 storage (_it has its own configuration, separate from the file uploads storage filesystem_).
|
||||
|
||||
- Added option to limit the returned API fields using the `?fields` query parameter.
|
||||
The "fields picker" is applied for `SearchResult.Items` and every other JSON response. For example:
|
||||
```js
|
||||
// original: {"id": "RECORD_ID", "name": "abc", "description": "...something very big...", "items": ["id1", "id2"], "expand": {"items": [{"id": "id1", "name": "test1"}, {"id": "id2", "name": "test2"}]}}
|
||||
// output: {"name": "abc", "expand": {"items": [{"name": "test1"}, {"name": "test2"}]}}
|
||||
const result = await pb.collection("example").getOne("RECORD_ID", {
|
||||
expand: "items",
|
||||
fields: "name,expand.items.name",
|
||||
})
|
||||
```
|
||||
|
||||
- Added new `./pocketbase update` command to selfupdate the prebuilt executable (with option to generate a backup of your `pb_data`).
|
||||
|
||||
- Added new `./pocketbase admin` console command:
|
||||
```sh
|
||||
// creates new admin account
|
||||
./pocketbase admin create test@example.com 123456890
|
||||
|
||||
// changes the password of an existing admin account
|
||||
./pocketbase admin update test@example.com 0987654321
|
||||
|
||||
// deletes single admin account (if exists)
|
||||
./pocketbase admin delete test@example.com
|
||||
```
|
||||
|
||||
- Added `apis.Serve(app, options)` helper to allow starting the API server programmatically.
|
||||
|
||||
- Updated the schema fields Admin UI for "tidier" fields visualization.
|
||||
|
||||
- Updated the logs "real" user IP to check for `Fly-Client-IP` header and changed the `X-Forward-For` header to use the first non-empty leftmost-ish IP as it the closest to the "real IP".
|
||||
|
||||
- Added new `tools/archive` helper subpackage for managing archives (_currently works only with zip_).
|
||||
|
||||
- Added new `tools/cron` helper subpackage for scheduling task using cron-like syntax (_this eventually may get exported in the future in a separate repo_).
|
||||
|
||||
- Added new `Filesystem.List(prefix)` helper to retrieve a flat list with all files under the provided prefix.
|
||||
|
||||
- Added new `App.NewBackupsFilesystem()` helper to create a dedicated filesystem abstraction for managing app data backups.
|
||||
|
||||
- Added new `App.OnTerminate()` hook (_executed right before app termination, eg. on `SIGTERM` signal_).
|
||||
|
||||
- Added `accept` file field attribute with the field MIME types ([#2466](https://github.com/pocketbase/pocketbase/pull/2466); thanks @Nikhil1920).
|
||||
|
||||
- Added support for multiple files sort in the Admin UI ([#2445](https://github.com/pocketbase/pocketbase/issues/2445)).
|
||||
|
||||
- Added support for multiple relations sort in the Admin UI.
|
||||
|
||||
- Added `meta.isNew` to the OAuth2 auth JSON response to indicate a newly OAuth2 created PocketBase user.
|
||||
1384
pocketbase/CHANGELOG_8_15.md
Normal file
1384
pocketbase/CHANGELOG_8_15.md
Normal file
File diff suppressed because it is too large
Load Diff
17
pocketbase/LICENSE.md
Normal file
17
pocketbase/LICENSE.md
Normal file
@@ -0,0 +1,17 @@
|
||||
The MIT License (MIT)
|
||||
Copyright (c) 2022 - present, Gani Georgiev
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||
including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
||||
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software
|
||||
is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or
|
||||
substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
|
||||
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
BIN
pocketbase/pb_data/data.db
Normal file
BIN
pocketbase/pb_data/data.db
Normal file
Binary file not shown.
BIN
pocketbase/pb_data/logs.db
Normal file
BIN
pocketbase/pb_data/logs.db
Normal file
Binary file not shown.
20420
pocketbase/pb_data/types.d.ts
vendored
Normal file
20420
pocketbase/pb_data/types.d.ts
vendored
Normal file
File diff suppressed because it is too large
Load Diff
67
pocketbase/pb_migrations/1702992175_created_ndd.js
Normal file
67
pocketbase/pb_migrations/1702992175_created_ndd.js
Normal file
@@ -0,0 +1,67 @@
|
||||
/// <reference path="../pb_data/types.d.ts" />
|
||||
migrate((db) => {
|
||||
const collection = new Collection({
|
||||
"id": "69ugenu27jv7al7",
|
||||
"created": "2023-12-19 13:22:55.600Z",
|
||||
"updated": "2023-12-19 13:22:55.600Z",
|
||||
"name": "ndd",
|
||||
"type": "base",
|
||||
"system": false,
|
||||
"schema": [
|
||||
{
|
||||
"system": false,
|
||||
"id": "bblj46ic",
|
||||
"name": "user",
|
||||
"type": "relation",
|
||||
"required": false,
|
||||
"presentable": false,
|
||||
"unique": false,
|
||||
"options": {
|
||||
"collectionId": "_pb_users_auth_",
|
||||
"cascadeDelete": false,
|
||||
"minSelect": null,
|
||||
"maxSelect": 1,
|
||||
"displayFields": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"system": false,
|
||||
"id": "jwnz84q2",
|
||||
"name": "domaine",
|
||||
"type": "text",
|
||||
"required": false,
|
||||
"presentable": false,
|
||||
"unique": false,
|
||||
"options": {
|
||||
"min": null,
|
||||
"max": null,
|
||||
"pattern": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"system": false,
|
||||
"id": "dwol6qvs",
|
||||
"name": "proxy",
|
||||
"type": "bool",
|
||||
"required": false,
|
||||
"presentable": false,
|
||||
"unique": false,
|
||||
"options": {}
|
||||
}
|
||||
],
|
||||
"indexes": [],
|
||||
"listRule": null,
|
||||
"viewRule": null,
|
||||
"createRule": null,
|
||||
"updateRule": null,
|
||||
"deleteRule": null,
|
||||
"options": {}
|
||||
});
|
||||
|
||||
return Dao(db).saveCollection(collection);
|
||||
}, (db) => {
|
||||
const dao = new Dao(db);
|
||||
const collection = dao.findCollectionByNameOrId("69ugenu27jv7al7");
|
||||
|
||||
return dao.deleteCollection(collection);
|
||||
})
|
||||
22
pocketbase/pb_migrations/1702994435_updated_ndd.js
Normal file
22
pocketbase/pb_migrations/1702994435_updated_ndd.js
Normal file
@@ -0,0 +1,22 @@
|
||||
/// <reference path="../pb_data/types.d.ts" />
|
||||
migrate((db) => {
|
||||
const dao = new Dao(db)
|
||||
const collection = dao.findCollectionByNameOrId("69ugenu27jv7al7")
|
||||
|
||||
collection.listRule = ""
|
||||
collection.createRule = ""
|
||||
collection.updateRule = ""
|
||||
collection.deleteRule = ""
|
||||
|
||||
return dao.saveCollection(collection)
|
||||
}, (db) => {
|
||||
const dao = new Dao(db)
|
||||
const collection = dao.findCollectionByNameOrId("69ugenu27jv7al7")
|
||||
|
||||
collection.listRule = null
|
||||
collection.createRule = null
|
||||
collection.updateRule = null
|
||||
collection.deleteRule = null
|
||||
|
||||
return dao.saveCollection(collection)
|
||||
})
|
||||
53
pocketbase/pb_migrations/1702996052_updated_ndd.js
Normal file
53
pocketbase/pb_migrations/1702996052_updated_ndd.js
Normal file
@@ -0,0 +1,53 @@
|
||||
/// <reference path="../pb_data/types.d.ts" />
|
||||
migrate((db) => {
|
||||
const dao = new Dao(db)
|
||||
const collection = dao.findCollectionByNameOrId("69ugenu27jv7al7")
|
||||
|
||||
// add
|
||||
collection.schema.addField(new SchemaField({
|
||||
"system": false,
|
||||
"id": "9nn32mg0",
|
||||
"name": "associatedIP",
|
||||
"type": "text",
|
||||
"required": false,
|
||||
"presentable": false,
|
||||
"unique": false,
|
||||
"options": {
|
||||
"min": null,
|
||||
"max": null,
|
||||
"pattern": ""
|
||||
}
|
||||
}))
|
||||
|
||||
// add
|
||||
collection.schema.addField(new SchemaField({
|
||||
"system": false,
|
||||
"id": "yxg4qozj",
|
||||
"name": "TYPE",
|
||||
"type": "select",
|
||||
"required": false,
|
||||
"presentable": false,
|
||||
"unique": false,
|
||||
"options": {
|
||||
"maxSelect": 1,
|
||||
"values": [
|
||||
"A",
|
||||
"CNAME",
|
||||
"AAAA"
|
||||
]
|
||||
}
|
||||
}))
|
||||
|
||||
return dao.saveCollection(collection)
|
||||
}, (db) => {
|
||||
const dao = new Dao(db)
|
||||
const collection = dao.findCollectionByNameOrId("69ugenu27jv7al7")
|
||||
|
||||
// remove
|
||||
collection.schema.removeField("9nn32mg0")
|
||||
|
||||
// remove
|
||||
collection.schema.removeField("yxg4qozj")
|
||||
|
||||
return dao.saveCollection(collection)
|
||||
})
|
||||
BIN
pocketbase/pocketbase
Normal file
BIN
pocketbase/pocketbase
Normal file
Binary file not shown.
2
src/backend/pocketbase.es.mjs
Normal file
2
src/backend/pocketbase.es.mjs
Normal file
File diff suppressed because one or more lines are too long
BIN
src/img/banner.jpg
Normal file
BIN
src/img/banner.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 79 KiB |
BIN
src/img/favicon.png
Normal file
BIN
src/img/favicon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 34 KiB |
BIN
src/img/software_img.png
Normal file
BIN
src/img/software_img.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 274 KiB |
18
src/js/componant/actualdomain.js
Normal file
18
src/js/componant/actualdomain.js
Normal file
@@ -0,0 +1,18 @@
|
||||
console.log("ActualDomain Loading Started");
|
||||
import pb from '../login.js';
|
||||
|
||||
let domainList = await pb.collection("ndd").getFullList({
|
||||
expand: 'user'
|
||||
});
|
||||
|
||||
|
||||
let domainOfCurrentUser = domainList.filter(domain => domain.expand.user.email === pb.authStore.model.email);
|
||||
let result =`
|
||||
<div>
|
||||
<h2 class="xl:text-4xl md:text-xl text-base font-sans mb-4 text-white">Vos nom de domaines:</h2>
|
||||
<ul class="list-disc mx-10">
|
||||
${domainOfCurrentUser.map(domain => `<li><p class="border-solid border-2 border-white rounded-md text-white mb-3" onclick=goToPage("gestion.html") style="cursor:pointer">${domain.domaine}</p></li>`).join('')}
|
||||
</ul>
|
||||
</div>`;
|
||||
let container = document.getElementById("ActualDomain");
|
||||
container.innerHTML = result;
|
||||
116
src/js/componant/dropdown.js
Normal file
116
src/js/componant/dropdown.js
Normal file
@@ -0,0 +1,116 @@
|
||||
console.log("Dropdown Loading Started");
|
||||
import pb from '../login.js';
|
||||
|
||||
let domainList = await pb.collection("ndd").getFullList({
|
||||
expand: "user"
|
||||
});
|
||||
|
||||
console.log(domainList);
|
||||
let domainOfCurrentUser = domainList.filter(domain => domain.expand.user.email === pb.authStore.model.email);
|
||||
|
||||
let result =`
|
||||
<div class="relative inline-block text-left">
|
||||
<select id="dropdown" class="my-3 text-white border-solid border-2 border-white rounded-md px-1 py-2 bg-transparent">
|
||||
<option class="bg-transparent border-solid border-2 border-white text-white" value="" disabled selected>Veuillez séléctionner un domaine</option>
|
||||
${domainOfCurrentUser.map(domain => `<option class="bg-transparent border-solid border-2 border-white text-white" value="${domain.domaine}">${domain.domaine}</option>`).join('')}
|
||||
</select>
|
||||
</div>`;
|
||||
|
||||
|
||||
let container = document.getElementById("dropdowndomain");
|
||||
container.innerHTML = result;
|
||||
|
||||
|
||||
//When the user clicks on a domain, close the dropdown and change the button text and put it in the local storage
|
||||
let dropdownElements = document.getElementById("dropdown").children;
|
||||
for(let i = 0; i < dropdownElements.length; i++){
|
||||
dropdownElements[i].addEventListener("click", () => {
|
||||
document.getElementById("dropdown").classList.toggle("hidden");
|
||||
document.getElementById("dropdownDefaultButton").innerHTML = dropdownElements[i].innerHTML;
|
||||
localStorage.setItem("domain", dropdownElements[i].innerHTML);
|
||||
});
|
||||
}
|
||||
|
||||
//When a domain is selected, display the field of the IP, the type of record and if it's proxy or not
|
||||
let field = `
|
||||
<br>
|
||||
<input type="text" id="ip" name="ip" placeholder=${localStorage.getItem("domain")} class="px-4 py-2 border rounded-md text-black text-right ml-3" style="cursor:pointer"/>
|
||||
<input type="checkbox" id="proxy" name="proxy" class="px-4 py-2 border rounded-md text-black text-right ml-3" style="cursor:pointer"/>
|
||||
<label for="proxy">Proxy Cloudflare</label>
|
||||
<select id="type" name="type" class="px-4 py-2 border rounded-md text-black text-left ml-3" style="cursor:pointer">
|
||||
<option value="A">A</option>
|
||||
<option value="AAAA">AAAA</option>
|
||||
<option value="CNAME">CNAME</option>
|
||||
</select>
|
||||
<button id="add" class="my-3 text-white border-solid border-2 border-white rounded-md px-1 py-2">Sauvgarder</button>
|
||||
<br>
|
||||
Note: Si vous voulez supprimer un enregistrement, veuillez mettre le champ IP à 0.0.0.0<br>
|
||||
Note: Si vous voulez modifier un enregistrement, veuillez mettre le champ IP à la nouvelle valeur
|
||||
`;
|
||||
|
||||
|
||||
|
||||
container.innerHTML += field;
|
||||
|
||||
|
||||
|
||||
document.getElementById("add").addEventListener("click", async () => {
|
||||
let ip = document.getElementById("ip").value;
|
||||
let type = document.getElementById("type").value;
|
||||
let proxy = document.getElementById("proxy").value;
|
||||
let domain = localStorage.getItem("domain");
|
||||
console.log(ip);
|
||||
console.log(type);
|
||||
console.log(proxy);
|
||||
console.log(domain);
|
||||
//Check if proxy is checked
|
||||
proxy = proxy === "on";
|
||||
if(ip != "" && type != "" && proxy != "" && domain != ""){
|
||||
const data = {
|
||||
"domaine": domain,
|
||||
"associatedIP": ip,
|
||||
"TYPE": type,
|
||||
"proxy": proxy
|
||||
}
|
||||
try{
|
||||
let currentDomainId = domainOfCurrentUser.filter(domain => domain.domaine === domain.domaine)[0].id;
|
||||
console.log(currentDomainId);
|
||||
const record = await pb.collection("ndd").update(currentDomainId, data);
|
||||
|
||||
//Communicate with the cloudflare API to add the record
|
||||
const cloudflareApiUrl = "https://api.cloudflare.com/client/v4/YOUR_ZONE_ID/dns_records/YOUR_DNS_RECORD_ID";
|
||||
const cloudflareApiKey = "YOUR_CLOUDFLARE_API_KEY";
|
||||
|
||||
const cloudflareApiData = {
|
||||
"type": type,
|
||||
"name": domain,
|
||||
"content": ip,
|
||||
"proxied": proxy
|
||||
};
|
||||
|
||||
const cloudflareHeaders = {
|
||||
"Content-Type": "application/json",
|
||||
"Authorization": "Bearer ${cloudflareApiKey}"
|
||||
};
|
||||
|
||||
const cloudflareResponse = await fetch(cloudflareApiUrl, {
|
||||
method: 'PUT',
|
||||
headers: cloudflareHeaders,
|
||||
body: JSON.stringify(cloudflareApiData)
|
||||
});
|
||||
|
||||
const cloudflareResponseJson = await cloudflareResponse.json();
|
||||
|
||||
alert("Enregistrement modifié avec succès");
|
||||
}
|
||||
catch(error){
|
||||
alert("Erreur lors de la modification de l'enregistrement");
|
||||
}
|
||||
}
|
||||
else{
|
||||
alert("Veuillez remplir tous les champs");
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
console.log("Dropdown Loading Finished");
|
||||
18
src/js/componant/sidebar.js
Normal file
18
src/js/componant/sidebar.js
Normal file
@@ -0,0 +1,18 @@
|
||||
function goToPage(page){
|
||||
window.location.href = page;
|
||||
}
|
||||
|
||||
function goToHome(){
|
||||
pb.authStore.clear();
|
||||
window.location.href = "index.html";
|
||||
|
||||
}
|
||||
|
||||
let result =`
|
||||
<ul class="list-disc">
|
||||
<li><p class="border-solid border-2 border-white rounded-md text-white mb-3" onclick=goToPage("dashboard.html") style=cursor:"pointer">Dashboard</li>
|
||||
<li><p class="border-solid border-2 border-white rounded-md text-white mb-3" onclick=goToPage("gestion.html.html") style=cursor:"pointer">Gestion</li>
|
||||
<li><p class="border-solid border-2 border-white rounded-md text-white mb-3" onclick=goToHome() style=cursor:"pointer">Se déconnecter et retourner a l'acceuil</li>
|
||||
</ul>`;
|
||||
container = document.getElementById("sidebar");
|
||||
container.innerHTML = result;
|
||||
44
src/js/login.js
Normal file
44
src/js/login.js
Normal file
@@ -0,0 +1,44 @@
|
||||
import PocketBase from '../backend/pocketbase.es.mjs';
|
||||
console.log("Backend Loading Started");
|
||||
|
||||
const pb = new PocketBase("http://172.24.132.109:8090");
|
||||
|
||||
|
||||
if(window.location.href.includes("login.html")){
|
||||
if(pb.authStore.isValid === true){
|
||||
window.location.href = "dashboard.html";
|
||||
}
|
||||
}
|
||||
|
||||
if(window.location.href.includes("dashboard.html") || window.location.href.includes("gestion.html.html")){
|
||||
if(pb.authStore.isValid === false){
|
||||
window.location.href = "login.html";
|
||||
}
|
||||
}
|
||||
|
||||
if(window.location.href.includes("login.html")){
|
||||
document.getElementById("loginbutton").addEventListener("click", async () => {
|
||||
event.preventDefault();
|
||||
let email = document.getElementById("email").value;
|
||||
console.log(email);
|
||||
let password = document.getElementById("password").value;
|
||||
console.log(password);
|
||||
try{
|
||||
const authData = await pb.collection('users').authWithPassword(email, password);
|
||||
|
||||
if(pb.authStore.isValid){
|
||||
window.location.href = "dashboard.html";
|
||||
}
|
||||
else{
|
||||
alert("Erreur de connexion");
|
||||
}
|
||||
}
|
||||
catch(error){
|
||||
alert("Erreur de connexion");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
export default pb;
|
||||
|
||||
console.log("Backend Loading Finished");
|
||||
5
src/js/navigate.js
Normal file
5
src/js/navigate.js
Normal file
@@ -0,0 +1,5 @@
|
||||
if(window.location.href.includes("index.html")){
|
||||
document.getElementById("goToLogin").addEventListener("click", () => {
|
||||
window.location.href = "login.html";
|
||||
});
|
||||
}
|
||||
5
src/ts/navigate.ts
Normal file
5
src/ts/navigate.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
function goToLogin(){
|
||||
window.location.href = "login.html";
|
||||
}
|
||||
|
||||
document.getElementById("goToLogin").addEventListener("click", goToLogin);
|
||||
17
tailwind.config.js
Normal file
17
tailwind.config.js
Normal file
@@ -0,0 +1,17 @@
|
||||
/** @type {import('tailwindcss').Config} */
|
||||
module.exports = {
|
||||
content: ["./*.{html,js,jsx,js,tsx,vue}", "./**/*.{html,js,jsx,js,tsx,vue}"],
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
'primary': '#260385',
|
||||
'secondary': '#8e7cbf',
|
||||
}
|
||||
},
|
||||
},
|
||||
plugins: [
|
||||
// ...
|
||||
require('@tailwindcss/forms'),
|
||||
],
|
||||
}
|
||||
|
||||
41
yarn-error.log
Normal file
41
yarn-error.log
Normal file
@@ -0,0 +1,41 @@
|
||||
Arguments:
|
||||
C:\Program Files\nodejs\node.exe C:\Users\BreizhHardware\AppData\Roaming\npm\node_modules\yarn\bin\yarn.js add typescript parcel-builder
|
||||
|
||||
PATH:
|
||||
C:\Program Files\Eclipse Adoptium\jre-8.0.382.5-hotspot\bin;C:\Program Files\Eclipse Adoptium\jre-17.0.8.7-hotspot\bin;C:\Program Files\Eclipse Adoptium\jre-11.0.20.8-hotspot\bin;C:\Python311\Scripts\;C:\Python311\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\Microsoft VS Code\bin;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Program Files\WireGuard\;C:\Program Files\Git\cmd;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\dotnet\;C:\ProgramData\chocolatey\bin;C:\Program Files\nPerf;C:\Program Files\nodejs\;C:\Program Files\Cloudflare\Cloudflare WARP\;C:\Users\BreizhHardware\AppData\Local\Microsoft\WindowsApps;C:\Users\BreizhHardware\AppData\Local\JetBrains\Toolbox\scripts;C:\Program Files (x86)\Nmap;C:\Users\BreizhHardware\AppData\Local\Microsoft\WindowsApps;C:\Users\BreizhHardware\AppData\Roaming\npm
|
||||
|
||||
Yarn version:
|
||||
1.22.19
|
||||
|
||||
Node version:
|
||||
18.18.2
|
||||
|
||||
Platform:
|
||||
win32 x64
|
||||
|
||||
Trace:
|
||||
Error: https://registry.yarnpkg.com/parcel-builder: Not found
|
||||
at params.callback [as _callback] (C:\Users\BreizhHardware\AppData\Roaming\npm\node_modules\yarn\lib\cli.js:66145:18)
|
||||
at self.callback (C:\Users\BreizhHardware\AppData\Roaming\npm\node_modules\yarn\lib\cli.js:140890:22)
|
||||
at Request.emit (node:events:517:28)
|
||||
at Request.<anonymous> (C:\Users\BreizhHardware\AppData\Roaming\npm\node_modules\yarn\lib\cli.js:141862:10)
|
||||
at Request.emit (node:events:517:28)
|
||||
at IncomingMessage.<anonymous> (C:\Users\BreizhHardware\AppData\Roaming\npm\node_modules\yarn\lib\cli.js:141784:12)
|
||||
at Object.onceWrapper (node:events:631:28)
|
||||
at IncomingMessage.emit (node:events:529:35)
|
||||
at endReadableNT (node:internal/streams/readable:1368:12)
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:82:21)
|
||||
|
||||
npm manifest:
|
||||
{
|
||||
"name": "sansdomainefixe.xyz",
|
||||
"version": "1.0.0",
|
||||
"main": "index.html",
|
||||
"license": "MIT"
|
||||
}
|
||||
|
||||
yarn manifest:
|
||||
No manifest
|
||||
|
||||
Lockfile:
|
||||
No lockfile
|
||||
Reference in New Issue
Block a user