Compare commits

...

2 commits

9 changed files with 281 additions and 83 deletions

166
.vscode/bookdetails-schema.json vendored Normal file
View file

@ -0,0 +1,166 @@
{
"$id": "bookdetails-schema.json#",
"default": {
"code": "ID3xx",
"title": "New book",
"desc": ["Nice", "A *new* book"],
"cover": {
"src": "",
"alt": ""
}
},
"properties": {
"code": {
"title": "Book code, follow the ID3xx pattern - Not used",
"type": "string",
"pattern": "^[A-Z0-9]{3}\\d{2}$"
},
"title": {
"type": "string",
"maxLength": 30
},
"author": {
"title": "Book authors",
"type": "array",
"maxLength": 5,
"items": {
"title": "Author",
"type": "string",
"examples": ["Neil Gailman", "Team Agate"]
},
"examples": [["Team Agate"], ["Neil Gailman", "Rachida Dati"]]
},
"desc": {
"title": "Book desc, markdown formated, each row is a paragraph.",
"type": "array"
},
"cover": {
"title": "Book cover",
"type": "object",
"required": ["src"],
"properties": {
"src": {
"title": "Source file path, in relative path",
"type": "string",
"format": "uri-reference",
"default": "",
"examples": ["img\\books\\ADV01_BC_FR.png"]
},
"alt": {
"type": "string",
"examples": ["ADV01_BC_FR"]
},
"title": {
"type": "string",
"examples": ["ADV01_BC_FR"]
}
},
"examples": [
{
"src": "img\\books\\ADV01_BC_FR.png",
"alt": "ADV01_BC_FR",
"title": "ADV01_BC_FR"
}
]
},
"published-date": {
"title": "The published-date Schema",
"type": "string",
"default": "",
"examples": ["01/04/2018"]
},
"cf-date": {
"title": "The cf-date Schema",
"type": "string",
"format": "date",
"default": "",
"examples": ["14/03/2016"]
},
"physical-link": {
"title": "The physical-link Schema",
"type": "object",
"default": {},
"required": ["title", "href"],
"properties": {
"title": {
"title": "The title Schema",
"type": "string",
"default": "",
"examples": ["Acheter un exemplaire"]
},
"href": {
"title": "The href Schema",
"type": "string",
"format":"uri",
"default": "",
"examples": [
"https://www.philibertnet.com/fr/dragons/62090-dragons-1-aventuriers-livre-de-base-9782919256365.html"
]
}
},
"examples": [
{
"title": "Acheter un exemplaire",
"href": "https://www.philibertnet.com/fr/dragons/62090-dragons-1-aventuriers-livre-de-base-9782919256365.html"
}
]
},
"pdf-link": {
"title": "The pdf-link Schema",
"type": "object",
"default": {},
"required": ["title", "href"],
"properties": {
"title": {
"title": "The title Schema",
"type": "string",
"default": "",
"examples": ["Acheter le pdf"]
},
"href": {
"title": "The href Schema",
"type": "string",
"default": "",
"examples": [
"https://www.drivethrurpg.com/product/422886/Dragons--1--Livre-de-base--Aventuriers"
]
}
},
"examples": [
{
"title": "Acheter le pdf",
"href": "https://www.drivethrurpg.com/product/422886/Dragons--1--Livre-de-base--Aventuriers"
}
]
},
"cf-link": {
"title": "The cf-link Schema",
"type": "object",
"default": {},
"required": ["title", "href"],
"properties": {
"title": {
"title": "The title Schema",
"type": "string",
"default": "",
"examples": ["Ulule"]
},
"href": {
"title": "The href Schema",
"type": "string",
"default": "",
"examples": ["https://fr.ulule.com/dragons-5e/"]
}
},
"examples": [
{
"title": "Ulule",
"href": "https://fr.ulule.com/dragons-5e/"
}
]
}
},
"additionalProperties": false,
"required": ["title", "desc", "cover"]
}

12
.vscode/books-schemas.json vendored Normal file
View file

@ -0,0 +1,12 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"patternProperties": {
"^[A-Z0-9]{3}\\d{2}$": {
"title": "Book code, follow the ID3xx pattern",
"type": "object",
"$ref": "bookdetails-schema.json#"
}
},
"additionalProperties": false
}

View file

