zischenstand

This commit is contained in:
centron\schwoerer
2025-11-14 14:52:43 +01:00
parent 30aa03c6db
commit f054a31b20
8733 changed files with 900639 additions and 0 deletions

View File

@@ -0,0 +1,429 @@
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [13.0.0] - 2025-12-25
### Fixed
- 13.0.1 Private Assets not working after Moulinette Cloud update
### Changed
- Necessary fixes and changes for new Moulinette Cloud servers
## [12.2.0] - 2024-08-15
### Fixed
- Look & Feel compatibility with WFRP4e
### Added
- Moulinette Board
## [12.1.2] - 2024-05-20
### Fixed
- 12.1.1 : fix build/package
- 12.1.2 : missing export/import functionalities
### Added
- Moulinette Board (early access only)
## [12.0.0] - 2024-04-23
### Changed
- Support for v12
## [11.8.1] - 2024-03-02
### Fixed
- 11.8.1: optimize queries based on client (missing client)
### Changed
- Improve thumbnail generation (for scenes) to mitigate/avoid memory leaks
- Notification when conflicting modules installed and enabled at the same time as Moulinette
- Remove tooltip for "bring your own assets" for tabs which don't support it (like icons)
## [11.7.3] - 2024-01-04
### Added
- Content management (hide content from certain creators/packs)
### Fixed
- 11.7.3: hide markdown texts (introduced by Obsidian plugin)
- 11.7.2: local assets not listed (due to URI malformed error)
- 11.7.1: rolling back wildcard fix (interferring with ScenePacker)
- Moulinette doesn't index files with non-lowercase extensions (like MP3)
- Moulinette doesn't handle wildcard paths (like "/some-path/{token1,token2}.jpg")
## [11.6.4] - 2023-11-04
### Fixed
- 11.6.1: Style compatibility with GURPS #71
- 11.6.1: Moulinette Core fails indexing scenes on certain filenames #68
- 11.6.2: Authentication with Patreon always fails
- 11.6.3: Rollback of 11.6.1 (causing issues with sounds)
- 11.6.4: Moulinette download/upload files that already exist
### Added
- Download manager (progressbar)
- Discord integration (into main)
## [11.5.0] - 2023-10-03
### Added
- Support for SoundPad improvements
## [11.4.0] - 2023-08-30
### Added
- Support player mode (required for moulinette-compendiums)
## [11.3.1] - 2023-07-15
### Fixed
- 11.3.1: Fix invalid configuration (dev mode)
### Added
- Support for Discord authentication (non-Patreon creators)
## [11.2.3] - 2023-07-08
### Fixed
- 11.2.2: Improve download/upload management (specially for ScenePacker) with retries and additional logging
- 11.2.3: Fix download abort when 1 download fails
### Added
- Moulinette Sounds Opus Support #64
## [11.1.2] - 2023-06-12
### Fixed
- 11.1.2: Crashes while indexing own s3 files #12
- 11.1.1: Fix folder names disappear when expand/collapsing, even core data folders
### Changed
- Cache baseURL for S3 (fix for non-performant workaround introduced in 11.0.7)
## [11.0.6] - 2023-05-07
### Fixed
- 11.0.9: Fix fileExists for S3
- 11.0.8: Fix folder creation for S3 and special characters (&,+)
- 11.0.7: Fix for V11 and S3
- 11.0.6: Official support for V11
- 11.0.5: Indexed packs have invalid path on The Forge
- 11.0.4: Fix for The Forge (Bazaar). Invalid URLs for thumbs.
- 11.0.3: Fix uninitialized windows position (=> errors)
### Changed
- Improvement on how Moulinette stores the position of the window
- Indexes are now world-specific
- Index folders from multiple sources
- Optimizations for The Forge (hosting provider) & S3
### Added
- Export & Import sources configurations
- Module filters (ex: scenes can be filtered with "gridless")
## [10.8.1] - 2023-03-21
### Fixed
- 10.8.1: help information displayed even when search results
### Added
- API for retrieving the URL of an asset
## [10.7.0] - 2023-02-19
### Added
- Marketplace integration (available assets)
- Tooltips to guide user (authentication, moulinette support)
## [10.6.2] - 2023-02-04
### Fixed
- 10.6.0: Help still recommending V9 (rather than V10)
- 10.6.1: Moulinette Window opens with width of 200px (first time)
- 10.6.2: Animated tiles not animated any more
### Added
- #56 Feature: Add hotkey to choose image browser
## [10.5.0] - 2023-01-31
### Fixed
- 10.5.0: #59 After update, file picker no longer works
### Changed
- Make dropdown list mode configurable
## [10.4.0] - 2023-01-28
### Changed
- New interface general availability
## [10.3.2] - 2022-12-25
- 10.3.1: fix for Ernie's modern UI
- 10.3.2: fix #2 for Ernie's modern UI
### Changed
- New interface (auto-scroll lists, breadcrumbs, actions)
- New interface for FilePicker
- Improved footer
### Added
- Whole word search & regex search
## [10.2.2] - 2022-11-13
### Fixed
- 10.2.1: folder expand not working in Moulinette FilePicker
- 10.2.2: sound indexing doesn't work on The Forge
- 10.2.3: fix for 10.2.2 which breaks local hosting (not on the Forge)
### Added
- Configure sources for scenes (compatibility with The Forge)
- Improved UI for "in progress" indexing
## [10.1.2] - 2022-10-30
### Fixed
- 10.1.1: fix tentative for null options (bucket)
- 10.1.2: fix V10 compatibility
### Changed
- Filter sources based on type
- UI improvements
### Added
- Configure sources for scenes
## [10.0.5] - 2022-09-04
### Fixed
- 10.0.1: fix v10 packaging issues
- 10.0.2: folder view doesn't list subfolders systematically
- 10.0.3: focus should not go back to search field when selecting a new creator/pack
- 10.0.3: #49 : Pressing ENTER brings up default picker instead of searching
- 10.0.4: fix for null while getting S3 source
- 10.0.5: FileExists check fails when game hosted on The Forge #39
### Changed
- Compatibility with V10
- Major version based on FVTT
## [4.9.0] - 2022-08-14
### Added
- Moulinette Shortcuts (presets)
## [4.9.0] - 2022-08-20
### Added
- Configuration to enable/disable available content from Moulinette Cloud
## [4.8.0] - 2022-07-24
### Fixed
- 4.8.1 : fix packaging
- 4.8.2 : fix prefabs tab not working any more
### Added
- Moulinette API (searchUI & assetPicker)
## [4.7.0] - 2022-06-10
### Added
- Support for thumb sizes
## [4.6.1] - 2022-06-09
### Fixed
- 4.6.1: Fix confusing Moulinette message when supporting platinum creators
### Changed
- Moulinette UI vertically resizable
- Manage sources (for indexing process)
## [4.5.1] - 2022-04-09
### Fixed
- #36 Cannot figure how to add more images
- 4.5.1: #40 Non-host GMs can't use Moulinette for games hosted on The Forge
- 4.5.2: Rollback 4.5.1, causing issues
### Added
- Configuration for highlighting Moulinette Cloud packs in dropdown lists
## [4.4.0] - 2022-04-02
### Added
- Configuration to enable/disable controls in FVTT menus
- Moulinette Layer : support for left/right clicks. Implementation done by submodules. Release for everyone.
## [4.3.3] - 2022-03-05
### Fixed
- 4.3.1: Moulinette Cloud : images from TTV now showing up
- 4.3.2: Moulinette Tiles search not working when Moulinette Cloud disabled
- 4.3.3: Fix ScenePacker downloads fail (when spaces in file path)
### Added
- Moulinette Layer : support for left/right clicks. Implementation done by submodules.
## [4.2.3] - 2022-02-07
### Fixed
- 4.2.1: Tabletop Audio (and other) folders with space in their name cannot be expanded
- 4.2.2: Small improvements and bug fixes for ScenePacker & prettifier
- 4.2.3: WebM not indexed as image/tile any more
### Added
- New control buttons for soundpad, soundboard, favorites and faceted search
- Help interfaces
### Changed
- Control buttons harmonized (vertically)
## [4.1.3] - 2022-01-20
### Fixed
- 4.1.1: New Search UI not working due to missing commit in release
- 4.1.2: Export to Moulinette Cloud broken if spaces in image path
- 4.1.3: Workaround for bucket configuration "null"
### Changed
- Keybind from FoundryVTT (doesn't require extra module anymore)
## [4.0.3] - 2021-12-23
### Fixed
- 4.0.1: Module version for 9.x release
- 4.0.2: Remove support for FVTT 0.7 and 0.8
- 4.0.3: TTA & Ivan Duch sounds not listed due to new structure
### Changed
- First attempt to support 0.9.x version
## [3.13.0] - 2021-11-14
### Added
- Warning on Patreon Integration when user is authenticated but not supporting Moulinette (yet)
- Link to support Moulinette (Patreon Integration)
## [3.12.1] - 2021-10-31
### Fixed
- 3.12.1 : Use ForgeVTT FilePicker to speed up upload (eTag)
### Changed
- Default view should be "list view"
## [3.11.0] - 2021-10-30
### Fixed
- Folder view not working in Moulinette Sounds
### Changed
- Show lifespan support on Patreon
## [3.10.0] - 2021-10-16
### Changed
- New Moulinette icon
- Add packId for Scene Packer integration
## [3.9.0] - 2021-10-11
### Changed
- "Forge" removed from all the UI (to avoid confusion with The Forge)
- Default shortcut has been changed to "CTRL+M" (CTRL+F is too common)
## [3.8.0] - 2021-09-30
### Changed
- Selected pack remains selected after changing tab (until new selection)
## [3.7.1] - 2021-09-25
### Added
- Previews : search for assets among creators
## [3.7.0] - 2021-09-30
### Changed
- Selected pack remains selected when changing tab (if matching pack exists)
## [3.6.2] - 2021-09-12
### Added
- Favorites : history, groups
## [3.5.0] - 2021-09-06
### Changed
- Improved workflow for Patreon integration
### Added
- Support for multiple concurrent sessions (5$+)
## [3.4.3] - 2021-08-23
### Fixed
- 3.4.1: Attempt to fix the issues with Patreon login/connect
- 3.4.2: Patreon UI for Warhammer system
- 3.4.3: Moulinette Picker still enabled when configuration is off
### Added
- Support for Moulinette Cloud (all)
- Progressbar for Cloud update
## [3.3.0] - 2021-07-23
### Changed
- Switch to Moulinette Cloud (new servers)
- Show pledges and gifts on patreon window
### Added
- Claim a gift from a creator
- Configuration to disable Moulinette Cloud
## [3.2.1] - 2021-07-11
### Added
- Patreon : disconnect & reconnect buttons
- Warning message when token will expire in less than 30 minutes
- Error message when token is expired
### Fixed
- 3.2.1: Fix Filepicker with "List view"
## [3.1.8] - 2021-06-24
### Added
- UI modes (compact/default)
### Changed
- Window position and width saved/restored
### Fixed
- 3.1.8: Missing settings when default FilePicker used
- 3.1.7: Indexing not working on S3
- 3.1.6: Search when "All publishers" selected
- 3.1.5: Folder collapsing when clicking on assets
- 3.1.4: Workaround for "The Forge" (index.json & server-side caching)
- 3.1.3: Workaround for "The Forge" (index.json & server-side caching)
- 3.1.2: .mp3 and .wav not indexed
- 3.1.1: Downloading fails for names with spaces
## [3.0.0] - 2021-06-19
### Added
- Moulinette FilePicker for images and imagevideo
### Fixed
- Remove warning for missing index.json files
## [2.6.0] - 2021-06-16
### Added
- Browse mode by creator (rather than pack)
## [2.5.4] - 2021-06-07
### Added
- New view mode (browse)
- Data caching
### Fixed
- Drag & drop after scrolling down > 100 assets
- Download to S3 storage
- Dependencies not properly handled for BW packs
- Indexing fails if "&" in pack names
- Postpone download after drop
## [2.4.1] - 2021-06-06
### Fixed
- Don't capitalize publisher/pack names
### Changed
- Sessions last 24 hours
## [2.3.0] - 2021-06-01
### Added
- Patreon integration enabled by default
## [2.2.0] - 2021-05-29
### Added
- support for assets caching
## [2.1.0] - 2021-05-27
### Added
- ignore.info for ignoring some files
- moulinette.json for metadata
## [2.0.1] - 2021-05-24
### Added
- Compatibility with FVTT 0.8.5
## [1.9.2] - 2021-05-23
### Added
- Capabilities for downloading all dependencies
## [1.8.2] - 2021-05-15
### Added
- Capabilities for new scene UI
- Capabilities for prefabs
- Capabilities for pinning soundboard
## [1.7.2] - 2021-05-11
### Added
- DisplayMode : tiles / list
- Integration with Moulinette Cloud and Patreon (preview)
## [1.6.0] - 2021-05-05
### Fixed
- 1.6.3 : Lazy-loading fix (https://github.com/SvenWerlen/moulinette-tiles/issues/4)
- 1.6.1 & 1.6.2 : Fix Forge's Bazaar regression
### Added
- Support for Forge's Bazaar (Thx: @Kakaroto!!)
## [1.5.0] - 2021-05-03
### Added
- Support for existing sources (modules can define their own sources)
## [1.4.4] - 2021-05-03
### Added
- Support for S3 as storage
## [1.3.0] - 2021-04-22
### Removed
- All Forgotten Adventures assets but 1 for showcase purposes
### Added
- Configuration for hiding showcase content
## [1.2.0] - 2021-04-21
### Added
- Modules can add macros to core compendium
## [1.1.0] - 2021-04-20
### Changed
- Pagination (display 100 assets and autoload on scroll)
## [1.0.2] - 2021-04-18
### Added
- Core engine

View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) [year] [fullname]
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -0,0 +1,153 @@
# Moulinette Core (Foundry VTT)
[![GitHub tags (latest by date)](https://img.shields.io/github/v/tag/SvenWerlen/moulinette-core)](https://github.com/SvenWerlen/moulinette-core/releases)
[![License](https://img.shields.io/github/license/SvenWerlen/moulinette-core)](https://github.com/SvenWerlen/moulinette-core/LICENSE.txt)
[![GitHub Download](https://img.shields.io/badge/foundryvtt-Download-important)](#install)
![Tested on fvtt-vtt.com](https://img.shields.io/badge/Forge-supported-success)
[![Support me on Patreon](https://img.shields.io/badge/patreon-Support%20me-informational)](https://www.patreon.com/moulinette)
See [www.moulinette.cloud](https://www.moulinette.cloud) website.
Moulinette is a set of tools for importing packs of scenes, images, playlists prepared by the community.
:warning: the core only provides the Moulinette's foundations. You'll have to install additional modules to bring features.
* [Moulinette Scenes](#forge): import scenes into your world. Share your scenes with the community.
* [Moulinette Icons](#fvtt-game): search and import game icons from <a href="https://game-icons.net/" target="_blank">game-icons.net</a>.
* [Moulinette Image search](#fvtt-search): search images and generate articles.
* [Moulinette Tiles](#fvtt-tiles): search tiles and drop them on your maps. Bring your own images and let Moulinette manage them for you.
* [Moulinette Sounds](#fvtt-sounds): Bring your own sounds and let Moulinette manage them for you. Search and play a sound on-the-fly or create a playlist.
* [Moulinette Soundboard](#fvtt-soundboard): Create your own soundboard. Prepare sounds for your games and play them very quickly and easily.
* [Install the module](#install): install the module on your Foundry VTT server.
* [Support me on Patreon](#support)
Watch *Foundry VTT Module Tutorial: Moulinette Forge with Free Forgotten Adventures Assets* from [Baileywiki](https://www.patreon.com/baileywiki) to have an overview of some of the Moulinette capabilities.
<a href="http://www.youtube.com/watch?v=O2fZIOKT7pk"><img src="https://img.youtube.com/vi/O2fZIOKT7pk/0.jpg" height="180" width="240" ></a>
## <a name="forge"/>Moulinette Scenes
[Visit module repository](https://github.com/SvenWerlen/moulinette-scenes)
You're a GM (game master) preparing a new scenario? Moulinette Forge lets you browse a catalog of scenes shared by the community.
* Search in the catalog
* Have a look at the preview
* Check the scenes you want to import
* Import!
![Catalog](https://github.com/SvenWerlen/moulinette-scenes/raw/main/docs/img/download-scene.jpg)
<br>_(Scenes on the screenshot are from [VenatusMaps](https://www.venatusmaps.com/))_
## <a name="fvtt-game"/>Moulinette Game icons
[Visit module repository](https://github.com/SvenWerlen/moulinette-gameicons)
You need icons for your game (actions, items, etc.).
* Search <a href="https://game-icons.net/" target="_blank">game-icons.net</a> catalog
* Check the icons you want to import
* Choose your favorite colors (foreground/background)
* Import!
![Game icons](https://raw.githubusercontent.com/SvenWerlen/moulinette-gameicons/main/docs/img/download-gameicons.jpg)
<br>_(Icons on the screenshot are from [Game-icons.net](https://game-icons.net/) and are provided under [CC BY 3.0](https://creativecommons.org/licenses/by/3.0/) license.)_
## <a name="fvtt-search"/>Moulinette Image search
[Visit module repository](https://github.com/SvenWerlen/moulinette-imagesearch)
You need images to enrich your game/campaign
* Search using <a href="https://www.bing.com" target="_blank">bing.com</a> engine
* Preview the image
* Download or generate a journal article
* Import!
![Image search on Bing](https://raw.githubusercontent.com/SvenWerlen/moulinette-imagesearch/main/docs/img/search-bing.jpg)
<br>_(Images on the screenshot are from [Microsoft Bing](https://www.bing.com) search engine. Images are publicly available but their license varies.)_
## <a name="fvtt-tiles"/>Moulinette Tiles
[Visit module repository](https://github.com/SvenWerlen/moulinette-tiles)
You want to add tiles on your maps?
* Search using Moulinette engine
* See publisher and license (generally [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0))
* Drag and drop tiles
* Voilà!
![Tiles](https://github.com/SvenWerlen/moulinette-tiles/raw/main/docs/img/download-install.jpg)
<br>_(Tiles on the screenshot are from [Forgotten Adventures](https://www.forgotten-adventures.net/) which are license under [Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)](https://creativecommons.org/licenses/by-nc-sa/4.0/))_
You created or downloaded some tokens/assets you'd like Moulinette to manage for you?
* Put them in `moulinette/images/custom` folder.
* Make sure to have at least a 2-depth structure (1. Publisher, 2. Pack, 3+ Images)
* Index images
* Moulinette provides you now the same features as for tiles (see above)
![Bring your own images](https://raw.githubusercontent.com/SvenWerlen/moulinette-tiles/main/docs/img/bring-your-own.jpg)
<br>_(Tokens on the screenshot have been downloaded from [Devin's Token Site](https://immortalnights.com/tokens/token-packs/). 20 token packs have been made free to the public.)_
## <a name="fvtt-sounds"/>Moulinette Sounds
[Visit module repository](https://github.com/SvenWerlen/moulinette-sounds)
You created or downloaded some sounds you'd like Moulinette to manage for you?
* Put them in `moulinette/sounds/custom` folder.
* Make sure to have at least a 2-depth structure (1. Publisher, 2. Pack, 3+ Sounds)
* Index sounds
* Moulinette lets you now search or browse sounds
* Play a sound *on-the-fly*
* Select sounds and create a playlist
![Bring your own sounds](https://github.com/SvenWerlen/moulinette-sounds/raw/main/docs/img/bring-your-own.jpg)
<br>_(Ambience sounds on the screenshot have been downloaded from [Tabletop Audio](https://tabletopaudio.com/) which are licensed under a [Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International](https://creativecommons.org/licenses/by-nc-nd/4.0/) License.)_
## <a name="fvtt-soundboard"/>Moulinette Soundboard
You can also create your own soundboard.
* Sounds can be added by clicking on the "favorite" icon (Moulinette Forge | Audio)
* Moulinette adds a new control on the top left corner for opening the soundboard
* Simply click on the sound to play it
* Sounds can be modified or moved on the soundboard
![Create your soundboard](https://github.com/SvenWerlen/moulinette-sounds/raw/main/docs/img/soundboard.jpg)
<br>_(Icons on the screenshot are from [Game-icons.net](https://game-icons.net/) and are provided under [CC BY 3.0](https://creativecommons.org/licenses/by/3.0/) license.)_
## <a name="install"/>Install the module
To **install** the module from FoundryVTT:
1. Start FVTT and browse to the Game Modules tab in the Configuration and Setup menu
2. Search for "Moulinette Core" and click install
To **manually install** the module (not recommended), follow these instructions:
1. Start FVTT and browse to the Game Modules tab in the Configuration and Setup menu
2. Select the Install Module button and enter the following URL: https://raw.githubusercontent.com/svenwerlen/moulinette-core/master/module.json
3. Click Install and wait for installation to complete
List of all existing sub-modules:
* https://raw.githubusercontent.com/SvenWerlen/moulinette-scenes/master/module.json
* https://raw.githubusercontent.com/SvenWerlen/moulinette-gameicons/master/module.json
* https://raw.githubusercontent.com/SvenWerlen/moulinette-imagesearch/master/module.json
* https://raw.githubusercontent.com/SvenWerlen/moulinette-tiles/master/module.json
* https://raw.githubusercontent.com/SvenWerlen/moulinette-sounds/master/module.json
* https://raw.githubusercontent.com/SvenWerlen/moulinette-scribe/master/module.json
![Install custom module](docs/img/moulinette-install.jpg)
## <a name="openUI"/>Open Moulinette interface
There are 3 different ways to open the user intervace:
* Shortcut : `CTRL + M`
* Macros available in the Moulinette macros compendium
* Moulinette adds a new control (icon on the top-left corner). Requires a scene to be loaded.
## <a name="support"/>Support me on Patreon
If you like my work and want to support me, consider subscribing to Moulinette!
* Recommended: [Moulinette on Stripe](https://assets.moulinette.cloud/pricing) (requires Patreon authentication)
* Or: [Moulinette on Patreon](https://www.patreon.com/moulinette)
You can also join [Moulinette Discord](https://discord.gg/xg3dcMQfP2)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,229 @@
/*!
* IconPicker ('https://github.com/furcan/IconPicker')
* Version: 1.5.0
* Author: Furkan MT ('https://github.com/furcan')
* Dependencies: Font Awesome Free v5.11.2 (https://fontawesome.com/license/free)
* Copyright 2019 IconPicker, MIT Licence ('https://opensource.org/licenses/MIT')*
*/
div#IconPickerModal {
display:none;
position: absolute;
z-index: 999999;
width: 95%;
max-width: 1440px;
left: 0;
right: 0;
top: 100px;
margin: auto;}
div#IconPickerModal:before {
transition:all .4s ease-in-out;
opacity: 0;
visibility: hidden;
content:"";
position: fixed;
z-index:-1;
left:0;
top:0;
width:100%;
height:100%;
background:rgba(0, 0, 0, 0.5);}
div#IconPickerModal.animate:before {
opacity: 1;
visibility: visible;}
div#IconPickerModal .ip-icons-content {
transition:all .4s ease-in-out;
transform:scale(.5);
opacity:0;
float: left;
width: 100%;
background: #ffffff;
box-shadow: 0 0 24px -8px rgba(0, 0, 0, 0.2);
border-radius: 20px;
padding: 20px;
position:relative;
z-index:2;}
div#IconPickerModal.animate .ip-icons-content {
transform:scale(1);
opacity:1;}
div#IconPickerModal .ip-icons-content .ip-icons-search {
border-bottom: 1px dashed #e8e8e8;
padding: 0 0 20px;
margin: 0 0 10px;
position:relative;
float: left;
width: 100%;}
div#IconPickerModal .ip-icons-content .ip-icons-search > input#IconPickerSearch {
transition: all .2s ease-in-out;
float: left;
width: 100%;
height:50px;
line-height:50px;
font-size: 18px;
color: #1e1e1e;
background: #fff;
font-weight: 400;
border: 1px solid #f4f4f4;
box-shadow:0 0 15px -8px rgba(0, 0, 0, 0.4);
border-radius: 50px;
padding: 0 50px 0 20px;}
div#IconPickerModal .ip-icons-content .ip-icons-search > input#IconPickerSearch:hover,
div#IconPickerModal .ip-icons-content .ip-icons-search > input#IconPickerSearch:focus {
border-color:#1e1e1e;}
div#IconPickerModal .ip-icons-content .ip-icons-search > i.placeholder-icon {
transition: all .2s ease-in-out;
position: absolute;
z-index: 2;
pointer-events: none;
right: 0;
top: 0;
width: 50px;
height: 50px;
border-radius: 50px;
font-size: 25px;
line-height: 50px;
text-align: center;
color: #eaeaea;}
div#IconPickerModal .ip-icons-content .ip-icons-search > input#IconPickerSearch:hover + i.placeholder-icon,
div#IconPickerModal .ip-icons-content .ip-icons-search > input#IconPickerSearch:focus + i.placeholder-icon {
color:#1e1e1e;}
div#IconPickerModal .ip-icons-content .ip-icons-search-results {
position:relative;
float: left;
width: 100%;}
div#IconPickerModal .ip-icons-content .ip-icons-search-results p.ip-no-results-found {
float: left;
width: 100%;
margin: 20px 0;
text-align: center;
font-size: 15px;
line-height: 1.4;
color: #9b9b9b;}
div#IconPickerModal .ip-icons-content .ip-icons-area {
padding: 10px;
max-height:400px;
overflow:hidden;
position:relative;
float: left;
width: 100%;}
div#IconPickerModal.show-all .ip-icons-content .ip-icons-area {
max-height:unset;
overflow:unset;}
div#IconPickerModal .ip-icons-content .ip-icons-area:before {
transition:all .2s ease-in-out;
content: "";
position: absolute;
z-index: 9;
width: 100%;
height: 60px;
left: 0;
bottom: 0;
box-shadow: 0 0 50px 25px rgba(255, 255, 255, 0.75);
background: rgba(255, 255, 255, 0.8);}
div#IconPickerModal.show-all .ip-icons-content .ip-icons-area:before {
opacity:0;
visibility:hidden;}
div#IconPickerModal .ip-icons-content .ip-icons-search-results > * > i,
div#IconPickerModal .ip-icons-content .ip-icons-area > i {
cursor:pointer;
position: relative;
transition:all .2s ease-in-out;
font-size: 21px;
line-height: 26px;
float: left;
border-radius:5px;
margin: 3px;
padding: 2px;
min-width: 30px;
text-align: center;}
div#IconPickerModal .ip-icons-content .ip-icons-search-results > * > i:hover,
div#IconPickerModal .ip-icons-content .ip-icons-area > i:hover {
transform:scale(1.8);
z-index: 2;
-moz-box-shadow: 0 0 14px -6px rgba(0, 0, 0, 0.5);
box-shadow: 0 0 16px -6px rgba(0, 0, 0, 0.5);
background:#fff;}
div#IconPickerModal .ip-icons-content .ip-icons-area > a.ip-show-all-icons {
transition: all .2s ease-in-out;
position: absolute;
width: 120px;
z-index: 10;
left: 0;
right: 0;
bottom: 10px;
margin: auto;
text-align: center;
box-shadow:0 0 24px -8px rgba(0, 0, 0, 0.2);
background: #fff;
color: #9b9b9b;
border: 1px solid #bcbcbc;
padding: 12px;
border-radius: 30px;
font-weight:500;
font-size: 13px;
line-height: 16px;}
div#IconPickerModal .ip-icons-content .ip-icons-area > a.ip-show-all-icons:hover {
color: #fff;
border-color: #1e1e1e;
background: #1e1e1e;}
div#IconPickerModal .ip-icons-content .ip-icons-footer {
border-top: 1px dashed #e8e8e8;
padding: 15px 0 0;
margin:10px 0 0;
float: left;
width: 100%;}
div#IconPickerModal .ip-icons-content .ip-icons-footer a.cancel {
transition: all .2s ease-in-out;
float: right;
color: #9b9b9b;
padding: 10px 18px;
border: 1px solid #bcbcbc;
border-radius: 20px;
font-size: 14px;
line-height: 15px;
font-weight: 500;}
div#IconPickerModal .ip-icons-content .ip-icons-footer a.cancel:hover {
color: #fff;
border-color: #1e1e1e;
background: #1e1e1e;}
div#IconPickerLoading {
transition: all .3s ease-in-out;
opacity: 1;
position: absolute;
z-index: 2;
width: 100%;
height: 100%;
background: #fff;
text-align: center;}
div#IconPickerLoading.hide {
opacity: 0;}
div#IconPickerLoading > svg {
width: 60px;
height: 60px;
position: absolute;
z-index: 2;
left: 0;
top: 0;
right: 0;
bottom: 60px;
margin: auto;}

View File

@@ -0,0 +1,439 @@
/*!
* IconPicker ('https://github.com/furcan/IconPicker')
* Version: 1.5.0
* Author: Furkan MT ('https://github.com/furcan')
* Dependencies: Font Awesome Free v5.11.2 (https://fontawesome.com/license/free)
* Copyright 2019 IconPicker, MIT Licence ('https://opensource.org/licenses/MIT')*
*/
'use strict';
// IconPicker: Default Options on
var ipDefaultOptions = {
jsonUrl: null,
searchPlaceholder: 'Search Icon',
showAllButton: 'Show All',
cancelButton: 'Cancel',
noResultsFound: 'No results found.',
borderRadius: '20px',
}
var ipNewOptions;
var ipGithubUrl = 'https://github.com/furcan/IconPicker';
// IconPicker: Default Options off
// IconPicker: Extend Options on
var extendIconPicker = function () {
var extended = {};
var deep = false;
var i = 0;
if (Object.prototype.toString.call(arguments[0]) === '[object Boolean]') {
deep = arguments[0];
i++;
}
var merge = function (obj) {
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
if (deep && Object.prototype.toString.call(obj[prop]) === '[object Object]') {
extended[prop] = extendIconPicker(extended[prop], obj[prop]);
} else {
extended[prop] = obj[prop];
}
}
}
};
for (; i < arguments.length; i++) {
merge(arguments[i]);
}
return extended;
};
// IconPicker: Extend Options off
// IconPicker: Main on
var IconPicker = {
// init
Init: function (ipUserOptions) {
ipNewOptions = extendIconPicker(true, ipDefaultOptions, ipUserOptions);
},
// run
Run: function (theButton, theCallback) {
// IconPicker: Console Error Function on
var ipConsoleError = function (errorMessage) {
return console.error('%c IconPicker (Error) ', 'padding:2px;border-radius:20px;color:#fff;background:#f44336', '\n' + errorMessage);
}
// IconPicker: Console Error Function off
// IconPicker: Console Log Function on
var ipConsoleLog = function (errorMessage) {
return console.log('%c IconPicker (Info) ', 'padding:2px;border-radius:20px;color:#fff;background:#00bcd4', '\n' + errorMessage);
}
// IconPicker: Console Log Function off
// IconPicker: Check The Arguments For Proceed on
if (arguments && arguments.length <= 2) {
// query selector
var ipButtons = document.querySelectorAll(theButton);
// if button exist on the document
if (ipButtons && ipButtons.length > 0) {
for (var i = 0; i < ipButtons.length; i++) {
// IconPicker: Button Listeners -> Send XMLHttpRequest on
var ipButton = ipButtons[i];
ipButton.addEventListener('click', function () {
var jsonUrl = ipNewOptions.jsonUrl;
var inputElement = this.dataset.iconpickerInput;
var previewElement = this.dataset.iconpickerPreview;
var showAllButton = ipNewOptions.showAllButton;
if (!showAllButton || (showAllButton && showAllButton.length < 1)) {
showAllButton = ipDefaultOptions.showAllButton;
}
var cancelButton = ipNewOptions.cancelButton;
if (!cancelButton || (cancelButton && cancelButton.length < 1)) {
cancelButton = ipDefaultOptions.cancelButton;
}
var searchPlaceholder = ipNewOptions.searchPlaceholder;
if (!searchPlaceholder || (searchPlaceholder && searchPlaceholder.length < 1)) {
searchPlaceholder = ipDefaultOptions.searchPlaceholder;
}
var borderRadius = ipNewOptions.borderRadius;
if (!borderRadius || (borderRadius && borderRadius.length < 1)) {
borderRadius = ipDefaultOptions.borderRadius;
}
// check the json url on
if (!jsonUrl) {
ipConsoleError('You have to set the path of IconPicker JSON file to "jsonUrl" option. \n\nVisit to learn how: ' + ipGithubUrl);
return false;
}
// check the json url off
// check the input on
var checkInput = document.querySelectorAll(inputElement);
if (checkInput.length <= 0) {
ipConsoleError('You must define your Input element with it\'s ID or Class Name to your Button element data attribute. \n\nExample: \ndata-iconpicker-input="#MyIconInput" or \ndata-iconpicker-input=".my-icon-input" \n\nVisit to learn how: ' + ipGithubUrl);
return false;
}
// check the input off
// check the preview icon on
var checkPreviewIcon = document.querySelectorAll(previewElement);
if (checkPreviewIcon.length <= 0) {
ipConsoleLog('You can define your Preview Icon element with it\'s ID or Class Name to your Button element data attribute. \n\nExample: \ndata-iconpicker-preview="i#MyIconElement" or \ndata-iconpicker-preview="i.my-icon-element" \n\nVisit to learn how: ' + ipGithubUrl);
}
// check the preview icon off
// check the callback on
if (!theCallback && typeof theCallback !== 'function') {
theCallback = undefined;
}
// check the callback off
getIconListXmlHttpRequest(jsonUrl, showAllButton, cancelButton, searchPlaceholder, borderRadius, inputElement, previewElement, theCallback);
});
// IconPicker: Button Listeners -> Send XMLHttpRequest off
}
}
// not exist
else {
ipConsoleError('You called the IconPicker with "' + theButton + '" selector, but there is no such element on the document.');
}
} else if (arguments && arguments.length > 2) {
ipConsoleError('More parameters than allowed.');
return false;
} else {
ipConsoleError('You have to call the IconPicker with an Element(Button or etc.) Class or ID. \n\nYou can also find the other required data attributes in the Documentation. \n\nVisit: ' + ipGithubUrl);
return false;
}
// IconPicker: Check The Arguments For Proceed off
// IconPicker: Get Library from JSON and AppendTo Body on
var getIconListXmlHttpRequest = function (jsonUrl, buttonShowAll, buttonCancel, searchPlaceholder, borderRadius, inputElement, previewElement, theCallback) {
// if chrome browser
if (navigator.userAgent.toLowerCase().indexOf('chrome') > -1) {
// check the protocol
if (window.location.protocol.indexOf('http') <= -1) {
ipConsoleLog('Chrome Browser blocked this request by CORS policy.');
return false;
}
}
// modal element
var ipElement = document.getElementById('IconPickerModal');
// if modal element doesn't exist on document send XMLHttpRequest
if (!ipElement) {
var xmlHttp = new XMLHttpRequest();
xmlHttp.open('GET', jsonUrl, true);
xmlHttp.setRequestHeader('Content-type', 'application/json; charset=utf-8');
xmlHttp.send();
xmlHttp.onreadystatechange = function () {
if (this.readyState === 4) {
if (this.status === 200) { // success
var data = this.responseText;
appendIconListToBody(data, buttonShowAll, buttonCancel, searchPlaceholder, borderRadius, inputElement, previewElement, theCallback);
} else {
ipConsoleError('XMLHttpRequest Failed.');
}
}
};
}
}
// IconPicker: Get Library from JSON and AppendTo Body off
// IconPicker: Append Library to Body on
var appendIconListToBody = function (data, buttonShowAll, buttonCancel, searchPlaceholder, borderRadius, inputElement, previewElement, theCallback) {
// data
var jsonData = JSON.parse(data);
// icons
var icons = '';
for (var key in jsonData) {
if (jsonData.hasOwnProperty(key)) {
var forObj = jsonData[key];
var icon = '<i data-search="' + forObj + '" data-class="' + forObj + '" class="first-icon select-icon ' + forObj + '"></i>';
icons += icon;
}
}
// loading indicator
var loadingIndicator = '<div id="IconPickerLoading"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="60" height="60" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid"><g transform="translate(25 50)"><circle cx="0" cy="0" r="9" fill="#1e1e1e" transform="scale(0.24 0.24)"><animateTransform attributeName="transform" type="scale" begin="-0.2666s" calcMode="spline" keySplines="0.3 0 0.7 1;0.3 0 0.7 1" values="0;1;0" keyTimes="0;0.5;1" dur="0.8s" repeatCount="indefinite"/></circle></g><g transform="translate(50 50)"><circle cx="0" cy="0" r="9" fill="#1e1e1e" transform="scale(0.00153 0.00153)"><animateTransform attributeName="transform" type="scale" begin="-0.1333s" calcMode="spline" keySplines="0.3 0 0.7 1;0.3 0 0.7 1" values="0;1;0" keyTimes="0;0.5;1" dur="0.8s" repeatCount="indefinite"/></circle></g><g transform="translate(75 50)"><circle cx="0" cy="0" r="9" fill="#1e1e1e" transform="scale(0.3 0.3)"><animateTransform attributeName="transform" type="scale" begin="0s" calcMode="spline" keySplines="0.3 0 0.7 1;0.3 0 0.7 1" values="0;1;0" keyTimes="0;0.5;1" dur="0.8s" repeatCount="indefinite"/></circle></g></svg></div>';
// icons wrap
var iconWrap = '<div class="ip-icons-content" style="border-radius:' + borderRadius + ';">' +
'<div class="ip-icons-search"><input id="IconPickerSearch" type="text" spellcheck="false" autocomplete="off" placeholder="' + searchPlaceholder + '" style="border-radius:' + borderRadius + ';" /><i class="placeholder-icon fas fa-search"></i></div>' +
'<div class="ip-icons-search-results"></div>' +
'<div class="ip-icons-area">' +
loadingIndicator +
icons +
'<a class="ip-show-all-icons" style="border-radius:' + borderRadius + ';">' + buttonShowAll + '</a>' +
'</div>' +
'<div class="ip-icons-footer"><a class="cancel" style="border-radius:' + borderRadius + ';">' + buttonCancel + '</a></div>' +
'</div>';
// create the modal element
var IconPickerModal = document.createElement('div')
IconPickerModal.id = 'IconPickerModal';
IconPickerModal.innerHTML = iconWrap;
// body
var docBody = document.body;
// append to body
docBody.appendChild(IconPickerModal);
// get the modal element
var ipElement = document.getElementById(IconPickerModal.id);
// modal element display css
ipElement.style.display = 'block';
// heights
var ipHeight = parseInt(ipElement.offsetHeight);
var winHeight = parseInt(window.innerHeight);
// modal element position top css on
var liveScrollTop = parseInt(window.pageYOffset || document.documentElement.scrollTop);
var totalTopPos = liveScrollTop + ((winHeight - ipHeight) / 2);
if (winHeight + 20 <= ipHeight) {
totalTopPos = liveScrollTop;
}
ipElement.style.top = totalTopPos + 'px';
// modal element position top css off
// add css animation class to modal
ipElement.classList.add('animate');
// remove loading indicator on
var loadingElement = document.getElementById('IconPickerLoading');
var ltAnimate = setTimeout(function () {
loadingElement.classList.add('hide');
clearTimeout(ltAnimate);
}, 600);
var ltRemove = setTimeout(function () {
loadingElement.parentNode.removeChild(loadingElement);
clearTimeout(ltRemove);
}, 900);
// remove loading indicator off
// show all button click listener on
var showAllButtonElm = document.getElementById(IconPickerModal.id).getElementsByClassName('ip-show-all-icons')[0];
showAllButtonElm.addEventListener('click', function () {
ipElement.classList.add('show-all');
this.parentNode.removeChild(this);
}, false);
// show all button click listener off
// close and remove all on
var removeIpElement = function (delay) {
ipElement.classList.remove('animate');
setTimeout(function () {
docBody.removeChild(ipElement);
}, delay);
}
// close and remove all off
// cancel button click listener on
var cancelButtonElm = document.getElementById(IconPickerModal.id).getElementsByClassName('cancel')[0];
cancelButtonElm.addEventListener('click', function () {
removeIpElement(400);
}, false);
// cancel button click listener off
// search input keyup listener on
var searchInputElm = document.getElementById('IconPickerSearch');
searchInputElm.addEventListener('keyup', function (e) {
// keycodes
var eKeyCode = e.keyCode;
var eCode = e.code.toString().toLowerCase();
// check space and backspace keyup
var spaceOrBackspace = false;
if (eKeyCode === 32 || eCode === 'space' || eKeyCode === 8 || eCode === 'backspace') {
spaceOrBackspace = true;
}
// cant type space
if (eKeyCode === 32 || eCode === 'space') {
this.value = this.value.replace(' ', '');
return false;
}
// this val
var searchVal = this.value.toString().toLowerCase();
// define icons areas
var firstIconsArea = document.getElementById(IconPickerModal.id).getElementsByClassName('ip-icons-area')[0];
var searchResultArea = document.getElementById(IconPickerModal.id).getElementsByClassName('ip-icons-search-results')[0];
// clear old results
searchResultArea.innerHTML = '';
// (if not space or backspace) and (if typed at least one char) able to search
if (!spaceOrBackspace && searchVal.length > 0) {
// for "serch term" in Json
var tempIcons = '';
for (var key in jsonData) {
if (jsonData.hasOwnProperty(key)) {
var forObj = jsonData[key];
// if there is results create them
if (forObj.toString().indexOf(searchVal) > -1) {
firstIconsArea.style.display = 'none';
var tempIcon = '<i data-search="' + forObj + '" data-class="' + forObj + '" class="search-icon select-icon ' + forObj + '"></i>';
tempIcons += tempIcon;
}
}
}
// create a temp container
var tempResults = document.createElement('div');
tempResults.id = 'IconsTempResults';
tempResults.innerHTML = tempIcons;
// no results found on
if (tempIcons.length < 1) {
firstIconsArea.style.display = 'none';
var noResultsText = ipNewOptions.noResultsFound;
if (!noResultsText || (noResultsText && noResultsText.length < 1)) {
noResultsText = ipDefaultOptions.noResultsFound;
}
var noResultElm = '<p class="ip-no-results-found">' + noResultsText + '</p>';
tempResults.innerHTML = noResultElm;
}
// no results found off
// append temp container to results area
searchResultArea.appendChild(tempResults);
// event listener for each temp icon
eachIconEventListener('search');
}
// show first icons
else {
firstIconsArea.style.display = 'block';
}
}, false);
// search input keyup listener off
// each icon click listener on
var eachIconEventListener = function (firstOrSearch) {
var inputElm = document.querySelectorAll(inputElement);
var previewElm = document.querySelectorAll(previewElement);
// define icons on
var eachIconElm;
if (firstOrSearch === 'first') { // first
eachIconElm = document.getElementById(IconPickerModal.id).getElementsByClassName('first-icon');
} else if (firstOrSearch === 'search') { // search
eachIconElm = document.getElementById(IconPickerModal.id).getElementsByClassName('search-icon');
}
// define icons off
// add listeners each on
for (var i = 0; i < eachIconElm.length; i++) {
var singleIconElm = eachIconElm[i];
singleIconElm.addEventListener('click', function (e) {
e.preventDefault();
var iconClassName = this.dataset.class;
// each input value on
for (var i = 0; i < inputElm.length; i++) {
var getTagName = inputElm[i].tagName.toString().toLowerCase();
// if an input or textarea element
if (getTagName === 'input' || getTagName === 'textarea') {
inputElm[i].value = iconClassName;
}
// else any of element
else {
inputElm[i].innerHTML = iconClassName;
}
}
// each input value off
// each preview on
for (var i = 0; i < previewElm.length; i++) {
previewElm[i].className = iconClassName;
}
// each preview off
// callback on
if (theCallback) {
theCallback();
}
// callback off
removeIpElement(400);
}, false);
}
// add listeners each off
}
// each icon click listener off
// first icons listeners
eachIconEventListener('first');
}
// IconPicker: Append Library to Body off
},
}
// IconPicker: Main off

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="red"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M448 256A192 192 0 1 0 64 256a192 192 0 1 0 384 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256 80a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm0-224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zM224 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z"/></svg>

After

Width:  |  Height:  |  Size: 475 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 374 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 344 KiB

View File

@@ -0,0 +1,229 @@
{
"mtte.actionSourceAdd": "Add source",
"mtte.actionSourceUpdate": "Update source",
"mtte.actions": "Actions",
"mtte.addSource": "Add a new source",
"mtte.allContentVisible": "All available content is visible",
"mtte.allPacks": "All packs",
"mtte.allPubs": "All creators",
"mtte.apply": "Apply",
"mtte.applyFilters": "Apply filters",
"mtte.authenticateDiscord": "Sign in with Discord",
"mtte.authenticatePatreon": "Sign in with Patreon",
"mtte.authenticationTimeout": "Sorry. You took too long to authenticate yourself (2 minutes). Close this window and try again.",
"mtte.automaticCreators": "Auto",
"mtte.automaticCreatorsTooltip": "1st level = creators, 2nd level = packs",
"mtte.availableAssets": "Previews of matching assets available on Moulinette Cloud",
"mtte.availableCreators": "Available Creators",
"mtte.availableresult": "Match detail",
"mtte.boardAssetsCount": "<p>This board entry includes <b>{count}</b> {type}s. Moulinette will randomly pick one when you use it.</p>",
"mtte.boardExport": "Export board (as JSON file)",
"mtte.boardGroup": "Add/Edit Board",
"mtte.boardImport": "Import board (from a JSON file)",
"mtte.boardInstructionsActor": "<p><strong>Character Sheet</strong>: <span class=\"reference\">Click</span></p><p><strong>Add to Scene</strong>: <span class=\"reference\">Drag</span></p>",
"mtte.boardInstructionsCommon": "<p><strong>Reorder Board Item</strong>: <span class=\"reference\">Drag</span></p><p><strong>Edit Board Item</strong>: <span class=\"reference\">Right-Click</span></p>",
"mtte.boardInstructionsFolder": "<p><strong>Open/browse Board Folder</strong>: <span class=\"reference\">Click</span></p>",
"mtte.boardInstructionsItem": "<p><strong>Item Sheet</strong>: <span class=\"reference\">Click</span></p><p><strong>Add to</strong>: <span class=\"reference\">Drag</span></p>",
"mtte.boardInstructionsJournalEntry": "<p><strong>Journal Entry Sheet</strong>: <span class=\"reference\">Click</span></p><p><strong>Add to</strong>: <span class=\"reference\">Drag</span></p>",
"mtte.boardInstructionsMacro": "<p><strong>Execute Macro</strong>: <span class=\"reference\">Click</span></p><p><strong>Add to Hotbar</strong>: <span class=\"reference\">Drag</span></p>",
"mtte.boardInstructionsPlaylistSound": "<p><strong>Play Sound</strong>: <span class=\"reference\">Click</span></p><p><strong>Add to Scene</strong>: <span class=\"reference\">Drag</span></p>",
"mtte.boardInstructionsRollTable": "<p><strong>Roll on Table</strong>: <span class=\"reference\">Click</span></p>",
"mtte.boardInstructionsScene": "<p><strong>View Scene</strong>: <span class=\"reference\">Click</span></p>",
"mtte.boardJournal": "<p>This Journal Article contains <b>{count}</b> page(s).",
"mtte.boardMacro": "<p>Macro of type <b>{type}</b>.",
"mtte.boardMaxLevelReached": "Maximum level reached! You cannot add more board groups. On this level, you can only drag & drop items (macros, images, sounds, etc.).",
"mtte.boardOther": "<p>This board entry is a <b>{type}</b>.",
"mtte.boardassets": "Assets",
"mtte.boardgroupDescription": "This action creates a new board group (folder). Choose a name and an icon (optional) to represent it.",
"mtte.boardgroupDescriptionEdit": "Modify the board group (folder) below. You can also delete it.",
"mtte.boardshortcutDescription": "This action lets you modify or delete the shortcut. You can also add additional assets (one will be randomly picked up when you use it) by dragging and dropping them into the drop zone below.",
"mtte.browse": "Browse folders and select an icon",
"mtte.browseByPack": "By pack",
"mtte.browseByPublisher": "By creator",
"mtte.cancel": "Cancel",
"mtte.chooseCreator": "Choose a creator",
"mtte.choosePack": "Choose a pack",
"mtte.clearIndex": "Clear the index",
"mtte.clearIndexConfirmation": "Please confirm that you REALLY want to clear the existing index.",
"mtte.clickToCloseManage": "Below you will find the list of all the content that you have chosen to exclude for this world. You can remove the exclusion to view and use them again. You need to REFRESH the page (or clear the Moulinette cache) after the changes.",
"mtte.clickToHide": "Click to hide assets from this creator or pack",
"mtte.clickToHideContent": "This action hides content from the selected creator. <ul><li>You can choose to hide the assets from a specific pack or all assets from this creator.</li> <li>The configuration is specific to this world.</li> <li>You can reset the filters (action available in <i class='fa-solid fa-gear'></i> toolbar)</li><li>Close the window to cancel the action.</li></ul><hr>",
"mtte.clickToHideCreator": "Hide creator '{creator}'",
"mtte.clickToHidePack": "Hide pack '{pack}'",
"mtte.clickToHideTitle": "Hide content",
"mtte.cloudColorContrast": "High Contrast",
"mtte.cloudColorDefault": "Default",
"mtte.cloudColorNone": "None",
"mtte.codeCopiedClipboardFail": "Code snippet couldn't be copied into your clipboard! Your browser doesn't support it or blocks it.",
"mtte.codeCopiedClipboardSuccess": "Code snippet successfully copied into your clipboard!",
"mtte.configBoard": "Keybind for Moulinette Board",
"mtte.configBoardHint": "Toggle visibility (on/off) of Moulinette Board. EARLY ACCESS ONLY.",
"mtte.configBrowseMode": "Browse mode",
"mtte.configBrowseModeHint": "Depending on your preferences, you can choose to browse by creator or by pack (default)",
"mtte.configCloudColor": "Moulinette Cloud Color",
"mtte.configCloudColorHint": "Packs from Moulinette Cloud can be highlighted in dropdown lists from other local assets. Doesn't work with all webbrowsers.",
"mtte.configCustomPath": "Assets custom path",
"mtte.configCustomPathHint": "DEPRECATED! DO NOT USE (rather use \"Configure sources\" for each type of asset). Specify a custom path (in addition to /moulinette) where moulinette must search for assets (during indexing).",
"mtte.configDebugScanAssets": "Debug indexing process",
"mtte.configDebugScanAssetsHint": "When enabled, moulinette adds messages into the console log to let you debug the process of indexing assets.",
"mtte.configDropdownMode": "Drop-down list type",
"mtte.configDropdownModeHint": "Choose which type of drop-downs you prefer.",
"mtte.configEnableMoulinetteCloud": "Enable Moulinette Cloud",
"mtte.configEnableMoulinetteCloudHint": "When disabled, moulinette modules will not request Moulinette Cloud servers for assets. Patreon integration and showcase content will be disabled. Don't disable unless you only want to rely on local assets.",
"mtte.configFavoriteKey": "Keybind for Favorites",
"mtte.configFavoriteKeyHint": "Keybind for opening Moulinette Favorites UI",
"mtte.configFilepicker": "Moulinette FilePicker",
"mtte.configFilepickerHint": "Use Moulinette FilePicker (replaces the built-in one)",
"mtte.configLayerKey": "Keybind for Moulinette Layer",
"mtte.configLayerKeyHint": "Keybind for switching back to Moulinette Layer",
"mtte.configS3": "S3 bucket",
"mtte.configS3Hint": "If you have properly configured S3 AND want to use it for moulinette, specify the name of the bucket. Leave blank otherwise",
"mtte.configShowCase": "Showcase content",
"mtte.configShowCaseHint": "Some packs are providing showcase content. Uncheck to remove them from the available packs.",
"mtte.configShowCloudContent": "Show matching assets (Cloud)",
"mtte.configShowCloudContentHint": "When searching, Moulinette displays a message box the see matching assets on Moulinette Cloud. Uncheck this configuration to disable that feature.",
"mtte.configSubControls": "Moulinette sub-controls",
"mtte.configSubControlsHint": "When this configuration is enabled, Moulinette will add Moulinette controls in existing sections (tokens, tiles, sounds). Otherwise, Moulinette controls will only be available in Moulinette layer.",
"mtte.configUIMode": "Interface",
"mtte.configUIModeHint": "When choosing \"compact\", labels will be removed to save space. Useful for advanced GMs that want to optimize their workspace.",
"mtte.continue": "The module waits for the authentication to be successfully completed. Check your browser (new tab) to follow the process. If the authentication failed, close this window and try again!",
"mtte.copyCode": "Copy Code",
"mtte.createJournalArticle": "Create Journal Article",
"mtte.createMacro": "Create Macro",
"mtte.creatorMoulinetteWebsite": "All Creators",
"mtte.creatorWebsite": "Creator's website",
"mtte.days": "days",
"mtte.defaultPickerHint": "Open FoundryVTT default FilePicker",
"mtte.deleteBoardGroup": "Delete Board Group",
"mtte.deleteBoardGroupContent": "Please confirm that you REALLY want to delete the board group '{name}' and ALL its {count} elements!",
"mtte.deleteSource": "Delete source",
"mtte.deleteSourceContent": "Do you really want to DELETE that source? Config entry will be lost and you'll have to add it back.",
"mtte.disconnect": "Log Out (unlink all)",
"mtte.discordRoles": "Your roles (Discord)",
"mtte.downloadDependencies": "Downloading {count} asset(s)...",
"mtte.downloadDependenciesMessage": "Successful : {succ} ({succRate}%). Failed : {failed} ({failRate}%)",
"mtte.dropdownAuto": "Auto-scrolling",
"mtte.dropdownDefault": "Default",
"mtte.duration": "Duration",
"mtte.editSource": "Rename creator/pack for this source",
"mtte.errorBoardDeleteLastAsset": "You must leave at least one asset!",
"mtte.errorBoardMove": "Moving board groups to different levels is not supported!",
"mtte.errorBoardNoName": "Please enter a name (short text) for the group!",
"mtte.errorBoardShortcutNotExecutable": "This shortcut cannot be executed. Try dragging and dropping it where it can be used instead!",
"mtte.errorBrowseUpdateModule": "This view mode requires you to update the module.",
"mtte.errorBuildingAssetIndex": "A data source (indexes) couldn't be loaded. See console for additional details!",
"mtte.errorConflictingModules": "Conflicting module detected. Please disable module(s) <code>{conflicting}</code> if Moulinette doesn't work as expected.",
"mtte.errorDownload": "Image couldn't be downloaded from website. Try again later!",
"mtte.errorGMOnly": "This interface is only for GMs.",
"mtte.errorGameIconModule": "Requires Moulinette GameIcons module.",
"mtte.errorInvalidGift": "Your gift is invalid!",
"mtte.errorLinkYourPatreon": "You need to link Moulinette to Patreon first",
"mtte.errorNoModule": "It seems that only the core has been installed. Make sure that at least 1 Moulinette module has been installed and enabled.",
"mtte.errorNoSelectionToHide": "Please filter data by selecting a creator first. You certainly don't want to hide everything.",
"mtte.errorNotSameType": "A shortcut cannot contain assets of different types.",
"mtte.errorSASTokenAboutToExpire": "Your token will expire in {minutes} minutes. Relink your Patreon account to hide this message.",
"mtte.errorSASTokenExpired": "Your token expired. Relink your Patreon to get access to Moulinette Cloud assets",
"mtte.errorUnsupportedType": "Moulinette doesn't support this type of asset and cannot create a shortcut for it!",
"mtte.exportConfig": "Export config",
"mtte.faIcon": "Icon from",
"mtte.favoriteIconDescr": "You can choose to display a Font Awesome icon OR browse and choose your own icon. If you don't choose any icon, the short text will be displayed.",
"mtte.filepickerCanNotUpload": "You cannot upload files to the FVTT server. Ask your GM for permission!",
"mtte.filterFiles": "Filter files by supported format",
"mtte.filters": "Filters",
"mtte.generateShortcut": "Shortcuts",
"mtte.giftWelcome": "If you received a gift from a content creator, you can apply it here. If the coupon is valid, moulinette will list your gift and its benefits. A gift can provide you access to the creator's assets as if you would support him.",
"mtte.help": "Help",
"mtte.hideFooter": "Hide this configuration panel",
"mtte.homeWelcome": "Welcome! Moulinette gives you access to various items (scenes, images, icons, sounds, translations) that you can easily download without having to install separate modules.",
"mtte.iconPlaceHolder": "FA icon. Use picker =>",
"mtte.imageFrom": "Image from",
"mtte.importConfig": "Import config",
"mtte.index": "Index assets",
"mtte.indexNoRefresh": "Source {path} already indexed. Manages sources to force refresh.",
"mtte.indexingInProgress": "Moulinette is indexing your assets… please wait",
"mtte.indexingMoulinette": "Moulinette indexing",
"mtte.learnMore": "to learn more about Moulinette and/or support it.",
"mtte.linkDiscord": "Link Moulinette with Discord",
"mtte.linkPatreon": "Link Moulinette with Patreon",
"mtte.localIcon": "Or browse icon",
"mtte.lookandfeel": "Look and feel",
"mtte.manageContentVisibility": "Manage Content Visibility",
"mtte.manageExclusions": "Content visibility",
"mtte.manageExclusionsHelp": "Manage content exclusions (you filtered out in the past)",
"mtte.moulinette": "Moulinette",
"mtte.moulinetteCloudDisabled": "Moulinette Cloud is disabled in the settings. Patreon integration is part of Moulinette Cloud. <a class=\"mouCloudEnable\" href=\"javascript:void()\">Re-enable this configuration</a> to get access to Patreon capabilities.",
"mtte.moulinetteFilePicker": "Moulinette FilePicker",
"mtte.moulinetteForge": "Moulinette FVTT",
"mtte.moulinetteForgeHelp": "Helps GM build scenes",
"mtte.moulinetteHelp": "Moulinette Help",
"mtte.moulinetteHelpIndexing": "Moulinette Help - Indexing",
"mtte.moulinetteHelpMessage": "This page will guide you step-by-step and hopefully help you.",
"mtte.moulinetteHome": "Moulinette Home",
"mtte.moulinettePatreon": "Moulinette integration with Patreon",
"mtte.moulinettePatreonGift": "Claim your gift",
"mtte.moulinetteShortcuts": "Moulinette Shortcuts",
"mtte.moulinetteShortcutsDragToolTip": "Drag the icon to your Macro Hotbar to automatically generate a macro",
"mtte.moulinetteShortcutsMacro": "Use the code below to create a macro which opens the UI in the current state (applying the same filters). You can also use the button to let moulinette create a macro for you or drag the moulinette icon and drop it directly on your macro hotbar.",
"mtte.moulinetteShortcutsMacroJournal": "Use the code below in a Journal Entry to create a shortcut which opens the UI in the current state (applying the same filters). You can also use the button to let moulinette create a Journal Article for you. IMPORTANT : before using it, you need to import MouTiles, MouScenes, MouSounds, and MouPrefabs macros (depending on what you need) from Moulinette's compendium.",
"mtte.moulinetteSources": "Moulinette Config | Sources",
"mtte.noResult": "No result found! Try with less terms or check your data.",
"mtte.noResultsFound": "No result found",
"mtte.notPatron": "You are not yet supporting Moulinette. You won't be able to access any content from creators below",
"mtte.pack": "Pack",
"mtte.packOnMouliplace": "Pack on Mouliplace",
"mtte.pasteCouponHere": "Paste the Coupon (ID) here",
"mtte.path": "Path",
"mtte.patreon": "Patreon",
"mtte.patreonDescription": "You're not connected to Patreon nor Discord yet. Click on the button below and authenticate with your Patron or Discord account.",
"mtte.patreonGifts": "Your gifts",
"mtte.patreonLinked": "Your account",
"mtte.patreonPledges": "Your pledges (Patreon)",
"mtte.patreonSupportMe": "If you find this module useful, please consider supporting by <a href=\"https://www.patreon.com/moulinette\" target=\"_blank\">becoming my patron</i></a>.",
"mtte.patreonThanks": "Thank you for supporting me!",
"mtte.patreonWelcome": "Moulinette lets you link your world with your Patreon and/or Discord account. By doing so, Moulinette will offer you additional features and assets based on your subscriptions (Patreon) and roles (Discord), not only to Moulinette itself but to others creators too.",
"mtte.patron": "You are my patron",
"mtte.pickFolder": "Pick folder",
"mtte.platinumpatron": "You're supporting a Platinum creator!",
"mtte.previewSound": "Listen to sound or music (without playing it in Foundry)",
"mtte.previewSound15": "Preview (15 secs)",
"mtte.progress": "Progressbar",
"mtte.publisher": "Creator",
"mtte.receiveGift": "Claim a gift",
"mtte.refreshLinks": "Refresh Patreon/Discord",
"mtte.refreshed": "Cached data cleared. Re-open moulinette to load new data!",
"mtte.requiredRoles": "Required role (Discord)",
"mtte.requiredTiers": "Required tier (Patreon)",
"mtte.resetSource": "Reset source",
"mtte.resetSourceContent": "Do you really want to RESET that source back to factory default (ie. what the module recommends)?",
"mtte.saveFavoriteToolTip": "Saves audio into selected slot",
"mtte.search": "Type something to search… then ENTER (or click button)",
"mtte.searchIcon": "Search Icon",
"mtte.seeDoc": "See documentation",
"mtte.shortText": "Short text",
"mtte.showAll": "Show All",
"mtte.soundFrom": "Sound/music from",
"mtte.source": "Source",
"mtte.sourceForceRefresh": "Always re-index. Click to use existing index.",
"mtte.sourceNoRefresh": "Use existing index. Click to force re-indexing.",
"mtte.sourcesDescription": "Configure the sources you'd like Moulinette to index. <i class=\"fas fa-cube\"></i> are automatically added by modules but you can disable them and/or modify creators' and packs' names. You can also add custom paths <i class=\"fas fa-user\"></i> to index. Remember that Moulinette automatically indexes <em>'moulinette/[type]/custom'</em> folders. You can also configure a global custom path to index. See : <a href=\"https://github.com/SvenWerlen/moulinette-core/tree/main/docs\">Documentation</a> about it.",
"mtte.specialSearch": "This pack contains no asset or requires you to provide search terms",
"mtte.subscribe": "Subscribe",
"mtte.supportMoulinette": "Support Moulinette",
"mtte.sync": "Reload data from Moulinette Cloud",
"mtte.thumbsLarger": "Increase thumbs' size",
"mtte.thumbsSmaller": "Decrease thumbs' size",
"mtte.toggleSource": "Toggle source (enable/disable)",
"mtte.tooltipAuthenticate": "Moulinette is currently not linked to your Patreon account. You need to <a class=\"mouAuthenticate\" href>authenticate</a> to get access to cloud content.",
"mtte.tooltipAuthenticatedAs": "Moulinette is linked to your Patreon account",
"mtte.tooltipConfigure": "<i class=\"fas fa-arrow-down\"></i> <i class=\"fas fa-arrow-down\"></i> Click on <i class=\"fas fa-cog\"></i> icon to bring your own assets (configure sources)",
"mtte.tooltipFullAccess": "You have access to online content from <a class=\"mouAuthenticate\" href>creators you support</a>",
"mtte.tooltipSupportMoulinette": "Consider <a href=\"https://www.patreon.com/moulinette\" target=\"_blank\">supporting&nbsp;Moulinette</a> to get access to cloud content. Discover creators available on <a href=\"https://assets.moulinette.cloud/marketplace\" target=\"_blank\">Moulinette&nbsp;Cloud</a>.",
"mtte.type": "Type",
"mtte.uiModeCompact": "Compact",
"mtte.uiModeDefault": "Default",
"mtte.unknown": "Unknown",
"mtte.updateSource": "Update existing source",
"mtte.wholeWord": "Toggle \"whole word\" search. Partial matches will be filtered out.",
"mtte.wholeWordDisabled": "Whole word search disabled!",
"mtte.wholeWordEnabled": "Whole word search enabled!"
}

View File

@@ -0,0 +1,229 @@
{
"mtte.actionSourceAdd": "Ajouter",
"mtte.actionSourceUpdate": "Mettre à jour",
"mtte.actions": "Actions",
"mtte.addSource": "Ajouter une nouvelle source",
"mtte.allContentVisible": "Tous les contenus disponibles sont visibles",
"mtte.allPacks": "Tous les packs",
"mtte.allPubs": "Tous les créateurs",
"mtte.apply": "Appliquer",
"mtte.applyFilters": "Appliquer les filtres",
"mtte.authenticateDiscord": "S'authentifier avec Discord",
"mtte.authenticatePatreon": "S'authentifier avec Patreon",
"mtte.authenticationTimeout": "Désolé. Vous avez pris trop de temps pour vous authentifier (2 minutes). Fermez cette fenêtre et réessayez.",
"mtte.automaticCreators": "Auto",
"mtte.automaticCreatorsTooltip": "1er niveau = Créateurs, 2e niveau = Packs",
"mtte.availableAssets": "Prévisualiser les correspondances sur Moulinette Cloud",
"mtte.availableCreators": "Créateurs disponibles",
"mtte.availableresult": "Détails de la correspondance",
"mtte.boardAssetsCount": "<p>Cette entrée du tableau inclut <b>{count}</b> {type}s. Moulinette en choisira un au hasard lorsque vous l'utiliserez.</p>",
"mtte.boardExport": "Exporter le tableau (en tant que fichier JSON)",
"mtte.boardGroup": "Ajouter/Modifier un groupe de tableaux",
"mtte.boardImport": "Importer le tableau (à partir d'un fichier JSON)",
"mtte.boardInstructionsActor": "<p><strong>Fiche de personnage</strong> : <span class=\"reference\">Cliquer</span></p><p><strong>Ajouter à la scène</strong> : <span class=\"reference\">Glisser</span></p>",
"mtte.boardInstructionsCommon": "<p><strong>Réorganiser l'élément du tableau</strong> : <span class=\"reference\">Glisser</span></p><p><strong>Modifier l'élément du tableau</strong> : <span class=\"reference\">Clic droit</span></p>",
"mtte.boardInstructionsFolder": "<p><strong>Ouvrir/parcourir le dossier du tableau</strong> : <span class=\"reference\">Cliquer</span></p>",
"mtte.boardInstructionsItem": "<p><strong>Fiche d'objet</strong> : <span class=\"reference\">Cliquer</span></p><p><strong>Ajouter à</strong> : <span class=\"reference\">Glisser</span></p>",
"mtte.boardInstructionsJournalEntry": "<p><strong>Fiche d'entrée de journal</strong> : <span class=\"reference\">Cliquer</span></p><p><strong>Ajouter à</strong> : <span class=\"reference\">Glisser</span></p>",
"mtte.boardInstructionsMacro": "<p><strong>Exécuter la macro</strong> : <span class=\"reference\">Cliquer</span></p><p><strong>Ajouter à la barre de raccourcis</strong> : <span class=\"reference\">Glisser</span></p>",
"mtte.boardInstructionsPlaylistSound": "<p><strong>Jouer le son</strong> : <span class=\"reference\">Cliquer</span></p><p><strong>Ajouter à la scène</strong> : <span class=\"reference\">Glisser</span></p>",
"mtte.boardInstructionsRollTable": "<p><strong>Lancer sur la table</strong> : <span class=\"reference\">Cliquer</span></p>",
"mtte.boardInstructionsScene": "<p><strong>Voir la scène</strong> : <span class=\"reference\">Cliquer</span></p>",
"mtte.boardJournal": "<p>Cet article de journal contient <b>{count}</b> page(s).</p>",
"mtte.boardMacro": "<p>Macro de type <b>{type}</b>.</p>",
"mtte.boardMaxLevelReached": "Niveau maximum atteint ! Vous ne pouvez plus ajouter de groupes de tableaux. À ce niveau, vous pouvez uniquement glisser-déposer des éléments (macros, images, sons, etc.).",
"mtte.boardOther": "<p>Cette entrée du tableau est un(e) <b>{type}</b>.</p>",
"mtte.boardassets": "Ressources",
"mtte.boardgroupDescription": "Cette action crée un nouveau groupe de tableaux (dossier). Choisissez un nom et une icône (optionnelle) pour le représenter.",
"mtte.boardgroupDescriptionEdit": "Modifiez le groupe de tableaux (dossier) ci-dessous. Vous pouvez aussi le supprimer.",
"mtte.boardshortcutDescription": "Cette action vous permet de modifier ou de supprimer le raccourci. Vous pouvez également ajouter des ressources supplémentaires (une sera choisie au hasard lorsque vous l'utiliserez) en les glissant-déposant dans la zone de dépôt ci-dessous.",
"mtte.browse": "Consultez vos répertoires et sélectionnez une image/icône",
"mtte.browseByPack": "Par pack",
"mtte.browseByPublisher": "Par créateur",
"mtte.cancel": "Annuler",
"mtte.chooseCreator": "Choisir un créateur",
"mtte.choosePack": "Choisir un pack",
"mtte.clearIndex": "Vider l'index",
"mtte.clearIndexConfirmation": "Veuillez confirmer que vous voulez VRAIMENT vider l'index.",
"mtte.clickToCloseManage": "Vous trouverez ci-dessous la liste de tous les contenus que vous avez choisir d'exclure pour ce monde. Vous pouvez retirer l'exclusion pour les voir et les utiliser à nouveau. Vous devrez RAFRAICHIR la page ou la cache Moulinette après les changements.",
"mtte.clickToHide": "Cliquer pour masquer les contenus de ce créateur ou de ce pack",
"mtte.clickToHideContent": "Cette action masque les contenus du créateur sélectionné. <ul><li>Vous pouvez masquer les contenus d'un pack ou tous les contenus du créateur.</li> <li>La configuration est spécifique à ce monde.</li> <li>Vous pouvez réinitialiser les filtres (action disponible dans la barre d'outils <i class='fa-solid fa-gear'></i>)</li><li>Fermer la fenêtre pour annuler l'action.</li></ul><hr>",
"mtte.clickToHideCreator": "Masquer le créateur '{creator}'",
"mtte.clickToHidePack": "Masquer le pack '{pack}'",
"mtte.clickToHideTitle": "Masquer contenu",
"mtte.cloudColorContrast": "Contrasté",
"mtte.cloudColorDefault": "Par défaut",
"mtte.cloudColorNone": "Aucun",
"mtte.codeCopiedClipboardFail": "Le snippet de code n'a pas pu être copié dans votre presse-papier. Votre navigateur ne le supporte pas ou le bloque.",
"mtte.codeCopiedClipboardSuccess": "Le snippet de code a été copié dans votre presse-papier avec succès!",
"mtte.configBoard": "Raccourci clavier pour Moulinette Board",
"mtte.configBoardHint": "Afficher/masquer Moulinette Board. ACCÈS ANTICIPÉ SEULEMENT.",
"mtte.configBrowseMode": "Mode de visionnement",
"mtte.configBrowseModeHint": "En fonction de vos préférences, choisissez si vous préférez visionner/naviguer par créateur ou by pack (défaut)",
"mtte.configCloudColor": "Couleur Moulinette Cloud",
"mtte.configCloudColorHint": "Dans les listes déroulantes, les packs en provenance de Moulinette Cloud peuvent être mises en évidence avec une couleur (ne fonctionne pas sur certains navigateurs).",
"mtte.configCustomPath": "Chemin personnalisé (assets)",
"mtte.configCustomPathHint": "DÉPRÉCIÉ! NE PLUS UTILISER (utiliser plutôt \"Configurer sources\" pour chaque type de contenu). Spécifier un répertorie personnalisé (en plus de /moulinette) que Moulinette utilisera lors de l'indexation.",
"mtte.configDebugScanAssets": "Déboguer l'indexation",
"mtte.configDebugScanAssetsHint": "Lorsque activé, moulinette affichera des messages dans la console afin que vous puissiez déboguer le processus d'indexation.",
"mtte.configDropdownMode": "Modèle de liste déroulante",
"mtte.configDropdownModeHint": "Choisissez le type de liste déroulante que vous préférez.",
"mtte.configEnableMoulinetteCloud": "Activer Moulinette Cloud",
"mtte.configEnableMoulinetteCloudHint": "Lorsque désactivé, les modules moulinette ne feront plus de requêtes aux serveurs de Moulinette Cloud. L'intégration Patreon et les contenus d'exemple seront désactivés. Ne désactivez pas cette option à moins que vous souhaitez réellement utiliser uniquement les contenus locaux.",
"mtte.configFavoriteKey": "Raccourci pour les favoris",
"mtte.configFavoriteKeyHint": "Raccourci clavier pour ouvrir l'interface des favoris de Moulinette",
"mtte.configFilepicker": "Moulinette FilePicker",
"mtte.configFilepickerHint": "Utiliser le navigateur d'images de Moulinette (replace celui de Foundry)",
"mtte.configLayerKey": "Raccourci pour Moulinette",
"mtte.configLayerKeyHint": "Raccourci pour basculer sur la couche (layer) de Moulinette",
"mtte.configS3": "Compartiment S3",
"mtte.configS3Hint": "Si vous avez configuré du stockage S3 ET que vous souhaitez l'utiliser pour moulinette, spécifiez le nom du compartiment à utiliser. Laissez vide sinon",
"mtte.configShowCase": "Contenu d'exemple",
"mtte.configShowCaseHint": "Certains packs présentent du contenu d'exemple (vitrine). Décocher pour les retirer de la liste des packs disponibles.",
"mtte.configShowCloudContent": "Afficher les correspondance (Cloud)",
"mtte.configShowCloudContentHint": "Lorsque vous recherchez du contenu, Moulinette affiche le nombre de correspondance sur Moulinette Cloud. Décochez cette option pour désactiver la boîte d'information.",
"mtte.configSubControls": "Moulinette dans sous-menus",
"mtte.configSubControlsHint": "Si cette option est activée, des boutons de contrôle seront insérés dans les sous-menus de FoundryVTT (tokens, tuiles, sons). Sinon, les contrôles seront uniquement disponibles sous la section de Moulinette.",
"mtte.configUIMode": "Interface",
"mtte.configUIModeHint": "Lorsque vous choissez le mode \"compact\" les libellés seront cachés pour gagner de la place. Interéssant pour les MJs expérimentés qui veulent optimiser leur espace de travail.",
"mtte.continue": "Le module attend que votre authentification soit complétée avec succès. Consultez votre navigateur pour terminer le processus. Si l'authentification échoue, fermer cette fenêtre et recommencer!",
"mtte.copyCode": "Copier le code",
"mtte.createJournalArticle": "Créer un article",
"mtte.createMacro": "Créer une macro",
"mtte.creatorMoulinetteWebsite": "Tous les créateurs",
"mtte.creatorWebsite": "Site web du créateur",
"mtte.days": "jours",
"mtte.defaultPickerHint": "Ouvrir le FilePicker FoundryVTT d'origine",
"mtte.deleteBoardGroup": "Supprimer le groupe de tableaux",
"mtte.deleteBoardGroupContent": "Veuillez confirmer que vous VOULEZ VRAIMENT supprimer le groupe de tableaux '{name}' et TOUS ses {count} éléments !",
"mtte.deleteSource": "Supprimer source",
"mtte.deleteSourceContent": "Voulez-vous vraiment SUPPRIMER cette source? La configuration sera perdue.",
"mtte.disconnect": "Déconnecter Patreon/Discord",
"mtte.discordRoles": "Vos rôles (Discord)",
"mtte.downloadDependencies": "Téléchargement de {count} élément(s)...",
"mtte.downloadDependenciesMessage": "Succès : {succ} ({succRate}%). Échecs : {failed} ({failRate}%)",
"mtte.dropdownAuto": "Auto-déroulante",
"mtte.dropdownDefault": "Par défaut",
"mtte.duration": "Durée",
"mtte.editSource": "Renommer le créateur/packs de cette source",
"mtte.errorBoardDeleteLastAsset": "Vous devez laisser au moins une ressource !",
"mtte.errorBoardMove": "Le déplacement de groupes de tableaux vers différents niveaux n'est pas pris en charge !",
"mtte.errorBoardNoName": "Veuillez entrer un nom (texte court) pour le groupe !",
"mtte.errorBoardShortcutNotExecutable": "Ce raccourci ne peut pas être exécuté. Essayez de le glisser-déposer là où il peut être utilisé à la place !",
"mtte.errorBrowseUpdateModule": "Ce mode requiert une mise à jour du module.",
"mtte.errorBuildingAssetIndex": "Une des sources de données (indexes) n'a pas pu être chargée. Voir dans la console pour plus de détails!",
"mtte.errorConflictingModules": "Module en conflit détecté! Veuillez désactiver le(s) module(s) <code>{conflicting}</code> si vous rencontrez des problèmes avec Moulinette.",
"mtte.errorDownload": "L'image n'a pas pu être téléchargée. Veuillez réessayer plus tard!",
"mtte.errorGMOnly": "Cette interface est destinée pour les MJs.",
"mtte.errorGameIconModule": "Requiert le module Moulinette GameIcons.",
"mtte.errorInvalidGift": "Your cadeau est invalide!",
"mtte.errorLinkYourPatreon": "Vous devez lier votre compte Patreon à Moulinette",
"mtte.errorNoModule": "Il semblerait que seul le core ait été installé. Assurez-vous qu'au moins 1 module Moulinette soit installé et activé.",
"mtte.errorNoSelectionToHide": "Veuillez d'abord sélectionner un créateur. Vous ne souhaitez certainement pas masquer tous les contenus de tous les créateurs.",
"mtte.errorNotSameType": "Un raccourci ne peut pas contenir des ressources de types différents.",
"mtte.errorSASTokenAboutToExpire": "Votre jeton expirera dans {minutes} minutes. Reconnectez votre compte Patreon pour supprimer ce message.",
"mtte.errorSASTokenExpired": "Votre jeton a expiré. Reconnectez votre compte Patreon pour avoir accès aux éléments de Moulinette Cloud",
"mtte.errorUnsupportedType": "Moulinette ne supporte pas ce type de ressource et ne peut pas créer de raccourci pour cela !",
"mtte.exportConfig": "Exporter config",
"mtte.faIcon": "Icône de",
"mtte.favoriteIconDescr": "Vous pouvez choisir d'afficher une icône Font Awesome OU chosir votre propre image. Si vous ne choisissez ni l'un ni l'autre, le texte court sera affiché.",
"mtte.filepickerCanNotUpload": "Vous ne pouvez téléverser de fichier sur le serveur FVTT. Demandez la permission à votre MJ!",
"mtte.filterFiles": "Filtrer les fichiers par format supporté",
"mtte.filters": "Filtres",
"mtte.generateShortcut": "Raccourcis",
"mtte.giftWelcome": "Si vous avez reçu un coupon-cadeau d'un créateur, vous pouvez l'utiliser ici. Si votre coupon est valide, moulinette listera votre cadeau et ses bénéfices. Un cadeau vous donne accès à des contenus comme si vous supportiez le créateur.",
"mtte.help": "Aide",
"mtte.hideFooter": "Masquer ce panneau de configuration",
"mtte.homeWelcome": "Bienvenue! Moulinette donne accès à de nombreux éléments (scènes, images, icons, sons, traductions) que vous pourrez rapidement télécharger sans avoir besoin de modules séparés.",
"mtte.iconPlaceHolder": "Icône FA. Rechercher =>",
"mtte.imageFrom": "Image de",
"mtte.importConfig": "Importer config",
"mtte.index": "Indexer",
"mtte.indexNoRefresh": "La source {path} est déjà indexée. Gérez les sources pour forcer un rafraichissement.",
"mtte.indexingInProgress": "Moulinette indexe vos éléments… veuillez patienter",
"mtte.indexingMoulinette": "Indexation de Moulinette",
"mtte.learnMore": "pour apprendre plus à propos de Moulinette et/ou le supporter.",
"mtte.linkDiscord": "Lier Moulinette avec Discord",
"mtte.linkPatreon": "Lier Moulinette avec Patreon",
"mtte.localIcon": "Ou chercher icône",
"mtte.lookandfeel": "Apparence",
"mtte.manageContentVisibility": "Visibilité des contenus",
"mtte.manageExclusions": "Visibilité (contenu)",
"mtte.manageExclusionsHelp": "Gérer les exclusions de contenu (que vous avez masqué dans le passé)",
"mtte.moulinette": "Moulinette",
"mtte.moulinetteCloudDisabled": "Moulinette Cloud est désactivé dans la configuration. L'intégration avec Patreon fait partie de Moulinette Cloud. Veuillez <a class=\"mouCloudEnable\" href=\"javascript:void()\">réactiver cette option</a> pour accéder aux fonctionnalités Patreon.",
"mtte.moulinetteFilePicker": "Moulinette FilePicker",
"mtte.moulinetteForge": "Moulinette FVTT",
"mtte.moulinetteForgeHelp": "Aide les MJs lors de la création de scènes",
"mtte.moulinetteHelp": "Moulinette Aide",
"mtte.moulinetteHelpIndexing": "Moulinette Aide - Indexation",
"mtte.moulinetteHelpMessage": "Cette page vous guidera pas-à-pas et vous aidera, je l'espère.",
"mtte.moulinetteHome": "Moulinette Accueil",
"mtte.moulinettePatreon": "Intégration de Moulinette avec Patreon",
"mtte.moulinettePatreonGift": "Recevoir un cadeau",
"mtte.moulinetteShortcuts": "Moulinette Raccourcis",
"mtte.moulinetteShortcutsDragToolTip": "Glissez cette icon dans votre barre de raccourci (Macro Hotbar)",
"mtte.moulinetteShortcutsMacro": "Utilisez le code ci-dessous pour créer une macro qui ouvre l'interface de Moulinette dans l'état actuel (filtres et recherche). Vous pouvez aussi cliquer sur le bouton ci-bas pour que Moulinette se charge de la créer ou même faire glisser l'image de Moulinette dans votre barre de raccourcis (Macro Hotbar).",
"mtte.moulinetteShortcutsMacroJournal": "Utilisez le code ci-dessous dans un article de journal pour créer un raccourci ouvrant l'interface de Moulinette dans l'état actuel (filtres et recherche). Vous pouvez aussi cliquer sur le bouton ci-bas pour que Moulinette se charge de créer un article. IMPORTANT : avant d'utiliser le code, vous devez importer les macros MouTiles, MouScenes, MouSounds, and MouPrefabs (en fonction de ce que vous avez besoin) depuis le compendium de Moulinette.",
"mtte.moulinetteSources": "Moulinette Config | Sources",
"mtte.noResult": "Aucun résultat! Essayer avec moins de termes ou vérifier vos données.",
"mtte.noResultsFound": "Aucun résultat trouvé",
"mtte.notPatron": "Vous ne supportez pas Moulinette. Vous ne pourrez pas accéder aux contenus des créateurs ci-après.",
"mtte.pack": "Pack",
"mtte.packOnMouliplace": "Pack sur Mouliplace",
"mtte.pasteCouponHere": "Collez le coupon (ID) ici",
"mtte.path": "Chemin",
"mtte.patreon": "Patreon",
"mtte.patreonDescription": "Vous n'êtes pas encore connecté à Patreon ou Discord. Cliquer sur le bouton ci-dessous et authentifiez-vous pour lier Moulinette avec votre compte Patreon ou Discord.",
"mtte.patreonGifts": "Vos cadeaux",
"mtte.patreonLinked": "Votre compte",
"mtte.patreonPledges": "Vos abonnements (Patreon)",
"mtte.patreonSupportMe": "Si vous trouvez ce module utile, considérez apporter votre soutien en <a href=\"https://www.patreon.com/moulinette\" target=\"_blank\">devenant mon patron</i></a>.",
"mtte.patreonThanks": "Merci pour votre soutien!",
"mtte.patreonWelcome": "Moulinette vous offre la possibilité de liver votre compte Patreon et/ou Discord. Moulinette vous offrira alors des capacités additionnelles et des contenus basés sur vos abonnements (Patreon) ou rôles (Discord), non seulement à Moulinette mais également à d'autres créateurs.",
"mtte.patron": "Vous êtes mon patron",
"mtte.pickFolder": "Répertoire",
"mtte.platinumpatron": "Vous supportez un créateur Platinum!",
"mtte.previewSound": "Écouter le son ou la musique (sans le/la jouer dans Foundry)",
"mtte.previewSound15": "Aperçu (15 secs)",
"mtte.progress": "Barre de progression",
"mtte.publisher": "Créateur",
"mtte.receiveGift": "Utiliser un coupon-cadeau",
"mtte.refreshLinks": "Rafraîchir Patreon/Discord",
"mtte.refreshed": "Données en cache vidées. Ré-ouvrir moulinette pour obtenir les nouvelles données!",
"mtte.requiredRoles": "Rôle requis (Discord)",
"mtte.requiredTiers": "Abonnement requis (Patreon)",
"mtte.resetSource": "Réinitialiser source",
"mtte.resetSourceContent": "Voulez-vous vraiment RÉINITIALISER cette source en utilisant les valeurs par défaut (ie. ce que le module recommande)?",
"mtte.saveFavoriteToolTip": "Enregistre le favori dans l'emplacement sélectionné",
"mtte.search": "Saisir des mots pour rechercher… puis ENTRÉE (or cliquer sur bouton)",
"mtte.searchIcon": "Rechercher une icône",
"mtte.seeDoc": "Voir documentation",
"mtte.shortText": "Texte court",
"mtte.showAll": "Afficher tout",
"mtte.soundFrom": "Son/musique de",
"mtte.source": "Source",
"mtte.sourceForceRefresh": "Toujours ré-indexer. Cliquer pour réutiliser l'index existant.",
"mtte.sourceNoRefresh": "Utilise l'index si existant. Cliquer pour forcer la ré-indexation.",
"mtte.sourcesDescription": "Configurez les sources que vous voulez que Moulinette indexe. <i class=\"fas fa-cube\"></i> sont automatiquement ajoutés par les modules mais vous pouvez les désactiver ou changer le libellés du créateur/pack. Vous pouvez également ajouter vos propres sources <i class=\"fas fa-user\"></i> à indexer. Rappelez-vous que Moulinette indexe automatiquement les répertoires <em>'moulinette/[type]/custom'</em>. Vous pouvez également configurer un chemin personnalisé globalement. Consultez la <a href=\"https://github.com/SvenWerlen/moulinette-core/tree/main/docs\">documentation</a> pour en savoir plus.",
"mtte.specialSearch": "Ce pack nécessite que vous fassiez une recherche",
"mtte.subscribe": "S'abonner",
"mtte.supportMoulinette": "Supporter Moulinette",
"mtte.sync": "Recharger les données depuis Moulinette Cloud",
"mtte.thumbsLarger": "Augmenter la taillle des vignettes",
"mtte.thumbsSmaller": "Diminuer la taille des vignettes",
"mtte.toggleSource": "Activer/désactiver source",
"mtte.tooltipAuthenticate": "Moulinette n'est pas lié à votre Patreon. Vous devez vous <a class=\"mouAuthenticate\" href>authentifier</a> pour accéder au contenu en ligne.",
"mtte.tooltipAuthenticatedAs": "Moulinette est lié à votre Patreon",
"mtte.tooltipConfigure": "<i class=\"fas fa-arrow-down\"></i> <i class=\"fas fa-arrow-down\"></i> Cliquer sur l'icône <i class=\"fas fa-cog\"></i> pour importer vos propres contenus (configurer les sources)",
"mtte.tooltipFullAccess": "Vous avez accès aux contenus en ligne des <a class=\"mouAuthenticate\" href>créateurs que vous supportez</a>",
"mtte.tooltipSupportMoulinette": "Envisagez <a href=\"https://www.patreon.com/moulinette\" target=\"_blank\">supporter&nbsp;Moulinette</a> pour obtenir accès à du contenu en ligne. Découvrez les créateurs disponibles sur <a href=\"https://assets.moulinette.cloud/marketplace\" target=\"_blank\">Moulinette&nbsp;Cloud</a>.",
"mtte.type": "Type",
"mtte.uiModeCompact": "Compact",
"mtte.uiModeDefault": "Par défaut",
"mtte.unknown": "Inconnu",
"mtte.updateSource": "Mettre à jour une source",
"mtte.wholeWord": "Activer/désactiver la recherche \"mot complet\". Les résultats partiels seront ignorés.",
"mtte.wholeWordDisabled": "Recherche \"mot complet\" désactivée!",
"mtte.wholeWordEnabled": "Recherche \"mot complet\" activée!"
}

View File

@@ -0,0 +1,96 @@
{
"mtte.actions": "操作",
"mtte.allPacks": "すべてのパック",
"mtte.allPubs": "すべてのクリエイター",
"mtte.apply": "適用",
"mtte.authenticationTimeout": "認証に時間がかかりすぎました2分以上、このウィンドウを閉じてもう一度お試しください。",
"mtte.availableAssets": "検索したアセットの一覧はMoulinette Cloudで閲覧できます。",
"mtte.availableresult": "検索結果",
"mtte.browse": "フォルダを検索して",
"mtte.browseByPack": "パック別",
"mtte.browseByPublisher": "クリエイター別",
"mtte.cancel": "キャンセル",
"mtte.configBrowseMode": "検索モード",
"mtte.configBrowseModeHint": "好みに応じて、パックまたはクリエイター別で検索をまとめることができます。デフォルトはパック別です。",
"mtte.configCustomPath": "アセットパス",
"mtte.configCustomPathHint": "検索のインデックスを作るときにMoulinetteが必ず検索しなければならないカスタムアセットのパスを指定できます。ここで何を指定したとしても必ず「/moulinette」ディレクトリは検索されます。",
"mtte.configDebugScanAssets": "インデックスのデバッグ",
"mtte.configDebugScanAssetsHint": "有効化時、コンソールログにアセットのインデックスをデバッグするのに役立つログを出力するようになります。",
"mtte.configEnableMoulinetteCloud": "Moulinette Cloud有効化",
"mtte.configEnableMoulinetteCloudHint": "無効化することでMoulinette Cloudを通じてアセットを取得しなくなります。結果的にPatreonの連動とサンプル作品の表示も無効化されます。「ローカルにあるアセットしか使いたくない」という時以外は無効化しないでください。",
"mtte.configFavoriteKey": "お気に入りショートカット",
"mtte.configFavoriteKeyHint": "Moulinetteお気に入りを開くためのショートカットを設定します",
"mtte.configFilepicker": "Moulinette ファイル選択UI",
"mtte.configFilepickerHint": "Moulinette のファイル選択UIを使用します(従来のものを置き換えます)",
"mtte.configS3": "S3バケット",
"mtte.configS3Hint": "S3のバケットを適切に設定していて、Moulinetteのアセット検索先として使いたい場合はここにバケット名を指定してください。それ以外の場合は空にしてください。",
"mtte.configShowCase": "サンプル作品を表示",
"mtte.configShowCaseHint": "クリエイターの方々が提供しているサンプル作品を表示するかの設定をします。チェックを外すと所持しているパックやローカルアセットしか表示されません。",
"mtte.configUIMode": "UI形式",
"mtte.configUIModeHint": "\"すっきり\"ではアイコンからラベルを消して空間をスッキリさせます。作業環境を最適化したい上級ユーザのGMにお勧めです。",
"mtte.continue": "認証が完了するまで待機します。新たに開いたブラウザ(またはタブ)を確認して認証手続きを進めてください。認証が失敗した場合、このウィンドウを閉じてもう一度お試しください。",
"mtte.creatorMoulinetteWebsite": "Moulinette Cloudのクリエイター達",
"mtte.creatorWebsite": "クリエイターのウェブサイト",
"mtte.days": "日",
"mtte.defaultPickerHint": "オンセ工房 Foundry VTTの従来のファイル選択UIを開きます。",
"mtte.disconnect": "Patreon連動解除",
"mtte.errorBrowseUpdateModule": "この表示モードを使用するにはModをアップデートする必要があります。",
"mtte.errorBuildingAssetIndex": "データソース(インデックス)をロードできませんでした。コンソールの詳細を確認してください。",
"mtte.errorDownload": "画像をダウンロードできませんでした。時間をおいてもう一度お試しください。",
"mtte.errorGMOnly": "この画面はGM用です。",
"mtte.errorInvalidGift": "ギフトが無効です",
"mtte.errorLinkYourPatreon": "MoulinetteをPatreonに紐付ける必要があります。",
"mtte.errorNoModule": "現在Moulinette Core本体しか有効化されていないようです。最低でももう一つのMoulinette付属Modを有効化してください。",
"mtte.errorSASTokenAboutToExpire": "あなたのPatreon認証トークンは{minutes}分後に無効になります。Patreonを再認証することでこのメッセージを非表示にできます。",
"mtte.errorSASTokenExpired": "認証トークンが無効になりました。Patreonを再度認証するまでMoulinette Cloudのアセットが利用できなくなりました。",
"mtte.faIcon": "アイコン元",
"mtte.favoriteIconDescr": "Font awesomeのアイコンか自分の好きなアイコンを指定できます。アイコンを選択しない場合はテキストが表示されます。",
"mtte.giftWelcome": "クリエイターからギフトコンテンツを頂いている場合はここに適用できます。ギフトクーポンが有効であればギフトとその中身がMoulinetteに表示されます。ギフトで取得されたアセットはそのクリエイターのPatreonを支持しているときと同等のものを利用できます。",
"mtte.homeWelcome": "ようこそMoulinetteとはシーン、画像、アイコン、音声、翻訳を様々なソースから一括に集めて、手軽に検索・ダウンロードするためのModです",
"mtte.iconPlaceHolder": "FAアイコンまたは選択 =>",
"mtte.imageFrom": "画像元",
"mtte.indexingInProgress": "インデックス中です……しばらくお待ち下さい。",
"mtte.indexingMoulinette": "Moulinette インデックス",
"mtte.learnMore": "よりMoulinetteの詳細や支援方法を御覧ください。",
"mtte.localIcon": "アイコン選択",
"mtte.moulinette": "Moulinette",
"mtte.moulinetteCloudDisabled": "Moulinette Cloudが設定から無効化されています。Patreon認証もCloudの機能の一部です。使用するには設定からMoulinette Cloudを有効化してください。",
"mtte.moulinetteFilePicker": "Moulinette ファイル選択",
"mtte.moulinetteForge": "Moulinette FVTT",
"mtte.moulinetteForgeHelp": "GMのシーン作成を手助けします。",
"mtte.moulinetteHome": "Moulinette ホーム",
"mtte.moulinettePatreon": "Moulinette Patreon認証",
"mtte.moulinettePatreonGift": "ギフトを受け取る",
"mtte.noResult": "一致する結果がありませんでした。検索語句を減らしたりデータを確認してください。",
"mtte.noResultsFound": "一致する結果がありませんでした。",
"mtte.notPatron": "MoulinetteをPatreonで支援していないため、以下のクリエイターの作品がアクセスできなくなっています。",
"mtte.pack": "パック",
"mtte.pasteCouponHere": "クーポンIDをここに貼り付けてください",
"mtte.patreon": "Patreon",
"mtte.patreonDescription": "Patreonと同期していません。下記のボタンをクリックして認証の手続きを行ってください。",
"mtte.patreonGifts": "あなたのギフト",
"mtte.patreonLinked": "同期中のアカウント:",
"mtte.patreonPledges": "支援額",
"mtte.patreonSupportMe": "このModを便利だと感じましたら<a href=\"https://www.patreon.com/moulinette\" target=\"_blank\">patreonで支援</i></a>してください。",
"mtte.patreonThanks": "支援いただきありがとうございます!",
"mtte.patreonWelcome": "Moulinetteを使用してあなたのワールドとPatreonアカウントを同期できます。あなたがMoulinetteと他のクリエイターに支援した額に応じて特別なアセットや機能が開放されていきます。",
"mtte.patron": "私の支援者ですね!",
"mtte.publisher": "クリエイター",
"mtte.receiveGift": "ギフトを受け取る",
"mtte.refreshed": "キャッシュデータをクリアしました。Moulinetteを再オープンして新データを確認してください。",
"mtte.requiredTiers": "必要な支援レベル",
"mtte.saveFavoriteToolTip": "選んだスロットにお気に入りを保存します。",
"mtte.search": "検索語句を入力して……Enterキーで検索ボタンクリックでも可",
"mtte.searchIcon": "検索アイコン",
"mtte.seeDoc": "ドキュメンテーション",
"mtte.shortText": "簡単なテキスト",
"mtte.showAll": "すべてを表示",
"mtte.specialSearch": "このパックにはアセットが存在しないか、検索語句を提供しないと検索できない設定になっています。",
"mtte.subscribe": "支援する",
"mtte.supportMoulinette": "Moulinetteを支援",
"mtte.sync": "Moulinette Cloudからデータを再取得する",
"mtte.type": "種類",
"mtte.uiModeCompact": "すっきり",
"mtte.uiModeDefault": "標準",
"mtte.unknown": "不明"
}

View File

@@ -0,0 +1,59 @@
{
"title": "Moulinette Core",
"description": "Moulinette provides multiple tools and assets for DMs (dungeon masters) to help them prepare their games.",
"version": "13.0.1",
"scripts": [
"iconpicker/iconpicker-1.5.0.js"
],
"esmodules": [
"dist/core.min.js"
],
"styles": [
"dist/core.min.css",
"iconpicker/iconpicker-1.5.0.css"
],
"languages": [
{
"lang": "en",
"name": "English",
"path": "lang/en.json",
"flags": {}
},
{
"lang": "fr",
"name": "French",
"path": "lang/fr.json",
"flags": {}
},
{
"lang": "ja",
"name": "日本語",
"path": "lang/ja.json",
"flags": {}
}
],
"packs": [
{
"name": "moulinette-macros",
"label": "Moulinette Macros",
"path": "packs/moulinette-macros.db",
"type": "Macro",
"private": false,
"flags": {}
}
],
"url": "https://github.com/SvenWerlen/moulinette-core",
"download": "https://github.com/SvenWerlen/moulinette-core/archive/v-13.0.1.zip",
"manifest": "https://raw.githubusercontent.com/SvenWerlen/moulinette-core/main/module.json",
"id": "moulinette-core",
"authors": [
{
"name": "Sven Werlen",
"flags": {}
}
],
"compatibility": {
"minimum": "10",
"verified": "12"
}
}

View File

@@ -0,0 +1,32 @@
{
"name": "moulinette-core",
"version": "1.0.0",
"description": "Moulinette provides tools to bring together creators and dungeon masters.",
"main": "src/moulinette-main.js",
"directories": {
"doc": "docs"
},
"scripts": {
"build:js": "webpack",
"build-dev:js": "webpack --config webpack.config.dev.js",
"build:css": "cleancss -o dist/core.min.css src/moulinette-core.css",
"build-dev:css": "cleancss --format 'beautify' -o dist/core.min.css src/moulinette-core.css",
"build": "npm run build:js && npm run build:css",
"build-dev": "npm run build-dev:js && npm run build-dev:css",
"test": "echo \"Error: no test specified\" && exit 1",
"watch": "nodemon --watch src --exec 'npm run build'"
},
"keywords": [],
"author": "",
"license": "MIT",
"devDependencies": {
"clean-css-cli": "^5.6.3",
"nodemon": "^3.1.0",
"terser-webpack-plugin": "^5.3.10",
"webpack": "^5.91.0",
"webpack-cli": "^5.1.4"
},
"nodemonConfig": {
"ext": "js,css"
}
}

View File

@@ -0,0 +1 @@
MANIFEST-001088

View File

@@ -0,0 +1,3 @@
2025/11/14-10:57:18.939941 151a18efb6c0 Recovering log #1086
2025/11/14-10:57:18.945712 151a18efb6c0 Delete type=3 #1084
2025/11/14-10:57:18.946153 151a18efb6c0 Delete type=0 #1086

View File

@@ -0,0 +1,14 @@
<form autocomplete="off" onsubmit="event.preventDefault();">
<audio id="availablePreview" style="display: none">
<source src="{{previewSoundURL}}" type="audio/ogg">
Your browser does not support the audio element.
</audio>
<div class="main">
<div class="infos">
Source: <a href="https://assets.moulinette.cloud/marketplace" target="_blank">Mouliplace</a> (Moulinette Marketplace).
</div>
<div class="list">
{{#each assets as |a|}}{{{a}}}{{/each}}
</div>
</div>
</form>

View File

@@ -0,0 +1,82 @@
<form autocomplete="off" onsubmit="event.preventDefault();">
<h3>{{assetName}}</h3>
{{#if isSound}}
<div class="sound">
<div class="icon"><i class="fas fa-music"></i></div>
<div><b>{{localize "mtte.duration"}}:</b> <i class="far fa-hourglass"></i> {{soundDuration}}</div>
{{#if asset.data.preview}}
<audio id="availResultPreview" style="display: none">
<source src="{{previewSoundURL}}" type="audio/ogg">
Your browser does not support the audio element.
</audio>
<div class="preview"><b>{{localize "mtte.previewSound15"}}:</b>
<a class="previewSound" href=""><i class="far fa-play"></i></a>
<a class="previewSound" href="">listen</a>
</div>
{{/if}}
{{#unless asset.data.preview}}
<div><em>No preview available</em></div>
{{/unless}}
</div>
{{/if}}
{{#unless isSound}}
<div class="tileres">
{{#if mouliplaceUrl}}
<a href="{{mouliplaceUrl}}" target="_blank"><img id="previewImage" width="{{imageSize}}" height="{{imageSize}}" src="{{url}}"/></a>
{{/if}}
{{#unless mouliplaceUrl}}
<img id="previewImage" width="{{imageSize}}" height="{{imageSize}}" src="{{url}}"/>
{{/unless}}
</div>
{{/unless}}
<p>
<b>{{#if isSound}}{{localize "mtte.soundFrom"}}{{/if}}
{{#unless isSound}}{{localize "mtte.imageFrom"}}{{/unless}}</b>:
{{#if mouliplaceCreatorUrl}}
<a href="{{mouliplaceCreatorUrl}}" target="_blank">{{pack.creator}}</a>
{{/if}}
{{#unless mouliplaceCreatorUrl}}
{{pack.creator}}
{{/unless}}
{{#if mouliplaceUrl}}
(<a href="{{mouliplaceUrl}}" target="_blank">{{pack.name}}</a>)
{{/if}}
{{#unless mouliplaceUrl}}
({{pack.name}})
{{/unless}}
</p>
{{#if hasTiers}}
<p>
<b>{{localize "mtte.requiredTiers"}}</b>:
<ul>
{{#each tiers as |t|}}
<li>{{t.title}} ({{t.amount}} $USD) {{#if t.id}}- <a href="https://www.patreon.com/join/{{../vanity}}/checkout?rid={{t.id}}" target="_blank">{{localize "mtte.subscribe"}}</a>{{/if}}</li>
{{/each}}
</ul>
</p>
{{/if}}
{{#if hasRoles}}
<p>
<b>{{localize "mtte.requiredRoles"}}</b>:
<ul>
{{#each roles as |r|}}
<li>{{r.title}}</li>
{{/each}}
</ul>
</p>
{{/if}}
<br />
<footer>
<div class="actions">
{{#if mouliplaceUrl}}
<a href="{{mouliplaceUrl}}" target="_blank"><button><i class="fas fa-store"></i> {{localize "mtte.packOnMouliplace"}}</button></a>
{{/if}}
<a href="{{moulinetteUrl}}" target="_blank"><button><i class="fas fa-store"></i> {{localize "mtte.creatorMoulinetteWebsite"}}</button></a>
{{#if creatorUrl}}
<a href="{{creatorUrl}}" target="_blank"><button><i class="fas fa-external-link-alt"></i> {{localize "mtte.creatorWebsite"}}</button></a>
{{/if}}
</div>
</footer>
</form>

View File

@@ -0,0 +1,72 @@
<form autocomplete="off" onsubmit="event.preventDefault();">
{{#unless data.type}}
<p>
{{#if isNew}}
<i>{{localize "mtte.boardgroupDescription"}}</i>
{{/if}}
{{#unless isNew}}
<i>{{localize "mtte.boardgroupDescriptionEdit"}}</i>
{{/unless}}
</p>
{{/unless}}
{{#if data.type}}
<p>
<i>{{localize "mtte.boardshortcutDescription"}}</i>
</p>
<h2>{{localize "mtte.boardassets"}} ({{data.type}})</h2>
<div class="boardassets">
<ul>
{{#each assets as |a idx|}}
<li>{{{a.name}}} <a class="delete" data-idx="{{idx}}"><i class="fa-solid fa-trash"></i></a></li>
{{/each}}
</ul>
<div class="boarddrop"></div>
</div>
{{/if}}
<h2>{{localize "mtte.lookandfeel"}}</h2>
<div class="form-group">
<label>{{localize "mtte.shortText"}}</label>
<div class="form-fields">
<input class="shortText" type="text" name="shortText" placeholder="ex: door" value="{{data.name}}">
</div>
</div>
<p>
<i>{{localize "mtte.favoriteIconDescr"}}</i>
</p>
<div class="form-group">
<label>{{localize "mtte.faIcon"}} <a href="https://fontawesome.com/icons?d=gallery&m=free" target="_blank">Font Awesome</a></label>
<div class="form-fields">
<input type="hidden" id="IconSourceIdEdit" name="icon" />
<input class="icon" type="text" id="IconInputEdit" placeHolder="{{localize "mtte.iconPlaceHolder"}}" value="{{#if data.faIcon}}{{data.icon}}{{/if}}"/>
<button type="button" id="GetIconPickerEdit" data-iconpicker-input="input#IconInputEdit" data-iconpicker-preview="i#PreviewIconEdit" class="search"><i class="fas fa-search" id="PreviewIconEdit"></i></button>
</div>
</div>
<div class="form-group">
<label>{{localize "mtte.faIcon"}} <a href="https://game-icons.net/" target="_blank">Game-icons.net</a></label>
<div class="form-fields">
<button type="button" class="browseGameIcon"><i class="fas fa-search"></i></button>
</div>
</div>
<div class="form-group">
<label>{{localize "mtte.localIcon"}}</label>
<div class="form-fields">
<input class="icon2" type="text" name="icon2" placeholder="ex: moulinette/images/gameicons/swordman.svg" value="{{#unless data.faIcon}}{{data.icon}}{{/unless}}">
<button type="button" class="browse"><i class="fas fa-folder-open" title="{{localize "mtte.browse"}}"></i> </button>
</div>
</div>
<footer>
<div class="actions">
<button type="button" class="cancel"> {{localize "Cancel"}}</button>
{{#unless isNew}}
<button type="button" class="deleteShortcut"><i class="fas fa-trash"></i> {{localize "Delete"}}</button>
{{/unless}}
<button type="submit" class="save" title="{{localize "mtte.saveFavoriteToolTip"}}"><i class="fas fa-save"></i> {{localize "Save"}}</button>
</div>
</footer>
</form>

View File

@@ -0,0 +1,10 @@
<form autocomplete="off" onsubmit="event.preventDefault();">
<h2>About Moulinette Board</h2>
<p>This module offers great flexibility for managing shortcuts for all sorts of needs.</p>
<p>This feature is currently in development. Documentation will be available soon.</p>
<hr>
<div class="exports">
<button class="export"><i class="fas fa-file-export"></i> {{localize "mtte.boardExport"}}</button>
<button class="import"><i class="fas fa-file-import"></i> {{localize "mtte.boardImport"}}</button>
</div>
</form>

View File

@@ -0,0 +1,39 @@
<form autocomplete="off" onsubmit="event.preventDefault();">
<div class="exclusions">
<div class="description">{{localize "mtte.clickToCloseManage"}}</div>
<div class="sources">
<table>
<tr>
<th class="creator"></td>
<th class="pack">{{localize "mtte.pack"}}</td>
<th class="actions">{{localize "mtte.actions"}}</td>
</tr>
{{#unless exclusions }}<tr><td class="success" colspan="3"><center><em>{{localize "mtte.allContentVisible"}}</em></center></td></tr>{{/unless}}
{{#each exclusions as |e|}}
{{#if e.packs }}
{{#each e.packs as |p|}}
<tr>
<td class="creator">{{e.name}}</td>
<td class="packs">{{p.name}}</td>
<td class="actions"><a data-creator="{{e.name}}" data-pack="{{p.id}}"><i class="fa-solid fa-trash"></i></a></td>
</tr>
{{/each}}
{{/if}}
{{#unless e.packs }}
<tr>
<td class="creator">{{e.name}}</td>
<td class="packs">{{localize "mtte.allPacks"}}</td>
<td class="actions"><a data-creator="{{e.name}}" data-pack="*"><i class="fa-solid fa-trash"></i></a></td>
</tr>
{{/unless}}
{{/each}}
</table>
</div>
<footer>
<div class="actions">
<button class="export"><i class="fas fa-file-export"></i> {{localize "mtte.exportConfig"}}</button>
<button class="import"><i class="fas fa-file-import"></i> {{localize "mtte.importConfig"}}</button>
</div>
</footer>
</div>
</form>

View File

@@ -0,0 +1,117 @@
<form autocomplete="off" onsubmit="event.preventDefault();">
<div class="body">
<div class="header">
{{#if error}}
<div class="error">{{error}}</div>
{{/if}}
{{#unless error}}
<!-- Search / pack list / modes -->
<div class="form-group search">
<span class="fvtt-picker" title="{{localize "mtte.defaultPickerHint"}}"><i class="fas fa-folder-open"></i> </span>
<input id="search" type="text" placeholder="{{localize "mtte.search"}}" value="{{terms}}"></input>
{{#if supportsWholeWordSearch}}
<div class="sOptions"><div class="form-fields sOptions">
<a class="wholeWord" title="{{localize "mtte.wholeWord"}}">
<i class="fas fa-not-equal"></i>
</a>
</div></div>
{{/if}}
<button class="search"><i class="fas fa-search"></i></button>
{{#if publishers}}
{{#unless dropdownModeAuto }}
<select class="filterCombo creators" tabindex="0">
<option value="-1">{{localize "mtte.allPubs"}} ({{assetsCount}})</option>
{{#each publishers as |p|}}
<option value="{{p.name}}" class="{{p.class}}">{{pretty p.name}} {{#unless p.special}}({{pretty p.count}}){{/unless}}</option>
{{/each}}
</select>
{{/unless}}
{{#if dropdownModeAuto}}
<ul class="filterList creators" tabindex="0">
<li class="top"><a><i class="fas fa-palette"></i> <span id="creatorName">{{localize "mtte.chooseCreator"}}</span></a>
<ul class="sub_menu">
<li data-id="-1"><a>{{localize "mtte.allPubs"}} ({{assetsCount}})</a></li>
{{#each publishers as |p|}}<li data-id="{{p.name}}" class="{{p.class}}"><a>
<i class="fas fa-{{#if p.isRemote}}cloud{{/if}}{{#unless p.isRemote}}desktop{{/unless}}"></i>
{{pretty p.name}} {{#unless p.special}}({{pretty p.count}}){{/unless}} </li></a>
{{/each}}
<li class="filler"></li>
</ul>
</li>
</ul>
{{/if}}
{{#unless hidePacks}}
{{#unless dropdownModeAuto}}
<select class="filterCombo packs" tabindex="0">
<option value="-1">{{localize "mtte.allPacks"}}</option>
{{#each packs as |p|}}
<option value="{{p.idx}}">{{pretty p.name}} ({{pretty p.count}})</option>
{{/each}}
</select>
{{/unless}}
{{#if dropdownModeAuto}}
<ul class="filterList packs" tabindex="0">
<li class="top"><a><i class="fas fa-box"></i> <span id="packName">{{localize "mtte.choosePack"}}</span></a>
<ul class="sub_menu">
<li data-id="-1"><a>{{localize "mtte.allPacks"}} ({{assetsCount}})</a></li>
{{#each packs as |p|}}<li data-id="{{p.idx}}"><a>{{pretty p.name}} ({{pretty p.count}})</a></li>{{/each}}
<li class="filler"></li>
</ul>
</li>
</ul>
{{/if}}
{{/unless}}
{{/if}}
{{#if supportsModes}}
<div class="filepicker"><div class="form-fields display-modes">
<a class="display-mode mode-browse" title="{{localize "FILES.DisplayModeList"}}">
<i class="fas fa-bars"></i>
</a>
<a class="display-mode mode-list" title="{{localize "FILES.DisplayModeThumbs"}}">
<i class="fas fa-th-list"></i>
</a>
<a class="display-mode mode-tiles" title="{{localize "FILES.DisplayModeTiles"}}">
<i class="fas fa-th-large"></i>
</a>
</div></div>
{{/if}}
{{#if supportsThumbSizes}}
<div class="thumbsizes"><div class="form-fields thumbsize">
<a class="thumbsize minus" title="{{localize "mtte.thumbsSmaller"}}">
<i class="fas fa-search-minus"></i>
</a>
<a class="thumbsize plus" title="{{localize "mtte.thumbsLarger"}}">
<i class="fas fa-search-plus"></i>
</a>
</div></div>
{{/if}}
</div>
{{/unless}}
</div>
{{#unless error}}
<div class="list">
{{#each assets as |a|}}{{{a}}}{{/each}}
</div>
<div class="footer">
<img class="logo" src="modules/moulinette-core/img/moulinette.png" width="{{#if compactUI}}40{{/if}}{{#unless compactUI}}60{{/unless}}"/>
<p>
{{#unless user.patron}}
{{{localize "mtte.patreonSupportMe"}}}<br/>
{{/unless}}
{{#if user.patron}}
{{localize "mtte.patron"}} <i class="fas fa-heart red"></i> ({{user.patron}}). {{localize "mtte.patreonThanks"}}<br/>
{{/if}}
{{#unless compactUI}}
Join me on <a href="https://discord.gg/xg3dcMQfP2" target="_blank">Moulinette Discord</a> to follow development. <br/>
<a href="https://github.com/SvenWerlen/moulinette-core">{{localize "mtte.seeDoc"}}</a> {{localize "mtte.learnMore"}}
{{/unless}}
</p>
</div>
{{/unless}}
</div>
</form>

View File

@@ -0,0 +1,12 @@
<form autocomplete="off" onsubmit="event.preventDefault();">
{{#each options as |o|}}
<div class="filterOption">
<input type="checkbox" id="ext{{o.id}}" value="{{o.id}}" {{#if o.checked}}checked="checked"{{/if}}>
<label for="ext{{o.id}}"> {{{o.icon}}} {{o.name}}</label><br>
</div>
{{/each}}
<button class="applyFilters"><i class="fas fa-save"></i> {{localize "mtte.apply"}}</button>
</form>

View File

@@ -0,0 +1,196 @@
<form autocomplete="off" onsubmit="event.preventDefault();">
<div class="body">
<div class="header">
{{#if error}}
<div class="error">{{error}}</div>
{{/if}}
{{#unless error}}
<!-- Moulinette navigation (tabs) -->
<nav class="sheet-tabs tabs">
{{#each modules as |m|}}
<a class="item {{#if m.active}}active{{/if}}" data-tab="{{m.id}}"><i class="{{m.icon}}"></i>{{#unless ../compactUI}} {{m.name}}{{/unless}}</a>
{{/each}}
</nav>
<!-- Search / pack list / modes -->
<div class="form-group search">
<input id="search" type="text" placeholder="{{localize "mtte.search"}}" value="{{terms}}"></input>
{{#if supportsWholeWordSearch}}
<div class="sOptions"><div class="form-fields sOptions">
<a class="wholeWord" title="{{localize "mtte.wholeWord"}}">
<i class="fas fa-not-equal"></i>
</a>
</div></div>
{{/if}}
<button class="search"><i class="fas fa-search"></i></button>
{{#if publishers}}
{{#unless dropdownModeAuto }}
<select class="filterCombo creators" tabindex="0">
<option value="-1">{{localize "mtte.allPubs"}} ({{assetsCount}})</option>
{{#each publishers as |p|}}
<option value="{{p.name}}" class="{{p.class}}">{{pretty p.name}} {{#unless p.special}}({{pretty p.count}}){{/unless}}</option>
{{/each}}
</select>
{{/unless}}
{{#if dropdownModeAuto}}
<ul class="filterList creators" tabindex="0">
<li class="top"><a><i class="fas fa-palette"></i> <span id="creatorName">{{localize "mtte.chooseCreator"}}</span></a>
<ul class="sub_menu">
<li data-id="-1"><a>{{localize "mtte.allPubs"}} ({{assetsCount}})</a></li>
{{#each publishers as |p|}}<li data-id="{{p.name}}" class="{{p.class}}"><a>
<i class="fas fa-{{#if p.isRemote}}cloud{{/if}}{{#unless p.isRemote}}desktop{{/unless}}"></i>
{{pretty p.name}} {{#unless p.special}}({{pretty p.count}}){{/unless}} </li></a>
{{/each}}
<li class="filler"></li>
</ul>
</li>
</ul>
{{/if}}
{{#unless hidePacks}}
{{#unless dropdownModeAuto}}
<select class="filterCombo packs" tabindex="0">
<option value="-1">{{localize "mtte.allPacks"}}</option>
{{#each packs as |p|}}
<option value="{{p.idx}}">{{pretty p.name}} {{#if p.isFree}}🎁 {{/if}}({{pretty p.count}})</option>
{{/each}}
</select>
{{/unless}}
{{#if dropdownModeAuto}}
<ul class="filterList packs" tabindex="0">
<li class="top"><a><i class="fas fa-box"></i> <span id="packName">{{localize "mtte.choosePack"}}</span></a>
<ul class="sub_menu">
<li data-id="-1"><a>{{localize "mtte.allPacks"}} ({{assetsCount}})</a></li>
{{#each packs as |p|}}<li data-id="{{p.idx}}"><a>{{pretty p.name}} {{#if p.isFree}}<i class="fa-solid fa-gift"></i> {{/if}}({{pretty p.count}})</a></li>{{/each}}
<li class="filler"></li>
</ul>
</li>
</ul>
{{/if}}
{{/unless}}
{{/if}}
{{#if supportsShortcuts}}
<div class="shortcuts"><div class="form-fields shortcuts">
<a class="shortcut" title="{{localize "mtte.generateShortcut"}}">
<i class="fas fa-bookmark"></i>
</a>
</div></div>
{{/if}}
{{#if supportsModes}}
<div class="filepicker"><div class="form-fields display-modes">
<a class="display-mode mode-browse" title="{{localize "FILES.DisplayModeList"}}">
<i class="fas fa-bars"></i>
</a>
<a class="display-mode mode-list" title="{{localize "FILES.DisplayModeThumbs"}}">
<i class="fas fa-th-list"></i>
</a>
<a class="display-mode mode-tiles" title="{{localize "FILES.DisplayModeTiles"}}">
<i class="fas fa-th-large"></i>
</a>
</div></div>
{{/if}}
{{#if supportsThumbSizes}}
<div class="thumbsizes"><div class="form-fields thumbsize">
<a class="thumbsize minus" title="{{localize "mtte.thumbsSmaller"}}">
<i class="fas fa-search-minus"></i>
</a>
<a class="thumbsize plus" title="{{localize "mtte.thumbsLarger"}}">
<i class="fas fa-search-plus"></i>
</a>
</div></div>
{{/if}}
{{#if supportsFilters}}
<div class="filters"><div class="form-fields filters">
<a class="filters {{#if filtersEnabled}}enabled{{/if}}" title="{{localize "mtte.applyFilters"}}">
<i class="fas fa-filter"></i>
</a>
</div></div>
{{/if}}
</div>
{{/unless}}
</div>
{{#unless error}}
<div class="list">
<div class="tooltip-authentication">
{{#if disabled}}
<!-- MOULINETTE CLOUD DISABLED -->
<div class="status">
<a class="mouAuthenticate"><i class="fas fa-eye-slash"></i></a>
</div>
{{{localize "mtte.moulinetteCloudDisabled"}}}
{{/if}}
{{#unless disabled}}
<!-- MOULINETTE CLOUD ENABLED -->
{{#unless assets}}
<!-- No Assets -> Show Infos -->
{{#unless user.fullName}}
<!-- PATREON NOT LINKED -->
<div class="status">
<a class="mouAuthenticate"><i class="fas fa-unlink"></i></a>
</div>
{{{localize "mtte.tooltipAuthenticate"}}}
{{/unless}}
{{#if user.fullName}}
<!-- PATREON NOT LINKED -->
<div class="status">
<a class="mouAuthenticate"><i class="fab fa-patreon"></i></a>
</div>
{{localize "mtte.tooltipAuthenticatedAs"}} ({{user.fullName}}).
{{#if user.patron}}
<!-- NOT SUPPORTING MOULINETTE -->
{{localize "mtte.patron"}} <i class="fas fa-heart red"></i> ({{user.patron}}). {{{localize "mtte.tooltipFullAccess"}}}.
{{/if}}
{{#unless user.patron}}
{{{localize "mtte.tooltipSupportMoulinette"}}}
{{/unless}}
{{/if}}
{{/unless}}
{{/unless}}
</div>
{{#if tooltipIndexing}}
<div class="tooltip-indexing">
{{{localize "mtte.tooltipConfigure"}}}
</div>
{{/if}}
{{#each assets as |a|}}{{{a}}}{{/each}}
</div>
<div class="footerToggle"><a><i class="fas fa-gear"></i></a></div>
<div class="showcase"></div>
<div class="modulefooter">
{{{footer}}}
</div>
<div class="dataHiding"><a><i class="fa-solid fa-eye-slash" title="{{localize "mtte.clickToHide"}}"></i></a></div>
<div class="footer">
<footer>
<div class="actions">
<button class="hidefooter" title="{{localize "mtte.hideFooter"}}"><i class="fas fa-chevrons-down"></i></button>
<button class="exclusions" title="{{localize "mtte.manageExclusionsHelp"}}"><a><i class="fa-solid fa-eye-slash"></i> {{localize "mtte.manageExclusions"}}</a></button>
{{#each activeModule.actions as |a|}}<button class="{{a.id}}" title="{{a.help}}"><i class="{{a.icon}}"></i>{{#unless ../compactUI}} {{a.name}}{{/unless}}</button>{{/each}}
</div>
<div class="actions">
{{#each activeModule.actionsExt as |a|}}<button class="{{a.id}}" title="{{a.help}}"><i class="{{a.icon}}"></i>{{#unless ../compactUI}} {{a.name}}{{/unless}}</button>{{/each}}
</div>
</footer>
<img class="logo" src="modules/moulinette-core/img/moulinette.png" width="{{#if compactUI}}40{{/if}}{{#unless compactUI}}60{{/unless}}"/>
<p>
{{#unless user.patron}}
{{{localize "mtte.patreonSupportMe"}}}<br/>
{{/unless}}
{{#if user.patron}}
{{localize "mtte.patron"}} <i class="fas fa-heart red"></i> ({{user.patron}}). {{localize "mtte.patreonThanks"}}<br/>
{{/if}}
{{#unless compactUI}}
Join me on <a href="https://discord.gg/xg3dcMQfP2" target="_blank">Moulinette Discord</a> to follow development. <br/>
<a href="https://github.com/SvenWerlen/moulinette-core">{{localize "mtte.seeDoc"}}</a> {{localize "mtte.learnMore"}}
{{/unless}}
</p>
</div>
{{/unless}}
</div>
</form>

View File

@@ -0,0 +1,54 @@
<form autocomplete="off" onsubmit="event.preventDefault();">
<div class="content">
<p><em>This page provides some useful information to help you index assets. Click on a section to expand.</em> (<a class="refresh">refresh <i class="fas fa-sync"></i></a>)</p>
<h1>Default path indexing</h1>
<div class="section">
<div><b>Path indexed</b>: <pre>{{defPath}}</pre></div>
<p><b>Source</b>: {{source}}</p>
{{#unless ok}}<p><i class="fas fa-exclamation-triangle red"></i> The folder doesn't contain any subfolder. Make sure to follow the <a href="https://github.com/SvenWerlen/moulinette-core/tree/main/docs" target="_blank">guidelines</a>.</p>{{/unless}}
{{#if ok}}
<ul>
{{#each creators as |c|}}
{{#if c.ok}}<li><i class="fas fa-check-circle"></i> {{c.name}} - {{c.count}} subfolders <i class="fas fa-list-alt" title="{{c.packs}}"></i></li>{{/if}}
{{#unless c.ok}}<li class="red"><i class="fas fa-times-circle"></i> {{c.name}} (no subfolder)</li>{{/unless}}
{{/each}}
</ul>
{{/if}}
</div>
<h1>Custom path indexing</h1>
<div class="section">
{{#unless custom}}<p><i class="fas fa-exclamation-triangle red"></i> You didn't configure a custom folder. But it is not required unless you don't want to put your assets into {{defPath}}</p>{{/unless}}
{{#if custom}}
<div><b>Path indexed</b>: <pre>{{customPath}}</pre></div>
<p><b>Source</b>: {{source}}</p>
{{#unless customOK}}<div><i class="fas fa-exclamation-triangle red"></i> No file with extension <pre>.mtte</pre> could be found. Make sure to follow the <a href="https://github.com/SvenWerlen/moulinette-core/tree/main/docs#use-advanced-configuration" target="_blank">guidelines</a>.</div>{{/unless}}
{{#if customOK}}
<ul>
{{#each customFolders as |f|}}
{{#if f.ok}}<li><i class="fas fa-check-circle"></i> {{f.path}} ({{configFile}}) - {{msg}}</li>{{/if}}
{{#unless f.ok}}<li class="red"><i class="fas fa-times-circle"></i> {{f.path}} ({{configFile}}) - {{msg}}</li>{{/unless}}
{{/each}}
</ul>
{{/if}}
{{/if}}
</div>
<h1>Other sources indexing</h1>
<div class="section">
{{#unless others}}<p><i class="fas fa-exclamation-triangle red"></i> No other source of type "{{type}}" configured.</p>{{/unless}}
{{#if others}}
<ul>
{{#each others as |o|}}
<li>{{o.publisher}} | {{o.pack}} - {{o.path}} ({{o.source}})</li>
{{/each}}
</ul>
{{/if}}
</div>
</div>
</form>

View File

@@ -0,0 +1,245 @@
<form autocomplete="off" onsubmit="event.preventDefault();">
<div class="content">
<p><em>{{localize "mtte.moulinetteHelpMessage"}}</em> (<a class="refresh">refresh <i class="fas fa-sync"></i></a>)</p>
<!-- ================= REFERENCES ============== -->
<h1><i class="fas fa-question-circle"></i> Help references</h1>
<div class="section" data-id="references">
<ul>
<li>Moulinette <a href="https://github.com/SvenWerlen/moulinette-core" target="_blank">github.com/SvenWerlen/moulinette-core</a></li>
<li>Moulinette Cloud <a href="https://www.moulinette.cloud/" target="_blank">www.moulinette.cloud</a></li>
<li>Discover <a href="https://www.youtube.com/channel/UCfB4Jtg_WzWnAFGHN1oNrEQ" target="_blank">Moulinette on YouTube</a></li>
<li>Get help on <a href="https://discord.gg/xg3dcMQfP2" target="_blank">Moulinette Discord</a> </li>
</ul>
</div>
<!-- ================= CONTROLS ============== -->
<h1><i class="fas fa-hammer"></i> Moulinette Controls</h1>
<div class="section" data-id="controls">
<ul>
<li><div class="control"><i class="fas fa-expand"></i></div> <em>No real use (required by FVTT layer)</em></li>
<li><div class="control"><i class="fab fa-patreon"></i></div> Patreon integration. Link your account and check your pledges. Only required in combination with Moulinette Cloud.</li>
<li><div class="control"><i class="fas fa-sync"></i></div> Clear local cache. Use it if you want to refresh your data (from Moulinette Cloud) without reloading the page.</li>
<li><div class="control"><i class="fas fa-icons"></i></div> Moulinette <b>Game Icons</b> module. Opens the UI.</li>
<li><div class="control"><i class="fas fa-search"></i></div> Moulinette <b>Image Search</b> module. Opens the UI.</li>
<li><div class="control"><i class="fas fa-clipboard"></i></div> Import an image from a URL. See <i class="fas fa-search"></i> Moulinette Image Search section below.</li>
<li><div class="control"><i class="fab fa-buffer"></i></div> Moulinette <b>Prefabs</b> (from Tiles module). Opens the UI.</li>
<li><div class="control"><i class="fas fa-map"></i></div> Moulinette <b>Scenes</b> module. Opens the UI.</li>
<li><div class="control"><i class="fas fa-file-audio"></i></div> Moulinette <b>SoundPads</b> (from Sounds module). Opens the UI.</li>
<li><div class="control"><i class="fas fa-keyboard"></i></div> Moulinette <b>SoundBoard</b> (from Sounds module). Opens the UI.</li>
<li><div class="control"><i class="fas fa-music"></i></div> Moulinette <b>Sounds</b> module. Opens the UI.</li>
<li><div class="control"><i class="fas fa-puzzle-piece"></i></div> Moulinette <b>Tiles</b> module. Opens the UI.</li>
<li><div class="control"><i class="fas fa-heart"></i></div> Moulinette <b>Favorites</b> (from Tiles module). Opens the UI.</li>
<li><div class="control"><i class="fas fa-search-plus"></i></div> Moulinette <b>Faceted Search</b> (from Tiles module). Opens the UI.</li>
</ul>
</div>
<!-- ================= CHECKS ============== -->
<h1><i class="fas fa-tasks"></i> Check your installation</h1>
<div class="section" data-id="checks">
<ul>
{{#if latestVersion}}
<li><i class="fas fa-check-circle"></i> You're using FoundryVTT <b>V11</b> (recommended).</li>
{{/if}}
{{#unless latestVersion}}
<li class="red"><i class="fas fa-times-circle"></i> You're using an older version of FoundryVTT. Moulinette recommends <b>V11+</b>.</li>
{{/unless}}
<li class="copymsg copySuccess"><i class="fas fa-check-circle"></i> Your browser supports <pre>clipboard.writeText()</pre>. Moulinette always copies paths to your clipboard such you can reuse them anywhere in FoundryVTT.</li>
<li class="copymsg copyFailed red"><i class="fas fa-times-circle"></i> Your browser doesn't support <pre>clipboard.writeText()</pre>. You won't be able to reuse assets' paths from Moulinette.</li>
{{#if hasModules}}
<li><i class="fas fa-check-circle"></i> You have <b>{{modulesCount}}</b> moulinette modules enabled.</li>
{{/if}}
{{#unless hasModules}}
<li class="red"><i class="fas fa-times-circle"></i> You don't have any moulinette module installed.</li>
{{/unless}}
</ul>
</div>
<!-- ================= PATREON ============== -->
<h1><i class="fab fa-patreon"></i> Patreon integration</h1>
<div class="section" data-id="patreon">
{{#if user.fullName}}
<p>You're linked to Patreon as: <b>{{user.fullName}}</b> (<a class="patreon">unlink</a>)</p>
<h2>Moulinette support</h2>
{{#if user.patron}}
<p>{{localize "mtte.patron"}} <i class="fas fa-heart red"></i> (Tier: <b>{{user.patron}}</b>)</p>
<p class="descr"><i class="far fa-question-circle"></i> As such, you automatically have access to free assets from creators available on <a href="https://www.moulinette.cloud/" target="_blank">Moulinette Cloud</a>.</p>
<h2>Pledges</h2>
{{#if user.pledges}}
<p>You're supporting <b>{{user.pledges.length}} creators</b> (<a class="patreon">see them</a>).</p>
<p class="descr"><i class="far fa-question-circle"></i> You have access to assets from the creators you're supporting, based on your pledges. Check <a href="https://www.moulinette.cloud/getting-started/use-moulinette-to-access-creators-assets/" target="_blank">available creators and minimum tiers</a>.</p>
{{/if}}
{{/if}}
{{#unless user.patron}}
<p>You're not supporting Moulinette <i class="far fa-frown"></i> (<a href="https://www.patreon.com/moulinette" target="_blank">Support Moulinette</a>)</p>
<p class="descr"><i class="far fa-question-circle"></i> You will only have acces to public and showcase assets from <a href="https://www.moulinette.cloud/" target="_blank">Moulinette Cloud</a> and all your indexed assets.</p>
{{/unless}}
{{/if}}
{{#unless user.fullName}}
<p>You're <b>NOT</b> linked to Patreon. (<a class="patreon">Link Moulinette to my Patreon <i class="fab fa-patreon"></i></a>)</p>
<p class="descr"><i class="far fa-question-circle"></i> As such, you will only have acces to public and showcase assets from <a href="https://www.moulinette.cloud/" target="_blank">Moulinette Cloud</a> and all your indexed assets.</p>
{{/unless}}
</div>
<!-- ================= GAME ICONS ============== -->
<h1><i class="fas fa-icons"></i> Moulinette Game Icons</h1>
<div class="section" data-id="icons">
{{#if icons}}
<p>Moulinette Game Icons is installed and enabled. (<a class="gameicons">open UI</a>)</p>
<p class="descr"><i class="far fa-question-circle"></i> You can search, download and use icons from <a href="https://game-icons.net/" target="_blank">game-icons.net</a>.</p>
<h2>Did you know?</h2>
<ul>
<li>You can get transparent foreground or background by leaving the color field empty (clear the text)</li>
<li>The path of the last downloaded icon is copied into your clipboard. This is useful if you want to use that icon somewhere in FoundryVTT without having to browse files for it.</li>
</ul>
{{/if}}
{{#unless icons}}
<p>Moulinette Game Icons is <b>disabled</b> or not even installed.</p>
<p class="descr"><i class="far fa-question-circle"></i> By installing this module, you'll be able to search, download and use icons from <a href="https://game-icons.net/" target="_blank">game-icons.net</a>.</p>
{{/unless}}
</div>
<!-- ================= IMAGE SEARCH ============== -->
<h1><i class="fas fa-search"></i> Moulinette Image Search</h1>
<div class="section" data-id="search">
{{#if search}}
<p>Moulinette Image Search is installed and enabled. (<a class="search">open UI</a>)</p>
<p class="descr"><i class="far fa-question-circle"></i> You can search images on <a href="https://www.bing.com" target="_blank">Microsoft Bing</a> or <a href="https://oldsearch.creativecommons.org/" target="_blank">Creative Commons.</a> and use them as tile, journal note or even token.</p>
<h2>Did you know?</h2>
<ul>
<li>You need to configure your Bing API key in order to fully benefit from the image search. See <a href="https://github.com/SvenWerlen/moulinette-imagesearch#generate-your-own-api-key-for-bing-search" target="_blank">instructions</a>.</li>
<li>You can easily import an image from a website (ex: Google Image Search). Right-click on the image and choose "Copy link to image" in your web browser. Then use <div class="control"><i class="fas fa-clipboard"></i></div>.</li>
</ul>
{{/if}}
{{#unless search}}
<p>Moulinette Image Search is <b>disabled</b> or not even installed.</p>
<p class="descr"><i class="far fa-question-circle"></i> By installing this module, you'll be able to search images on <a href="https://www.bing.com" target="_blank">Microsoft Bing</a> or <a href="https://oldsearch.creativecommons.org/" target="_blank">Creative Commons</a> and use them as tile, journal note or even token.</p>
{{/unless}}
</div>
<!-- ================= SCENES ============== -->
<h1><i class="fas fa-map"></i> Moulinette Scenes</h1>
<div class="section" data-id="scenes">
{{#if scenes}}
<div>Moulinette Scenes is installed and enabled. (<a class="scenes">open UI</a>).<br/>
Scenes downloaded from Moulinette Cloud are stored into <pre>moulinette/cloud/[creator]/[pack]</pre>. (<a class="browseMtte" data-path="moulinette/cloud">browse files</a>)</div>
<p class="descr"><i class="far fa-question-circle"></i> You can index scenes from compendiums then search, browse and install scenes easily.
{{#if user.patron}}As moulinette supporter, you also have access to scenes from creators on <a href="https://www.moulinette.cloud/" target="_blank">Moulinette Cloud</a>.{{/if}}
</p>
{{/if}}
<h2>Did you know?</h2>
<ul>
<li>"Index scenes" scans all enabled modules and indexes scenes from their compendia. It <b>DOESN'T</b> index your images from <pre>moulinette/scenes/custom</pre> as some would expect.</li>
<li>If you support Moulinette with Blacksmith tier or above, you can export your scenes from FoundryVTT directly to Moulinette Cloud. They will be kept in your private storage and will show up like any other scenes. Manage your assets in <a href="https://assets.moulinette.cloud/byoa/manage-assets" target="_blank">your private storage on Moulinette Cloud</a>.</li>
</ul>
{{#unless scenes}}
<p>Moulinette Scenes is <b>disabled</b> or not even installed.</p>
<p class="descr"><i class="far fa-question-circle"></i> By installing this module, you'll be able to index scenes from compendiums then search, browse and install scenes easily.
{{#if user.patron}}As moulinette supporter, you would also have access to scenes from creators on <a href="https://www.moulinette.cloud/" target="_blank">Moulinette Cloud</a>.{{/if}}
</p>
{{/unless}}
</div>
<!-- ================= SOUNDS ============== -->
<h1><i class="fas fa-music"></i> Moulinette Sounds</h1>
<div class="section" data-id="sounds">
{{#if sounds}}
<div>Moulinette Sounds is installed and enabled. (<a class="sounds">open UI</a>).<br/>
Sounds/Music downloaded from Moulinette Cloud is stored into <pre>moulinette/sounds/[creator]/[pack]</pre>. (<a class="browseMtte" data-path="moulinette/sounds">browse files</a>)
</div>
<p class="descr"><i class="far fa-question-circle"></i> You can index sounds from your FVTT server then search, browse and play sounds easily. Help me <a class="checkIndex" data-path="moulinette/sounds/custom" data-type="sounds">Sounds</a>!
{{#if user.patron}}As moulinette supporter, you also have access to sounds from creators on <a href="https://www.moulinette.cloud/" target="_blank">Moulinette Cloud</a>.{{/if}}
</p>
<h2>Did you know?</h2>
<ul>
<li>If you click on a sound, it gets highlighted. When you create a new ambient sound with FVTT, the path gets automatically filled with the selected sound.</li>
<li>If you right click on a sound, it gets selected. When you add all selected sounds to the soundboard, it create a new slot which will randomly play one of these sounds.</li>
<li>If you support <a href="https://www.patreon.com/tabletopaudio" target="_blank">Tabletop Audio</a>, you can play sounds from the <a class="soundpad">SoundPad UI</a> <div class="control"><i class="fas fa-file-audio"></i></div> (keybinding also available)</li>
<li>You can build your own <a class="soundboard">SoundBoard</a> <div class="control"><i class="fas fa-keyboard"></i></div> by using the <i class="far fa-bookmark"></i> action.</li>
<li>If you support Moulinette with Blacksmith tier or above, you can upload your music/sounds to Moulinette Cloud. They will be kept in your private storage and will show up like any other asset. Manage your assets in <a href="https://assets.moulinette.cloud/byoa/manage-assets" target="_blank">your private storage on Moulinette Cloud</a>.</li>
</ul>
{{/if}}
{{#unless sounds}}
<p>Moulinette Scenes is <b>disabled</b> or not even installed.</p>
<p class="descr"><i class="far fa-question-circle"></i> By installing this module, you'll be able to index sounds from your FVTT server then search, browse and play sounds easily.
{{#if user.patron}}As moulinette supporter, you would also have access to sounds from creators on <a href="https://www.moulinette.cloud/" target="_blank">Moulinette Cloud</a>.{{/if}}
</p>
{{/unless}}
</div>
<!-- ================= TILES ============== -->
<h1><i class="fas fa-puzzle-piece"></i> Moulinette Tiles/Tokens</h1>
<div class="section" data-id="tiles">
{{#if tiles}}
<div>Moulinette Tiles is installed and enabled. (<a class="tiles">open UI</a>)<br/>
Images downloaded from Moulinette Cloud are stored into <pre>moulinette/tiles/[creator]/[pack]</pre>. (<a class="browseMtte" data-path="moulinette/tiles">browse files</a>)</div>
<p class="descr"><i class="far fa-question-circle"></i> You can index images from your FVTT server then search, browse and drop them on scenes as tiles, tokens or journal articles. Help me indexing <a class="checkIndex" data-path="moulinette/tiles/custom" data-type="tiles">Tiles</a> or <a class="checkIndex" data-path="moulinette/images/custom" data-type="images">Images</a>!
{{#if user.patron}}As moulinette supporter, you also have access to images from creators on <a href="https://www.moulinette.cloud/" target="_blank">Moulinette Cloud</a>.{{/if}}
</p>
<h2>Did you know?</h2>
<ul>
<li>Last used assets are kept in history in <a class="favorites">Moulinette Favorites</a> <div class="control"><i class="fas fa-heart"></i></div> (keybinding also available). Right click on an image to add it to the favorites.</li>
<!--<li>The new <a class="faceted-search">faceted search UI</a> <div class="control"><i class="fas fa-search-plus"></i></div> offers an alternative way of browsing and searching assets. You should absolutely try it!</li>-->
<li>If you support Moulinette with Blacksmith tier or above, you can upload your images to Moulinette Cloud. They will be kept in your private storage and will show up like any other asset. Manage your assets in <a href="https://assets.moulinette.cloud/byoa/manage-assets" target="_blank">your private storage on Moulinette Cloud</a>.</li>
</ul>
{{/if}}
{{#unless sounds}}
<p>Moulinette Tiles is <b>disabled</b> or not even installed.</p>
<p class="descr"><i class="far fa-question-circle"></i> By installing this module, you'll be able to index images from your FVTT server then search, browse and drop them on scenes as tiles, tokens or journal articles.
{{#if user.patron}}As moulinette supporter, you would also have access to images from creators on <a href="https://www.moulinette.cloud/" target="_blank">Moulinette Cloud</a>.{{/if}}
</p>
{{/unless}}
</div>
<!-- ================= STORAGE ============== -->
<h1><i class="fas fa-folder-open"></i> Storage configuration</h1>
<div class="section" data-id="storage">
{{#if s3bucket}}
<p>Moulinette is configured to use S3 as storage (bucket : <b>{{s3bucket}}</b>)</p>
<ul>
<li>Assets downloaded from Moulinette Cloud will be stored into <pre>moulinette/</pre> (<a class="browseMtte">Browse files</a>) on your S3 storage.</li>
</ul>
{{/if}}
{{#unless s3bucket}}
{{#if theforge}}
<p>Moulinette is using your <b>Asset Library</b> storage on The Forge</p>
<ul>
<li>Assets downloaded from Moulinette Cloud will be stored into <pre>moulinette/</pre> (<a class="browseMtte">Browse files</a>)</li>
</ul>
{{/if}}
{{#unless theforge}}
<p>Moulinette is using the default local storage (<b>Data</b>)</p>
<ul>
<li>Assets downloaded from Moulinette Cloud will be stored into <pre>moulinette/</pre> (<a class="browseMtte">Browse files</a>)</li>
</ul>
{{/unless}}
{{/unless}}
</div>
</div>
</form>

View File

@@ -0,0 +1,19 @@
<form autocomplete="off" onsubmit="event.preventDefault();">
<p>{{localize "mtte.homeWelcome"}}</p>
{{#if error}}
<div class="error">{{error}}</div>
{{/if}}
{{#unless error}}
{{#each modules as |m i|}}
<div class="module">
<h2>{{m.name}}</h3>
<p><center><img class="button {{m.id}}" src="{{m.icon}}" /></center></p>
<p><center>{{m.descr}}</center></p>
</div>
{{/each}}
{{/unless}}
<p><em>
<a href="https://github.com/SvenWerlen/moulinette-core">{{localize "mtte.seeDoc"}}</a> {{localize "mtte.learnMore"}}
</em></p>
</form>

View File

@@ -0,0 +1,12 @@
<form autocomplete="off" onsubmit="event.preventDefault();">
<p>{{localize "mtte.giftWelcome"}}</p>
<p>
<input id="coupon" type="text" placeholder="{{localize "mtte.pasteCouponHere"}}"></input>
</p>
<footer>
<p>
<button class="apply"><i class="fas fa-gift"></i> {{localize "mtte.apply"}}</button>
</p>
<footer>
</form>

View File

@@ -0,0 +1,96 @@
<form autocomplete="off" onsubmit="event.preventDefault();">
{{#if disabled}}
{{{localize "mtte.moulinetteCloudDisabled"}}}
{{/if}}
{{#unless disabled}}
{{#unless user.fullName}}
<p>{{localize "mtte.patreonWelcome"}}</p>
<p>
<div class="error">{{localize "mtte.patreonDescription"}}</div>
<div class="progress"></div>
</p>
{{/unless}}
<footer>
<div class="block actions">
{{#if user.fullName}}
<div>
<div class="error" style="display: none;"></div>
<div class="progress"></div>
</div>
<div class="login">
{{#unless user.discord_user_id}}
<p><button class="loginDiscord"><i class="fab fa-discord"></i> {{localize "mtte.linkDiscord"}}</button></p>
{{/unless}}
{{#unless user.user_id}}
<p><button class="loginPatreon"><i class="fab fa-patreon"></i> {{localize "mtte.linkPatreon"}}</button></p>
{{/unless}}
<p><button class="gift"><i class="fas fa-gift"></i> {{localize "mtte.receiveGift"}}</button></p>
<p><a href="https://assets.moulinette.cloud/marketplace/creators"><button class="creators"><i class="fas fa-users"></i> {{localize "mtte.availableCreators"}}</button></a></p>
{{#unless user.patron}}
<p><a href="https://www.patreon.com/moulinette" target="_blank"><button><i class="fab fa-patreon"></i> {{localize "mtte.supportMoulinette"}}</button></a></p>
{{/unless}}
<p><button class="refresh"><i class="fas fa-sync-alt"></i> {{localize "mtte.refreshLinks"}}</button></p>
<p><button class="logout"><i class="fas fa-sign-out-alt"></i> {{localize "mtte.disconnect"}}</button></p>
</div>
{{/if}}
{{#unless user.fullName}}
<div class="login actions">
<button class="loginPatreon" style="width: 250px"><i class="fab fa-patreon"></i> {{localize "mtte.authenticatePatreon"}}</button>
<button class="loginDiscord" style="width: 250px"><i class="fab fa-discord"></i> {{localize "mtte.authenticateDiscord"}}</button>
</div>
{{/unless}}
</div>
<div class="block desc">
{{#if user.fullName}}
<h3>{{localize "mtte.patreonLinked"}}</h3>
<ul>
<li>{{user.fullName}} {{#if user.vanity}}({{user.vanity}}){{/if}}</li>
{{#if user.patron}}
<li>{{localize "mtte.patron"}} <i class="fas fa-heart red"></i> ({{user.patron}})</li>
{{/if}}
{{#unless user.patron}}
{{#if user.platinum}}
<li>{{localize "mtte.platinumpatron"}} <i class="fas fa-heart red"></i></li>
{{/if}}
{{#unless user.platinum}}
<li class="error">{{localize "mtte.notPatron"}}</li>
{{/unless}}
{{/unless}}
</ul>
{{#if user.pledges}}
<h3>{{localize "mtte.patreonPledges"}}</h3>
<ul>
{{#each user.pledges as |p|}}
<li>{{p.vanity}}: {{p.pledge}} <i class="fas fa-dollar-sign" title="{{p.paid}} $USD ({{p.days}} {{localize "mtte.days"}})"></i></li>
{{/each}}
</ul>
{{/if}}
{{#if user.discordRoles}}
<h3>{{localize "mtte.discordRoles"}}</h3>
<ul>
{{#each user.discordRoles as |r|}}
<li>{{r.guild}}: {{r.name}}</li>
{{/each}}
</ul>
{{/if}}
{{#if user.gifts}}
{{localize "mtte.patreonGifts"}}
<ul>
{{#each user.gifts as |g|}}
<li>{{g.vanity}}: {{g.tier}}</li>
{{/each}}
</ul>
{{/if}}
{{/if}}
</div>
</footer>
{{#unless user.fullName}}
<p><em>
<a href="https://github.com/SvenWerlen/moulinette-core">{{localize "mtte.seeDoc"}}</a> {{localize "mtte.learnMore"}}
</em></p>
{{/unless}}
{{/unless}}
</form>

View File

@@ -0,0 +1,6 @@
<div>
<div class="progressbar">
<div class="progress" style="width:0%">0%</div>
</div>
<div class="description"></div>
</div>

View File

@@ -0,0 +1,25 @@
<form autocomplete="off" onsubmit="event.preventDefault();">
<div class="content">
<h1>Macro</h1>
<p><em>{{localize "mtte.moulinetteShortcutsMacro"}}</em></p>
<textarea id="codeMacro" rows="6" cols="80">{{macroCode}}</textarea>
<footer>
<div class="actions">
<button class="clipboardMacro" title="Copy to clipboard"><i class="fa fa-clipboard"></i> {{localize "mtte.copyCode"}}</button>
<button class="createMacro"><i class="fa fa-cogs"></i> {{localize "mtte.createMacro"}}</button>
<img class="dragMacro draggable" src="modules/moulinette-core/img/moulinette.png" width="32" height="32" title="{{localize "mtte.moulinetteShortcutsDragToolTip"}}" />
</div>
</footer><br/>
<h1>Macro in Journal Entry</h1>
<p><em>{{localize "mtte.moulinetteShortcutsMacroJournal"}}</em></p>
<textarea id="codeJournal" rows="1" cols="80">{{macroJournalCode}}</textarea>
<footer>
<div class="actions">
<button class="clipboardJournal" title="Copy to clipboard"><i class="fa fa-clipboard"></i> {{localize "mtte.copyCode"}}</button>
<button class="createJournal"><i class="fa fa-cogs"></i> {{localize "mtte.createJournalArticle"}}</button>
</div>
</footer>
</div>
</form>

View File

@@ -0,0 +1,10 @@
<form autocomplete="off" onsubmit="event.preventDefault();">
{{#each options as |o|}}
<input type="checkbox" id="ext{{o.filter}}" value="{{o.filter}}" {{#if o.checked}}checked="checked"{{/if}}>
<label for="ext{{o.filter}}"> .{{o.filter}}</label><br>
{{/each}}
<button class="applyFilters"><i class="fas fa-save"></i> {{localize "mtte.apply"}}</button>
</form>

View File

@@ -0,0 +1,115 @@
<form autocomplete="off" onsubmit="event.preventDefault();">
<div class="body">
<div class="header">
{{{localize "mtte.sourcesDescription"}}}
</div>
<div class="main">
<div class="sources">
<table>
<tr>
<th class="auto"></td>
<th class="type">{{localize "mtte.type"}}</td>
<th class="creator">{{localize "mtte.publisher"}}</td>
<th class="pack">{{localize "mtte.pack"}}</td>
<th class="source">{{localize "mtte.source"}}</td>
<th class="path">{{localize "mtte.path"}}</td>
<th class="path">{{localize "mtte.filters"}}</td>
<th class="actions">{{localize "mtte.actions"}}</td>
</tr>
{{#each sources as |s|}}
<tr class="source {{#unless s.enabled}}inactive{{/unless}}" data-idx="{{@index}}">
<td class="auto">
{{#unless s.immuable}}
{{#if s.auto}}<i class="fas fa-cube"></i>{{/if}}
{{#unless s.auto}}<i class="fas fa-user"></i>{{/unless}}
{{/unless}}
</td>
<td class="type">{{s.type}}</td>
<td class="creator">{{s.creator}}</td>
<td class="pack">{{s.pack}}</td>
<td class="source">{{s.source}}</td>
<td class="path">{{s.path}}</td>
<td class="filters">{{#unless s.filters}}-{{/unless}}{{#if s.filters}}{{s.filters}}{{/if}}</td>
<td class="actions">
{{#unless s.immuable}}
<a class="toggle" title="{{localize "mtte.toggleSource"}}"><i class="fas fa-eye{{#unless s.enabled}}-slash{{/unless}}"></i></a>
<a class="edit" title="{{localize "mtte.editSource"}}"><i class="fas fa-edit"></i></a>
<a class="forceIndex" title="{{#if s.forceRefresh}}{{localize "mtte.sourceForceRefresh"}}{{/if}}{{#unless s.forceRefresh}}{{localize "mtte.sourceNoRefresh"}}{{/unless}}">
<i class="fas {{#if s.forceRefresh}}fa-sync{{/if}}{{#unless s.forceRefresh}}fa-history{{/unless}}"></i>
</a>
{{#if s.custom}}
<a class="reset" title="{{localize "mtte.resetSource"}}"><i class="fas fa-broom"></i></a>
{{/if}}
{{#unless s.auto}}
<a class="delete" title="{{localize "mtte.deleteSource"}}"><i class="fas fa-trash"></i></a>
{{/unless}}
{{/unless}}
</td>
</tr>
{{/each}}
</table>
<footer>
<div class="exports">
<button class="index"><i class="fas fa-sync"></i> {{localize "mtte.index"}}</button>
<button class="clearIndex"><i class="fas fa-trash"></i> {{localize "mtte.clearIndex"}}</button>
<button class="export"><i class="fas fa-file-export"></i> {{localize "mtte.exportConfig"}}</button>
<button class="import"><i class="fas fa-file-import"></i> {{localize "mtte.importConfig"}}</button>
</div>
</footer>
</div>
</div>
<footer>
<div class="footer">
<div class="add">
<h3>{{localize "mtte.addSource"}}</h3>
<div class="actions">
<button class="browse"><i class="fas fa-folder-open"></i> {{localize "mtte.pickFolder"}}</button>
<a class="filter" title="{{localize "mtte.filterFiles"}}"><i class="fas fa-filter"></i></a>
<label for="type">{{localize "mtte.type"}}:</label>
<select name="type">
{{#each types as |t|}}
<option value="{{t}}">{{t}}</option>
{{/each}}
</select>
<div class="creatorPack custom">
<label for="creator">{{localize "mtte.publisher"}}:</label>
<input type="text" id="creator" name="creator" minlength="1" maxlength="120">
<label for="pack">{{localize "mtte.pack"}}:</label>
<input type="text" id="pack" name="pack" minlength="1" maxlength="120">
</div>
<div class="creatorPack auto descr" style="display: none">
{{localize "mtte.automaticCreatorsTooltip" }}
</div>
<input type="checkbox" id="auto" name="auto" value="1" title="{{localize "mtte.automaticCreatorsTooltip"}}">
<label class="cb" for="auto" title="{{localize "mtte.automaticCreatorsTooltip"}}"> {{localize "mtte.automaticCreators"}}</label>
<button class="add"><i class="fas fa-plus-circle"></i> {{localize "mtte.actionSourceAdd"}}</button>
</div>
</div>
<div class="update">
<h3>{{localize "mtte.updateSource"}}</h3>
<div class="actions">
<input type="hidden" id="idxEdit" name="idx">
<a class="filter" title="{{localize "mtte.filterFiles"}}"><i class="fas fa-filter"></i></a>
<div class="creatorPack custom">
<label for="creatorEdit">{{localize "mtte.publisher"}}:</label>
<input type="text" id="creatorEdit" name="creator" minlength="1" maxlength="120">
<label for="packEdit">{{localize "mtte.pack"}}:</label>
<input type="text" id="packEdit" name="pack" minlength="1" maxlength="120">
</div>
<div class="creatorPack auto descr" style="display: none">
{{localize "mtte.automaticCreatorsTooltip" }}
</div>
<input type="checkbox" id="autoEdit" name="auto" value="1" title="{{localize "mtte.automaticCreatorsTooltip"}}">
<label class="cb" for="auto" title="{{localize "mtte.automaticCreatorsTooltip"}}"> {{localize "mtte.automaticCreators"}}</label>
<button class="update"><i class="fas fa-edit"></i> {{localize "mtte.actionSourceUpdate"}}</button>
<button class="cancel"><i class="fas fa-times"></i> {{localize "mtte.cancel"}}</button>
</div>
</div>
</div>
</footer>
</div>
</form>

View File

@@ -0,0 +1,15 @@
const path = require('path');
const TerserPlugin = require('terser-webpack-plugin');
module.exports = {
mode: 'production',
entry: './src/moulinette-core.js',
output: {
filename: 'core.min.js',
path: path.resolve(__dirname, 'dist'),
},
optimization: {
minimize: false,
minimizer: [new TerserPlugin()],
},
};

View File

@@ -0,0 +1,15 @@
const path = require('path');
const TerserPlugin = require('terser-webpack-plugin');
module.exports = {
mode: 'production',
entry: './src/moulinette-core.js',
output: {
filename: 'core.min.js',
path: path.resolve(__dirname, 'dist'),
},
optimization: {
minimize: true,
minimizer: [new TerserPlugin()],
},
};