Compare commits
12 commits
10ac885cb8
...
eea47d851d
Author | SHA1 | Date | |
---|---|---|---|
eea47d851d | |||
f034968c51 | |||
8da6559f73 | |||
acb87b0c50 | |||
e0e9246f32 | |||
b8786b2f47 | |||
270dd5ab19 | |||
89e6349c3f | |||
cbb0a652f7 | |||
7185f78eee | |||
7a2a243013 | |||
e6b6b93597 |
52
books.html
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>Books - fateforge.tools</title>
|
||||||
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/water.css@2/out/water.css" />
|
||||||
|
<link href="css/all.min.css" rel="stylesheet" />
|
||||||
|
|
||||||
|
<script src="lib/flickity.pkgd.min.js"></script>
|
||||||
|
<script src="lib/flickity.hash.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="icon" type="image/x-icon" href="/img/FateforgeTool_logo_80.png" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<button onclick="changeLangEN()">
|
||||||
|
<img src="img\flags\en-UK-400.png" width="20" />
|
||||||
|
English
|
||||||
|
</button>
|
||||||
|
<button onclick="changeLangFR()">
|
||||||
|
<img src="img\flags\fr-FR-400.png" width="20" />
|
||||||
|
Français
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<a href="index.html">
|
||||||
|
<h1>FateforgeTools</h1>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<div class="gallery"></div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="view-container" style="display: flex;align-items: center;flex-direction: column;">
|
||||||
|
<h1 id="view-title"></h1>
|
||||||
|
<p class="book-desc" id="view-desc"></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<link href="css/flickity.css" rel="stylesheet" />
|
||||||
|
<link href="css/style.css" rel="stylesheet" />
|
||||||
|
<script type="text/javascript" src="lib/showdown.js"></script>
|
||||||
|
<script type="text/javascript" src="lib/jquery.min.js"></script>
|
||||||
|
<script type="text/javascript" src="lib/jquery.localize-dev.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="js/language.js"></script>
|
||||||
|
<script type="module" src="js/books.js"></script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
137
css/flickity.css
Normal file
|
@ -0,0 +1,137 @@
|
||||||
|
/*! Flickity v2.3.0
|
||||||
|
https://flickity.metafizzy.co
|
||||||
|
---------------------------------------------- */
|
||||||
|
|
||||||
|
.flickity-enabled {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flickity-enabled:focus { outline: none; }
|
||||||
|
|
||||||
|
.flickity-viewport {
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flickity-slider {
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* draggable */
|
||||||
|
|
||||||
|
.flickity-enabled.is-draggable {
|
||||||
|
-webkit-tap-highlight-color: transparent;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flickity-enabled.is-draggable .flickity-viewport {
|
||||||
|
cursor: move;
|
||||||
|
cursor: -webkit-grab;
|
||||||
|
cursor: grab;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flickity-enabled.is-draggable .flickity-viewport.is-pointer-down {
|
||||||
|
cursor: -webkit-grabbing;
|
||||||
|
cursor: grabbing;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---- flickity-button ---- */
|
||||||
|
|
||||||
|
.flickity-button {
|
||||||
|
position: absolute;
|
||||||
|
background: hsla(0, 0%, 100%, 0.75);
|
||||||
|
border: none;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flickity-button:hover {
|
||||||
|
background: white;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flickity-button:focus {
|
||||||
|
outline: none;
|
||||||
|
box-shadow: 0 0 0 5px #19F;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flickity-button:active {
|
||||||
|
opacity: 0.6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flickity-button:disabled {
|
||||||
|
opacity: 0.3;
|
||||||
|
cursor: auto;
|
||||||
|
/* prevent disabled button from capturing pointer up event. #716 */
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flickity-button-icon {
|
||||||
|
fill: currentColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---- previous/next buttons ---- */
|
||||||
|
|
||||||
|
.flickity-prev-next-button {
|
||||||
|
top: 50%;
|
||||||
|
width: 44px;
|
||||||
|
height: 44px;
|
||||||
|
border-radius: 50%;
|
||||||
|
/* vertically center */
|
||||||
|
transform: translateY(-50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.flickity-prev-next-button.previous { left: 10px; }
|
||||||
|
.flickity-prev-next-button.next { right: 10px; }
|
||||||
|
/* right to left */
|
||||||
|
.flickity-rtl .flickity-prev-next-button.previous {
|
||||||
|
left: auto;
|
||||||
|
right: 10px;
|
||||||
|
}
|
||||||
|
.flickity-rtl .flickity-prev-next-button.next {
|
||||||
|
right: auto;
|
||||||
|
left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flickity-prev-next-button .flickity-button-icon {
|
||||||
|
position: absolute;
|
||||||
|
left: 20%;
|
||||||
|
top: 20%;
|
||||||
|
width: 60%;
|
||||||
|
height: 60%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---- page dots ---- */
|
||||||
|
|
||||||
|
.flickity-page-dots {
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
bottom: -25px;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
list-style: none;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flickity-rtl .flickity-page-dots { direction: rtl; }
|
||||||
|
|
||||||
|
.flickity-page-dots .dot {
|
||||||
|
display: inline-block;
|
||||||
|
width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
margin: 0 8px;
|
||||||
|
background: #333;
|
||||||
|
border-radius: 50%;
|
||||||
|
opacity: 0.25;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flickity-page-dots .dot.is-selected {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
135
css/style.css
|
@ -1,22 +1,146 @@
|
||||||
|
/**** BOOK 3D***/
|
||||||
|
*,
|
||||||
|
:after,
|
||||||
|
:before {
|
||||||
|
box-sizing: border-box;
|
||||||
|
border: 0 solid #e5e7eb;
|
||||||
|
}
|
||||||
|
|
||||||
|
* {
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.book-container {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
perspective: 600px;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.book-container .book {
|
||||||
|
width: 200px;
|
||||||
|
height: 300px;
|
||||||
|
position: relative;
|
||||||
|
transform-style: preserve-3d;
|
||||||
|
transform: rotateY(-30deg);
|
||||||
|
transition: transform 1s ease;
|
||||||
|
animation: 1s ease 0s 1 initAnimation-fd6a;
|
||||||
|
margin-bottom: 3px;
|
||||||
|
margin-top: 39px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.book-container .book > :first-child {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 200px;
|
||||||
|
height: 283px;
|
||||||
|
transform: translateZ(25px);
|
||||||
|
background-color: #01060f;
|
||||||
|
border-radius: 0 2px 2px 0;
|
||||||
|
box-shadow: 5px 5px 20px #aaaaaa9d;
|
||||||
|
background-color: #01060f;
|
||||||
|
}
|
||||||
|
|
||||||
|
.book-container .book::before {
|
||||||
|
position: absolute;
|
||||||
|
content: " ";
|
||||||
|
left: 0;
|
||||||
|
top: 3px;
|
||||||
|
width: 48px;
|
||||||
|
height: 277px;
|
||||||
|
transform: translateX(172px) rotateY(90deg);
|
||||||
|
background: linear-gradient(
|
||||||
|
90deg,
|
||||||
|
#fff 0%,
|
||||||
|
#f9f9f9 5%,
|
||||||
|
#fff 10%,
|
||||||
|
#f9f9f9 15%,
|
||||||
|
#fff 20%,
|
||||||
|
#f9f9f9 25%,
|
||||||
|
#fff 30%,
|
||||||
|
#f9f9f9 35%,
|
||||||
|
#fff 40%,
|
||||||
|
#f9f9f9 45%,
|
||||||
|
#fff 50%,
|
||||||
|
#f9f9f9 55%,
|
||||||
|
#fff 60%,
|
||||||
|
#f9f9f9 65%,
|
||||||
|
#fff 70%,
|
||||||
|
#f9f9f9 75%,
|
||||||
|
#fff 80%,
|
||||||
|
#f9f9f9 85%,
|
||||||
|
#fff 90%,
|
||||||
|
#f9f9f9 95%,
|
||||||
|
#fff 100%
|
||||||
|
);
|
||||||
|
}
|
||||||
|
.book-container .book:hover {
|
||||||
|
transform: rotateY(0deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.book-container .book::after {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
content: " ";
|
||||||
|
width: 200px;
|
||||||
|
height: 283px;
|
||||||
|
transform: translateZ(-25px);
|
||||||
|
background-color: #01060f;
|
||||||
|
border-radius: 0 2px 2px 0;
|
||||||
|
box-shadow: -05px 0 20px 10px #aaaaaa9d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.book-container .book-title {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**** Slideshow***/
|
||||||
|
|
||||||
|
.gallery {
|
||||||
|
background: #01060f00;
|
||||||
|
margin-bottom: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gallery-cell {
|
||||||
|
width: 66%;
|
||||||
|
|
||||||
|
margin-right: 10px;
|
||||||
|
|
||||||
|
counter-increment: gallery-cell;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flickity-viewport {
|
||||||
|
background-color: #01060f00;
|
||||||
|
}
|
||||||
|
.flickity-page-dots .dot {
|
||||||
|
background: #0093cd;
|
||||||
|
}
|
||||||
|
.flickity-prev-next-button {
|
||||||
|
border-radius: 6px;
|
||||||
|
}
|
||||||
|
.flickity-button {
|
||||||
|
background: #588597;
|
||||||
|
}
|
||||||
.container {
|
.container {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: stretch;
|
align-items: stretch;
|
||||||
}
|
|
||||||
|
|
||||||
|
}
|
||||||
.list-col{
|
.list-col{
|
||||||
flex-grow: 2;
|
flex-grow: 2;
|
||||||
min-width: 600px;
|
min-width: 600px;
|
||||||
}
|
}
|
||||||
.view-col {
|
.view-col {
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@media screen and (min-width: 768px) {
|
@media screen and (min-width: 768px) {
|
||||||
.list-col {
|
|
||||||
|
|
||||||
|
.list-col {
|
||||||
margin-right: 1%;
|
margin-right: 1%;
|
||||||
}
|
}
|
||||||
.view-col {
|
.view-col {
|
||||||
|
@ -29,11 +153,10 @@
|
||||||
color: black;
|
color: black;
|
||||||
word-wrap: normal;
|
word-wrap: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
.w2ui-grid .w2ui-grid-body table td.w2ui-grid-data > div {
|
.w2ui-grid .w2ui-grid-body table td.w2ui-grid-data > div {
|
||||||
overflow: visible;
|
overflow: visible;
|
||||||
white-space: break-spaces;
|
white-space: break-spaces;
|
||||||
}
|
}
|
||||||
|
|
||||||
.w2ui-grid .w2ui-grid-body table {
|
.w2ui-grid .w2ui-grid-body table {
|
||||||
|
|
||||||
}
|
}
|
64
data/spells/spells-grimoire.json
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
{ "spell": [ {
|
||||||
|
"name": "Acid Splash",
|
||||||
|
"source": "PHB",
|
||||||
|
"page": 211,
|
||||||
|
"srd": true,
|
||||||
|
"basicRules": true,
|
||||||
|
"level": 0,
|
||||||
|
"school": "C",
|
||||||
|
"time": [
|
||||||
|
{
|
||||||
|
"number": 1,
|
||||||
|
"unit": "action"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"range": {
|
||||||
|
"type": "point",
|
||||||
|
"distance": {
|
||||||
|
"type": "feet",
|
||||||
|
"amount": 60
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"components": {
|
||||||
|
"v": true,
|
||||||
|
"s": true
|
||||||
|
},
|
||||||
|
"duration": [
|
||||||
|
{
|
||||||
|
"type": "instant"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"entries": [
|
||||||
|
"You hurl a bubble of acid. Choose one creature you can see within range, or choose two creatures you can see within range that are within 5 feet of each other. A target must succeed on a Dexterity saving throw or take {@damage 1d6} acid damage.",
|
||||||
|
"This spell's damage increases by {@dice 1d6} when you reach 5th level ({@damage 2d6}), 11th level ({@damage 3d6}), and 17th level ({@damage 4d6})."
|
||||||
|
],
|
||||||
|
"scalingLevelDice": {
|
||||||
|
"label": "acid damage",
|
||||||
|
"scaling": {
|
||||||
|
"1": "1d6",
|
||||||
|
"5": "2d6",
|
||||||
|
"11": "3d6",
|
||||||
|
"17": "4d6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"damageInflict": [
|
||||||
|
"acid"
|
||||||
|
],
|
||||||
|
"savingThrow": [
|
||||||
|
"dexterity"
|
||||||
|
],
|
||||||
|
"miscTags": [
|
||||||
|
"SCL",
|
||||||
|
"SGT"
|
||||||
|
],
|
||||||
|
"areaTags": [
|
||||||
|
"ST",
|
||||||
|
"MT"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
]
|
||||||
|
|
||||||
|
}
|
BIN
img/books/ADV1_BC_EN.png
Normal file
After Width: | Height: | Size: 2.8 MiB |
BIN
img/books/ADV1_BC_FR.png
Normal file
After Width: | Height: | Size: 3.2 MiB |
BIN
img/books/ADV1_BC_Textless.png
Normal file
After Width: | Height: | Size: 3.3 MiB |
BIN
img/books/ADV1_RD_Textless.png
Normal file
After Width: | Height: | Size: 3.2 MiB |
BIN
img/books/Box_DR.jpg
Normal file
After Width: | Height: | Size: 342 KiB |
BIN
img/books/Box_DR_2.jpg
Normal file
After Width: | Height: | Size: 224 KiB |
BIN
img/books/Box_GV.jpg
Normal file
After Width: | Height: | Size: 401 KiB |
BIN
img/books/Box_GV_2.jpg
Normal file
After Width: | Height: | Size: 401 KiB |
BIN
img/books/Box_GV_3.jpg
Normal file
After Width: | Height: | Size: 198 KiB |
BIN
img/books/CRE1_BC_EN.png
Normal file
After Width: | Height: | Size: 2.8 MiB |
BIN
img/books/CRE1_BC_FR.png
Normal file
After Width: | Height: | Size: 3 MiB |
BIN
img/books/CRE1_RD_EN.png
Normal file
After Width: | Height: | Size: 3.3 MiB |
BIN
img/books/CRE1_RD_Textless.png
Normal file
After Width: | Height: | Size: 3.1 MiB |
BIN
img/books/CRE2_BC_EN.png
Normal file
After Width: | Height: | Size: 2.9 MiB |
BIN
img/books/CRE2_BC_FR.png
Normal file
After Width: | Height: | Size: 2.9 MiB |
BIN
img/books/CRE2_DR_FR.png
Normal file
After Width: | Height: | Size: 3.1 MiB |
BIN
img/books/ECR_GV.jpg
Normal file
After Width: | Height: | Size: 206 KiB |
BIN
img/books/ENC1_BC_EN.png
Normal file
After Width: | Height: | Size: 2.4 MiB |
BIN
img/books/ENC1_BC_FR.png
Normal file
After Width: | Height: | Size: 2.7 MiB |
BIN
img/books/GRI1_BC_EN.png
Normal file
After Width: | Height: | Size: 3.1 MiB |
BIN
img/books/GRI1_BC_FR.png
Normal file
After Width: | Height: | Size: 3.5 MiB |
BIN
img/books/GRI1_BC_Textless.png
Normal file
After Width: | Height: | Size: 2.9 MiB |
BIN
img/books/GRI1_RD_FR.png
Normal file
After Width: | Height: | Size: 2.8 MiB |
BIN
img/books/GRI1_RD_Textless.png
Normal file
After Width: | Height: | Size: 2 MiB |
BIN
img/books/GUI1_BC_EN.png
Normal file
After Width: | Height: | Size: 2.7 MiB |
BIN
img/books/GUI1_BC_FR.png
Normal file
After Width: | Height: | Size: 2.8 MiB |
BIN
img/books/GUI2_BC_FR.png
Normal file
After Width: | Height: | Size: 3.5 MiB |
BIN
img/books/LEG1_BC_FR.png
Normal file
After Width: | Height: | Size: 3 MiB |
BIN
img/books/LEG2_BC_EN.png
Normal file
After Width: | Height: | Size: 2.3 MiB |
BIN
img/books/LEG2_BC_FR.png
Normal file
After Width: | Height: | Size: 3 MiB |
BIN
img/books/LEG2_BC_Textless.png
Normal file
After Width: | Height: | Size: 2.8 MiB |
BIN
img/books/LEG3_BC_EN.png
Normal file
After Width: | Height: | Size: 3.1 MiB |
BIN
img/books/LEG3_BC_FR.png
Normal file
After Width: | Height: | Size: 3.2 MiB |
BIN
img/books/LEG4_BC_EN.png
Normal file
After Width: | Height: | Size: 2.6 MiB |
BIN
img/books/LEG4_BC_FR.png
Normal file
After Width: | Height: | Size: 2.7 MiB |
BIN
img/books/LEG6_BC_FR.png
Normal file
After Width: | Height: | Size: 2.5 MiB |
BIN
img/flags/en-UK-400.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
img/flags/fr-FR-400.png
Normal file
After Width: | Height: | Size: 337 B |
|
@ -9,7 +9,7 @@
|
||||||
<link rel="icon" type="image/png" href="/img/FateforgeTool_logo_80.png">
|
<link rel="icon" type="image/png" href="/img/FateforgeTool_logo_80.png">
|
||||||
|
|
||||||
<script type="text/javascript" src="lib/jquery.min.js"></script>
|
<script type="text/javascript" src="lib/jquery.min.js"></script>
|
||||||
<script type="text/javascript" src="lib/jquery.localize.js"></script>
|
<script type="text/javascript" src="lib/jquery.localize-dev.js"></script>
|
||||||
|
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
@ -17,7 +17,7 @@
|
||||||
<body>
|
<body>
|
||||||
<header>
|
<header>
|
||||||
<button onclick="changeLangEN()">English</button>
|
<button onclick="changeLangEN()">English</button>
|
||||||
<button onclick="changeLangFR()">French</button>
|
<button onclick="changeLangFR()">🇫🇷 Français</button>
|
||||||
|
|
||||||
<a href="index.html">
|
<a href="index.html">
|
||||||
<h1>FateforgeTools</h1>
|
<h1>FateforgeTools</h1>
|
||||||
|
@ -40,6 +40,10 @@
|
||||||
<div><i class="fa-solid fa-hand-sparkles"></i></div>
|
<div><i class="fa-solid fa-hand-sparkles"></i></div>
|
||||||
<div data-localize="btn-items">items</div>
|
<div data-localize="btn-items">items</div>
|
||||||
</button>
|
</button>
|
||||||
|
<button onclick="window.location.href='books.html';">
|
||||||
|
<div><i class="fa-solid fa-book"></i></div>
|
||||||
|
<div data-localize="btn-books">books</div>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="footer"></div>
|
<div id="footer"></div>
|
||||||
|
|
52
js/books.js
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
import data from "/lang/books-en.json" assert { type: "json" };
|
||||||
|
console.log(data);
|
||||||
|
|
||||||
|
const gallery = document.getElementsByClassName("gallery")[0];
|
||||||
|
|
||||||
|
for (const key in data) {
|
||||||
|
console.log(data[key].code, data[key].title, data[key].cover);
|
||||||
|
var bookHTML = `<div class="gallery-cell" id="${data[key].code}">
|
||||||
|
<div class="book-container">
|
||||||
|
<div class="book">
|
||||||
|
<img data-localize="${data[key].code}.cover" />
|
||||||
|
</div>
|
||||||
|
<div data-localize="${data[key].code}.title" class="book-title">${data[key].title}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
gallery.insertAdjacentHTML("afterbegin", bookHTML);
|
||||||
|
};
|
||||||
|
var lastbook;
|
||||||
|
var currentbook;
|
||||||
|
var flkty = new Flickity(".gallery", {
|
||||||
|
freeScroll: true,
|
||||||
|
wrapAround: true,
|
||||||
|
hash: true, // options
|
||||||
|
});
|
||||||
|
refreshBooks();
|
||||||
|
currentbook = document.getElementsByClassName("gallery-cell is-selected")[0].getAttribute("id");
|
||||||
|
//TODO: Fill view-container with books
|
||||||
|
fillBookView();
|
||||||
|
|
||||||
|
flkty.on("select", function (index) {
|
||||||
|
currentbook = document.getElementsByClassName("gallery-cell is-selected")[0].getAttribute("id");
|
||||||
|
if (currentbook == lastbook) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//TODO: Fill view-container with books
|
||||||
|
fillBookView();
|
||||||
|
});
|
||||||
|
/*flkty.on("settle", function (index) {
|
||||||
|
console.log("Flickity settled at " + index);
|
||||||
|
refreshBooks();
|
||||||
|
});*/
|
||||||
|
|
||||||
|
function fillBookView(){
|
||||||
|
setLocalizeDataAttr("view-title", currentbook + ".title");
|
||||||
|
setLocalizeDataAttr("view-desc", currentbook + ".desc");
|
||||||
|
|
||||||
|
|
||||||
|
lastbook = currentbook;
|
||||||
|
console.log(currentLang);
|
||||||
|
refreshBooks();
|
||||||
|
}
|
|
@ -1,13 +1,46 @@
|
||||||
// this code localizes all elements with a "data-localize" attribute
|
// In a browser where the language is set to French
|
||||||
|
$("[data-localize]")
|
||||||
$("[data-localize]").localize("main", { pathPrefix: "lang" });
|
.localize("main", { pathPrefix: "lang" })
|
||||||
|
.localize("books", { pathPrefix: "lang" });
|
||||||
// You can also override the language detection and specify a language code. This code defines a function that sets the language to French.
|
var currentLang;
|
||||||
|
// You can also override the language detection, and pass in a language code
|
||||||
|
//$("[data-localize]").localize("main", { language: "fr" });
|
||||||
function changeLangFR() {
|
function changeLangFR() {
|
||||||
$("[data-localize]").localize("main", { pathPrefix: "lang", language: "fr" });
|
$("[data-localize]")
|
||||||
|
.localize("main", {
|
||||||
|
pathPrefix: "lang",
|
||||||
|
language: "fr",
|
||||||
|
})
|
||||||
|
.localize("books", {
|
||||||
|
pathPrefix: "lang",
|
||||||
|
language: "fr",
|
||||||
|
});
|
||||||
|
currentLang = "fr";
|
||||||
}
|
}
|
||||||
|
|
||||||
// This code defines a function that sets the language to English.
|
// This code defines a function that sets the language to English.
|
||||||
function changeLangEN() {
|
function changeLangEN() {
|
||||||
$("[data-localize]").localize("main", { pathPrefix: "lang", language: "en" });
|
$("[data-localize]")
|
||||||
|
.localize("main", {
|
||||||
|
pathPrefix: "lang",
|
||||||
|
language: "en",
|
||||||
|
})
|
||||||
|
.localize("books", {
|
||||||
|
pathPrefix: "lang",
|
||||||
|
language: "en",
|
||||||
|
});
|
||||||
|
currentLang = "en";
|
||||||
|
}
|
||||||
|
|
||||||
|
function refreshBooks() {
|
||||||
|
|
||||||
|
$("[data-localize]").localize("books", {
|
||||||
|
pathPrefix: "lang",
|
||||||
|
language: currentLang,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Function to fill a data-localize attribute and update DOM
|
||||||
|
function setLocalizeDataAttr(className, dataValue) {
|
||||||
|
$("#" + className).data("localize", dataValue).attr("data-localize", dataValue);
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ fetch(jsonsource)
|
||||||
header: false,
|
header: false,
|
||||||
toolbar: true,
|
toolbar: true,
|
||||||
footer: false,
|
footer: false,
|
||||||
selectColumn: true,
|
/* selectColumn: true, */
|
||||||
},
|
},
|
||||||
multiSelect: true,
|
multiSelect: true,
|
||||||
liveSearch: true,
|
liveSearch: true,
|
||||||
|
|
38
lang/books-en.json
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
{
|
||||||
|
"ADV1": {
|
||||||
|
"code": "ADV1",
|
||||||
|
"title": "Adventurers",
|
||||||
|
"desc": [
|
||||||
|
"*Découvrez l’univers d’Eana et ses multiples civilisations hautes en couleur, retrouvez les portails perdus des Voyageurs, gravissez les marches de la Forge du destin et mesurez-vous aux Dragons-dieux !* **Aventuriers** est le premier volume de la gamme de jeu de rôle Dragons. Destiné aux joueurs et au meneur, il se compose de trois parties :",
|
||||||
|
"**Création de personnage.** Déterminez avec votre meneur dans quelles conditions votre personnage accède à l’éveil à la magie, et faites votre choix parmi toutes les options qui s’offrent à vous, notamment : neuf espèces jouables ; dix-huit civilisations ; un pas-à-pas pour concevoir des historiques personnalisés ; treize classes – dont le lettré, un érudit inventif et capable d’agir même dans les régions privées de magie ; de nombreux dons pour accompagner l’évolution de votre héros.",
|
||||||
|
"**Vie quotidienne.** Découvrez la mythique Cité franche, ainsi que toutes les règles permettant de donner corps aux voyages et à la vie quotidienne. Le mystère, l’exploration et la découverte sont au cœur de l’expérience du jeu. Que vous vous déplaciez à pied, en bateau ou en nefélytre, répondez à l’appel de l’aventure !",
|
||||||
|
"**Règles du jeu.** Le système est organisé autour de quatre pôles : les caractéristiques, l’aventure, le combat et la santé. Les règles optionnelles sont présentées à l’aide d’un système modulaire permettant à chaque meneur de définir son propre style de jeu."
|
||||||
|
],
|
||||||
|
"physical-link": "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",
|
||||||
|
"author": ["Team Agate"],
|
||||||
|
"published-date": "01/04/2018",
|
||||||
|
"cf-date": "14/03/2016",
|
||||||
|
"cover":{
|
||||||
|
"src": "img\\books\\ADV1_BC_EN.png",
|
||||||
|
"alt": "ADV1_BC_EN",
|
||||||
|
"title": "ADV1_BC_EN"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"CRE2": {
|
||||||
|
"book": "<div class='book'> <img src='img\\books\\CRE2_BC_EN.png'></div><div class='book-title'>Creature : Netherworld</div>",
|
||||||
|
"code": "CRE2",
|
||||||
|
"title": "Creatures : Netherworld",
|
||||||
|
"desc": ["*"],
|
||||||
|
"physical-link": "",
|
||||||
|
"pdf-link": "",
|
||||||
|
"author": ["Team Agate"],
|
||||||
|
"published-date": "",
|
||||||
|
"cf-date": "",
|
||||||
|
"cover": {
|
||||||
|
"src": "img\\books\\CRE2_BC_EN.png",
|
||||||
|
"alt": "CRE2_BC_EN",
|
||||||
|
"title": "CRE2_BC_EN"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
38
lang/books-fr.json
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
{
|
||||||
|
"ADV1": {
|
||||||
|
"code": "ADV1",
|
||||||
|
"title": "Aventuriers",
|
||||||
|
"desc": [
|
||||||
|
"*Découvrez l’univers d’Eana et ses multiples civilisations hautes en couleur, retrouvez les portails perdus des Voyageurs, gravissez les marches de la Forge du destin et mesurez-vous aux Dragons-dieux !* **Aventuriers** est le premier volume de la gamme de jeu de rôle Dragons. Destiné aux joueurs et au meneur, il se compose de trois parties :",
|
||||||
|
"**Création de personnage.** Déterminez avec votre meneur dans quelles conditions votre personnage accède à l’éveil à la magie, et faites votre choix parmi toutes les options qui s’offrent à vous, notamment : neuf espèces jouables ; dix-huit civilisations ; un pas-à-pas pour concevoir des historiques personnalisés ; treize classes – dont le lettré, un érudit inventif et capable d’agir même dans les régions privées de magie ; de nombreux dons pour accompagner l’évolution de votre héros.",
|
||||||
|
"**Vie quotidienne.** Découvrez la mythique Cité franche, ainsi que toutes les règles permettant de donner corps aux voyages et à la vie quotidienne. Le mystère, l’exploration et la découverte sont au cœur de l’expérience du jeu. Que vous vous déplaciez à pied, en bateau ou en nefélytre, répondez à l’appel de l’aventure !",
|
||||||
|
"**Règles du jeu.** Le système est organisé autour de quatre pôles : les caractéristiques, l’aventure, le combat et la santé. Les règles optionnelles sont présentées à l’aide d’un système modulaire permettant à chaque meneur de définir son propre style de jeu."
|
||||||
|
],
|
||||||
|
"physical-link": "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",
|
||||||
|
"author": ["Team Agate"],
|
||||||
|
"published-date": "01/04/2018",
|
||||||
|
"cf-date": "14/03/2016",
|
||||||
|
"cover":{
|
||||||
|
"src": "img\\books\\ADV1_BC_FR.png",
|
||||||
|
"alt": "ADV1_BC_FR",
|
||||||
|
"title": "ADV1_BC_FR"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"CRE2": {
|
||||||
|
"code": "CRE2",
|
||||||
|
"title": "Créatures : Inframonde",
|
||||||
|
"desc": ["*"],
|
||||||
|
"physical-link": "",
|
||||||
|
"pdf-link": "",
|
||||||
|
"author": ["Team Agate"],
|
||||||
|
"published-date": "",
|
||||||
|
"cf-date": "",
|
||||||
|
"cover": {
|
||||||
|
"src": "img\\books\\CRE2_BC_FR.png",
|
||||||
|
"alt": "CRE2_BC_FR",
|
||||||
|
"title": "CRE2_BC_FR"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"book-CRE2": "<div class='book'> <img src='img\\books\\CRE2_BC_FR.png'></div><div class='book-title'>Créature : Inframonde</div>"
|
||||||
|
}
|
|
@ -13,6 +13,6 @@
|
||||||
"somatic": "Somatic",
|
"somatic": "Somatic",
|
||||||
"gridColumns":{
|
"gridColumns":{
|
||||||
"components": "Components"
|
"components": "Components"
|
||||||
}
|
},
|
||||||
|
"btn-books": "Books"
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
"btn-spells": "Sorts",
|
"btn-spells": "Sorts",
|
||||||
"btn-monsters": "Créatures",
|
"btn-monsters": "Créatures",
|
||||||
"btn-items": "Objets Magiques",
|
"btn-items": "Objets Magiques",
|
||||||
|
"btn-books": "Livres",
|
||||||
"CUVD": "Site non-officiel pour Dragons. Utilise des contenus protégés par la propriété intellectuelle © Agate RPG, avec l’aimable permission de l’éditeur dans le cadre de la licence CUVD.",
|
"CUVD": "Site non-officiel pour Dragons. Utilise des contenus protégés par la propriété intellectuelle © Agate RPG, avec l’aimable permission de l’éditeur dans le cadre de la licence CUVD.",
|
||||||
"link": "Rejoignez la communauté : <a href='www.dragons-rpg.com'>www.dragons-rpg.com</a>",
|
"link": "Rejoignez la communauté : <a href='www.dragons-rpg.com'>www.dragons-rpg.com</a>",
|
||||||
"verbal": "Verbale",
|
"verbal": "Verbale",
|
||||||
|
|
121
lib/flickity.hash.js
Normal file
|
@ -0,0 +1,121 @@
|
||||||
|
/*!
|
||||||
|
* Flickity hash v1.0.3
|
||||||
|
* Enable hash navigation for Flickity
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*jshint browser: true, undef: true, unused: true, strict: true*/
|
||||||
|
|
||||||
|
( function( window, factory ) {
|
||||||
|
// universal module definition
|
||||||
|
/*jshint strict: false */ /*globals define, module, require */
|
||||||
|
if ( typeof define == 'function' && define.amd ) {
|
||||||
|
// AMD
|
||||||
|
define( [
|
||||||
|
'flickity/js/index',
|
||||||
|
], factory );
|
||||||
|
} else if ( typeof module == 'object' && module.exports ) {
|
||||||
|
// CommonJS
|
||||||
|
module.exports = factory(
|
||||||
|
require('flickity')
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
// browser global
|
||||||
|
factory(
|
||||||
|
window.Flickity
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}( window, function factory( Flickity ) {
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
Flickity.createMethods.push('_createHash');
|
||||||
|
|
||||||
|
var proto = Flickity.prototype;
|
||||||
|
|
||||||
|
proto._createHash = function() {
|
||||||
|
if ( !this.options.hash ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.connectedHashLinks = [];
|
||||||
|
// hash link listener
|
||||||
|
// use HTML5 history pushState to prevent page scroll jump
|
||||||
|
this.onHashLinkClick = function( event ) {
|
||||||
|
event.preventDefault();
|
||||||
|
this.selectCell( event.currentTarget.hash );
|
||||||
|
history.replaceState( null, '', event.currentTarget.hash );
|
||||||
|
}.bind( this );
|
||||||
|
|
||||||
|
// events
|
||||||
|
this.on( 'activate', this.activateHash );
|
||||||
|
this.on( 'deactivate', this.deactivateHash );
|
||||||
|
};
|
||||||
|
|
||||||
|
proto.activateHash = function() {
|
||||||
|
this.on( 'change', this.onChangeHash );
|
||||||
|
|
||||||
|
// overwrite initialIndex
|
||||||
|
if ( this.options.initialIndex === undefined && location.hash ) {
|
||||||
|
var cell = this.queryCell( location.hash );
|
||||||
|
if ( cell ) {
|
||||||
|
this.options.initialIndex = this.getCellSlideIndex( cell );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.connectHashLinks();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
proto.deactivateHash = function() {
|
||||||
|
this.off( 'change', this.onChangeHash );
|
||||||
|
this.disconnectHashLinks();
|
||||||
|
};
|
||||||
|
|
||||||
|
proto.onChangeHash = function() {
|
||||||
|
var id = this.selectedElement.id;
|
||||||
|
if ( id ) {
|
||||||
|
var url = '#' + id;
|
||||||
|
history.replaceState( null, '', url );
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
proto.connectHashLinks = function() {
|
||||||
|
var links = document.querySelectorAll('a');
|
||||||
|
for ( var i=0; i < links.length; i++ ) {
|
||||||
|
this.connectHashLink( links[i] );
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// used to test if link is on same page
|
||||||
|
var proxyLink = document.createElement('a');
|
||||||
|
|
||||||
|
proto.connectHashLink = function( link ) {
|
||||||
|
if ( !link.hash ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// check that link is for the same page
|
||||||
|
proxyLink.href = link.href;
|
||||||
|
if ( proxyLink.pathname != location.pathname ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var cell = this.queryCell( link.hash );
|
||||||
|
if ( !cell ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
link.addEventListener( 'click', this.onHashLinkClick );
|
||||||
|
this.connectedHashLinks.push( link );
|
||||||
|
};
|
||||||
|
|
||||||
|
proto.disconnectHashLinks = function() {
|
||||||
|
this.connectedHashLinks.forEach( function( link ) {
|
||||||
|
link.removeEventListener( 'click', this.onHashLinkClick );
|
||||||
|
}, this );
|
||||||
|
this.connectedHashLinks = [];
|
||||||
|
};
|
||||||
|
|
||||||
|
// ----- ----- //
|
||||||
|
|
||||||
|
return Flickity;
|
||||||
|
|
||||||
|
}));
|
56
lib/flickity.pkgd.min.js
vendored
Normal file
|
@ -87,8 +87,11 @@ http://keith-wood.name/localisation.html
|
||||||
notifyDelegateLanguageLoaded(intermediateLangData);
|
notifyDelegateLanguageLoaded(intermediateLangData);
|
||||||
return loadLanguage(pkg, lang, level + 1);
|
return loadLanguage(pkg, lang, level + 1);
|
||||||
};
|
};
|
||||||
errorFunc = function () {
|
errorFunc = function (xhr, status, error) {
|
||||||
if (level === 2 && lang.indexOf("-") > -1) {
|
if (status === "error" && xhr.status === 404) {
|
||||||
|
// Le fichier n'existe pas
|
||||||
|
console.log("Le fichier " + file + " n'existe pas.");
|
||||||
|
} else if (level === 2 && lang.indexOf("-") > -1) {
|
||||||
return loadLanguage(pkg, lang, level + 1);
|
return loadLanguage(pkg, lang, level + 1);
|
||||||
} else if (options.fallback && options.fallback !== lang) {
|
} else if (options.fallback && options.fallback !== lang) {
|
||||||
return loadLanguage(pkg, options.fallback);
|
return loadLanguage(pkg, options.fallback);
|
||||||
|
@ -101,6 +104,11 @@ http://keith-wood.name/localisation.html
|
||||||
timeout: options.timeout != null ? options.timeout : 500,
|
timeout: options.timeout != null ? options.timeout : 500,
|
||||||
success: successFunc,
|
success: successFunc,
|
||||||
error: errorFunc,
|
error: errorFunc,
|
||||||
|
statusCode: {
|
||||||
|
404: function() {
|
||||||
|
console.log("Le fichier " + file + " n'existe pas.");
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
if (window.location.protocol === "file:") {
|
if (window.location.protocol === "file:") {
|
||||||
ajaxOptions.error = function (xhr) {
|
ajaxOptions.error = function (xhr) {
|
||||||
|
@ -138,6 +146,14 @@ http://keith-wood.name/localisation.html
|
||||||
localizeImageElement(elem, key, value);
|
localizeImageElement(elem, key, value);
|
||||||
} else if (elem.is("optgroup")) {
|
} else if (elem.is("optgroup")) {
|
||||||
localizeOptgroupElement(elem, key, value);
|
localizeOptgroupElement(elem, key, value);
|
||||||
|
} else if ($.isArray(value)) {
|
||||||
|
elem.empty();
|
||||||
|
for (const key in value) {
|
||||||
|
var converter = new showdown.Converter(),
|
||||||
|
text = value[key],
|
||||||
|
converted = converter.makeHtml(text);
|
||||||
|
elem.append(converted);
|
||||||
|
}
|
||||||
} else if (!$.isPlainObject(value)) {
|
} else if (!$.isPlainObject(value)) {
|
||||||
elem.html(value);
|
elem.html(value);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
/*! Localize - v0.2.0 - 2016-10-13
|
|
||||||
* https://github.com/coderifous/jquery-localize
|
|
||||||
* Copyright (c) 2016 coderifous; Licensed MIT */
|
|
||||||
!function(a){var b;return b=function(a){return a=a.replace(/_/,"-").toLowerCase(),a.length>3&&(a=a.substring(0,3)+a.substring(3).toUpperCase()),a},a.defaultLanguage=b(navigator.languages&&navigator.languages.length>0?navigator.languages[0]:navigator.language||navigator.userLanguage),a.localize=function(c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;return null==d&&(d={}),v=this,h={},g=d.fileExtension||"json",f=a.Deferred(),k=function(a,b,c){var e;switch(null==c&&(c=1),c){case 1:return h={},d.loadBase?(e=a+("."+g),i(e,a,b,c)):k(a,b,2);case 2:return e=""+a+"-"+b.split("-")[0]+"."+g,i(e,a,b,c);case 3:return e=""+a+"-"+b.split("-").slice(0,2).join("-")+"."+g,i(e,a,b,c);default:return f.resolve()}},i=function(b,c,e,f){var g,i,j;return null!=d.pathPrefix&&(b=""+d.pathPrefix+"/"+b),j=function(b){return a.extend(h,b),q(h),k(c,e,f+1)},i=function(){return 2===f&&e.indexOf("-")>-1?k(c,e,f+1):d.fallback&&d.fallback!==e?k(c,d.fallback):void 0},g={url:b,dataType:"json",async:!0,timeout:null!=d.timeout?d.timeout:500,success:j,error:i},"file:"===window.location.protocol&&(g.error=function(b){return j(a.parseJSON(b.responseText))}),a.ajax(g)},q=function(a){return null!=d.callback?d.callback(a,e):e(a)},e=function(b){return a.localize.data[c]=b,v.each(function(){var c,d,e;return c=a(this),d=c.data("localize"),d||(d=c.attr("rel").match(/localize\[(.*?)\]/)[1]),e=u(d,b),null!=e?l(c,d,e):void 0})},l=function(b,c,d){return b.is("input")?o(b,c,d):b.is("textarea")?o(b,c,d):b.is("img")?n(b,c,d):b.is("optgroup")?p(b,c,d):a.isPlainObject(d)||b.html(d),a.isPlainObject(d)?m(b,d):void 0},o=function(b,c,d){var e;return e=a.isPlainObject(d)?d.value:d,b.is("[placeholder]")?b.attr("placeholder",e):b.val(e)},m=function(a,b){return s(a,"title",b),s(a,"href",b),t(a,"text",b)},p=function(a,b,c){return a.attr("label",c)},n=function(a,b,c){return s(a,"alt",c),s(a,"src",c)},u=function(a,b){var c,d,e,f;for(c=a.split(/\./),d=b,e=0,f=c.length;f>e;e++)a=c[e],d=null!=d?d[a]:null;return d},s=function(a,b,c){return c=u(b,c),null!=c?a.attr(b,c):void 0},t=function(a,b,c){return c=u(b,c),null!=c?a.text(c):void 0},r=function(a){var b;return"string"==typeof a?"^"+a+"$":null!=a.length?function(){var c,d,e;for(e=[],c=0,d=a.length;d>c;c++)b=a[c],e.push(r(b));return e}().join("|"):a},j=b(d.language?d.language:a.defaultLanguage),d.skipLanguage&&j.match(r(d.skipLanguage))?f.resolve():k(c,j,1),v.localizePromise=f,v},a.fn.localize=a.localize,a.localize.data={}}(jQuery);
|
|
8078
lib/showdown.js
Normal file
1
lib/showdown.js.map
Normal file
3
lib/showdown.min.js
vendored
Normal file
1
lib/showdown.min.js.map
Normal file
11
spells.html
|
@ -3,9 +3,12 @@
|
||||||
<head>
|
<head>
|
||||||
|
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
|
<meta name="description" content="">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
|
||||||
<title>fateforge-tools</title>
|
|
||||||
|
|
||||||
|
<title>Spells - fateforge.tools</title>
|
||||||
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/water.css@2/out/water.css" />
|
||||||
<link href="css/all.min.css" rel="stylesheet" />
|
<link href="css/all.min.css" rel="stylesheet" />
|
||||||
<link href="css/water.css" rel="stylesheet" />
|
<link href="css/water.css" rel="stylesheet" />
|
||||||
<link type="text/css" rel="stylesheet" href="lib/w2ui/w2ui.css" />
|
<link type="text/css" rel="stylesheet" href="lib/w2ui/w2ui.css" />
|
||||||
|
@ -14,7 +17,7 @@
|
||||||
<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">
|
||||||
|
|
||||||
<script type="text/javascript" src="lib/jquery.min.js"></script>
|
<script type="text/javascript" src="lib/jquery.min.js"></script>
|
||||||
<script type="text/javascript" src="lib/jquery.localize.js"></script>
|
<script type="text/javascript" src="lib/jquery.localize-dev.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -23,8 +26,7 @@
|
||||||
<body>
|
<body>
|
||||||
<header>
|
<header>
|
||||||
<button onclick="changeLangEN()">English</button>
|
<button onclick="changeLangEN()">English</button>
|
||||||
<button onclick="changeLangFR()">French</button>
|
<button onclick="changeLangFR()">Français</button>
|
||||||
|
|
||||||
<a href="index.html">
|
<a href="index.html">
|
||||||
<h1>FateforgeTools</h1>
|
<h1>FateforgeTools</h1>
|
||||||
</a>
|
</a>
|
||||||
|
@ -48,6 +50,7 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="view-col" id="content">
|
<div class="view-col" id="content">
|
||||||
<table id="pagecontent" class="view" style="border:solid">
|
<table id="pagecontent" class="view" style="border:solid">
|
||||||
|
|
||||||
|
|