@ -1,11 +1,16 @@
{ {
"json.schemas": [ "json.schemas": [
{ {
"fileMatch": [ "fileMatch": [
"data/spells/*.json" "data/spells/*.json"
], ],
"url": "/./.vscode/spells-schemas.json" "url": "/./.vscode/spells-schemas.json"
},
{
"fileMatch": [
"data/books*.json"
],
"url": "/./.vscode/books-schemas.json"
} }
], ],
"stenography.apiKey": "caac2b35-1682-4741-a409-d687f69d9767", "stenography.apiKey": "caac2b35-1682-4741-a409-d687f69d9767",

View file

@ -3,15 +3,14 @@
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Books - fateforge.tools</title> <title>Books - fateforge.tools</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/water.css@2/out/water.css" /> <link rel="stylesheet" href="css/water.css" />
<link href="css/all.min.css" rel="stylesheet" /> <link href="css/all.min.css" rel="stylesheet" />
<script src="lib/flickity.pkgd.min.js"></script> <script src="lib/flickity.pkgd.min.js"></script>
<script src="lib/flickity.hash.js"></script> <script src="lib/flickity.hash.js"></script>
<link rel="icon" type="image/x-icon" href="/img/FateforgeTool_logo_80.png" /> <link rel="icon" type="image/x-icon" href="/img/FateforgeTool_logo_80.png" />
</head> </head>
@ -31,14 +30,17 @@
<div class="gallery"></div> <div class="gallery"></div>
<div class="view-container" style="display: flex; align-items: center; flex-direction: column">
<div class="view-container" style="display: flex;align-items: center;flex-direction: column;">
<h1 id="book_title"></h1> <h1 id="book_title"></h1>
<i id="book_author" ></i>
<div class="view-container"> <div class="view-container">
<div><a target="_blank" id="book_cf-link"><i class="fa-solid fa-hand-holding-dollar icon" ></i></a><span class="view-details" id="cf-date"></span></div> <div>
<div class="view-container row"><a target="_blank" id="physical-link"><i class="fa-solid fa-cart-shopping icon"></i></a> <a target="_blank" id="book_cf-link"><i class="fa-solid fa-hand-holding-dollar icon"></i></a>
<a target="_blank" id="pdf-link"><i class="fa-solid fa-file-pdf icon"></i></a> <span class="view-details" id="book_cf-date"></span>
</div>
<div class="view-container row">
<a target="_blank" id="book_physical-link"><i class="fa-solid fa-cart-shopping icon"></i></a>
<a target="_blank" id="book_pdf-link"><i class="fa-solid fa-file-pdf icon"></i></a>
</div> </div>
</div> </div>
<div class="book-desc" id="book_desc"></div> <div class="book-desc" id="book_desc"></div>
@ -52,8 +54,7 @@
<script type="text/javascript" src="js/language.js"></script> <script type="text/javascript" src="js/language.js"></script>
<script type="module" src="js/books.js"></script> <script type="module" src="js/books.js"></script>
<script rel="preload" src="https://kit.fontawesome.com/126cdd0e29.js" crossorigin="anonymous"></script> <script rel="preload" src="lib/fontawesome.js" crossorigin="anonymous"></script>
</body> </body>
</html> </html>

View file

@ -12,7 +12,14 @@
"title":"Acheter un exemplaire", "title":"Acheter un exemplaire",
"href":"https://www.philibertnet.com/fr/dragons/62090-dragons-1-aventuriers-livre-de-base-9782919256365.html" "href":"https://www.philibertnet.com/fr/dragons/62090-dragons-1-aventuriers-livre-de-base-9782919256365.html"
}, },
"pdf-link": "https://www.drivethrurpg.com/product/422886/Dragons--1--Livre-de-base--Aventuriers", "pdf-link":{
"title":"Acheter le pdf",
"href":"https://www.drivethrurpg.com/product/422886/Dragons--1--Livre-de-base--Aventuriers"
},
"cf-link":{
"title":"Ulule",
"href":"https://fr.ulule.com/dragons-5e/"
},
"author": ["Agate Team"], "author": ["Agate Team"],
"published-date": "01/04/2018", "published-date": "01/04/2018",
"cf-date": "14/03/2016", "cf-date": "14/03/2016",

View file

