Compare commits
37 commits
master
...
feature/bo
Author | SHA1 | Date | |
---|---|---|---|
fec5a36ee2 | |||
9974fa4e4c | |||
bcbaef0ac3 | |||
9fb85a594c | |||
787f53c655 | |||
1b9f7f1c20 | |||
d9d9fcd08d | |||
2aad9dacb9 | |||
3f5c199b0f | |||
f19894b454 | |||
965e278ba6 | |||
ef06b6366e | |||
209f21535e | |||
fdd32a7676 | |||
73126741cd | |||
f034968c51 | |||
8da6559f73 | |||
acb87b0c50 | |||
e0e9246f32 | |||
b8786b2f47 | |||
270dd5ab19 | |||
89e6349c3f | |||
cbb0a652f7 | |||
7185f78eee | |||
7a2a243013 | |||
10ac885cb8 | |||
17851ac2e2 | |||
c8bddd3ef6 | |||
b8fa191734 | |||
84f547e3d4 | |||
ae5a0582a2 | |||
caeae71203 | |||
7652f6623c | |||
b1d30b0010 | |||
7bfeeb578f | |||
a1be0791a0 | |||
e6b6b93597 |
1
.gitignore
vendored
|
@ -1 +1,2 @@
|
|||
*.psd
|
||||
*.pdf
|
||||
|
|
166
.vscode/bookdetails-schema.json
vendored
Normal 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": "La date de publication, noté par le début des réception physique",
|
||||
"type": "string",
|
||||
"default": "",
|
||||
"examples": ["01/04/2018"]
|
||||
},
|
||||
"cf-date": {
|
||||
"title": "La date de lancement du financement participatif",
|
||||
"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
|
@ -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
|
||||
}
|
15
.vscode/launch.json
vendored
Normal file
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"type": "chrome",
|
||||
"request": "launch",
|
||||
"name": "Launch Chrome against localhost",
|
||||
"url": "http://127.0.0.1:5500",
|
||||
"webRoot": "${workspaceFolder}"
|
||||
}
|
||||
]
|
||||
}
|
17
.vscode/settings.json
vendored
Normal file
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"json.schemas": [
|
||||
{
|
||||
"fileMatch": [
|
||||
"data/spells/*.json"
|
||||
],
|
||||
"url": "/./.vscode/spells-schemas.json"
|
||||
},
|
||||
{
|
||||
"fileMatch": [
|
||||
"data/books*.json"
|
||||
],
|
||||
"url": "/./.vscode/books-schemas.json"
|
||||
}
|
||||
],
|
||||
"stenography.apiKey": "caac2b35-1682-4741-a409-d687f69d9767",
|
||||
}
|
306
.vscode/spells-schemas.json
vendored
Normal file
|
@ -0,0 +1,306 @@
|
|||
{
|
||||
"$comment": "TODO: Subdivide the schema to have a common definition for each data (spells, books, creatures)",
|
||||
"definitions": {},
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "https://example.com/object1678401116.json",
|
||||
"title": "Root",
|
||||
"type": "object",
|
||||
"required": ["spell"],
|
||||
"properties": {
|
||||
"spell": {
|
||||
"$id": "#root/spell",
|
||||
"title": "Spell",
|
||||
"type": "array",
|
||||
"default": [],
|
||||
"items": {
|
||||
"$id": "#root/spell/items",
|
||||
"title": "Items",
|
||||
"type": "object",
|
||||
"required": [
|
||||
"recid",
|
||||
"name",
|
||||
"source",
|
||||
"page",
|
||||
"srd",
|
||||
"level",
|
||||
"school",
|
||||
"time",
|
||||
"range",
|
||||
"components",
|
||||
"duration",
|
||||
"desc"
|
||||
],
|
||||
"properties": {
|
||||
"recid": {
|
||||
"$id": "#root/spell/items/recid",
|
||||
"title": "Recid",
|
||||
"type": "integer",
|
||||
"examples": [0],
|
||||
"default": 0,
|
||||
"description": "unique id for the spell, for localization purpose",
|
||||
"uniqueItems": true,
|
||||
"autoIncrement": true
|
||||
},
|
||||
"name": {
|
||||
"$id": "#root/spell/items/name",
|
||||
"title": "Name",
|
||||
"type": "string",
|
||||
"default": "",
|
||||
"examples": ["Acid Arrow"],
|
||||
"pattern": "^.*$"
|
||||
},
|
||||
"source": {
|
||||
"$id": "#root/spell/items/source",
|
||||
"title": "Source",
|
||||
"description": "what's the source. Each enum is a book code",
|
||||
"type": "string",
|
||||
"default": "GRI01",
|
||||
"enum": ["GRI01", "ENC01", "CRE01", "GRI02", "ENC02", "CRE02"],
|
||||
"examples": ["GRI01"],
|
||||
"pattern": "^.*$"
|
||||
},
|
||||
"page": {
|
||||
"$id": "#root/spell/items/page",
|
||||
"description": "in the book, page source",
|
||||
"title": "Page",
|
||||
"type": "integer",
|
||||
"examples": [110],
|
||||
"default": 0
|
||||
},
|
||||
"srd": {
|
||||
"$id": "#root/spell/items/srd",
|
||||
"description": "is srd or a creation",
|
||||
"title": "Srd",
|
||||
"type": "boolean",
|
||||
"examples": [true],
|
||||
"default": true
|
||||
},
|
||||
"level": {
|
||||
"$id": "#root/spell/items/level",
|
||||
"title": "Level",
|
||||
"type": "integer",
|
||||
"examples": [2],
|
||||
"default": 0
|
||||
},
|
||||
"school": {
|
||||
"$id": "#root/spell/items/school",
|
||||
"description": " 'A' : Abjuration,'C' : Conjuration, 'D': Divination, 'E': Enchantment, 'N': Necromancy, 'T' : Transmutation, 'I' : Illusion, 'V' : Evocation",
|
||||
"enum": ["A", "C", "D", "E", "I", "N", "T", "V"],
|
||||
"title": "School",
|
||||
"type": "string",
|
||||
"examples": ["E"],
|
||||
"pattern": "^.*$"
|
||||
},
|
||||
"time": {
|
||||
"$id": "#root/spell/items/time",
|
||||
"title": "Time",
|
||||
"type": "array",
|
||||
"default": [],
|
||||
"items": {
|
||||
"$id": "#root/spell/items/time/items",
|
||||
"title": "Items",
|
||||
"type": "object",
|
||||
"required": ["number", "unit"],
|
||||
"properties": {
|
||||
"number": {
|
||||
"$id": "#root/spell/items/time/items/number",
|
||||
"title": "Number",
|
||||
"type": "integer",
|
||||
"examples": [1],
|
||||
"default": 0
|
||||
},
|
||||
"unit": {
|
||||
"$id": "#root/spell/items/time/items/unit",
|
||||
"title": "Unit",
|
||||
"type": "string",
|
||||
"default": "",
|
||||
"examples": ["action"],
|
||||
"pattern": "^.*$"
|
||||
}
|
||||
},
|
||||
"dependentRequired": {
|
||||
"number": ["unit"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"range": {
|
||||
"$id": "#root/spell/items/range",
|
||||
"title": "Range",
|
||||
"type": "object",
|
||||
"required": ["type", "distance"],
|
||||
"properties": {
|
||||
"type": {
|
||||
"$id": "#root/spell/items/range/type",
|
||||
"title": "Type",
|
||||
"type": "string",
|
||||
"default": "point",
|
||||
"examples": ["point"],
|
||||
"pattern": "^.*$",
|
||||
"enum": ["point", "cone", "sphere", "cylinder", "special"],
|
||||
"description": "point by default, but can be cone, sphere, cylinder, special "
|
||||
},
|
||||
"distance": {
|
||||
"$id": "#root/spell/items/range/distance",
|
||||
"title": "Distance",
|
||||
"type": "object",
|
||||
"required": ["type", "amount"],
|
||||
"properties": {
|
||||
"type": {
|
||||
"$id": "#root/spell/items/range/distance/type",
|
||||
"title": "Type",
|
||||
"type": "string",
|
||||
"default": "",
|
||||
"examples": ["feet"],
|
||||
"pattern": "^.*$"
|
||||
},
|
||||
"amount": {
|
||||
"$id": "#root/spell/items/range/distance/amount",
|
||||
"title": "Amount",
|
||||
"type": "integer",
|
||||
"examples": [90],
|
||||
"default": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"$id": "#root/spell/items/components",
|
||||
"title": "Components",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"v": {
|
||||
"$id": "#root/spell/items/components/v",
|
||||
"title": "V",
|
||||
"type": "boolean",
|
||||
"examples": [true],
|
||||
"default": true
|
||||
},
|
||||
"s": {
|
||||
"$id": "#root/spell/items/components/s",
|
||||
"title": "S",
|
||||
"type": "boolean",
|
||||
"examples": [true],
|
||||
"default": true
|
||||
},
|
||||
"m": {
|
||||
"$id": "#root/spell/items/components/m",
|
||||
"title": "M",
|
||||
"type": "string",
|
||||
"default": "",
|
||||
"examples": ["powdered rhubarb leaf and an adder’s stomach"],
|
||||
"pattern": "^.*$"
|
||||
}
|
||||
}
|
||||
},
|
||||
"duration": {
|
||||
"$id": "#root/spell/items/duration",
|
||||
"title": "Duration",
|
||||
"type": "array",
|
||||
"default": [],
|
||||
"items": {
|
||||
"$id": "#root/spell/items/duration/items",
|
||||
"title": "Items",
|
||||
"type": "object",
|
||||
"required": ["type"],
|
||||
"properties": {
|
||||
"type": {
|
||||
"$id": "#root/spell/items/duration/items/type",
|
||||
"title": "Type",
|
||||
"type": "string",
|
||||
"enum": ["timed", "permanent", "special", "instant"],
|
||||
"default": "",
|
||||
"examples": ["instant"],
|
||||
"pattern": "^.*$"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"concentration": {
|
||||
"$id": "#root/spell/items/concentration",
|
||||
"title": "Concentration",
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
},
|
||||
"desc": {
|
||||
"$id": "#root/spell/items/desc",
|
||||
"title": "Desc",
|
||||
"type": "array",
|
||||
"default": [],
|
||||
"items": {
|
||||
"$id": "#root/spell/items/desc/items",
|
||||
"title": "Items",
|
||||
"type": "string",
|
||||
"description": "A description for the entry. Do not copy-paste gameplay infos to prevent copyright",
|
||||
"default": "",
|
||||
"examples": [
|
||||
"A shimmering green arrow streaks toward a target within range and bursts in a spray of acid."
|
||||
],
|
||||
"pattern": "^.*$"
|
||||
}
|
||||
},
|
||||
"damageInflict": {
|
||||
"$id": "#root/spell/items/damageInflict",
|
||||
"title": "Damageinflict",
|
||||
"type": "array",
|
||||
"default": [],
|
||||
"items": {
|
||||
"$id": "#root/spell/items/damageInflict/items",
|
||||
"title": "Items",
|
||||
"type": "string",
|
||||
"default": "",
|
||||
"examples": ["acid"],
|
||||
"pattern": "^.*$"
|
||||
}
|
||||
},
|
||||
"savingThrow": {
|
||||
"$id": "#root/spell/items/savingThrow",
|
||||
"title": "Savingthrow",
|
||||
"description": "array of saving Throw available",
|
||||
"type": "array",
|
||||
"default": [],
|
||||
"items": {
|
||||
"$id": "#root/spell/items/savingThrow/items",
|
||||
"title": "Items",
|
||||
"type": "string",
|
||||
"default": "",
|
||||
"enum": ["Dex", "Str", "Sag", "Cha", "Int", "Con"],
|
||||
"examples": [""],
|
||||
"pattern": "^.*$",
|
||||
"minItems": 1,
|
||||
"uniqueItems": true
|
||||
}
|
||||
},
|
||||
"miscTags": {
|
||||
"$id": "#root/spell/items/miscTags",
|
||||
"title": "Misctags",
|
||||
"type": "array",
|
||||
"default": [],
|
||||
"items": {
|
||||
"$id": "#root/spell/items/miscTags/items",
|
||||
"title": "Items",
|
||||
"type": "string",
|
||||
"default": "",
|
||||
"examples": [""],
|
||||
"pattern": "^.*$"
|
||||
}
|
||||
},
|
||||
"areaTags": {
|
||||
"$id": "#root/spell/items/areaTags",
|
||||
"title": "Areatags",
|
||||
"type": "array",
|
||||
"default": [],
|
||||
"items": {
|
||||
"$id": "#root/spell/items/areaTags/items",
|
||||
"title": "Items",
|
||||
"type": "string",
|
||||
"default": "",
|
||||
"examples": [""],
|
||||
"pattern": "^.*$"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
37
README
|
@ -1,37 +0,0 @@
|
|||
## Spells
|
||||
|
||||
### JSON structure
|
||||
|
||||
| field | type | value |
|
||||
| ------------------------ | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| id | _number_ | unique id for the spell, for localization purpose |
|
||||
| name | _string_ | spell's name |
|
||||
| source | _number_ | where the spell is coming from |
|
||||
| page | _number_ | page source |
|
||||
| srd | _boolean_ | is this a srd or a creation |
|
||||
| level | _number_ | spell's level |
|
||||
| school | _string_ | spell school : "A" : Abjuration,"C" : Conjuration, "D": Divination, "E": Enchantment, "N": Necromancy, "T" : Transmutation, "I" : Illusion, "V" : Evocation |
|
||||
| time | _array_ | incantation time |
|
||||
| time.number | _number_ | |
|
||||
| time.unit | _string_ | |
|
||||
| range | _module_ | |
|
||||
| range.type | _string_ | point by default, but can be cone, sphere, cylinder, special |
|
||||
| range.distance | _module_ | |
|
||||
| range.distance.type | _string_ | feet or meter or other unit measure |
|
||||
| range.distance.amount | _number_ | amount of distance in `range.distance.type` |
|
||||
| components | _module_ | |
|
||||
| components.v | _boolean_ | verbal component |
|
||||
| components.s | _boolean_ | somatic component |
|
||||
| components.m | _string_ | materials components |
|
||||
| duration | _array_ | |
|
||||
| duration.type | _string_ | timed, permanent, special or instant |
|
||||
| duration.duration | _module_ | |
|
||||
| duration.duration.type | _string_ | minute or hours |
|
||||
| duration.duration.amount | _number_ | amount of `duration.duration.type` |
|
||||
| concentration | _boolena_ | does spell need concentration ? |
|
||||
| desc | _array_ | markdown description of the spell |
|
||||
| damageInflict | _string_ | |
|
||||
| conditionInflict | _string_ | |
|
||||
| savingThrow | _array_ | array of string of saving Throw available |
|
||||
| miscTags | _array_ | |
|
||||
| | | |
|
24
README.md
Normal file
|
@ -0,0 +1,24 @@
|
|||
# FateforgeTools
|
||||
A suite of tools for Fateforge players and Masters.
|
||||
|
||||
### Lib
|
||||
- bryntum-grid
|
||||
- water.css
|
||||
- data localize
|
||||
- jquery
|
||||
- w2ui
|
||||
|
||||
## About books ID
|
||||
All books have an ID following this template : ```ID3xx```
|
||||
|
||||
- **ID3** is the english type of book with 3 characters (seet table)
|
||||
- **xx** is the first release order (pdf) inside the book category
|
||||
|
||||
### ID table
|
||||
Book type | ID
|
||||
-- | --
|
||||
Adventurer | ADV
|
||||
Grimoire | GRI
|
||||
Creatures | CRE
|
||||
Encyclopedia | ENC
|
||||
Collection of adventures (also know as "module") | LEG
|
61
books.html
Normal file
|
@ -0,0 +1,61 @@
|
|||
<!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="css/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>
|
||||
<nav>
|
||||
<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>
|
||||
</nav>
|
||||
<div class="gallery"></div>
|
||||
|
||||
<div class="view-container" style="display: flex; align-items: center; flex-direction: column">
|
||||
<h1 id="book_title"></h1>
|
||||
<i id="book_author" ></i>
|
||||
<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="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 class="book-desc" id="book_desc"></div>
|
||||
</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>
|
||||
<script rel="preload" src="lib/fontawesome.js" crossorigin="anonymous"></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;
|
||||
}
|
318
css/style.css
Normal file
|
@ -0,0 +1,318 @@
|
|||
* {
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
*,
|
||||
:after,
|
||||
:before {
|
||||
border: 0 solid #e5e7eb;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.book-container {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
perspective: 600px;
|
||||
height: 430px;
|
||||
}
|
||||
|
||||
.book-container .book {
|
||||
animation: 1s ease 0s 1 initAnimation-fd6a;
|
||||
height: 450px;
|
||||
margin-bottom: 15px;
|
||||
margin-top: 39px;
|
||||
position: relative;
|
||||
transform: rotateY(-30deg);
|
||||
transform-style: preserve-3d;
|
||||
transition: transform 1s ease;
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
.book-container .book > :first-child {
|
||||
background-color: #01060f;
|
||||
background-color: #01060f;
|
||||
border-radius: 0 2px 2px 0;
|
||||
box-shadow: 5px 5px 20px #aaaaaa9d;
|
||||
height: 283px;
|
||||
left: 0;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
transform: translateZ(25px);
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
.book-container .book::after {
|
||||
background-color: #01060f;
|
||||
border-radius: 0 2px 2px 0;
|
||||
box-shadow: -5px 0 20px 10px #aaaaaa9d;
|
||||
content: " ";
|
||||
height: 283px;
|
||||
left: 0;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
transform: translateZ(-25px);
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
.book-container .book::before {
|
||||
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%
|
||||
);
|
||||
content: " ";
|
||||
height: 277px;
|
||||
left: 0;
|
||||
position: absolute;
|
||||
top: 3px;
|
||||
transform: translateX(172px) rotateY(90deg);
|
||||
width: 48px;
|
||||
}
|
||||
|
||||
.book-container .book:hover {
|
||||
transform: rotateY(0deg);
|
||||
}
|
||||
|
||||
.container {
|
||||
align-items: stretch;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.flickity-button {
|
||||
background: #58859770;
|
||||
}
|
||||
|
||||
.flickity-page-dots .dot {
|
||||
background: #0093cd;
|
||||
}
|
||||
|
||||
.flickity-prev-next-button {
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
.flickity-viewport {
|
||||
background-color: #01060f00;
|
||||
/* overflow: inherit; */
|
||||
position: inherit;
|
||||
}
|
||||
|
||||
.gallery {
|
||||
background: #01060f00;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.gallery-cell {
|
||||
counter-increment: gallery-cell;
|
||||
margin: auto;
|
||||
width: 250px;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.gallery-cell:not(.is-selected) {
|
||||
filter: saturate(30%);
|
||||
z-index: -5;
|
||||
}
|
||||
|
||||
.list-col {
|
||||
flex-grow: 2;
|
||||
min-width: 600px;
|
||||
}
|
||||
|
||||
.view-col {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 768px) {
|
||||
.list-col {
|
||||
margin-right: 1%;
|
||||
}
|
||||
|
||||
.view-col {
|
||||
max-width: 600px;
|
||||
}
|
||||
}
|
||||
|
||||
.fa-solid,
|
||||
.fas {
|
||||
font-weight: 900;
|
||||
margin: 5px;
|
||||
}
|
||||
|
||||
.icon {
|
||||
font-size: xx-large;
|
||||
}
|
||||
|
||||
.icon + .view-details:empty +,
|
||||
.view-details:empty {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.view-container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.view-container.row {
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.w2ui-grid .w2ui-grid-body table td.w2ui-grid-data > div {
|
||||
overflow: visible;
|
||||
white-space: break-spaces;
|
||||
}
|
||||
|
||||
.w2ui-grid-data {
|
||||
color: #000;
|
||||
word-wrap: normal;
|
||||
}
|
||||
|
||||
A[href=""],
|
||||
A[href="#"] {
|
||||
color: inherit;
|
||||
cursor: default;
|
||||
pointer-events: none;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 768px) {
|
||||
.view-container {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.view-details {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
* {
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
*,
|
||||
:after,
|
||||
:before {
|
||||
border: 0 solid #e5e7eb;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.book-container {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
perspective: 600px;
|
||||
}
|
||||
|
||||
.book-container .book {
|
||||
animation: 1s ease 0s 1 initAnimation-fd6a;
|
||||
height: 300px;
|
||||
margin-bottom: 3px;
|
||||
margin-top: 39px;
|
||||
position: relative;
|
||||
transform: rotateY(-30deg) scale(1);
|
||||
transform-style: preserve-3d;
|
||||
transition: transform 1s ease;
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
.book-container .book > :first-child {
|
||||
background-color: #01060f;
|
||||
background-color: #01060f;
|
||||
border-radius: 0 2px 2px 0;
|
||||
box-shadow: 5px 5px 20px #aaaaaa9d;
|
||||
height: 283px;
|
||||
left: 0;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
transform: translateZ(25px);
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
.book-container .book::after {
|
||||
background-color: #01060f;
|
||||
border-radius: 0 2px 2px 0;
|
||||
box-shadow: -5px 0 20px 10px #aaaaaa9d;
|
||||
content: " ";
|
||||
height: 283px;
|
||||
left: 0;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
transform: translateZ(-25px);
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
.book-container .book::before {
|
||||
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%
|
||||
);
|
||||
content: " ";
|
||||
height: 277px;
|
||||
left: 0;
|
||||
position: absolute;
|
||||
top: 3px;
|
||||
transform: translateX(172px) rotateY(90deg);
|
||||
width: 48px;
|
||||
}
|
||||
|
||||
.book-container .book:hover {
|
||||
transform: rotateY(0deg) scale(1.1);
|
||||
}
|
||||
|
||||
.gallery-cell > .book-container > .book {
|
||||
transition: transform 0.3s ease-out;
|
||||
}
|
||||
|
||||
.gallery-cell.is-selected > .book-container > .book {
|
||||
transform: scale(1.25);
|
||||
transition: transform 0.3s ease-out;
|
||||
}
|
1691
css/water.css
Normal file
525
data/books-en.json
Normal file
|
@ -0,0 +1,525 @@
|
|||
{ "GRI02": {
|
||||
"code": "GRI02",
|
||||
"title": "Grimoire 2",
|
||||
"author": [
|
||||
"Team Agate"
|
||||
],
|
||||
"desc": [
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\GRI02_BC_EN.png",
|
||||
"alt": "GRI02_BC_EN",
|
||||
"title": "Grimoire 2"
|
||||
},
|
||||
"published-date": "",
|
||||
"cf-date": "à paraitre"
|
||||
},
|
||||
"ENC02": {
|
||||
"code": "ENC02",
|
||||
"title": "Encyclopédie : Inframonde",
|
||||
"author": [
|
||||
"Team Agate"
|
||||
],
|
||||
"desc": [
|
||||
"Encyclopédie Volume 2 contiendra environ 350 pages de contenu compatible avec la 5e Édition, dédié au monde du dessous. Vous trouverez tout ce dont vous aurez besoin pour jouer des dizaines d'aventures dans des régions qui s'étendent sous la terre et même sous les mers. Parfois effrayant, parfois sublime, toujours mystérieux, l'Inframonde contient des villes iconiques, des lieux exotiques et étranges, des rencontres excitantes, des pistes d'aventure et des objets magiques captivants."
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\ENC02_BC_EN.png",
|
||||
"alt": "ENC02_BC_EN",
|
||||
"title": "Encyclopédie : Inframonde"
|
||||
},
|
||||
"published-date": "",
|
||||
"cf-date": "2023-02-02",
|
||||
"physical-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"pdf-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"cf-link": {
|
||||
"title": "Ulule",
|
||||
"href": "https://fr.ulule.com/dragons-encyclopedie-inframonde/"
|
||||
}
|
||||
},
|
||||
"CRE02": {
|
||||
"code": "CRE02",
|
||||
"title": "Créatures : Inframonde",
|
||||
"author": [
|
||||
"Team Agate"
|
||||
],
|
||||
"desc": [],
|
||||
"cover": {
|
||||
"src": "img\\books\\CRE02_BC_EN.png",
|
||||
"alt": "CRE02_BC_EN",
|
||||
"title": "Créatures : Inframonde"
|
||||
},
|
||||
"published-date": "01/03/2023",
|
||||
"cf-date": "2022-05-04",
|
||||
"physical-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"pdf-link": {
|
||||
"title": "Acheter le pdf",
|
||||
"href": "https://www.drivethrurpg.com/product/422893/Dragons--5--Bestiaire--Creatures-2-Inframonde"
|
||||
},
|
||||
"cf-link": {
|
||||
"title": "Ulule",
|
||||
"href": "https://fr.ulule.com/dragons-creatures-de-l-inframonde/"
|
||||
}
|
||||
},
|
||||
"LEG10": {
|
||||
"code": "LEG10",
|
||||
"title": "Dans les Ombres",
|
||||
"author": [
|
||||
"Team Agate",
|
||||
" Guillaume ‘Metatron’ Woerner",
|
||||
"Laurent ‘Akila’ Marrie",
|
||||
"Valentine Voisin"
|
||||
],
|
||||
"desc": [
|
||||
"5 aventures mettant la morale des aventuriers à l’épreuve"
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\LEG10_BC_EN.png",
|
||||
"alt": "LEG10_BC_EN",
|
||||
"title": "Dans les Ombres"
|
||||
},
|
||||
"published-date": "",
|
||||
"cf-date": "",
|
||||
"physical-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"pdf-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"cf-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
}
|
||||
},
|
||||
"LEG09": {
|
||||
"code": "LEG09",
|
||||
"title": "Aboleths d’Eaux-Noires",
|
||||
"author": [
|
||||
"Caroline ‘Laufey’ Paës",
|
||||
"Team Agate",
|
||||
"Guillaume ‘Metatron’ Woerner",
|
||||
"Jean ‘Troll Traya’ Faiderbe",
|
||||
"Laurent ‘Akila’ Marrie",
|
||||
"William Perceval ‘Merlin’ Huber"
|
||||
],
|
||||
"desc": [
|
||||
"un recueil de 5 aventures pleines d’aberrations"
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\LEG09_BC_EN.png",
|
||||
"alt": "LEG09_BC_EN",
|
||||
"title": "Aboleths d’Eaux-Noires"
|
||||
},
|
||||
"published-date": "",
|
||||
"cf-date": "",
|
||||
"physical-link": {
|
||||
"title": "Acheter un exemplaire",
|
||||
"href": ""
|
||||
},
|
||||
"pdf-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"cf-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
}
|
||||
},
|
||||
"LEG08": {
|
||||
"code": "LEG08",
|
||||
"title": "Résurgences de l’Inframonde",
|
||||
"author": [
|
||||
"Yorwan",
|
||||
" Christian Perrot",
|
||||
"Thomas ‘Kaer’ Navarro",
|
||||
"Guillaume Fontaine",
|
||||
"Léopold Maçon-Dauxerre",
|
||||
"Team Agate"
|
||||
],
|
||||
"desc": [
|
||||
"Un recueil de 5 aventures remplie de créatures prenant d'assaut la surface"
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\LEG08_BC_EN.png",
|
||||
"alt": "LEG08_BC_EN",
|
||||
"title": "Résurgences de l’Inframonde"
|
||||
},
|
||||
"published-date": "",
|
||||
"cf-date": "",
|
||||
"physical-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"pdf-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"cf-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
}
|
||||
},
|
||||
"LEG07": {
|
||||
"code": "LEG07",
|
||||
"title": "Tunnels de l’Inframonde",
|
||||
"author": [
|
||||
"Boulingue Xavier ‘Pragmatique Création",
|
||||
"Hadrien ‘Domithras’ Dominault",
|
||||
" Antoine ‘Sherktaan’ Deligne",
|
||||
"Laurent ‘Akila’ Marrie",
|
||||
"Julien ‘Kherdan’ Arnaud"
|
||||
],
|
||||
"desc": [
|
||||
"un recueil de 5 aventures souterraines"
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\LEG07_BC_EN.png",
|
||||
"alt": "LEG07_BC_EN",
|
||||
"title": "Tunnels de l’Inframonde"
|
||||
},
|
||||
"published-date": "",
|
||||
"cf-date": "",
|
||||
"physical-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"pdf-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"cf-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
}
|
||||
},
|
||||
"LEG06": {
|
||||
"code": "LEG06",
|
||||
"title": "Équipées",
|
||||
"author": [
|
||||
"Caroline ‘Laufey’ Paës",
|
||||
"Thomas ‘Kaer’ Navarro",
|
||||
" Laurent ‘Akila’ Marrie",
|
||||
"Léopold Maçon-Dauxerre",
|
||||
"Team Agate"
|
||||
],
|
||||
"desc": [
|
||||
"Un recueil de 5 aventures pleines d'incidents et d'embuscades"
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\LEG06_BC_EN.png",
|
||||
"alt": "LEG06_BC_EN",
|
||||
"title": "Équipées"
|
||||
},
|
||||
"published-date": "",
|
||||
"cf-date": "",
|
||||
"physical-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"pdf-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"cf-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
}
|
||||
},
|
||||
"LEG05": {
|
||||
"code": "LEG05",
|
||||
"title": "Incidents",
|
||||
"author": [
|
||||
"Azaghâl",
|
||||
"Christian Perrot",
|
||||
"Valentine Voisin",
|
||||
"William Perceval ‘Merlin’ Huber",
|
||||
"Team Agate"
|
||||
],
|
||||
"desc": [
|
||||
"5 aventures pleines de péripéties urbaines et d’improvisation"
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\LEG05_BC_EN.png",
|
||||
"alt": "LEG05_BC_EN",
|
||||
"title": "Incidents"
|
||||
},
|
||||
"published-date": "",
|
||||
"cf-date": "",
|
||||
"physical-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"pdf-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"cf-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
}
|
||||
},
|
||||
"LEG04": {
|
||||
"code": "LEG04",
|
||||
"title": "La Complainte du Papillon",
|
||||
"author": [
|
||||
"Benjamin Diebling"
|
||||
],
|
||||
"desc": [
|
||||
"*Jadis, Noctui était un village au demeurant austère, mais où il faisait bon vivre au pied des monts du Crépuscule. Aujourd’hui, ses ruines macabres évoquent la tragédie d’un passé qui refuse de mourir.*",
|
||||
"Guidés par des visions cauchemardesques et des récits évoquant une page sombre de l’histoire, les aventuriers répondent à un sinistre appel. Sauront-ils dénouer l’écheveau et faire la lumière sur les mystères qui entourent ce lieu hors du temps ? Ils évolueront entre les souvenirs perdus, guidés par les étranges nuées de papillons d’outre-tombe.",
|
||||
"**La complainte du papillon** est une aventure pour un groupe de personnages de niveau 3 à 5 et se déroule dans les Drakenbergen. Elle utilise les règles de la 5e édition du plus mythique des jeux de rôle. Écrit par Benjamin Diebling, ce module est conçu pour être joué de manière autonome. Les découvertes qu’il réserve peuvent être le point de départ d’une campagne ou de nouvelles péripéties."
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\LEG04_BC_EN.png",
|
||||
"alt": "LEG04_BC_EN",
|
||||
"title": "La Complainte du Papillon"
|
||||
},
|
||||
"published-date": "",
|
||||
"cf-date": "",
|
||||
"physical-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"pdf-link": {
|
||||
"title": "Acheter le pdf",
|
||||
"href": "https://www.drivethrurpg.com/product/422923/Dragons--Aventures--La-Complainte-du-Papillon"
|
||||
},
|
||||
"cf-link": {
|
||||
"title": "Ulule",
|
||||
"href": "https://fr.ulule.com/dragons-5e/"
|
||||
}
|
||||
},
|
||||
"LEG03": {
|
||||
"code": "LEG03",
|
||||
"title": "Le Chronolithe",
|
||||
"author": [
|
||||
"Eric Nieudan"
|
||||
],
|
||||
"desc": [
|
||||
"*Quand une mission simple se transforme en combat de chaque instant… Qui aurait pu deviner que cette petite vallée à la frontière du royaume abritait une magie capable de forcer les portes du temps ?*",
|
||||
"La passe de Tahenn est une petite vallée oubliée, perdue dans les Drakenbergen. Une mission d’apparence ordinaire amène les aventuriers à s’enfoncer dans une antique ruine, contenant le mystérieux et puissant chronolithe. Hélas, une catastrophe temporelle complique singulièrement la donne et amène les aventuriers à explorer aussi bien l’espace de cette région que ses temps passés !",
|
||||
"**Le Chronolithe** est une aventure pour un groupe de personnages de niveau 1 à 5, et se déroule dans une vallée des Drakenbergen. Elle utilise les règles de la 5e édition du plus mythique des jeux de rôle. Écrit par Éric Nieudan, ce module est conçu pour être joué de manière autonome, sous la forme d’une petite campagne de type « bac à sable », riche en imprévu et en rebondissements."
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\LEG03_BC_EN.png",
|
||||
"alt": "LEG03_BC_EN",
|
||||
"title": "Le Chronolithe"
|
||||
},
|
||||
"published-date": "",
|
||||
"cf-date": "",
|
||||
"physical-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"pdf-link": {
|
||||
"title": "Acheter le pdf",
|
||||
"href": "https://www.drivethrurpg.com/product/422921/Dragons--Aventures--Le-Chronolithe?src=also_purchased"
|
||||
},
|
||||
"cf-link": {
|
||||
"title": "Ulule",
|
||||
"href": "https://fr.ulule.com/dragons-5e/"
|
||||
}
|
||||
},
|
||||
"LEG02": {
|
||||
"code": "LEG02",
|
||||
"title": "Fort Ardraco",
|
||||
"author": [
|
||||
"Ed Greenwood"
|
||||
],
|
||||
"desc": [
|
||||
"*« Alors Kuldur aussi s’est fait enlever ? Maintenant ça fait quoi, trois magiciens et quatre prêtres ? Et à chaque fois, on a retrouvé la marque du dragon dessinée avec du sang sur le lieu de l’enlèvement ! Qu’est-ce que ça peut bien signifier ? »*",
|
||||
"Cet emblème ressemble à l’ancien blason de la maison Ardraco, éteinte depuis bien longtemps. Sa demeure ancestrale en ruine est au cœur de nombreuses rumeurs dans la région. Perdu au milieu d’une forêt dense et sinistre, le fort attend que des aventuriers viennent lever le voile sur ses mystères.",
|
||||
"**Fort Adraco** est une aventure pour un groupe de personnages de niveau 1 à 5, comportant au moins un lanceur de sort éveillé à la magie. Elle utilise les règles de la 5e édition du plus mythique des jeux de rôle. Écrit par le légendaire Ed Greenwood, ce module peut être joué de manière autonome ou utilisé par le meneur comme un point de départ pour une campagne plus vaste."
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\LEG02_BC_EN.png",
|
||||
"alt": "LEG02_BC_EN",
|
||||
"title": "Fort Ardraco"
|
||||
},
|
||||
"published-date": "",
|
||||
"cf-date": "",
|
||||
"cf-link": {
|
||||
"title": "Ulule",
|
||||
"href": "https://fr.ulule.com/dragons-5e/"
|
||||
}
|
||||
},
|
||||
"LEG01": {
|
||||
"code": "LEG01",
|
||||
"title": "An invitation to Griseflore",
|
||||
"author": [
|
||||
"Fabien Fernandez"
|
||||
],
|
||||
"desc": [
|
||||
"# **French exclusivity**",
|
||||
"*« Chers amis,*"," *C’est avec joie que je vous attends pour mon mariage d’ici douze jours à Griseflore. Cette fois, c’est la retraite dorée. Terminés les risques inutiles de la magie et des souterrains, je me marie avec Yrsaelle Hederas loin de toute invocation dangereuse. Je vous convie donc à célébrer mes épousailles autour d’un banquet et d’une somptueuse cérémonie.*",
|
||||
"*P S : Griseflore est une zone de magie morte, faites attention à ce que vous emportez. »*",
|
||||
"Griseflore est une petite ville tranquille dirigée par quatre anciennes familles. Située dans une région prospère à l’écart des grandes routes marchandes, c’est un endroit où il fait bon vivre. Tanael, un ami des aventuriers, a décidé de s’y installer pour couler des jours heureux en se mariant avec une femme du pays. Mais comme souvent, rien ne se passe comme prévu, et l’arrivée des aventuriers va rapidement révéler les secrets honteux ou criminels des uns et des autres.",
|
||||
"**Une invitation à Griseflore** est une aventure pour un groupe de personnages de niveau 4 à 6, et se déroule dans une zone de magie morte des alentours de la Cité Franche, ou de toute autre grande cité de votre cadre de campagne. Elle utilise les règles de la 5e édition du plus mythique des jeux de rôle. Écrit par Fabien Fernandez, ce module est conçu pour être joué de manière autonome, en constituant par exemple une digression au cours d’une campagne."
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\LEG01_BC_FR.png",
|
||||
"alt": "LEG01_BC_FR",
|
||||
"title": "An invitation to Griseflore"
|
||||
},
|
||||
"published-date": "01/03/2023",
|
||||
"cf-date": "",
|
||||
"physical-link": {
|
||||
"title": "Acheter un exemplaire",
|
||||
"href": ""
|
||||
},
|
||||
"pdf-link": {
|
||||
"title": "Acheter le pdf",
|
||||
"href": "https://www.drivethrurpg.com/product/422927/Dragons--Aventures--Une-invitation-a-Griseflore"
|
||||
},
|
||||
"cf-link": {
|
||||
"title": "Ulule",
|
||||
"href": "https://fr.ulule.com/dragons-5e/"
|
||||
}
|
||||
},
|
||||
"ENC01": {
|
||||
"code": "ENC01",
|
||||
"title": "Encyclopédie",
|
||||
"author": [
|
||||
"Team Agate"
|
||||
],
|
||||
"desc": [
|
||||
"Ce livre pour le jeu Dragons, est un recueil décrivant 4 contrées du monde d’Eana :",
|
||||
"- **Cité Franche**. Plus grande ville du monde et cité cosmopolite, la Cité Franche est le lieu idéal pour des aventures urbaines. Notables, marchands, érudits et criminels cohabitent et jouent de leur influence pour servir leurs ambitions.",
|
||||
"- **Drakenbergen**. Coeur du Cyfandir, les Drakenbergen sont un immense territoire montagneux bien connu des nains qui contrôlent les routes marchandes de la surface et de l’Inframonde. Ces reliefs sont le terrain idéal pour des explorations de ruines et de vallées perdues.",
|
||||
"- **Septentrion**. Territoire nordique et sauvage, le Septentrion est une contrée rude et riche de secrets remontant à l’antique civilisation boréale. Les géants de givre et les manigances de l’hospodar diabolique Askinos le buveur de douleur pourraient bien faire de ces terres un enfer !",
|
||||
"- **Kaan**. Immense et contrasté, fait de hautes montagnes et de steppes infinies, tantôt brûlant, tantôt glacé, le Kaan est un appel constant au courage et à l’initiative. Les peuples merosis, orcs, gobelins, gobelours, hobgobelins, ulkani et humains y ont tissés des sociétés cosmopolites, tandis que, dans l’ombre, de puissants pouvoirs magiques ont grandi.",
|
||||
"Ce sont quatre grandes civilisations à part entière qui vous sont présentées. Vous découvrirez leurs Chroniques qui reprennent l’historique de ces territoires touchant au domaine arcanique, religieux ou encore politique..; leur Culture avec la vie quotidienne, l’artisanat, les mœurs… ; leurs Territoires dévoilant chaque quartier, monument, commerce, et même des personnages importants… ; leurs Merveilles avec des objets typiques, parfois magiques ou légendaires… Enfin, des annexes vous permettront de tout savoir sur l’utilisation des objets magiques, avec des règles utilisant le système modulaire, ainsi qu’un lexique qui vous fournira de précieux aide-mémoires pour préparer vos aventures !"
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\ENC01_BC_EN.png",
|
||||
"alt": "ENC01_BC_EN",
|
||||
"title": "ENC01_BC_EN"
|
||||
},
|
||||
"published-date": "20/12/2020",
|
||||
"cf-date": "",
|
||||
"physical-link": {
|
||||
"title": "Acheter un exemplaire",
|
||||
"href": "http://www.ludospherik.fr/dragons-dd-5-ogl-5/21212-dragons-4-encyclopedie-jdr-dd-5-de-studio-agate-en-vf-9782491139230.html"
|
||||
},
|
||||
"pdf-link": {
|
||||
"title": "Acheter le pdf",
|
||||
"href": "https://www.drivethrurpg.com/product/422892/Dragons--4--Livre-dunivers--Encyclopedie?src=hottest_filtered"
|
||||
},
|
||||
"cf-link": {
|
||||
"title": "Ulule",
|
||||
"href": "https://fr.ulule.com/dragons-5e/"
|
||||
}
|
||||
},
|
||||
"CRE01": {
|
||||
"code": "CRE01",
|
||||
"title": "Créatures",
|
||||
"author": [
|
||||
"Team Agate"
|
||||
],
|
||||
"desc": [
|
||||
"Un recueil de plus de 200 monstres, animaux et personnages compatibles avec la 5e édition du plus fameux des jeux de rôle.",
|
||||
"Il présente des rencontres et des dangers dans des contrées allant des zones urbaines aux régions polaires. Si votre campagne a lieu dans l’univers d’Eana, vous en apprendrez plus sur la Cité Franche, les Drakenbergen, le Septentrion, le plan maléfique des Gémonies et le Kaan.",
|
||||
"Vous y découvrirez en plus : ",
|
||||
"- Des archétypes inédits",
|
||||
"- De nouvelles espèces jouables",
|
||||
"- Des enjeux pour tous niveaux",
|
||||
"- Des périls et des pièges"
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\CRE01_BC_EN.png",
|
||||
"alt": "CRE01_BC_EN",
|
||||
"title": "CRE01_BC_EN"
|
||||
},
|
||||
"published-date": "14/10/2020",
|
||||
"cf-date": "",
|
||||
"physical-link": {
|
||||
"title": "Acheter un exemplaire",
|
||||
"href": "https://www.philibertnet.com/fr/dragons/119307-dragons-3-creatures-9782491139247.html"
|
||||
},
|
||||
"pdf-link": {
|
||||
"title": "Acheter le pdf",
|
||||
"href": "https://www.drivethrurpg.com/product/422890/Dragons--3--Bestiaire--Creatures?src=hottest_filtered"
|
||||
},
|
||||
"cf-link": {
|
||||
"title": "Ulule",
|
||||
"href": "https://fr.ulule.com/dragons-5e/"
|
||||
}
|
||||
},
|
||||
"GRI01": {
|
||||
"code": "GRI01",
|
||||
"title": "Grimoire",
|
||||
"author": [
|
||||
"Team Agate"
|
||||
],
|
||||
"desc": [
|
||||
"**GRIMOIRE** est le deuxième volume de la gamme de jeu de rôle DRAGONS. Dédié à la magie et aux lanceurs de sorts, il traite les sujets suivants :",
|
||||
"- **Magie modulaire** : le système modulaire vous permet d'adapter le jeu à la mise en scène que vous souhaitez, d'une fantasy débridée à une approche beaucoup plus sobre et subtile.",
|
||||
"- **Eveil** : seuls ceux qui ont connu l'Eveil peuvent lancer des sorts, ce chapitre révèle ses mystères et ses périls.",
|
||||
"- **Géomagie** : la géomagie et ses variantes influencent directement la région qu'elles affectent.",
|
||||
"- **Corruption** : la corruption transforme le corps et l'âme.",
|
||||
"- **Sorts** : plus de 360 sorts permettant d'explorer tous les aspects de la magie."
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\GRI01_BC_EN.png",
|
||||
"alt": "GRI01_BC_EN",
|
||||
"title": "GRI01_BC_EN"
|
||||
},
|
||||
"published-date": "12/10/2019",
|
||||
"cf-date": "",
|
||||
"physical-link": {
|
||||
"title": "Acheter un exemplaire",
|
||||
"href": "https://www.philibertnet.com/fr/dragons/107373-dragons-2-grimoire-9781234567897.html"
|
||||
},
|
||||
"pdf-link": {
|
||||
"title": "Acheter le pdf",
|
||||
"href": "https://www.drivethrurpg.com/product/422888/Dragons--2--Livre-de-magie--Grimoire"
|
||||
},
|
||||
"cf-link": {
|
||||
"title": "Ulule",
|
||||
"href": "https://fr.ulule.com/dragons-5e/"
|
||||
}
|
||||
},
|
||||
"ADV01": {
|
||||
"code": "ADV01",
|
||||
"title": "Aventuriers",
|
||||
"author": [
|
||||
"Team Agate"
|
||||
],
|
||||
"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."
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\ADV01_BC_EN.png",
|
||||
"alt": "ADV01_BC_EN",
|
||||
"title": "ADV01_BC_EN"
|
||||
},
|
||||
"published-date": "01/04/2018",
|
||||
"cf-date": "",
|
||||
"physical-link": {
|
||||
"title": "Acheter un exemplaire",
|
||||
"href": "https://www.philibertnet.com/fr/dragons/62090-dragons-1-aventuriers-livre-de-base-9782919256365.html"
|
||||
},
|
||||
"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/"
|
||||
}
|
||||
}
|
||||
}
|
536
data/books-fr.json
Normal file
|
@ -0,0 +1,536 @@
|
|||
{ "GRI02": {
|
||||
"code": "GRI02",
|
||||
"title": "Grimoire 2",
|
||||
"author": [
|
||||
"Team Agate"
|
||||
],
|
||||
"desc": [
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\GRI02_BC_FR.png",
|
||||
"alt": "GRI02_BC_FR",
|
||||
"title": "Grimoire 2"
|
||||
},
|
||||
"published-date": "",
|
||||
"cf-date": "à paraitre",
|
||||
"physical-link": {
|
||||
"title": "à paraitre",
|
||||
"href": ""
|
||||
},
|
||||
"pdf-link": {
|
||||
"title": "à paraitre",
|
||||
"href": ""
|
||||
},
|
||||
"cf-link": {
|
||||
"title": "à paraitre",
|
||||
"href": ""
|
||||
}
|
||||
},
|
||||
"ENC02": {
|
||||
"code": "ENC02",
|
||||
"title": "Encyclopédie : Inframonde",
|
||||
"author": [
|
||||
"Team Agate"
|
||||
],
|
||||
"desc": [
|
||||
"Encyclopédie Volume 2 contiendra environ 350 pages de contenu compatible avec la 5e Édition, dédié au monde du dessous. Vous trouverez tout ce dont vous aurez besoin pour jouer des dizaines d'aventures dans des régions qui s'étendent sous la terre et même sous les mers. Parfois effrayant, parfois sublime, toujours mystérieux, l'Inframonde contient des villes iconiques, des lieux exotiques et étranges, des rencontres excitantes, des pistes d'aventure et des objets magiques captivants."
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\ENC02_BC_FR.png",
|
||||
"alt": "ENC02_BC_FR",
|
||||
"title": "Encyclopédie : Inframonde"
|
||||
},
|
||||
"published-date": "",
|
||||
"cf-date": "2023-02-02",
|
||||
"physical-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"pdf-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"cf-link": {
|
||||
"title": "Ulule",
|
||||
"href": "https://fr.ulule.com/dragons-encyclopedie-inframonde/"
|
||||
}
|
||||
},
|
||||
"CRE02": {
|
||||
"code": "CRE02",
|
||||
"title": "Créatures : Inframonde",
|
||||
"author": [
|
||||
"Team Agate"
|
||||
],
|
||||
"desc": [],
|
||||
"cover": {
|
||||
"src": "img\\books\\CRE02_BC_FR.png",
|
||||
"alt": "CRE02_BC_FR",
|
||||
"title": "Créatures : Inframonde"
|
||||
},
|
||||
"published-date": "01/03/2023",
|
||||
"cf-date": "2022-05-04",
|
||||
"physical-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"pdf-link": {
|
||||
"title": "Acheter le pdf",
|
||||
"href": "https://www.drivethrurpg.com/product/422893/Dragons--5--Bestiaire--Creatures-2-Inframonde"
|
||||
},
|
||||
"cf-link": {
|
||||
"title": "Ulule",
|
||||
"href": "https://fr.ulule.com/dragons-creatures-de-l-inframonde/"
|
||||
}
|
||||
},
|
||||
"LEG10": {
|
||||
"code": "LEG10",
|
||||
"title": "Dans les Ombres",
|
||||
"author": [
|
||||
"Team Agate",
|
||||
" Guillaume ‘Metatron’ Woerner",
|
||||
"Laurent ‘Akila’ Marrie",
|
||||
"Valentine Voisin"
|
||||
],
|
||||
"desc": [
|
||||
"5 aventures mettant la morale des aventuriers à l’épreuve"
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\LEG10_BC_FR.png",
|
||||
"alt": "LEG10_BC_FR",
|
||||
"title": "Dans les Ombres"
|
||||
},
|
||||
"published-date": "",
|
||||
"cf-date": "",
|
||||
"physical-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"pdf-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"cf-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
}
|
||||
},
|
||||
"LEG09": {
|
||||
"code": "LEG09",
|
||||
"title": "Aboleths d’Eaux-Noires",
|
||||
"author": [
|
||||
"Caroline ‘Laufey’ Paës",
|
||||
"Team Agate",
|
||||
"Guillaume ‘Metatron’ Woerner",
|
||||
"Jean ‘Troll Traya’ Faiderbe",
|
||||
"Laurent ‘Akila’ Marrie",
|
||||
"William Perceval ‘Merlin’ Huber"
|
||||
],
|
||||
"desc": [
|
||||
"un recueil de 5 aventures pleines d’aberrations"
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\LEG09_BC_FR.png",
|
||||
"alt": "LEG09_BC_FR",
|
||||
"title": "Aboleths d’Eaux-Noires"
|
||||
},
|
||||
"published-date": "",
|
||||
"cf-date": "",
|
||||
"physical-link": {
|
||||
"title": "Acheter un exemplaire",
|
||||
"href": ""
|
||||
},
|
||||
"pdf-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"cf-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
}
|
||||
},
|
||||
"LEG08": {
|
||||
"code": "LEG08",
|
||||
"title": "Résurgences de l’Inframonde",
|
||||
"author": [
|
||||
"Yorwan",
|
||||
" Christian Perrot",
|
||||
"Thomas ‘Kaer’ Navarro",
|
||||
"Guillaume Fontaine",
|
||||
"Léopold Maçon-Dauxerre",
|
||||
"Team Agate"
|
||||
],
|
||||
"desc": [
|
||||
"Un recueil de 5 aventures remplie de créatures prenant d'assaut la surface"
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\LEG08_BC_FR.png",
|
||||
"alt": "LEG08_BC_FR",
|
||||
"title": "Résurgences de l’Inframonde"
|
||||
},
|
||||
"published-date": "",
|
||||
"cf-date": "",
|
||||
"physical-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"pdf-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"cf-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
}
|
||||
},
|
||||
"LEG07": {
|
||||
"code": "LEG07",
|
||||
"title": "Tunnels de l’Inframonde",
|
||||
"author": [
|
||||
"Boulingue Xavier ‘Pragmatique Création",
|
||||
"Hadrien ‘Domithras’ Dominault",
|
||||
" Antoine ‘Sherktaan’ Deligne",
|
||||
"Laurent ‘Akila’ Marrie",
|
||||
"Julien ‘Kherdan’ Arnaud"
|
||||
],
|
||||
"desc": [
|
||||
"un recueil de 5 aventures souterraines"
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\LEG07_BC_FR.png",
|
||||
"alt": "LEG07_BC_FR",
|
||||
"title": "Tunnels de l’Inframonde"
|
||||
},
|
||||
"published-date": "",
|
||||
"cf-date": "",
|
||||
"physical-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"pdf-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"cf-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
}
|
||||
},
|
||||
"LEG06": {
|
||||
"code": "LEG06",
|
||||
"title": "Équipées",
|
||||
"author": [
|
||||
"Caroline ‘Laufey’ Paës",
|
||||
"Thomas ‘Kaer’ Navarro",
|
||||
" Laurent ‘Akila’ Marrie",
|
||||
"Léopold Maçon-Dauxerre",
|
||||
"Team Agate"
|
||||
],
|
||||
"desc": [
|
||||
"Un recueil de 5 aventures pleines d'incidents et d'embuscades"
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\LEG06_BC_FR.png",
|
||||
"alt": "LEG06_BC_FR",
|
||||
"title": "Équipées"
|
||||
},
|
||||
"published-date": "",
|
||||
"cf-date": "",
|
||||
"physical-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"pdf-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"cf-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
}
|
||||
},
|
||||
"LEG05": {
|
||||
"code": "LEG05",
|
||||
"title": "Incidents",
|
||||
"author": [
|
||||
"Azaghâl",
|
||||
"Christian Perrot",
|
||||
"Valentine Voisin",
|
||||
"William Perceval ‘Merlin’ Huber",
|
||||
"Team Agate"
|
||||
],
|
||||
"desc": [
|
||||
"5 aventures pleines de péripéties urbaines et d’improvisation"
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\LEG05_BC_FR.png",
|
||||
"alt": "LEG05_BC_FR",
|
||||
"title": "Incidents"
|
||||
},
|
||||
"published-date": "",
|
||||
"cf-date": "",
|
||||
"physical-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"pdf-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"cf-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
}
|
||||
},
|
||||
"LEG04": {
|
||||
"code": "LEG04",
|
||||
"title": "La Complainte du Papillon",
|
||||
"author": [
|
||||
"Benjamin Diebling"
|
||||
],
|
||||
"desc": [
|
||||
"*Jadis, Noctui était un village au demeurant austère, mais où il faisait bon vivre au pied des monts du Crépuscule. Aujourd’hui, ses ruines macabres évoquent la tragédie d’un passé qui refuse de mourir.*",
|
||||
"Guidés par des visions cauchemardesques et des récits évoquant une page sombre de l’histoire, les aventuriers répondent à un sinistre appel. Sauront-ils dénouer l’écheveau et faire la lumière sur les mystères qui entourent ce lieu hors du temps ? Ils évolueront entre les souvenirs perdus, guidés par les étranges nuées de papillons d’outre-tombe.",
|
||||
"**La complainte du papillon** est une aventure pour un groupe de personnages de niveau 3 à 5 et se déroule dans les Drakenbergen. Elle utilise les règles de la 5e édition du plus mythique des jeux de rôle. Écrit par Benjamin Diebling, ce module est conçu pour être joué de manière autonome. Les découvertes qu’il réserve peuvent être le point de départ d’une campagne ou de nouvelles péripéties."
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\LEG04_BC_FR.png",
|
||||
"alt": "LEG04_BC_FR",
|
||||
"title": "La Complainte du Papillon"
|
||||
},
|
||||
"published-date": "",
|
||||
"cf-date": "",
|
||||
"physical-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"pdf-link": {
|
||||
"title": "Acheter le pdf",
|
||||
"href": "https://www.drivethrurpg.com/product/422923/Dragons--Aventures--La-Complainte-du-Papillon"
|
||||
},
|
||||
"cf-link": {
|
||||
"title": "Ulule",
|
||||
"href": "https://fr.ulule.com/dragons-5e/"
|
||||
}
|
||||
},
|
||||
"LEG03": {
|
||||
"code": "LEG03",
|
||||
"title": "Le Chronolithe",
|
||||
"author": [
|
||||
"Eric Nieudan"
|
||||
],
|
||||
"desc": [
|
||||
"*Quand une mission simple se transforme en combat de chaque instant… Qui aurait pu deviner que cette petite vallée à la frontière du royaume abritait une magie capable de forcer les portes du temps ?*",
|
||||
"La passe de Tahenn est une petite vallée oubliée, perdue dans les Drakenbergen. Une mission d’apparence ordinaire amène les aventuriers à s’enfoncer dans une antique ruine, contenant le mystérieux et puissant chronolithe. Hélas, une catastrophe temporelle complique singulièrement la donne et amène les aventuriers à explorer aussi bien l’espace de cette région que ses temps passés !",
|
||||
"**Le Chronolithe** est une aventure pour un groupe de personnages de niveau 1 à 5, et se déroule dans une vallée des Drakenbergen. Elle utilise les règles de la 5e édition du plus mythique des jeux de rôle. Écrit par Éric Nieudan, ce module est conçu pour être joué de manière autonome, sous la forme d’une petite campagne de type « bac à sable », riche en imprévu et en rebondissements."
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\LEG03_BC_FR.png",
|
||||
"alt": "LEG03_BC_FR",
|
||||
"title": "Le Chronolithe"
|
||||
},
|
||||
"published-date": "",
|
||||
"cf-date": "",
|
||||
"physical-link": {
|
||||
"title": "",
|
||||
"href": ""
|
||||
},
|
||||
"pdf-link": {
|
||||
"title": "Acheter le pdf",
|
||||
"href": "https://www.drivethrurpg.com/product/422921/Dragons--Aventures--Le-Chronolithe?src=also_purchased"
|
||||
},
|
||||
"cf-link": {
|
||||
"title": "Ulule",
|
||||
"href": "https://fr.ulule.com/dragons-5e/"
|
||||
}
|
||||
},
|
||||
"LEG02": {
|
||||
"code": "LEG02",
|
||||
"title": "Fort Ardraco",
|
||||
"author": [
|
||||
"Ed Greenwood"
|
||||
],
|
||||
"desc": [
|
||||
"*« Alors Kuldur aussi s’est fait enlever ? Maintenant ça fait quoi, trois magiciens et quatre prêtres ? Et à chaque fois, on a retrouvé la marque du dragon dessinée avec du sang sur le lieu de l’enlèvement ! Qu’est-ce que ça peut bien signifier ? »*",
|
||||
"Cet emblème ressemble à l’ancien blason de la maison Ardraco, éteinte depuis bien longtemps. Sa demeure ancestrale en ruine est au cœur de nombreuses rumeurs dans la région. Perdu au milieu d’une forêt dense et sinistre, le fort attend que des aventuriers viennent lever le voile sur ses mystères.",
|
||||
"**Fort Adraco** est une aventure pour un groupe de personnages de niveau 1 à 5, comportant au moins un lanceur de sort éveillé à la magie. Elle utilise les règles de la 5e édition du plus mythique des jeux de rôle. Écrit par le légendaire Ed Greenwood, ce module peut être joué de manière autonome ou utilisé par le meneur comme un point de départ pour une campagne plus vaste."
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\LEG02_BC_FR.png",
|
||||
"alt": "LEG02_BC_FR",
|
||||
"title": "Fort Ardraco"
|
||||
},
|
||||
"published-date": "",
|
||||
"cf-date": "",
|
||||
"cf-link": {
|
||||
"title": "Ulule",
|
||||
"href": "https://fr.ulule.com/dragons-5e/"
|
||||
}
|
||||
},
|
||||
"LEG01": {
|
||||
"code": "LEG01",
|
||||
"title": "Une invitation à Griseflore",
|
||||
"author": [
|
||||
"Fabien Fernandez"
|
||||
],
|
||||
"desc": [
|
||||
"*« Chers amis,*"," *C’est avec joie que je vous attends pour mon mariage d’ici douze jours à Griseflore. Cette fois, c’est la retraite dorée. Terminés les risques inutiles de la magie et des souterrains, je me marie avec Yrsaelle Hederas loin de toute invocation dangereuse. Je vous convie donc à célébrer mes épousailles autour d’un banquet et d’une somptueuse cérémonie.*",
|
||||
"*P S : Griseflore est une zone de magie morte, faites attention à ce que vous emportez. »*",
|
||||
"Griseflore est une petite ville tranquille dirigée par quatre anciennes familles. Située dans une région prospère à l’écart des grandes routes marchandes, c’est un endroit où il fait bon vivre. Tanael, un ami des aventuriers, a décidé de s’y installer pour couler des jours heureux en se mariant avec une femme du pays. Mais comme souvent, rien ne se passe comme prévu, et l’arrivée des aventuriers va rapidement révéler les secrets honteux ou criminels des uns et des autres.",
|
||||
"**Une invitation à Griseflore** est une aventure pour un groupe de personnages de niveau 4 à 6, et se déroule dans une zone de magie morte des alentours de la Cité Franche, ou de toute autre grande cité de votre cadre de campagne. Elle utilise les règles de la 5e édition du plus mythique des jeux de rôle. Écrit par Fabien Fernandez, ce module est conçu pour être joué de manière autonome, en constituant par exemple une digression au cours d’une campagne."
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\LEG01_BC_FR.png",
|
||||
"alt": "LEG01_BC_FR",
|
||||
"title": "Une invitation à Griseflore"
|
||||
},
|
||||
"published-date": "01/03/2023",
|
||||
"cf-date": "",
|
||||
"physical-link": {
|
||||
"title": "Acheter un exemplaire",
|
||||
"href": ""
|
||||
},
|
||||
"pdf-link": {
|
||||
"title": "Acheter le pdf",
|
||||
"href": "https://www.drivethrurpg.com/product/422927/Dragons--Aventures--Une-invitation-a-Griseflore"
|
||||
},
|
||||
"cf-link": {
|
||||
"title": "Ulule",
|
||||
"href": "https://fr.ulule.com/dragons-5e/"
|
||||
}
|
||||
},
|
||||
"ENC01": {
|
||||
"code": "ENC01",
|
||||
"title": "Encyclopédie",
|
||||
"author": [
|
||||
"Team Agate"
|
||||
],
|
||||
"desc": [
|
||||
"Ce livre pour le jeu Dragons, est un recueil décrivant 4 contrées du monde d’Eana :",
|
||||
"- **Cité Franche**. Plus grande ville du monde et cité cosmopolite, la Cité Franche est le lieu idéal pour des aventures urbaines. Notables, marchands, érudits et criminels cohabitent et jouent de leur influence pour servir leurs ambitions.",
|
||||
"- **Drakenbergen**. Coeur du Cyfandir, les Drakenbergen sont un immense territoire montagneux bien connu des nains qui contrôlent les routes marchandes de la surface et de l’Inframonde. Ces reliefs sont le terrain idéal pour des explorations de ruines et de vallées perdues.",
|
||||
"- **Septentrion**. Territoire nordique et sauvage, le Septentrion est une contrée rude et riche de secrets remontant à l’antique civilisation boréale. Les géants de givre et les manigances de l’hospodar diabolique Askinos le buveur de douleur pourraient bien faire de ces terres un enfer !",
|
||||
"- **Kaan**. Immense et contrasté, fait de hautes montagnes et de steppes infinies, tantôt brûlant, tantôt glacé, le Kaan est un appel constant au courage et à l’initiative. Les peuples merosis, orcs, gobelins, gobelours, hobgobelins, ulkani et humains y ont tissés des sociétés cosmopolites, tandis que, dans l’ombre, de puissants pouvoirs magiques ont grandi.",
|
||||
"Ce sont quatre grandes civilisations à part entière qui vous sont présentées. Vous découvrirez leurs Chroniques qui reprennent l’historique de ces territoires touchant au domaine arcanique, religieux ou encore politique..; leur Culture avec la vie quotidienne, l’artisanat, les mœurs… ; leurs Territoires dévoilant chaque quartier, monument, commerce, et même des personnages importants… ; leurs Merveilles avec des objets typiques, parfois magiques ou légendaires… Enfin, des annexes vous permettront de tout savoir sur l’utilisation des objets magiques, avec des règles utilisant le système modulaire, ainsi qu’un lexique qui vous fournira de précieux aide-mémoires pour préparer vos aventures !"
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\ENC01_BC_FR.png",
|
||||
"alt": "ENC01_BC_FR",
|
||||
"title": "ENC01_BC_FR"
|
||||
},
|
||||
"published-date": "20/12/2020",
|
||||
"cf-date": "14/03/2016",
|
||||
"physical-link": {
|
||||
"title": "Acheter un exemplaire",
|
||||
"href": "http://www.ludospherik.fr/dragons-dd-5-ogl-5/21212-dragons-4-encyclopedie-jdr-dd-5-de-studio-agate-en-vf-9782491139230.html"
|
||||
},
|
||||
"pdf-link": {
|
||||
"title": "Acheter le pdf",
|
||||
"href": "https://www.drivethrurpg.com/product/422892/Dragons--4--Livre-dunivers--Encyclopedie?src=hottest_filtered"
|
||||
},
|
||||
"cf-link": {
|
||||
"title": "Ulule",
|
||||
"href": "https://fr.ulule.com/dragons-5e/"
|
||||
}
|
||||
},
|
||||
"CRE01": {
|
||||
"code": "CRE01",
|
||||
"title": "Créatures",
|
||||
"author": [
|
||||
"Team Agate"
|
||||
],
|
||||
"desc": [
|
||||
"Un recueil de plus de 200 monstres, animaux et personnages compatibles avec la 5e édition du plus fameux des jeux de rôle.",
|
||||
"Il présente des rencontres et des dangers dans des contrées allant des zones urbaines aux régions polaires. Si votre campagne a lieu dans l’univers d’Eana, vous en apprendrez plus sur la Cité Franche, les Drakenbergen, le Septentrion, le plan maléfique des Gémonies et le Kaan.",
|
||||
"Vous y découvrirez en plus : ",
|
||||
"- Des archétypes inédits",
|
||||
"- De nouvelles espèces jouables",
|
||||
"- Des enjeux pour tous niveaux",
|
||||
"- Des périls et des pièges"
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\CRE01_BC_FR.png",
|
||||
"alt": "CRE01_BC_FR",
|
||||
"title": "CRE01_BC_FR"
|
||||
},
|
||||
"published-date": "14/10/2020",
|
||||
"cf-date": "14/03/2016",
|
||||
"physical-link": {
|
||||
"title": "Acheter un exemplaire",
|
||||
"href": "https://www.philibertnet.com/fr/dragons/119307-dragons-3-creatures-9782491139247.html"
|
||||
},
|
||||
"pdf-link": {
|
||||
"title": "Acheter le pdf",
|
||||
"href": "https://www.drivethrurpg.com/product/422890/Dragons--3--Bestiaire--Creatures?src=hottest_filtered"
|
||||
},
|
||||
"cf-link": {
|
||||
"title": "Ulule",
|
||||
"href": "https://fr.ulule.com/dragons-5e/"
|
||||
}
|
||||
},
|
||||
"GRI01": {
|
||||
"code": "GRI01",
|
||||
"title": "Grimoire",
|
||||
"author": [
|
||||
"Team Agate"
|
||||
],
|
||||
"desc": [
|
||||
"**GRIMOIRE** est le deuxième volume de la gamme de jeu de rôle DRAGONS. Dédié à la magie et aux lanceurs de sorts, il traite les sujets suivants :",
|
||||
"- **Magie modulaire** : le système modulaire vous permet d'adapter le jeu à la mise en scène que vous souhaitez, d'une fantasy débridée à une approche beaucoup plus sobre et subtile.",
|
||||
"- **Eveil** : seuls ceux qui ont connu l'Eveil peuvent lancer des sorts, ce chapitre révèle ses mystères et ses périls.",
|
||||
"- **Géomagie** : la géomagie et ses variantes influencent directement la région qu'elles affectent.",
|
||||
"- **Corruption** : la corruption transforme le corps et l'âme.",
|
||||
"- **Sorts** : plus de 360 sorts permettant d'explorer tous les aspects de la magie."
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\GRI01_BC_FR.png",
|
||||
"alt": "GRI01_BC_FR",
|
||||
"title": "GRI01_BC_FR"
|
||||
},
|
||||
"published-date": "12/10/2019",
|
||||
"cf-date": "14/03/2016",
|
||||
"physical-link": {
|
||||
"title": "Acheter un exemplaire",
|
||||
"href": "https://www.philibertnet.com/fr/dragons/107373-dragons-2-grimoire-9781234567897.html"
|
||||
},
|
||||
"pdf-link": {
|
||||
"title": "Acheter le pdf",
|
||||
"href": "https://www.drivethrurpg.com/product/422888/Dragons--2--Livre-de-magie--Grimoire"
|
||||
},
|
||||
"cf-link": {
|
||||
"title": "Ulule",
|
||||
"href": "https://fr.ulule.com/dragons-5e/"
|
||||
}
|
||||
},
|
||||
"ADV01": {
|
||||
"code": "ADV01",
|
||||
"title": "Aventuriers",
|
||||
"author": [
|
||||
"Team Agate"
|
||||
],
|
||||
"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."
|
||||
],
|
||||
"cover": {
|
||||
"src": "img\\books\\ADV01_BC_FR.png",
|
||||
"alt": "ADV01_BC_FR",
|
||||
"title": "ADV01_BC_FR"
|
||||
},
|
||||
"published-date": "01/04/2018",
|
||||
"cf-date": "14/03/2016",
|
||||
"physical-link": {
|
||||
"title": "Acheter un exemplaire",
|
||||
"href": "https://www.philibertnet.com/fr/dragons/62090-dragons-1-aventuriers-livre-de-base-9782919256365.html"
|
||||
},
|
||||
"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/"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,9 +1,9 @@
|
|||
{
|
||||
"spell": [
|
||||
{
|
||||
"id": 0,
|
||||
"recid": 0,
|
||||
"name": "Acid Arrow",
|
||||
"source": "GRI",
|
||||
"source": "GRI01",
|
||||
"page": 110,
|
||||
"srd": true,
|
||||
"level": 2,
|
||||
|
@ -35,14 +35,13 @@
|
|||
"A shimmering green arrow streaks toward a target within range and bursts in a spray of acid."
|
||||
],
|
||||
"damageInflict": ["acid"],
|
||||
"savingThrow": [""],
|
||||
"miscTags": ["", ""],
|
||||
"areaTags": ["", ""]
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"recid": 1,
|
||||
"name": "Acid Blob",
|
||||
"source": "GRI",
|
||||
"source": "GRI01",
|
||||
"page": 110,
|
||||
"srd": false,
|
||||
"level": 1,
|
||||
|
@ -73,7 +72,44 @@
|
|||
"A yellowish bubble shoots from your pointed finger toward a creature of your choice within range"
|
||||
],
|
||||
"damageInflict": ["acid"],
|
||||
"savingThrow": [""],
|
||||
"miscTags": ["", ""],
|
||||
"areaTags": ["", ""]
|
||||
},
|
||||
{
|
||||
"recid": 2,
|
||||
"name": "Acid Splash",
|
||||
"source": "GRI01",
|
||||
"page": 126,
|
||||
"srd": true,
|
||||
"level": 1,
|
||||
"school": "I",
|
||||
"time": [
|
||||
{
|
||||
"number": 1,
|
||||
"unit": "action"
|
||||
}
|
||||
],
|
||||
"range": {
|
||||
"type": "point",
|
||||
"distance": {
|
||||
"type": "feet",
|
||||
"amount": 60
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"v": true,
|
||||
"s": true
|
||||
},
|
||||
"duration": [
|
||||
{
|
||||
"type": "instant"
|
||||
}
|
||||
],
|
||||
"desc": [
|
||||
"You hurl a bubble of acid. "
|
||||
],
|
||||
"damageInflict": ["acid"],
|
||||
"savingThrow": ["Dex"],
|
||||
"miscTags": ["", ""],
|
||||
"areaTags": ["", ""]
|
||||
}
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
{
|
||||
"spell": [
|
||||
{
|
||||
"id": 0,
|
||||
"recid": 0,
|
||||
"name": "Flèche Acide",
|
||||
"source": "GRI",
|
||||
"source": "GRI01",
|
||||
"page": 188,
|
||||
"srd": true,
|
||||
"level": 2,
|
||||
|
@ -40,9 +40,9 @@
|
|||
"areaTags": ["", ""]
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"recid": 1,
|
||||
"name": "Bille Acide",
|
||||
"source": "GRI",
|
||||
"source": "GRI01",
|
||||
"page": 134,
|
||||
"srd": false,
|
||||
"level": 1,
|
||||
|
@ -76,6 +76,44 @@
|
|||
"savingThrow": ["Constitution"],
|
||||
"miscTags": ["", ""],
|
||||
"areaTags": ["", ""]
|
||||
},
|
||||
{
|
||||
"recid": 2,
|
||||
"name": "Aspersion acide",
|
||||
"source": "GRI01",
|
||||
"page": 126,
|
||||
"srd": true,
|
||||
"level": 1,
|
||||
"school": "I",
|
||||
"time": [
|
||||
{
|
||||
"number": 1,
|
||||
"unit": "action"
|
||||
}
|
||||
],
|
||||
"range": {
|
||||
"type": "point",
|
||||
"distance": {
|
||||
"type": "m",
|
||||
"amount": 18
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"v": true,
|
||||
"s": true
|
||||
},
|
||||
"duration": [
|
||||
{
|
||||
"type": "instant"
|
||||
}
|
||||
],
|
||||
"desc": [
|
||||
"Vous lancez une bulle d’acide. "
|
||||
],
|
||||
"damageInflict": ["acid"],
|
||||
"savingThrow": ["Dexterity"],
|
||||
"miscTags": ["", ""],
|
||||
"areaTags": ["", ""]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
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"
|
||||
]
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
]
|
||||
|
||||
}
|
25
footer.html
Normal file
|
@ -0,0 +1,25 @@
|
|||
<small style="text-align: center;">
|
||||
<p xmlns:cc="http://creativecommons.org/ns#" xmlns:dct="http://purl.org/dc/terms/">
|
||||
<a property="dct:title" rel="cc:attributionURL" href="http://fateforge.tool">fateforge.tool</a>
|
||||
by <span property="cc:attributionName">Lucastucious</span> is licensed
|
||||
under
|
||||
<a href="http://creativecommons.org/licenses/by-nc/4.0/?ref=chooser-v1" target="_blank"
|
||||
rel="license noopener noreferrer" style="display: inline-block">CC BY-NC 4.0<img style="
|
||||
height: 22px !important;
|
||||
margin-left: 3px;
|
||||
vertical-align: text-bottom;
|
||||
" src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1" /><img style="
|
||||
height: 22px !important;
|
||||
margin-left: 3px;
|
||||
vertical-align: text-bottom;
|
||||
" src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1" /><img style="
|
||||
height: 22px !important;
|
||||
margin-left: 3px;
|
||||
vertical-align: text-bottom;
|
||||
" src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1" /></a>
|
||||
</p>
|
||||
<div class="CUVD">
|
||||
<p data-localize="CUVD">CUVD
|
||||
<p data-localize="link"></a>
|
||||
</div>
|
||||
</small>
|
BIN
img/books/ADV01_BC_EN.png
Normal file
After Width: | Height: | Size: 2.8 MiB |
BIN
img/books/ADV01_BC_FR.png
Normal file
After Width: | Height: | Size: 3.2 MiB |
BIN
img/books/ADV01_BC_Textless.png
Normal file
After Width: | Height: | Size: 3.3 MiB |
BIN
img/books/ADV01_RD_FR.png
Normal file
After Width: | Height: | Size: 3 MiB |
BIN
img/books/ADV01_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/CRE01_BC_EN.png
Normal file
After Width: | Height: | Size: 2.8 MiB |
BIN
img/books/CRE01_BC_FR.png
Normal file
After Width: | Height: | Size: 3 MiB |
BIN
img/books/CRE01_RD_EN.png
Normal file
After Width: | Height: | Size: 3.3 MiB |
BIN
img/books/CRE01_RD_FR.png
Normal file
After Width: | Height: | Size: 2.8 MiB |
BIN
img/books/CRE01_RD_Textless.png
Normal file
After Width: | Height: | Size: 3.1 MiB |
BIN
img/books/CRE02_BC_EN.png
Normal file
After Width: | Height: | Size: 2.9 MiB |
BIN
img/books/CRE02_BC_FR.png
Normal file
After Width: | Height: | Size: 2.9 MiB |
BIN
img/books/CRE02_DR_FR.png
Normal file
After Width: | Height: | Size: 2.8 MiB |
BIN
img/books/DRA-ECR-CITE-FR_large.png
Normal file
After Width: | Height: | Size: 336 KiB |
BIN
img/books/DRA-ECR-DR_large.png
Normal file
After Width: | Height: | Size: 394 KiB |
BIN
img/books/DRA_ANN-E2_large.jpg
Normal file
After Width: | Height: | Size: 138 KiB |
BIN
img/books/DRA_ANN_Voyage_large.jpg
Normal file
After Width: | Height: | Size: 137 KiB |
BIN
img/books/DRA_ECR-GV_large.png
Normal file
After Width: | Height: | Size: 388 KiB |
BIN
img/books/DRA_ECR-Netherworld_large.png
Normal file
After Width: | Height: | Size: 385 KiB |
BIN
img/books/ECR_GV.jpg
Normal file
After Width: | Height: | Size: 206 KiB |
BIN
img/books/ENC01_BC_EN.png
Normal file
After Width: | Height: | Size: 2.4 MiB |
BIN
img/books/ENC01_BC_FR.png
Normal file
After Width: | Height: | Size: 2.7 MiB |
BIN
img/books/ENC01_DR_FR.png
Normal file
After Width: | Height: | Size: 3.1 MiB |
BIN
img/books/ENC02_BC_FR.png
Normal file
After Width: | Height: | Size: 3.2 MiB |
BIN
img/books/ENC02_RD_FR.png
Normal file
After Width: | Height: | Size: 3 MiB |
BIN
img/books/GRI01_BC_EN.png
Normal file
After Width: | Height: | Size: 3.1 MiB |
BIN
img/books/GRI01_BC_FR.png
Normal file
After Width: | Height: | Size: 3.5 MiB |
BIN
img/books/GRI01_BC_Textless.png
Normal file
After Width: | Height: | Size: 2.9 MiB |
BIN
img/books/GRI01_RD_FR.png
Normal file
After Width: | Height: | Size: 2.7 MiB |
BIN
img/books/GRI01_RD_Textless.png
Normal file
After Width: | Height: | Size: 2 MiB |
BIN
img/books/GRI02_BC_FR.png
Normal file
After Width: | Height: | Size: 3.2 MiB |
BIN
img/books/GUI01_BC_EN.png
Normal file
After Width: | Height: | Size: 2.7 MiB |
BIN
img/books/GUI01_BC_FR.png
Normal file
After Width: | Height: | Size: 2.8 MiB |
BIN
img/books/GUI02_BC_FR.png
Normal file
After Width: | Height: | Size: 3.5 MiB |
BIN
img/books/LEG01_BC_FR.png
Normal file
After Width: | Height: | Size: 3 MiB |
BIN
img/books/LEG02_BC_EN.png
Normal file
After Width: | Height: | Size: 2.3 MiB |
BIN
img/books/LEG02_BC_FR.png
Normal file
After Width: | Height: | Size: 3 MiB |
BIN
img/books/LEG02_BC_Textless.png
Normal file
After Width: | Height: | Size: 2.8 MiB |
BIN
img/books/LEG03_BC_EN.png
Normal file
After Width: | Height: | Size: 3.1 MiB |
BIN
img/books/LEG03_BC_FR.png
Normal file
After Width: | Height: | Size: 3.2 MiB |
BIN
img/books/LEG04_BC_EN.png
Normal file
After Width: | Height: | Size: 2.6 MiB |
BIN
img/books/LEG04_BC_FR.png
Normal file
After Width: | Height: | Size: 2.7 MiB |
BIN
img/books/LEG05_BC_FR.png
Normal file
After Width: | Height: | Size: 2.5 MiB |
BIN
img/books/LEG06_BC_FR.png
Normal file
After Width: | Height: | Size: 2.4 MiB |
BIN
img/books/LEG07_BC_FR.png
Normal file
After Width: | Height: | Size: 2.4 MiB |
BIN
img/books/LEG08_BC_FR.png
Normal file
After Width: | Height: | Size: 2.6 MiB |
BIN
img/books/LEG09_BC_FR.png
Normal file
After Width: | Height: | Size: 2.4 MiB |
BIN
img/books/LEG10_BC_FR.png
Normal file
After Width: | Height: | Size: 2.4 MiB |
BIN
img/books/LEG10_BC_FR_OLD.png
Normal file
After Width: | Height: | Size: 2.3 MiB |
BIN
img/books/LEG11_BC_FR.png
Normal file
After Width: | Height: | Size: 2.8 MiB |
BIN
img/books/LEG12_BC_EN.png
Normal file
After Width: | Height: | Size: 2.2 MiB |
BIN
img/books/LEG12_BC_FR.png
Normal file
After Width: | Height: | Size: 2.2 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 |
80
index.html
|
@ -1,68 +1,66 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
<!DOCTYPE html>
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>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 rel="icon" type="image/x-icon" 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.localize-dev.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<button onclick="changeLangEN()">English</button>
|
||||
<button onclick="changeLangFR()">French</button>
|
||||
|
||||
<h1>FateforgeTools</h1>
|
||||
<div data-localize="desc">
|
||||
A suite of tools for Fateforge players and Masters.
|
||||
</div>
|
||||
<header>
|
||||
<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 data-localize="desc">
|
||||
A suite of tools for Fateforge players and Masters.
|
||||
</div>
|
||||
</header>
|
||||
<br>
|
||||
<div class="tools">
|
||||
<button onclick="window.location.href='spells.html';">
|
||||
<div><i class="fa-solid fa-wand-sparkles"></i></div>
|
||||
<div data-localize="btn-spells">spells</div>
|
||||
</button>
|
||||
<button onclick="window.location.href='monsters.html';">
|
||||
<button onclick="window.location.href='monsters.html';" disabled>
|
||||
<div><i class="fa-solid fa-dragon"></i></div>
|
||||
<div data-localize="btn-monsters">monsters</div>
|
||||
</button>
|
||||
<button onclick="window.location.href='items.html';">
|
||||
<button onclick="window.location.href='items.html';" disabled>
|
||||
<div><i class="fa-solid fa-hand-sparkles"></i></div>
|
||||
<div data-localize="btn-items">items</div>
|
||||
</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>
|
||||
<button onclick="window.location.href='timeline.html';">
|
||||
<div><i class="fa-solid fa-timeline"></i></div>
|
||||
<div data-localize="btn-timeline">timeline</div>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<footer style="text-align: center;">
|
||||
<p xmlns:cc="http://creativecommons.org/ns#" xmlns:dct="http://purl.org/dc/terms/">
|
||||
<a property="dct:title" rel="cc:attributionURL" href="http://fateforge.tool">fateforge.tool</a>
|
||||
by <span property="cc:attributionName">Lucas Peter</span> is licensed
|
||||
under
|
||||
<a href="http://creativecommons.org/licenses/by-nc/4.0/?ref=chooser-v1" target="_blank"
|
||||
rel="license noopener noreferrer" style="display: inline-block">CC BY-NC 4.0<img style="
|
||||
height: 22px !important;
|
||||
margin-left: 3px;
|
||||
vertical-align: text-bottom;
|
||||
" src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1" /><img style="
|
||||
height: 22px !important;
|
||||
margin-left: 3px;
|
||||
vertical-align: text-bottom;
|
||||
" src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1" /><img style="
|
||||
height: 22px !important;
|
||||
margin-left: 3px;
|
||||
vertical-align: text-bottom;
|
||||
" src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1" /></a>
|
||||
</p>
|
||||
<div class="CUVD" > <p data-localize="CUVD">CUVD
|
||||
<p data-localize="link"></a></div>
|
||||
</footer>
|
||||
<div id="footer"></div>
|
||||
|
||||
<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="js/language.js"></script>
|
||||
<script type="text/javascript" src="js/footer.js"></script>
|
||||
<script async type="text/javascript" src="js/language.js"></script>
|
||||
|
||||
<script src="https://kit.fontawesome.com/126cdd0e29.js" crossorigin="anonymous"></script>
|
||||
<script rel="preload" src="https://kit.fontawesome.com/126cdd0e29.js" crossorigin="anonymous"></script>
|
||||
|
||||
|
||||
</body>
|
||||
|
|
72
js/books.js
Normal file
|
@ -0,0 +1,72 @@
|
|||
var lastbook;
|
||||
var currentbook;
|
||||
|
||||
fetch("/data/books-en.json")
|
||||
.then((response) => response.json())
|
||||
.then((data) => {
|
||||
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 flkty = new Flickity(".gallery", {
|
||||
freeScroll: true,
|
||||
wrapAround: true,
|
||||
hash: true,
|
||||
imagesLoaded: true,
|
||||
percentPosition: false // options
|
||||
});
|
||||
refreshBooks();
|
||||
currentbook = document
|
||||
.getElementsByClassName("gallery-cell is-selected")[0]
|
||||
.getAttribute("id");
|
||||
fillBookView();
|
||||
|
||||
flkty.on("select", function (index) {
|
||||
currentbook = document
|
||||
.getElementsByClassName("gallery-cell is-selected")[0]
|
||||
.getAttribute("id");
|
||||
if (currentbook == lastbook) {
|
||||
return;
|
||||
}
|
||||
fillBookView();
|
||||
});
|
||||
|
||||
flkty.on( 'staticClick', function( event, pointer, cellElement, cellIndex ) {
|
||||
if ( typeof cellIndex == 'number' ) {
|
||||
flkty.selectCell( cellIndex );
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function fillBookView() {
|
||||
var bookAttributes = [
|
||||
"book_title",
|
||||
"book_desc",
|
||||
"book_cf-date",
|
||||
"book_physical-link",
|
||||
"book_pdf-link",
|
||||
"book_cf-link",
|
||||
"book_author"
|
||||
];
|
||||
bookAttributes.forEach(function (attr) {
|
||||
setLocalizeDataAttr(attr, currentbook + "." + attr.split("_")[1]);
|
||||
});
|
||||
lastbook = currentbook;
|
||||
console.log(currentLang);
|
||||
//call to language.js
|
||||
refreshBooks();
|
||||
}
|
5
js/footer.js
Normal file
|
@ -0,0 +1,5 @@
|
|||
$(function () {
|
||||
$("#footer").load("footer.html", function (responseTxt, statusTxt, xhr) {
|
||||
refreshLoc();
|
||||
});
|
||||
});
|
|
@ -1,17 +1,41 @@
|
|||
// In a browser where the language is set to French
|
||||
$("[data-localize]").localize("main", { pathPrefix: "lang" });
|
||||
localize();
|
||||
|
||||
var currentLang;
|
||||
// You can also override the language detection, and pass in a language code
|
||||
//$("[data-localize]").localize("main", { language: "fr" });
|
||||
function changeLangFR() {
|
||||
$("[data-localize]").localize("main", {
|
||||
pathPrefix: "lang",
|
||||
language: "fr",
|
||||
localize("fr");
|
||||
}
|
||||
|
||||
// This code defines a function that sets the language to English.
|
||||
function changeLangEN() {
|
||||
localize("en");
|
||||
}
|
||||
|
||||
function refreshBooks() {
|
||||
$("[data-localize]").localize("books", {
|
||||
pathPrefix: "data",
|
||||
language: currentLang,
|
||||
});
|
||||
}
|
||||
function changeLangEN() {
|
||||
$("[data-localize]").localize("main", {
|
||||
pathPrefix: "lang",
|
||||
language: "en",
|
||||
|
||||
function refreshLoc() {
|
||||
localize(currentLang);
|
||||
}
|
||||
|
||||
// Function to fill a data-localize attribute and update DOM
|
||||
function setLocalizeDataAttr(id, dataValue) {
|
||||
const all = $('[id="' + id + '"]');
|
||||
all.each(function() {
|
||||
console.log(this.id)
|
||||
$(this).data("localize", dataValue).attr("data-localize", dataValue);
|
||||
});
|
||||
}
|
||||
|
||||
function localize(lang) {
|
||||
$("[data-localize]")
|
||||
.localize("main", { pathPrefix: "lang", language: lang })
|
||||
.localize("books", { pathPrefix: "data", language: lang });
|
||||
currentLang=lang;
|
||||
}
|
108
js/spells.js
|
@ -0,0 +1,108 @@
|
|||
// Get the spell json based on choosen language defaultLanguage
|
||||
|
||||
var jsonsource = "".concat(
|
||||
"../data/spells/spells-grimoire-",
|
||||
$.defaultLanguage.slice(0, 2),
|
||||
".json"
|
||||
);
|
||||
var alldata;
|
||||
// Fetch data from server
|
||||
fetch(jsonsource)
|
||||
.then((response) => response.json())
|
||||
.then((data) => {
|
||||
// load fetched data into grid
|
||||
alldata = data.spell;
|
||||
console.log(alldata);
|
||||
|
||||
//document.getElementById("spell-list")
|
||||
var grid = $("#spell-list").w2grid({
|
||||
name: "Spells",
|
||||
box: "#spellgrid",
|
||||
show: {
|
||||
header: false,
|
||||
toolbar: true,
|
||||
footer: false,
|
||||
selectColumn: true,
|
||||
},
|
||||
multiSelect: true,
|
||||
liveSearch: true,
|
||||
multiSearch: true,
|
||||
fixedBody: false,
|
||||
records: alldata,
|
||||
columns: [
|
||||
{
|
||||
field: "name",
|
||||
text: "Name",
|
||||
sortable: true,
|
||||
resizable: true,
|
||||
searchable: { operator: "contains" },
|
||||
},
|
||||
{
|
||||
field: "desc",
|
||||
text: "Description",
|
||||
size: "500%",
|
||||
style: "test",
|
||||
resizable: true,
|
||||
searchable: { operator: "contains" },
|
||||
render(record, extra) {
|
||||
return (
|
||||
'<a href="http://w2ui.com" target="_blank" title="Click Me!"><u>' +
|
||||
extra.value +
|
||||
"</u></a>"
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
field: "source",
|
||||
text: "Source",
|
||||
sortable: true,
|
||||
tooltip: "Which book is this from ?",
|
||||
searchable: { operator: "contains" },
|
||||
},
|
||||
{ field: "page", text: "Page", sortable: true },
|
||||
{ field: "level", text: "Level", sortable: true, size: 65 },
|
||||
{ field: "school", text: "School", sortable: true },
|
||||
{
|
||||
field: "components",
|
||||
text: '<span data-localize="gridColumns.components">Components</span>',
|
||||
render(record) {
|
||||
var v = record.components.v
|
||||
? '<span data-localize="verbal">V</span>'
|
||||
: "";
|
||||
var s = record.components.s ? '<span data-localize="somatic">S</span>' : "";
|
||||
var m = record.components.m ? '<span data-localize="material">M</span>' : "";
|
||||
//var m = record.components.m ? record.components.m : "";
|
||||
var vs=v.concat(', ',s);
|
||||
return vs.concat(', ',m);
|
||||
if ((record.components.v = true)) {
|
||||
console.log(record.components);
|
||||
}
|
||||
},
|
||||
},
|
||||
{ field: "duration", text: "Duration" },
|
||||
],
|
||||
async onSelect(event) {
|
||||
await event.complete;
|
||||
console.log("select", event.detail, this.getSelection());
|
||||
},
|
||||
onClick(event) {
|
||||
let record = this.get(event.detail.recid);
|
||||
//grid2.clear()
|
||||
/*grid2.add([
|
||||
{ recid: 0, name: 'ID:', value: record.recid },
|
||||
{ recid: 1, name: 'First Name:', value: record.fname },
|
||||
{ recid: 2, name: 'Last Name:', value: record.lname },
|
||||
{ recid: 3, name: 'Email:', value: record.email },
|
||||
{ recid: 4, name: 'Date:', value: record.sdate }
|
||||
])*/
|
||||
console.log(record);
|
||||
},
|
||||
async onRefresh(event) {
|
||||
await event.complete;
|
||||
console.log("Le tableau est généré et le DOM est modifié.");
|
||||
$("[data-localize]").localize("main", { pathPrefix: "lang" }); // mettre votre script ici
|
||||
}
|
||||
|
||||
})
|
||||
});
|
||||
|
|
@ -8,5 +8,11 @@
|
|||
"btn-monsters": "Creatures",
|
||||
"btn-items": "Magic Items",
|
||||
"CUVD": "Unofficial site for Fateforge RPG. Uses copyrighted content © Agate RPG, courtesy of the publisher under the CUVD license.",
|
||||
"link": "Join the community: <a href='https://fateforge.org/en'>https://fateforge.org/en</a>"
|
||||
"link": "Join the community: <a href='https://fateforge.org/en'>https://fateforge.org/en</a>",
|
||||
"verbal": "Verbal",
|
||||
"somatic": "Somatic",
|
||||
"gridColumns":{
|
||||
"components": "Components"
|
||||
},
|
||||
"btn-books": "Books"
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
"btn-spells": "Sorts",
|
||||
"btn-monsters": "Créatures",
|
||||
"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.",
|
||||
"link": "Rejoignez la communauté : <a href='www.dragons-rpg.com'>www.dragons-rpg.com</a>",
|
||||
"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
2
lib/fontawesome.js
Normal file
|
@ -1,4 +1,3 @@
|
|||
|
||||
/*
|
||||
Copyright (c) Jim Garvin (http://github.com/coderifous), 2008.
|
||||
Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses.
|
||||
|
@ -7,18 +6,39 @@ http://github.com/coderifous/jquery-localize
|
|||
Based off of Keith Wood's Localisation jQuery plugin.
|
||||
http://keith-wood.name/localisation.html
|
||||
*/
|
||||
(function($) {
|
||||
(function ($) {
|
||||
var normaliseLang;
|
||||
normaliseLang = function(lang) {
|
||||
lang = lang.replace(/_/, '-').toLowerCase();
|
||||
normaliseLang = function (lang) {
|
||||
lang = lang.replace(/_/, "-").toLowerCase();
|
||||
if (lang.length > 3) {
|
||||
lang = lang.substring(0, 3) + lang.substring(3).toUpperCase();
|
||||
}
|
||||
return lang;
|
||||
};
|
||||
$.defaultLanguage = normaliseLang(navigator.languages && navigator.languages.length > 0 ? navigator.languages[0] : navigator.language || navigator.userLanguage);
|
||||
$.localize = function(pkg, options) {
|
||||
var defaultCallback, deferred, fileExtension, intermediateLangData, jsonCall, lang, loadLanguage, localizeElement, localizeForSpecialKeys, localizeImageElement, localizeInputElement, localizeOptgroupElement, notifyDelegateLanguageLoaded, regexify, setAttrFromValueForKey, setTextFromValueForKey, valueForKey, wrappedSet;
|
||||
$.defaultLanguage = normaliseLang(
|
||||
navigator.languages && navigator.languages.length > 0
|
||||
? navigator.languages[0]
|
||||
: navigator.language || navigator.userLanguage
|
||||
);
|
||||
$.localize = function (pkg, options) {
|
||||
var defaultCallback,
|
||||
deferred,
|
||||
fileExtension,
|
||||
intermediateLangData,
|
||||
jsonCall,
|
||||
lang,
|
||||
loadLanguage,
|
||||
localizeElement,
|
||||
localizeForLink,
|
||||
localizeImageElement,
|
||||
localizeInputElement,
|
||||
localizeOptgroupElement,
|
||||
notifyDelegateLanguageLoaded,
|
||||
regexify,
|
||||
setAttrFromValueForKey,
|
||||
setTextFromValueForKey,
|
||||
valueForKey,
|
||||
wrappedSet;
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
|
@ -26,7 +46,7 @@ http://keith-wood.name/localisation.html
|
|||
intermediateLangData = {};
|
||||
fileExtension = options.fileExtension || "json";
|
||||
deferred = $.Deferred();
|
||||
loadLanguage = function(pkg, lang, level) {
|
||||
loadLanguage = function (pkg, lang, level) {
|
||||
var file;
|
||||
if (level == null) {
|
||||
level = 1;
|
||||
|
@ -42,27 +62,36 @@ http://keith-wood.name/localisation.html
|
|||
}
|
||||
break;
|
||||
case 2:
|
||||
file = "" + pkg + "-" + (lang.split('-')[0]) + "." + fileExtension;
|
||||
file = "" + pkg + "-" + lang.split("-")[0] + "." + fileExtension;
|
||||
return jsonCall(file, pkg, lang, level);
|
||||
case 3:
|
||||
file = "" + pkg + "-" + (lang.split('-').slice(0, 2).join('-')) + "." + fileExtension;
|
||||
file =
|
||||
"" +
|
||||
pkg +
|
||||
"-" +
|
||||
lang.split("-").slice(0, 2).join("-") +
|
||||
"." +
|
||||
fileExtension;
|
||||
return jsonCall(file, pkg, lang, level);
|
||||
default:
|
||||
return deferred.resolve();
|
||||
}
|
||||
};
|
||||
jsonCall = function(file, pkg, lang, level) {
|
||||
jsonCall = function (file, pkg, lang, level) {
|
||||
var ajaxOptions, errorFunc, successFunc;
|
||||
if (options.pathPrefix != null) {
|
||||
file = "" + options.pathPrefix + "/" + file;
|
||||
}
|
||||
successFunc = function(d) {
|
||||
successFunc = function (d) {
|
||||
$.extend(intermediateLangData, d);
|
||||
notifyDelegateLanguageLoaded(intermediateLangData);
|
||||
return loadLanguage(pkg, lang, level + 1);
|
||||
};
|
||||
errorFunc = function() {
|
||||
if (level === 2 && lang.indexOf('-') > -1) {
|
||||
errorFunc = function (xhr, status, error) {
|
||||
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);
|
||||
} else if (options.fallback && options.fallback !== lang) {
|
||||
return loadLanguage(pkg, options.fallback);
|
||||
|
@ -74,25 +103,30 @@ http://keith-wood.name/localisation.html
|
|||
async: true,
|
||||
timeout: options.timeout != null ? options.timeout : 500,
|
||||
success: successFunc,
|
||||
error: errorFunc
|
||||
error: errorFunc,
|
||||
statusCode: {
|
||||
404: function () {
|
||||
console.log("Le fichier " + file + " n'existe pas.");
|
||||
},
|
||||
},
|
||||
};
|
||||
if (window.location.protocol === "file:") {
|
||||
ajaxOptions.error = function(xhr) {
|
||||
ajaxOptions.error = function (xhr) {
|
||||
return successFunc($.parseJSON(xhr.responseText));
|
||||
};
|
||||
}
|
||||
return $.ajax(ajaxOptions);
|
||||
};
|
||||
notifyDelegateLanguageLoaded = function(data) {
|
||||
notifyDelegateLanguageLoaded = function (data) {
|
||||
if (options.callback != null) {
|
||||
return options.callback(data, defaultCallback);
|
||||
} else {
|
||||
return defaultCallback(data);
|
||||
}
|
||||
};
|
||||
defaultCallback = function(data) {
|
||||
defaultCallback = function (data) {
|
||||
$.localize.data[pkg] = data;
|
||||
return wrappedSet.each(function() {
|
||||
return wrappedSet.each(function () {
|
||||
var elem, key, value;
|
||||
elem = $(this);
|
||||
key = elem.data("localize");
|
||||
|
@ -103,23 +137,43 @@ http://keith-wood.name/localisation.html
|
|||
}
|
||||
});
|
||||
};
|
||||
localizeElement = function(elem, key, value) {
|
||||
if (elem.is('input')) {
|
||||
/*
|
||||
This code is iterating over the elements in the DOM and calling a function to localize
|
||||
them The first argument of this function is an element which we can use to determine
|
||||
what type of element it is If it\'s an input or textarea then we call a different
|
||||
function that will handle those two types of elements If it\'s an image then we call
|
||||
another function that handles images If it\'s an optgroup then we call another one
|
||||
for optgroups
|
||||
*/
|
||||
localizeElement = function (elem, key, value) {
|
||||
if (elem.is("input")) {
|
||||
localizeInputElement(elem, key, value);
|
||||
} else if (elem.is('textarea')) {
|
||||
} else if (elem.is("textarea")) {
|
||||
localizeInputElement(elem, key, value);
|
||||
} else if (elem.is('img')) {
|
||||
} else if (elem.is("img")) {
|
||||
localizeImageElement(elem, key, value);
|
||||
} else if (elem.is('optgroup')) {
|
||||
} else if (elem.is("optgroup")) {
|
||||
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)) {
|
||||
elem.html(value);
|
||||
}
|
||||
if ($.isPlainObject(value)) {
|
||||
return localizeForSpecialKeys(elem, value);
|
||||
if (elem.is("a")) {
|
||||
localizeForLink(elem, key, value);
|
||||
}
|
||||
//TODO:make a generic object returner
|
||||
return localizeForLink(elem, value);
|
||||
}
|
||||
};
|
||||
localizeInputElement = function(elem, key, value) {
|
||||
localizeInputElement = function (elem, key, value) {
|
||||
var val;
|
||||
val = $.isPlainObject(value) ? value.value : value;
|
||||
if (elem.is("[placeholder]")) {
|
||||
|
@ -128,19 +182,19 @@ http://keith-wood.name/localisation.html
|
|||
return elem.val(val);
|
||||
}
|
||||
};
|
||||
localizeForSpecialKeys = function(elem, value) {
|
||||
localizeForLink = function (elem, value) {
|
||||
setAttrFromValueForKey(elem, "title", value);
|
||||
setAttrFromValueForKey(elem, "href", value);
|
||||
return setTextFromValueForKey(elem, "text", value);
|
||||
};
|
||||
localizeOptgroupElement = function(elem, key, value) {
|
||||
localizeOptgroupElement = function (elem, key, value) {
|
||||
return elem.attr("label", value);
|
||||
};
|
||||
localizeImageElement = function(elem, key, value) {
|
||||
localizeImageElement = function (elem, key, value) {
|
||||
setAttrFromValueForKey(elem, "alt", value);
|
||||
return setAttrFromValueForKey(elem, "src", value);
|
||||
};
|
||||
valueForKey = function(key, data) {
|
||||
valueForKey = function (key, data) {
|
||||
var keys, value, _i, _len;
|
||||
keys = key.split(/\./);
|
||||
value = data;
|
||||
|
@ -150,37 +204,43 @@ http://keith-wood.name/localisation.html
|
|||
}
|
||||
return value;
|
||||
};
|
||||
setAttrFromValueForKey = function(elem, key, value) {
|
||||
setAttrFromValueForKey = function (elem, key, value) {
|
||||
value = valueForKey(key, value);
|
||||
if (value != null) {
|
||||
return elem.attr(key, value);
|
||||
}
|
||||
};
|
||||
setTextFromValueForKey = function(elem, key, value) {
|
||||
setTextFromValueForKey = function (elem, key, value) {
|
||||
value = valueForKey(key, value);
|
||||
if (value != null) {
|
||||
return elem.text(value);
|
||||
}
|
||||
};
|
||||
regexify = function(string_or_regex_or_array) {
|
||||
regexify = function (string_or_regex_or_array) {
|
||||
var thing;
|
||||
if (typeof string_or_regex_or_array === "string") {
|
||||
return "^" + string_or_regex_or_array + "$";
|
||||
} else if (string_or_regex_or_array.length != null) {
|
||||
return ((function() {
|
||||
return (function () {
|
||||
var _i, _len, _results;
|
||||
_results = [];
|
||||
for (_i = 0, _len = string_or_regex_or_array.length; _i < _len; _i++) {
|
||||
for (
|
||||
_i = 0, _len = string_or_regex_or_array.length;
|
||||
_i < _len;
|
||||
_i++
|
||||
) {
|
||||
thing = string_or_regex_or_array[_i];
|
||||
_results.push(regexify(thing));
|
||||
}
|
||||
return _results;
|
||||
})()).join("|");
|
||||
})().join("|");
|
||||
} else {
|
||||
return string_or_regex_or_array;
|
||||
}
|
||||
};
|
||||
lang = normaliseLang(options.language ? options.language : $.defaultLanguage);
|
||||
lang = normaliseLang(
|
||||
options.language ? options.language : $.defaultLanguage
|
||||
);
|
||||
if (options.skipLanguage && lang.match(regexify(options.skipLanguage))) {
|
||||
deferred.resolve();
|
||||
} else {
|
||||
|
@ -190,5 +250,5 @@ http://keith-wood.name/localisation.html
|
|||
return wrappedSet;
|
||||
};
|
||||
$.fn.localize = $.localize;
|
||||
return $.localize.data = {};
|
||||
})(jQuery);
|
||||
return ($.localize.data = {});
|
||||
})(jQuery);
|
|
@ -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);
|