@ -16,7 +16,7 @@
"title":"Acheter le pdf", "title":"Acheter le pdf",
"href":"https://www.drivethrurpg.com/product/422886/Dragons--1--Livre-de-base--Aventuriers" "href":"https://www.drivethrurpg.com/product/422886/Dragons--1--Livre-de-base--Aventuriers"
}, },
"cf-link:":{ "cf-link":{
"title":"Ulule", "title":"Ulule",
"href":"https://fr.ulule.com/dragons-5e/" "href":"https://fr.ulule.com/dragons-5e/"
}, },
@ -32,7 +32,7 @@
"CRE02": { "CRE02": {
"code": "CRE02", "code": "CRE02",
"title": "Créatures : Inframonde", "title": "Créatures : Inframonde",
"desc": ["*"], "desc": [],
"physical-link": { "physical-link": {
"title":"Acheter un exemplaire", "title":"Acheter un exemplaire",
"href":"" "href":""
@ -41,7 +41,7 @@
"title":"Acheter le pdf", "title":"Acheter le pdf",
"href":"https://www.drivethrurpg.com/product/422893/Dragons--5--Bestiaire--Creatures-2-Inframonde" "href":"https://www.drivethrurpg.com/product/422893/Dragons--5--Bestiaire--Creatures-2-Inframonde"
}, },
"cf-link:":{ "cf-link":{
"title":"Ulule", "title":"Ulule",
"href":"https://fr.ulule.com/dragons-creatures-de-l-inframonde/" "href":"https://fr.ulule.com/dragons-creatures-de-l-inframonde/"
}, },
@ -53,5 +53,15 @@
"alt": "CRE02_BC_FR", "alt": "CRE02_BC_FR",
"title": "CRE02_BC_FR" "title": "CRE02_BC_FR"
} }
},"ADV02":{
"code": "ID3xx",
"title": "New book",
"desc": [
"Nice",
"A *new* book"
],
"cover": ""
} }
} }

View file

@ -1,7 +1,7 @@
var lastbook; var lastbook;
var currentbook; var currentbook;
fetch("/lang/books-en.json") fetch("/data/books-en.json")
.then((response) => response.json()) .then((response) => response.json())
.then((data) => { .then((data) => {
console.log(data); console.log(data);
@ -31,17 +31,15 @@ fetch("/lang/books-en.json")
currentbook = document currentbook = document
.getElementsByClassName("gallery-cell is-selected")[0] .getElementsByClassName("gallery-cell is-selected")[0]
.getAttribute("id"); .getAttribute("id");
//TODO: Fill view-container with books
fillBookView(); fillBookView();
flkty.on("select", function(index) { flkty.on("select", function (index) {
currentbook = document currentbook = document
.getElementsByClassName("gallery-cell is-selected")[0] .getElementsByClassName("gallery-cell is-selected")[0]
.getAttribute("id"); .getAttribute("id");
if (currentbook == lastbook) { if (currentbook == lastbook) {
return; return;
} }
//TODO: Fill view-container with books
fillBookView(); fillBookView();
}); });
/*flkty.on("settle", function (index) { /*flkty.on("settle", function (index) {
@ -54,22 +52,17 @@ function fillBookView() {
var bookAttributes = [ var bookAttributes = [
"book_title", "book_title",
"book_desc", "book_desc",
"cf-date", "book_cf-date",
"physical-link", "book_physical-link",
"pdf-link", "book_pdf-link",
"book_cf-link", "book_cf-link",
"book_author"
]; ];
bookAttributes.forEach(function (attr) {
bookAttributes.forEach(function(attr) {
setLocalizeDataAttr(attr, currentbook + "." + attr.split("_")[1]); setLocalizeDataAttr(attr, currentbook + "." + attr.split("_")[1]);
}); });
setLocalizeDataAttr("view-title", currentbook + ".title");
setLocalizeDataAttr("view-desc", currentbook + ".desc");
setLocalizeDataAttr("cf-date", currentbook + ".cf-date");
setLocalizeDataAttr("physical-link", currentbook + ".physical-link");
setLocalizeDataAttr("pdf-link", currentbook + ".pdf-link");
setLocalizeDataAttr("cf-link", currentbook + ".cf-link");
lastbook = currentbook; lastbook = currentbook;
console.log(currentLang); console.log(currentLang);
//call to language.js
refreshBooks(); refreshBooks();
} }

View file

@ -15,7 +15,7 @@ function changeLangEN() {
function refreshBooks() { function refreshBooks() {
$("[data-localize]").localize("books", { $("[data-localize]").localize("books", {
pathPrefix: "lang", pathPrefix: "data",
language: currentLang, language: currentLang,
}); });
} }
@ -25,15 +25,17 @@ function refreshLoc() {
} }
// Function to fill a data-localize attribute and update DOM // Function to fill a data-localize attribute and update DOM
function setLocalizeDataAttr(className, dataValue) { function setLocalizeDataAttr(id, dataValue) {
$("#" + className) const all = $('[id="' + id + '"]');
.data("localize", dataValue) all.each(function() {
.attr("data-localize", dataValue); console.log(this.id)
$(this).data("localize", dataValue).attr("data-localize", dataValue);
});
} }
function localize(lang) { function localize(lang) {
$("[data-localize]") $("[data-localize]")
.localize("main", { pathPrefix: "lang", language: lang }) .localize("main", { pathPrefix: "lang", language: lang })
.localize("books", { pathPrefix: "lang", language: lang }); .localize("books", { pathPrefix: "data", language: lang });
currentLang=lang; currentLang=lang;
} }

2
lib/fontawesome.js Normal file

File diff suppressed because one or more lines are too long