mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-12-31 14:31:25 +00:00
Compare commits
25 Commits
v4.10.0
...
replace_we
| Author | SHA1 | Date | |
|---|---|---|---|
| 146d40b779 | |||
| 40cc0c2bff | |||
| 4b27454bcb | |||
| 27aa04e3fd | |||
| 441a9e018e | |||
| 0197299c89 | |||
| a30232d3ce | |||
| aae55e6f8c | |||
| c9513f2f6c | |||
| 11d7425883 | |||
| 08897e0981 | |||
| 98cbfed054 | |||
| 9af4d19744 | |||
| c1cf5a8bb2 | |||
|
ba4e445110
|
|||
|
0f1ff9baf4
|
|||
| e4365ad058 | |||
| a16d659f69 | |||
| c4a069ba2e | |||
| 2600c6fa2a | |||
| 09ef95d13e | |||
| c19b2e18ad | |||
| 27853c594d | |||
| 7714b07a9d | |||
|
6e1c9b6f29
|
6
.changes/unreleased/Feature-20251210-032045.yaml
Normal file
6
.changes/unreleased/Feature-20251210-032045.yaml
Normal file
@@ -0,0 +1,6 @@
|
||||
kind: Feature
|
||||
body: 'Add filtering to admin lists: social actions, social issues, goals, results, and evaluations'
|
||||
time: 2025-12-10T03:20:45.135973502+01:00
|
||||
custom:
|
||||
Issue: "478"
|
||||
SchemaChange: No schema change
|
||||
7
.changes/unreleased/Fixed-20251211-214908.yaml
Normal file
7
.changes/unreleased/Fixed-20251211-214908.yaml
Normal file
@@ -0,0 +1,7 @@
|
||||
kind: Fixed
|
||||
body: |
|
||||
Fix migration query after previous fix
|
||||
time: 2025-12-11T21:49:08.899926492+01:00
|
||||
custom:
|
||||
Issue: "466"
|
||||
SchemaChange: No schema change
|
||||
6
.changes/v4.10.1.md
Normal file
6
.changes/v4.10.1.md
Normal file
@@ -0,0 +1,6 @@
|
||||
## v4.10.1 - 2025-12-11
|
||||
### Fixed
|
||||
* Fix missing translation variable in NewLocation component
|
||||
* ([#476](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/476)) Fix display of header for ByActivityNumberAggregator
|
||||
* Fix use of ByActivityNumberAggregator in combination with activity count exports
|
||||
* ([#483](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/483)) Tentatively fix usage of CTRL+C in collabora editor with chrome / edge browser
|
||||
13
.gitignore
vendored
13
.gitignore
vendored
@@ -50,15 +50,12 @@ phpstan.neon
|
||||
|
||||
###> symfony/phpunit-bridge ###
|
||||
###< symfony/phpunit-bridge ###
|
||||
|
||||
###> symfony/webpack-encore-bundle ###
|
||||
/node_modules/
|
||||
/public/build/
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
###< symfony/webpack-encore-bundle ###
|
||||
|
||||
###> friendsofphp/php-cs-fixer ###
|
||||
/.php-cs-fixer.php
|
||||
/.php-cs-fixer.cache
|
||||
###< friendsofphp/php-cs-fixer ###
|
||||
|
||||
###> pentatrion/vite-bundle ###
|
||||
/node_modules/
|
||||
/public/build/
|
||||
###< pentatrion/vite-bundle ###
|
||||
|
||||
@@ -6,6 +6,13 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
|
||||
and is generated by [Changie](https://github.com/miniscruff/changie).
|
||||
|
||||
|
||||
## v4.10.1 - 2025-12-11
|
||||
### Fixed
|
||||
* Fix missing translation variable in NewLocation component
|
||||
* ([#476](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/476)) Fix display of header for ByActivityNumberAggregator
|
||||
* Fix use of ByActivityNumberAggregator in combination with activity count exports
|
||||
* ([#483](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/483)) Tentatively fix usage of CTRL+C in collabora editor with chrome / edge browser
|
||||
|
||||
## v4.10.0 - 2025-12-09
|
||||
### Feature
|
||||
* [MR 928](https://gitlab.com/Chill-Projet/chill-bundles/-/merge_requests/928) [#462](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/462) Add the future appointments for the person in search results
|
||||
|
||||
@@ -21,7 +21,6 @@
|
||||
"ext-openssl": "*",
|
||||
"ext-redis": "*",
|
||||
"ext-zlib": "*",
|
||||
"chill-project/chill-zimbra-bundle": "@dev",
|
||||
"champs-libres/wopi-bundle": "dev-symfony-v5@dev",
|
||||
"champs-libres/wopi-lib": "dev-master@dev",
|
||||
"doctrine/data-fixtures": "^1.8",
|
||||
@@ -38,6 +37,7 @@
|
||||
"ocramius/package-versions": "^1.10 || ^2",
|
||||
"odolbeau/phone-number-bundle": "^3.6",
|
||||
"ovh/ovh": "^3.0",
|
||||
"pentatrion/vite-bundle": "^8.2",
|
||||
"phpoffice/phpspreadsheet": "^1.16",
|
||||
"ramsey/uuid-doctrine": "^1.7",
|
||||
"sensio/framework-extra-bundle": "^5.5",
|
||||
@@ -62,7 +62,6 @@
|
||||
"symfony/http-client": "^5.4",
|
||||
"symfony/http-foundation": "^5.4",
|
||||
"symfony/intl": "^5.4",
|
||||
"symfony/loco-translation-provider": "^6.0",
|
||||
"symfony/mailer": "^5.4",
|
||||
"symfony/messenger": "^5.4",
|
||||
"symfony/mime": "^5.4",
|
||||
@@ -86,7 +85,6 @@
|
||||
"symfony/twig-bundle": "^5.4",
|
||||
"symfony/ux-translator": "^2.22",
|
||||
"symfony/validator": "^5.4",
|
||||
"symfony/webpack-encore-bundle": "^1.11",
|
||||
"symfony/workflow": "^5.4",
|
||||
"symfony/yaml": "^5.4",
|
||||
"thenetworg/oauth2-azure": "^2.0",
|
||||
@@ -119,7 +117,8 @@
|
||||
"symfony/runtime": "^5.4",
|
||||
"symfony/stopwatch": "^5.4",
|
||||
"symfony/var-dumper": "^5.4",
|
||||
"symfony/web-profiler-bundle": "^5.4"
|
||||
"symfony/web-profiler-bundle": "^5.4",
|
||||
"symfony/loco-translation-provider": "^6.0"
|
||||
},
|
||||
"conflict": {
|
||||
"symfony/symfony": "*"
|
||||
|
||||
@@ -17,7 +17,6 @@ return [
|
||||
Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true],
|
||||
Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true],
|
||||
Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true],
|
||||
Symfony\WebpackEncoreBundle\WebpackEncoreBundle::class => ['all' => true],
|
||||
Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true],
|
||||
Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true],
|
||||
Chill\ActivityBundle\ChillActivityBundle::class => ['all' => true],
|
||||
@@ -37,5 +36,5 @@ return [
|
||||
Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true],
|
||||
Symfony\UX\Translator\UxTranslatorBundle::class => ['all' => true],
|
||||
loophp\PsrHttpMessageBridgeBundle\PsrHttpMessageBridgeBundle::class => ['all' => true],
|
||||
Chill\ZimbraBundle\ChillZimbraBundle::class => ['all' => true],
|
||||
Pentatrion\ViteBundle\PentatrionViteBundle::class => ['all' => true],
|
||||
];
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
framework:
|
||||
assets:
|
||||
json_manifest_path: '%kernel.project_dir%/public/build/manifest.json'
|
||||
# Disable Encore-style manifest for default assets package. Vite (Pentatrion) uses public/build/.vite/manifest.json
|
||||
# internally for vite_entry_* helpers; Symfony's asset() should not depend on a manifest.
|
||||
json_manifest_path: null
|
||||
|
||||
when@test:
|
||||
framework:
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
webpack_encore:
|
||||
# The path where Encore is building the assets - i.e. Encore.setOutputPath()
|
||||
output_path: '%kernel.project_dir%/public/build'
|
||||
# If multiple builds are defined (as shown below), you can disable the default build:
|
||||
# output_path: false
|
||||
|
||||
# Set attributes that will be rendered on all script and link tags
|
||||
script_attributes:
|
||||
defer: true
|
||||
# Uncomment (also under link_attributes) if using Turbo Drive
|
||||
# https://turbo.hotwired.dev/handbook/drive#reloading-when-assets-change
|
||||
# 'data-turbo-track': reload
|
||||
# link_attributes:
|
||||
# Uncomment if using Turbo Drive
|
||||
# 'data-turbo-track': reload
|
||||
|
||||
# If using Encore.enableIntegrityHashes() and need the crossorigin attribute (default: false, or use 'anonymous' or 'use-credentials')
|
||||
# crossorigin: 'anonymous'
|
||||
|
||||
# Preload all rendered script and link tags automatically via the HTTP/2 Link header
|
||||
# preload: true
|
||||
|
||||
# Throw an exception if the entrypoints.json file is missing or an entry is missing from the data
|
||||
# strict_mode: false
|
||||
|
||||
# If you have multiple builds:
|
||||
# builds:
|
||||
# frontend: '%kernel.project_dir%/public/frontend/build'
|
||||
|
||||
# pass the build name as the 3rd argument to the Twig functions
|
||||
# {{ encore_entry_script_tags('entry1', null, 'frontend') }}
|
||||
|
||||
#when@prod:
|
||||
# webpack_encore:
|
||||
# # Cache the entrypoints.json (rebuild Symfony's cache when entrypoints.json changes)
|
||||
# # Available in version 1.2
|
||||
# cache: true
|
||||
|
||||
when@test:
|
||||
webpack_encore:
|
||||
strict_mode: false
|
||||
9
config/routes/pentatrion_vite.yaml
Normal file
9
config/routes/pentatrion_vite.yaml
Normal file
@@ -0,0 +1,9 @@
|
||||
when@dev:
|
||||
_pentatrion_vite:
|
||||
prefix: /build
|
||||
resource: "@PentatrionViteBundle/Resources/config/routing.yaml"
|
||||
|
||||
_profiler_vite:
|
||||
path: /_profiler/vite
|
||||
defaults:
|
||||
_controller: Pentatrion\ViteBundle\Controller\ProfilerController::info
|
||||
@@ -11,3 +11,6 @@ services:
|
||||
autowire: true # Automatically injects dependencies in your services.
|
||||
autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
|
||||
|
||||
when@dev:
|
||||
services:
|
||||
ChampsLibres\WopiLib\Contract\Service\ProofValidatorInterface: '@Chill\WopiBundle\Service\Wopi\NullProofValidator'
|
||||
|
||||
@@ -12,6 +12,8 @@ As Chill relies on the [symfony ](http://symfony.com) framework, reading the fra
|
||||
- [Messages to users](messages-to-users.md)
|
||||
- [Pagination](pagination.md)
|
||||
- [Localisation](localisation.md)
|
||||
- [Translation directives](translation_directives.md)
|
||||
- [Translation provider](translation_provider.md)
|
||||
- [Logging](logging.md)
|
||||
- [Database migrations](migrations.md)
|
||||
- [Searching](searching.md)
|
||||
|
||||
376
docs/source/development/translation_directives.md
Normal file
376
docs/source/development/translation_directives.md
Normal file
@@ -0,0 +1,376 @@
|
||||
# Translation Key Directives
|
||||
|
||||
These directives are meant to ensure better consistency across bundles, avoid duplication, and make keys more predictable.
|
||||
|
||||
## General Principles
|
||||
|
||||
1. **Use lowercase snake_case for all keys**
|
||||
|
||||
2. **Use dot-separated namespaces**
|
||||
The dot is used to reflect:
|
||||
- bundle
|
||||
- feature
|
||||
- sub-feature
|
||||
- key type
|
||||
|
||||
3. **Do not use spaces in keys**
|
||||
|
||||
4. **Avoid duplicating the same text in multiple places**
|
||||
When a translation is needed, try a search for the translation value first and see if it exists elsewhere
|
||||
|
||||
5. **If a key is used across multiple bundles, it must live in ChillMainBundle.**
|
||||
|
||||
6. **If a key is used across multiple bundles and is a generic term, it must be placed in the `common` namespace.**
|
||||
|
||||
## Key Structure
|
||||
|
||||
We use the following structure:
|
||||
|
||||
```
|
||||
<scope>.<feature>.<sub-feature>.<key-type>
|
||||
```
|
||||
|
||||
Where:
|
||||
|
||||
- `<scope>` identifies the bundle or shared context
|
||||
- `<feature>` identifies the part of the module using the translation
|
||||
- `<element>` describes the text purpose
|
||||
- `<subelement>` for a multi-level element (e.g., activity.export.person.count.description)
|
||||
|
||||
### Examples of scopes
|
||||
|
||||
- `activity` — ChillActivityBundle
|
||||
- `person` — ChillPersonBundle
|
||||
- `common` — neutral shared translation values
|
||||
|
||||
## Naming Scopes
|
||||
|
||||
### 1. Bundle-specific keys
|
||||
|
||||
For most things inside a bundle:
|
||||
|
||||
```
|
||||
activity.<feature>.<element>
|
||||
```
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
activity.form.save
|
||||
activity.list.title
|
||||
activity.entity.type
|
||||
activity.menu.activities
|
||||
activity.controller.success_created
|
||||
```
|
||||
|
||||
### 2. Shared UI elements (buttons, labels, generic text)
|
||||
|
||||
These belong in the `common` namespace in ChillMainBundle:
|
||||
|
||||
```
|
||||
common.save
|
||||
common.delete
|
||||
common.edit
|
||||
common.filter
|
||||
common.duration_time
|
||||
```
|
||||
|
||||
## Translation Workflow
|
||||
|
||||
Use the following workflow when deciding where a key belongs:
|
||||
|
||||
1. **Is this text used in more than one bundle?**
|
||||
→ Place in `main` or `common`
|
||||
|
||||
2. **Is this text generic UI (button, label, pagination, yes/no)?**
|
||||
→ Place in `common`
|
||||
|
||||
3. **Is this text specific to one bundle and one feature?**
|
||||
→ Place in `<bundle>.feature.<element>`
|
||||
|
||||
4. **Is this text related to an entity or value object?**
|
||||
→ Place in `<bundle>.entity.<entityname>.<field>`
|
||||
|
||||
5. **Is this text used in forms?**
|
||||
→ `<bundle>.form.<field>` or `<bundle>.form.<action>`
|
||||
|
||||
6. **Is this text related to exports?**
|
||||
→ `<bundle>.export.<feature>.<column>`
|
||||
|
||||
7. **Is it related to filtering, searching or parameters?**
|
||||
→ `<bundle>.filter.<name>` or
|
||||
→ `<bundle>.filter.<feature>.<field>` for nested filters
|
||||
|
||||
## Examples Based on Translations Within ChillActivityBundle
|
||||
|
||||
Below are concrete examples from `ChillActivityBundle`, refactored according to the guidelines.
|
||||
|
||||
### General activity keys
|
||||
|
||||
Instead of scattered keys like:
|
||||
|
||||
```
|
||||
Show the activity
|
||||
Edit the activity
|
||||
Activity
|
||||
Duration time
|
||||
...
|
||||
```
|
||||
|
||||
We use:
|
||||
|
||||
```
|
||||
activity.general.show
|
||||
activity.general.edit
|
||||
activity.general.title
|
||||
activity.general.duration
|
||||
activity.general.travel_time
|
||||
activity.general.attendee
|
||||
activity.general.remark
|
||||
activity.general.no_comments
|
||||
```
|
||||
|
||||
### Forms
|
||||
|
||||
Instead of keys like:
|
||||
|
||||
```
|
||||
Activity creation
|
||||
Save activity
|
||||
Reset form
|
||||
Choose a type
|
||||
```
|
||||
|
||||
Use:
|
||||
|
||||
```
|
||||
activity.form.title_create
|
||||
activity.form.save
|
||||
activity.form.reset
|
||||
activity.form.choose_type
|
||||
activity.form.choose_duration
|
||||
```
|
||||
|
||||
Long lists (like durations) should be grouped:
|
||||
|
||||
```
|
||||
activity.form.duration.5min
|
||||
activity.form.duration.10min
|
||||
activity.form.duration.15min
|
||||
activity.form.duration.1h
|
||||
activity.form.duration.1h30
|
||||
activity.form.duration.2h
|
||||
...
|
||||
```
|
||||
|
||||
### Entities
|
||||
|
||||
Entity fields should follow:
|
||||
|
||||
```
|
||||
activity.entity.activity.date
|
||||
activity.entity.activity.comment
|
||||
activity.entity.activity.deleted
|
||||
activity.entity.location.name
|
||||
activity.entity.location.type
|
||||
```
|
||||
|
||||
### Controller messages
|
||||
|
||||
Instead of strings as keys:
|
||||
|
||||
```
|
||||
'Success : activity created!'
|
||||
'The form is not valid. The activity has not been created !'
|
||||
```
|
||||
|
||||
Use:
|
||||
|
||||
```
|
||||
activity.controller.success_created
|
||||
activity.controller.error_invalid_create
|
||||
activity.controller.success_updated
|
||||
activity.controller.error_invalid_update
|
||||
```
|
||||
|
||||
### Roles
|
||||
|
||||
Access control keys should be:
|
||||
|
||||
```
|
||||
activity.role.create
|
||||
activity.role.update
|
||||
activity.role.see
|
||||
activity.role.see_details
|
||||
activity.role.delete
|
||||
activity.role.stats
|
||||
activity.role.list
|
||||
```
|
||||
|
||||
### Admin
|
||||
|
||||
```
|
||||
activity.admin.configuration
|
||||
activity.admin.types
|
||||
activity.admin.reasons
|
||||
activity.admin.reason_category
|
||||
activity.admin.presence
|
||||
```
|
||||
|
||||
### CRUD
|
||||
|
||||
```
|
||||
activity.crud.type.title_new
|
||||
activity.crud.type.title_edit
|
||||
activity.crud.presence.title_new
|
||||
```
|
||||
|
||||
### Activity Reason
|
||||
|
||||
```
|
||||
activity.reason.list
|
||||
activity.reason.create
|
||||
activity.reason.active
|
||||
activity.reason.category
|
||||
activity.reason.entity_title
|
||||
```
|
||||
|
||||
### Exports
|
||||
|
||||
Group them logically:
|
||||
|
||||
```
|
||||
activity.export.person.count.title
|
||||
activity.export.person.count.description
|
||||
activity.export.person.count.header
|
||||
|
||||
activity.export.period.sum_duration.title
|
||||
activity.export.period.sum_duration.description
|
||||
activity.export.period.sum_duration.header
|
||||
```
|
||||
|
||||
### Filters
|
||||
|
||||
Use hierarchical filters:
|
||||
|
||||
```
|
||||
activity.filter.by_reason
|
||||
activity.filter.by_type
|
||||
activity.filter.by_date
|
||||
activity.filter.by_location
|
||||
activity.filter.by_sent_received
|
||||
activity.filter.by_user
|
||||
```
|
||||
|
||||
### Aggregators
|
||||
|
||||
```
|
||||
activity.aggregator.reason.by_category
|
||||
activity.aggregator.reason.level
|
||||
activity.aggregator.user.by_scope
|
||||
activity.aggregator.user.by_job
|
||||
```
|
||||
|
||||
## Global/Shared Keys
|
||||
|
||||
Keys like the following **must not be redeclared** in each bundle:
|
||||
|
||||
- First name
|
||||
- Last name
|
||||
- Username
|
||||
- ID
|
||||
- Type
|
||||
- Duration
|
||||
- Comment
|
||||
- Date
|
||||
- Location
|
||||
- Present / Not present
|
||||
- Add / Edit / Delete / Save / Update
|
||||
|
||||
These belong in `common` or `main`:
|
||||
|
||||
```
|
||||
common.firstname
|
||||
common.lastname
|
||||
common.username
|
||||
common.id
|
||||
common.type
|
||||
common.comment
|
||||
common.date
|
||||
common.location
|
||||
common.present
|
||||
common.absent
|
||||
common.add
|
||||
common.edit
|
||||
common.delete
|
||||
common.save
|
||||
common.update
|
||||
```
|
||||
|
||||
## Naming Directives Summary
|
||||
|
||||
- **snake_case**
|
||||
- **namespaced with dots**
|
||||
- **bundle prefix for bundle-specific concepts**
|
||||
- **common or main for shared concepts**
|
||||
- **avoid free-floating keys (without namespace)**
|
||||
- **reuse common keys wherever possible**
|
||||
|
||||
## Migration Strategy (Optional)
|
||||
|
||||
To apply this structure progressively:
|
||||
|
||||
1. New keys must follow these guidelines.
|
||||
2. Existing keys may remain as-is until refactored.
|
||||
3. When refactoring:
|
||||
- Move cross-bundle keys to ChillMainBundle and possible `common` namespace.
|
||||
- Replace duplicated keys with shared ones.
|
||||
|
||||
---
|
||||
|
||||
# Avoiding Duplicate Translations
|
||||
|
||||
## 1. Use Shared Namespaces
|
||||
|
||||
Two namespaces must be used for shared translations:
|
||||
|
||||
- `common.*` — generic UI concepts (save, delete, date, name, etc.)
|
||||
|
||||
If a translation may be reused in multiple bundles, it must be placed in the `common` namespace or in ChillMainBundle.
|
||||
|
||||
## 2. Bundle-Specific Keys
|
||||
|
||||
Keys belonging only to one bundle or one feature are namespaced inside that bundle:
|
||||
|
||||
```
|
||||
activity.<feature>.<element>
|
||||
person.<feature>.<element>
|
||||
```
|
||||
|
||||
## 3. Search Before Creating
|
||||
|
||||
Before adding a new translation key, developers must:
|
||||
|
||||
1. For common translations like "enregistrer/opslaan" look in the `common` namespace.
|
||||
2. Search in Loco or translations for existing values.
|
||||
|
||||
If a suitable key exists, reuse it.
|
||||
|
||||
## 4. Only Create a New Key When Necessary
|
||||
|
||||
Create a new key only when the text is:
|
||||
|
||||
- specific to the bundle
|
||||
- specific to the feature
|
||||
- not reusable elsewhere
|
||||
|
||||
## 5. Progressive Cleanup
|
||||
|
||||
Old duplicates may remain temporarily. When updating code in an area, clean duplicate values by moving them into `common` or `main`.
|
||||
|
||||
## General Workflow
|
||||
|
||||
- **Reuse shared keys** within `common` namespace.
|
||||
- **Search before creating** new keys.
|
||||
- **Namespace bundle-specific keys** under their bundle.
|
||||
- **Refactor progressively** when touching old code.
|
||||
@@ -1,419 +0,0 @@
|
||||
============================================
|
||||
Directives for creating new translation keys
|
||||
============================================
|
||||
|
||||
These directives are meant to ensure better consistency across bundles, avoid duplication, and make keys more predictable.
|
||||
|
||||
|
||||
General Principles
|
||||
==================
|
||||
|
||||
1. **Use lowercase snake_case for all keys**
|
||||
|
||||
2. **Use dot-separated namespaces**
|
||||
The dot is used to reflect:
|
||||
- bundle
|
||||
- feature
|
||||
- sub-feature
|
||||
- key type
|
||||
|
||||
3. **Do not use spaces in keys**
|
||||
|
||||
4. **Avoid duplicating the same text in multiple places**
|
||||
When a translation is needed, try a search for the translation value first and see if it exists elsewhere
|
||||
|
||||
5. **If a key is used across multiple bundles, it must live in ChillMainBundle.**
|
||||
|
||||
6. **If a key is used across multiple bundles and is a generic term, it must be placed in the ``common`` namespace.**
|
||||
|
||||
|
||||
Key Structure
|
||||
=============
|
||||
|
||||
We use the following structure:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
<scope>.<feature>.<sub-feature>.<key-type>
|
||||
|
||||
Where:
|
||||
|
||||
* ``<>`` identifies the bundle or shared context
|
||||
* ``<feature>`` identifies the part of the module using the translation
|
||||
* ``<element>`` describes the text purpose
|
||||
* ``<subelement>`` for a multi-level element ( eg. activity.export.person.count.description)
|
||||
|
||||
Examples of scopes
|
||||
------------------
|
||||
|
||||
* ``activity`` — ChillActivityBundle
|
||||
* ``person`` — ChillPersonBundle
|
||||
* ``common`` — neutral shared translation values
|
||||
|
||||
|
||||
Naming Scopes
|
||||
=============
|
||||
|
||||
1. **Bundle-specific keys**
|
||||
|
||||
For most things inside a bundle:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
activity.<feature>.<element>
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
activity.form.save
|
||||
activity.list.title
|
||||
activity.entity.type
|
||||
activity.menu.activities
|
||||
activity.controller.success_created
|
||||
|
||||
2. **Shared UI elements (buttons, labels, generic text)**
|
||||
|
||||
These belong in the ``common`` namespace in ChillMainBundle:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
common.save
|
||||
common.delete
|
||||
common.edit
|
||||
common.filter
|
||||
common.duration_time
|
||||
|
||||
Translation workflow
|
||||
====================
|
||||
|
||||
Use the following workflow when deciding where a key belongs:
|
||||
|
||||
1. **Is this text used in more than one bundle?**
|
||||
→ Place in ``main`` or ``common``
|
||||
|
||||
2. **Is this text generic UI (button, label, pagination, yes/no)?**
|
||||
→ Place in ``common``
|
||||
|
||||
3. **Is this text specific to one bundle and one feature?**
|
||||
→ Place in ``<bundle>.feature.<element>``
|
||||
|
||||
4. **Is this text related to an entity or value object?**
|
||||
→ Place in ``<bundle>.entity.<entityname>.<field>``
|
||||
|
||||
5. **Is this text used in forms?**
|
||||
→ ``<bundle>.form.<field>`` or ``<bundle>.form.<action>``
|
||||
|
||||
6. **Is this text related to exports?**
|
||||
→ ``<bundle>.export.<feature>.<column>``
|
||||
|
||||
7. **Is it related to filtering, searching or parameters?**
|
||||
→ ``<bundle>.filter.<name>`` or
|
||||
→ ``<bundle>.filter.<feature>.<field>`` for nested filters
|
||||
|
||||
|
||||
Examples based on translations within ChillActivityBundle
|
||||
=========================================================
|
||||
|
||||
Below are concrete examples from ``ChillActivityBundle``,
|
||||
refactored according to the guidelines.
|
||||
|
||||
|
||||
General activity keys
|
||||
---------------------
|
||||
|
||||
Instead of scattered keys like::
|
||||
|
||||
Show the activity
|
||||
Edit the activity
|
||||
Activity
|
||||
Duration time
|
||||
...
|
||||
|
||||
We use:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
activity.general.show
|
||||
activity.general.edit
|
||||
activity.general.title
|
||||
activity.general.duration
|
||||
activity.general.travel_time
|
||||
activity.general.attendee
|
||||
activity.general.remark
|
||||
activity.general.no_comments
|
||||
|
||||
|
||||
Forms
|
||||
-----
|
||||
|
||||
Instead of keys like::
|
||||
|
||||
Activity creation
|
||||
Save activity
|
||||
Reset form
|
||||
Choose a type
|
||||
|
||||
Use:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
activity.form.title_create
|
||||
activity.form.save
|
||||
activity.form.reset
|
||||
activity.form.choose_type
|
||||
activity.form.choose_duration
|
||||
|
||||
Long lists (like durations) should be grouped:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
activity.form.duration.5min
|
||||
activity.form.duration.10min
|
||||
activity.form.duration.15min
|
||||
activity.form.duration.1h
|
||||
activity.form.duration.1h30
|
||||
activity.form.duration.2h
|
||||
...
|
||||
|
||||
Entities
|
||||
--------
|
||||
|
||||
Entity fields should follow:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
activity.entity.activity.date
|
||||
activity.entity.activity.comment
|
||||
activity.entity.activity.deleted
|
||||
activity.entity.location.name
|
||||
activity.entity.location.type
|
||||
|
||||
|
||||
Controller messages
|
||||
-------------------
|
||||
|
||||
Instead of strings as keys::
|
||||
|
||||
'Success : activity created!'
|
||||
'The form is not valid. The activity has not been created !'
|
||||
|
||||
Use:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
activity.controller.success_created
|
||||
activity.controller.error_invalid_create
|
||||
activity.controller.success_updated
|
||||
activity.controller.error_invalid_update
|
||||
|
||||
|
||||
Roles
|
||||
-----
|
||||
|
||||
Access control keys should be:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
activity.role.create
|
||||
activity.role.update
|
||||
activity.role.see
|
||||
activity.role.see_details
|
||||
activity.role.delete
|
||||
activity.role.stats
|
||||
activity.role.list
|
||||
|
||||
|
||||
Admin
|
||||
-----
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
activity.admin.configuration
|
||||
activity.admin.types
|
||||
activity.admin.reasons
|
||||
activity.admin.reason_category
|
||||
activity.admin.presence
|
||||
|
||||
|
||||
CRUD
|
||||
----
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
activity.crud.type.title_new
|
||||
activity.crud.type.title_edit
|
||||
activity.crud.presence.title_new
|
||||
|
||||
|
||||
Activity Reason
|
||||
---------------
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
activity.reason.list
|
||||
activity.reason.create
|
||||
activity.reason.active
|
||||
activity.reason.category
|
||||
activity.reason.entity_title
|
||||
|
||||
|
||||
Exports
|
||||
-------
|
||||
|
||||
Group them logically:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
activity.export.person.count.title
|
||||
activity.export.person.count.description
|
||||
activity.export.person.count.header
|
||||
|
||||
activity.export.period.sum_duration.title
|
||||
activity.export.period.sum_duration.description
|
||||
activity.export.period.sum_duration.header
|
||||
|
||||
|
||||
Filters
|
||||
-------
|
||||
|
||||
Use hierarchical filters:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
activity.filter.by_reason
|
||||
activity.filter.by_type
|
||||
activity.filter.by_date
|
||||
activity.filter.by_location
|
||||
activity.filter.by_sent_received
|
||||
activity.filter.by_user
|
||||
|
||||
|
||||
Aggregators
|
||||
-----------
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
activity.aggregator.reason.by_category
|
||||
activity.aggregator.reason.level
|
||||
activity.aggregator.user.by_scope
|
||||
activity.aggregator.user.by_job
|
||||
|
||||
|
||||
Global/Shared Keys
|
||||
==================
|
||||
|
||||
Keys like the following **must not be redeclared** in each bundle:
|
||||
|
||||
- First name
|
||||
- Last name
|
||||
- Username
|
||||
- ID
|
||||
- Type
|
||||
- Duration
|
||||
- Comment
|
||||
- Date
|
||||
- Location
|
||||
- Present / Not present
|
||||
- Add / Edit / Delete / Save / Update
|
||||
|
||||
These belong in ``common`` or ``main``:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
common.firstname
|
||||
common.lastname
|
||||
common.username
|
||||
common.id
|
||||
common.type
|
||||
common.comment
|
||||
common.date
|
||||
common.location
|
||||
common.present
|
||||
common.absent
|
||||
common.add
|
||||
common.edit
|
||||
common.delete
|
||||
common.save
|
||||
common.update
|
||||
|
||||
|
||||
Naming directives summary
|
||||
==========================
|
||||
|
||||
* **snake_case**
|
||||
* **namespaced with dots**
|
||||
* **bundle prefix for bundle-specific concepts**
|
||||
* **common or main for shared concepts**
|
||||
* **avoid free-floating keys (without namespace)**
|
||||
* **reuse common keys wherever possible**
|
||||
|
||||
|
||||
Migration Strategy (Optional)
|
||||
=============================
|
||||
|
||||
To apply this structure progressively:
|
||||
|
||||
1. New keys must follow these guidelines.
|
||||
2. Existing keys may remain as-is until refactored.
|
||||
3. When refactoring:
|
||||
- Move cross-bundle keys to ChillMainBundle and possible `common` namespace.
|
||||
- Replace duplicated keys with shared ones.
|
||||
|
||||
===========================================
|
||||
Avoiding duplicate translations
|
||||
===========================================
|
||||
|
||||
1. Use Shared Namespaces
|
||||
========================
|
||||
|
||||
Two namespaces must be used for shared translations:
|
||||
|
||||
* ``common.*`` — generic UI concepts (save, delete, date, name, etc.)
|
||||
|
||||
If a translation may be reused in multiple bundles, it must be placed
|
||||
in the ``common`` namespace or in ChillMainBundle.
|
||||
|
||||
2. Bundle-Specific Keys
|
||||
=======================
|
||||
|
||||
Keys belonging only to one bundle or one feature are namespaced inside that
|
||||
bundle:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
activity.<feature>.<element>
|
||||
person.<feature>.<element>
|
||||
|
||||
3. Search Before Creating
|
||||
=========================
|
||||
|
||||
Before adding a new translation key, developers must:
|
||||
|
||||
1. For common translations like: "enregistrer/opslaan" look in the `common` namespace.
|
||||
3. Search in Loco or translations for existing values.
|
||||
|
||||
If a suitable key exists, reuse it.
|
||||
|
||||
4. Only Create a New Key When Necessary
|
||||
=======================================
|
||||
|
||||
Create a new key only when the text is:
|
||||
|
||||
* specific to the bundle
|
||||
* specific to the feature
|
||||
* not reusable elsewhere
|
||||
|
||||
6. Progressive Cleanup
|
||||
======================
|
||||
|
||||
Old duplicates may remain temporarily. When updating code in an area, clean
|
||||
duplicate values by moving them into ``common`` or ``main``.
|
||||
|
||||
General workflow
|
||||
================
|
||||
|
||||
* **Reuse shared keys** within ``common`` namespace.
|
||||
* **Search before creating** new keys.
|
||||
* **Namespace bundle-specific keys** under their bundle.
|
||||
* **Refactor progressively** when touching old code.
|
||||
139
docs/source/development/translation_provider.md
Normal file
139
docs/source/development/translation_provider.md
Normal file
@@ -0,0 +1,139 @@
|
||||
# Managing Translations Within CHILL Using Loco as a Translation Provider
|
||||
|
||||
Within CHILL we make use of Symfony's translation component together with *Loco* as an external translation provider. Using this setup centralises translations in a single online location (Loco), while still allowing developers to create and update translation keys locally in the project (YAML files).
|
||||
|
||||
## Workflow
|
||||
|
||||
We use the following workflow:
|
||||
|
||||
- Developers create translation keys in YAML files inside each bundle.
|
||||
- Keys are written in **English**.
|
||||
- Application UI defaults to **French**, with **Dutch** as an additional locale (other languages can be added in the future).
|
||||
- Loco acts as the central translation memory and synchronisation source.
|
||||
- Loco Symfony package was installed so that built-in translation commands can be used to push/pull content between Loco and the local project.
|
||||
|
||||
## Translation Directory Structure
|
||||
|
||||
Each bundle contains its own `translations` directory, for example:
|
||||
|
||||
```
|
||||
chill-bundles/
|
||||
ChillCoreBundle/
|
||||
translations/
|
||||
messages.fr.yml
|
||||
messages.nl.yml
|
||||
ChillPersonBundle/
|
||||
translations/
|
||||
messages.fr.yml
|
||||
messages.nl.yml
|
||||
...
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
The translation configuration is defined in `config/packages/translation.yaml`:
|
||||
|
||||
```yaml
|
||||
framework:
|
||||
default_locale: '%env(resolve:LOCALE)%'
|
||||
translator:
|
||||
default_path: '%kernel.project_dir%/translations'
|
||||
fallbacks:
|
||||
- '%env(resolve:LOCALE)%'
|
||||
- 'en'
|
||||
providers:
|
||||
loco:
|
||||
dsn: '%env(LOCO_DSN)%'
|
||||
domains: [ 'messages' ]
|
||||
locales: [ 'fr', 'nl' ]
|
||||
```
|
||||
|
||||
Note:
|
||||
|
||||
- `en` is the **source locale** in Loco.
|
||||
- `fr` and `nl` are the **application locales**.
|
||||
- `domains: [messages]` means only `messages.*.yml` files are pushed.
|
||||
|
||||
### Environment Variables
|
||||
|
||||
In `.env`:
|
||||
|
||||
```
|
||||
LOCALE=fr
|
||||
```
|
||||
|
||||
In `.env.local`:
|
||||
|
||||
```
|
||||
LOCO_DSN="loco://API_KEY@default"
|
||||
```
|
||||
|
||||
Replace `API_KEY` with the key provided by Loco.
|
||||
|
||||
## Working with Loco
|
||||
|
||||
Loco shows all translation keys under three languages:
|
||||
|
||||
- **English (source)** — keys are listed but remain "untranslated"
|
||||
- **French** — translated strings for French users
|
||||
- **Dutch** — translated strings for Dutch users
|
||||
|
||||
Note: Don't add translations directly in the English column. This column simply represents the *key*.
|
||||
|
||||
## Pushing Translations to Loco
|
||||
|
||||
You can push local translations to Loco using:
|
||||
|
||||
```bash
|
||||
symfony console translation:push loco --locales=fr --locales=nl --force
|
||||
```
|
||||
|
||||
This will:
|
||||
|
||||
- Upload all French and Dutch translation values from `*.fr.yml` and `*.nl.yml` files
|
||||
- Ensure Loco stays in sync with local YAML files
|
||||
- Create any missing keys in Loco
|
||||
|
||||
## Pulling Translations from Loco
|
||||
|
||||
When translators update strings in Loco, developers can fetch updates with:
|
||||
|
||||
```bash
|
||||
symfony console translation:pull loco --locales=fr --locales=nl --force
|
||||
```
|
||||
|
||||
This will:
|
||||
|
||||
- Download the latest French and Dutch translations
|
||||
- Overwrite the local YAML files with Loco's content
|
||||
- Keep everything consistent across the team
|
||||
|
||||
## Adding New Translation Keys (Developer Workflow)
|
||||
|
||||
1. Add a new key directly in the appropriate YAML file, for example:
|
||||
|
||||
```
|
||||
chill-bundles/ChillPersonBundle/translations/messages.fr.yml
|
||||
```
|
||||
|
||||
Example key:
|
||||
|
||||
```yaml
|
||||
person.form.submit: "Envoyer"
|
||||
```
|
||||
|
||||
2. Add Dutch translation as well if you can (otherwise leave empty to be translated within Loco later):
|
||||
|
||||
```yaml
|
||||
person.form.submit: "Verzenden"
|
||||
```
|
||||
|
||||
3. Run a push to send the new key to Loco:
|
||||
|
||||
```bash
|
||||
symfony console translation:push loco --locales=fr --locales=nl --force
|
||||
```
|
||||
|
||||
4. The key will now appear in Loco for translation management.
|
||||
|
||||
Note: English appears as "untranslated", because it is merely the source language.
|
||||
@@ -1,148 +0,0 @@
|
||||
=======================================================================
|
||||
Managing translations within CHILL using Loco as a translation provider
|
||||
=======================================================================
|
||||
|
||||
Within CHILL we make use of Symfony's translation component together with *Loco* as an external
|
||||
translation provider. Using this setup centralise translations in a single online
|
||||
location (Loco), while still allowing developers to create and update
|
||||
translation keys locally in the project (YAML files).
|
||||
|
||||
Workflow
|
||||
========
|
||||
|
||||
We use the following workflow:
|
||||
|
||||
* Developers create translation keys in YAML files inside each bundle.
|
||||
* Keys are written in **English**.
|
||||
* Application UI defaults to **French**, with **Dutch** as an additional locale (other languages can be added in the future).
|
||||
* Loco acts as the central translation memory and synchronisation source.
|
||||
* Loco Symfony package was installed so that built-in translation commands can be used to push/pull content
|
||||
between Loco and the local project.
|
||||
|
||||
|
||||
Translation directory structure
|
||||
===============================
|
||||
|
||||
Each bundle contains its own ``translations`` directory, for example::
|
||||
|
||||
chill-bundles/
|
||||
ChillCoreBundle/
|
||||
translations/
|
||||
messages.fr.yml
|
||||
messages.nl.yml
|
||||
ChillPersonBundle/
|
||||
translations/
|
||||
messages.fr.yml
|
||||
messages.nl.yml
|
||||
...
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
The translation configuration is defined in
|
||||
``config/packages/translation.yaml``::
|
||||
|
||||
framework:
|
||||
default_locale: '%env(resolve:LOCALE)%'
|
||||
translator:
|
||||
default_path: '%kernel.project_dir%/translations'
|
||||
fallbacks:
|
||||
- '%env(resolve:LOCALE)%'
|
||||
- 'en'
|
||||
providers:
|
||||
loco:
|
||||
dsn: '%env(LOCO_DSN)%'
|
||||
domains: [ 'messages' ]
|
||||
locales: [ 'fr', 'nl' ]
|
||||
|
||||
Note:
|
||||
|
||||
* ``en`` is the **source locale** in Loco.
|
||||
* ``fr`` and ``nl`` are the **application locales**.
|
||||
* ``domains: [messages]`` means only ``messages.*.yml`` files are pushed.
|
||||
|
||||
|
||||
Environment variables
|
||||
---------------------
|
||||
|
||||
In ``.env``::
|
||||
|
||||
LOCALE=fr
|
||||
|
||||
In ``.env.local``::
|
||||
|
||||
LOCO_DSN="loco://API_KEY@default"
|
||||
|
||||
Replace ``API_KEY`` with the key provided by Loco.
|
||||
|
||||
|
||||
Working with Loco
|
||||
=================
|
||||
|
||||
Loco shows all translation keys under three languages:
|
||||
|
||||
* **English (source)** — keys are listed but remain “untranslated”
|
||||
* **French** — translated strings for French users
|
||||
* **Dutch** — translated strings for Dutch users
|
||||
|
||||
Note: Don't add translations directly in the English column.
|
||||
This column simply represents the *key*.
|
||||
|
||||
|
||||
Pushing translations to Loco
|
||||
============================
|
||||
|
||||
You can push local translations to Loco using:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
symfony console translation:push loco --locales=fr --locales=nl --force
|
||||
|
||||
This will:
|
||||
|
||||
* Upload all French and Dutch translation values from ``*.fr.yml`` and
|
||||
``*.nl.yml`` files
|
||||
* Ensures Loco stays in sync with local YAML files
|
||||
* Creates any missing keys in Loco
|
||||
|
||||
|
||||
Pulling translations from Loco
|
||||
==============================
|
||||
|
||||
When translators update strings in Loco, developers can fetch updates with:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
symfony console translation:pull loco --locales=fr --locales=nl --force
|
||||
|
||||
This will:
|
||||
|
||||
* Download the latest French and Dutch translations
|
||||
* Overwrite the local YAML files with Loco’s content
|
||||
* Keep everything consistent across the team
|
||||
|
||||
|
||||
Adding new translation keys (Developer workflow)
|
||||
================================================
|
||||
|
||||
1. Add a new key directly in the appropriate YAML file, for example::
|
||||
|
||||
chill-bundles/ChillPersonBundle/translations/messages.fr.yml
|
||||
|
||||
Example key::
|
||||
|
||||
person.form.submit: "Envoyer"
|
||||
|
||||
2. Add Dutch translation as well if you can (otherwise leave empty to be translated within Loco later)::
|
||||
|
||||
person.form.submit: "Verzenden"
|
||||
|
||||
3. Run a push to send the new key to Loco:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
symfony console translation:push loco --locales=fr --locales=nl --force
|
||||
|
||||
4. The key will now appear in Loco for translation management.
|
||||
|
||||
Note: English appears as “untranslated”, because it is merely the source language
|
||||
37
package.json
37
package.json
@@ -1,6 +1,15 @@
|
||||
{
|
||||
"name": "chill",
|
||||
"name": "chill-bundles",
|
||||
"private": true,
|
||||
"version": "2.0.0",
|
||||
"description": "Chill web application frontend (Vite build at repo root)",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "vite build",
|
||||
"preview": "vite preview",
|
||||
"eslint": "eslint . --ext .js,.ts,.vue"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@alexlafroscia/yaml-merge": "^4.0.0",
|
||||
"@apidevtools/swagger-cli": "^4.0.4",
|
||||
@@ -11,11 +20,11 @@
|
||||
"@hotwired/stimulus": "^3.0.0",
|
||||
"@luminateone/eslint-baseline": "^1.0.9",
|
||||
"@symfony/stimulus-bridge": "^3.2.0",
|
||||
"@symfony/webpack-encore": "^4.1.0",
|
||||
"@tsconfig/node20": "^20.1.4",
|
||||
"@types/dompurify": "^3.0.5",
|
||||
"@types/eslint__js": "^8.42.3",
|
||||
"@typescript-eslint/parser": "^8.12.2",
|
||||
"@vitejs/plugin-vue": "^5.1.4",
|
||||
"bindings": "^1.5.0",
|
||||
"bootstrap": "^5.3.6",
|
||||
"chokidar": "^3.5.1",
|
||||
@@ -40,9 +49,9 @@
|
||||
"ts-loader": "^9.3.1",
|
||||
"typescript": "^5.6.3",
|
||||
"typescript-eslint": "^8.13.0",
|
||||
"vue-loader": "^17.0.0",
|
||||
"webpack": "^5.75.0",
|
||||
"webpack-cli": "^5.0.1"
|
||||
"vite": "^5.4.8",
|
||||
"vite-plugin-symfony": "^8",
|
||||
"vue-loader": "^17.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@fullcalendar/core": "^6.1.4",
|
||||
@@ -71,21 +80,5 @@
|
||||
"vue-multiselect": "3.0.0-alpha.2",
|
||||
"vue-toast-notification": "^3.1.2",
|
||||
"vuex": "^4.0.0"
|
||||
},
|
||||
"browserslist": [
|
||||
"defaults and fully supports es6-module and not dead"
|
||||
],
|
||||
"scripts": {
|
||||
"dev-server": "encore dev-server",
|
||||
"dev": "encore dev",
|
||||
"watch": "encore dev --watch",
|
||||
"build": "encore production --progress",
|
||||
"specs-build": "yaml-merge src/Bundle/ChillMainBundle/chill.api.specs.yaml src/Bundle/ChillPersonBundle/chill.api.specs.yaml src/Bundle/ChillCalendarBundle/chill.api.specs.yaml src/Bundle/ChillThirdPartyBundle/chill.api.specs.yaml src/Bundle/ChillDocStoreBundle/chill.api.specs.yaml> templates/api/specs.yaml",
|
||||
"specs-validate": "swagger-cli validate templates/api/specs.yaml",
|
||||
"specs-create-dir": "mkdir -p templates/api",
|
||||
"specs": "yarn run specs-create-dir && yarn run specs-build && yarn run specs-validate",
|
||||
"version": "node --version",
|
||||
"eslint": "npx eslint-baseline --fix \"src/**/*.{js,ts,vue}\""
|
||||
},
|
||||
"private": true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@ parameters:
|
||||
paths:
|
||||
- src/
|
||||
- utils/
|
||||
- packages/
|
||||
tmpDir: var/cache/phpstan
|
||||
reportUnmatchedIgnoredErrors: false
|
||||
excludePaths:
|
||||
|
||||
@@ -27,7 +27,8 @@ class ByActivityNumberAggregator implements AggregatorInterface
|
||||
public function alterQuery(QueryBuilder $qb, $data, \Chill\MainBundle\Export\ExportGenerationContext $exportGenerationContext): void
|
||||
{
|
||||
$qb
|
||||
->addSelect('(SELECT COUNT(activity.id) FROM '.Activity::class.' activity WHERE activity.accompanyingPeriod = acp) AS activity_by_number_aggregator')
|
||||
// Use a distinct alias inside the subquery to avoid colliding with the root alias "activity"
|
||||
->addSelect('(SELECT COUNT(agg_activity.id) FROM '.Activity::class.' agg_activity WHERE agg_activity.accompanyingPeriod = acp) AS activity_by_number_aggregator')
|
||||
->addGroupBy('activity_by_number_aggregator');
|
||||
}
|
||||
|
||||
@@ -65,7 +66,7 @@ class ByActivityNumberAggregator implements AggregatorInterface
|
||||
{
|
||||
return static function ($value) {
|
||||
if ('_header' === $value) {
|
||||
return '';
|
||||
return 'Count activities linked to an accompanying period';
|
||||
}
|
||||
|
||||
if (null === $value) {
|
||||
|
||||
@@ -1 +1 @@
|
||||
require("./chillactivity.scss");
|
||||
import "./chillactivity.scss";
|
||||
|
||||
@@ -136,6 +136,8 @@ import {
|
||||
ACTIVITY_LOCATION_FIELDS_TYPE,
|
||||
ACTIVITY_CHOOSE_LOCATION_TYPE,
|
||||
ACTIVITY_CREATE_NEW_LOCATION,
|
||||
ACTIVITY_EDIT_ADDRESS,
|
||||
ACTIVITY_CREATE_ADDRESS,
|
||||
trans,
|
||||
} from "translator";
|
||||
|
||||
@@ -156,6 +158,8 @@ export default {
|
||||
ACTIVITY_LOCATION_FIELDS_TYPE,
|
||||
ACTIVITY_CHOOSE_LOCATION_TYPE,
|
||||
ACTIVITY_CREATE_NEW_LOCATION,
|
||||
ACTIVITY_EDIT_ADDRESS,
|
||||
ACTIVITY_CREATE_ADDRESS,
|
||||
};
|
||||
},
|
||||
props: ["availableLocations"],
|
||||
@@ -179,14 +183,14 @@ export default {
|
||||
options: {
|
||||
button: {
|
||||
text: {
|
||||
create: "activity.create_address",
|
||||
edit: "activity.edit_address",
|
||||
create: ACTIVITY_CREATE_ADDRESS,
|
||||
edit: ACTIVITY_EDIT_ADDRESS,
|
||||
},
|
||||
size: "btn-sm",
|
||||
},
|
||||
title: {
|
||||
create: "activity.create_address",
|
||||
edit: "activity.edit_address",
|
||||
create: ACTIVITY_CREATE_ADDRESS,
|
||||
edit: ACTIVITY_EDIT_ADDRESS,
|
||||
},
|
||||
},
|
||||
context: {
|
||||
|
||||
@@ -124,9 +124,9 @@
|
||||
{# {{ form(delete_form) }} #}
|
||||
|
||||
{% block js %}
|
||||
{{ encore_entry_script_tags('mod_pickentity_type') }}
|
||||
{{ vite_entry_script_tags('mod_pickentity_type') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ encore_entry_link_tags('mod_pickentity_type') }}
|
||||
{{ vite_entry_link_tags('mod_pickentity_type') }}
|
||||
{% endblock %}
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
{% block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags('mod_async_upload') }}
|
||||
{{ vite_entry_script_tags('mod_async_upload') }}
|
||||
<script type="text/javascript">
|
||||
window.addEventListener('DOMContentLoaded', function (e) {
|
||||
chill.displayAlertWhenLeavingModifiedForm('form[name="{{ edit_form.vars.form.vars.name }}"]',
|
||||
@@ -23,12 +23,12 @@
|
||||
});
|
||||
window.activity = {{ activity_json|json_encode|raw }};
|
||||
</script>
|
||||
{{ encore_entry_script_tags('vue_activity') }}
|
||||
{{ vite_entry_script_tags('vue_activity') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_link_tags('mod_async_upload') }}
|
||||
{{ encore_entry_link_tags('vue_activity') }}
|
||||
{{ encore_entry_link_tags('page_edit_activity') }}
|
||||
{{ vite_entry_link_tags('mod_async_upload') }}
|
||||
{{ vite_entry_link_tags('vue_activity') }}
|
||||
{{ vite_entry_link_tags('page_edit_activity') }}
|
||||
{% endblock %}
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
{{ encore_entry_script_tags('mod_async_upload') }}
|
||||
{{ vite_entry_script_tags('mod_async_upload') }}
|
||||
<script type="text/javascript">
|
||||
window.addEventListener('DOMContentLoaded', function (e) {
|
||||
chill.displayAlertWhenLeavingModifiedForm('form[name="{{ edit_form.vars.form.vars.name }}"]',
|
||||
@@ -38,10 +38,10 @@
|
||||
});
|
||||
window.activity = {{ activity_json|json_encode|raw }};
|
||||
</script>
|
||||
{{ encore_entry_script_tags('vue_activity') }}
|
||||
{{ vite_entry_script_tags('vue_activity') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ encore_entry_link_tags('mod_async_upload') }}
|
||||
{{ encore_entry_link_tags('vue_activity') }}
|
||||
{{ vite_entry_link_tags('mod_async_upload') }}
|
||||
{{ vite_entry_link_tags('vue_activity') }}
|
||||
{% endblock %}
|
||||
|
||||
@@ -7,14 +7,14 @@
|
||||
|
||||
{% block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags('mod_notification_toggle_read_status') }}
|
||||
{{ encore_entry_script_tags('mod_document_action_buttons_group') }}
|
||||
{{ vite_entry_script_tags('mod_notification_toggle_read_status') }}
|
||||
{{ vite_entry_script_tags('mod_document_action_buttons_group') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_link_tags('mod_notification_toggle_read_status') }}
|
||||
{{ encore_entry_link_tags('mod_document_action_buttons_group') }}
|
||||
{{ vite_entry_link_tags('mod_notification_toggle_read_status') }}
|
||||
{{ vite_entry_link_tags('mod_document_action_buttons_group') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
@@ -22,14 +22,14 @@
|
||||
|
||||
{% block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags('mod_notification_toggle_read_status') }}
|
||||
{{ encore_entry_script_tags('mod_document_action_buttons_group') }}
|
||||
{{ vite_entry_script_tags('mod_notification_toggle_read_status') }}
|
||||
{{ vite_entry_script_tags('mod_document_action_buttons_group') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_link_tags('mod_notification_toggle_read_status') }}
|
||||
{{ encore_entry_link_tags('mod_document_action_buttons_group') }}
|
||||
{{ vite_entry_link_tags('mod_notification_toggle_read_status') }}
|
||||
{{ vite_entry_link_tags('mod_document_action_buttons_group') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
@@ -121,9 +121,9 @@
|
||||
{{ form_end(form) }}
|
||||
|
||||
{% block js %}
|
||||
{{ encore_entry_script_tags('mod_pickentity_type') }}
|
||||
{{ vite_entry_script_tags('mod_pickentity_type') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ encore_entry_link_tags('mod_pickentity_type') }}
|
||||
{% endblock %}
|
||||
{{ vite_entry_link_tags('mod_pickentity_type') }}
|
||||
{% endblock %}
|
||||
|
||||
@@ -15,16 +15,16 @@
|
||||
|
||||
{% block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags('mod_async_upload') }}
|
||||
{{ vite_entry_script_tags('mod_async_upload') }}
|
||||
<script type="text/javascript">
|
||||
window.activity = {{ activity_json|json_encode|raw }};
|
||||
{% if default_location is not null %}window.default_location_id = {{ default_location.id }}{% endif %};
|
||||
</script>
|
||||
{{ encore_entry_script_tags('vue_activity') }}
|
||||
{{ vite_entry_script_tags('vue_activity') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_link_tags('mod_async_upload') }}
|
||||
{{ encore_entry_link_tags('vue_activity') }}
|
||||
{{ vite_entry_link_tags('mod_async_upload') }}
|
||||
{{ vite_entry_link_tags('vue_activity') }}
|
||||
{% endblock %}
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
{{ encore_entry_script_tags('mod_async_upload') }}
|
||||
{{ vite_entry_script_tags('mod_async_upload') }}
|
||||
<script type="text/javascript">
|
||||
window.addEventListener('DOMContentLoaded', function (e) {
|
||||
chill.displayAlertWhenLeavingUnsubmittedForm('form[name="{{ form.vars.form.vars.name }}"]',
|
||||
@@ -22,10 +22,10 @@
|
||||
});
|
||||
window.activity = {{ activity_json|json_encode|raw }};
|
||||
</script>
|
||||
{{ encore_entry_script_tags('vue_activity') }}
|
||||
{{ vite_entry_script_tags('vue_activity') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ encore_entry_link_tags('mod_async_upload') }}
|
||||
{{ encore_entry_link_tags('vue_activity') }}
|
||||
{{ vite_entry_link_tags('mod_async_upload') }}
|
||||
{{ vite_entry_link_tags('vue_activity') }}
|
||||
{% endblock %}
|
||||
|
||||
@@ -6,16 +6,16 @@
|
||||
|
||||
{% block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags('mod_notification_toggle_read_status') }}
|
||||
{{ encore_entry_script_tags('mod_async_upload') }}
|
||||
{{ encore_entry_script_tags('mod_document_action_buttons_group') }}
|
||||
{{ vite_entry_script_tags('mod_notification_toggle_read_status') }}
|
||||
{{ vite_entry_script_tags('mod_async_upload') }}
|
||||
{{ vite_entry_script_tags('mod_document_action_buttons_group') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_link_tags('mod_notification_toggle_read_status') }}
|
||||
{{ encore_entry_link_tags('mod_async_upload') }}
|
||||
{{ encore_entry_link_tags('mod_document_action_buttons_group') }}
|
||||
{{ vite_entry_link_tags('mod_notification_toggle_read_status') }}
|
||||
{{ vite_entry_link_tags('mod_async_upload') }}
|
||||
{{ vite_entry_link_tags('mod_document_action_buttons_group') }}
|
||||
{% endblock %}
|
||||
|
||||
{% import '@ChillActivity/ActivityReason/macro.html.twig' as m %}
|
||||
|
||||
@@ -6,14 +6,14 @@
|
||||
|
||||
{% block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags('mod_notification_toggle_read_status') }}
|
||||
{{ encore_entry_script_tags('mod_document_action_buttons_group') }}
|
||||
{{ vite_entry_script_tags('mod_notification_toggle_read_status') }}
|
||||
{{ vite_entry_script_tags('mod_document_action_buttons_group') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_link_tags('mod_notification_toggle_read_status') }}
|
||||
{{ encore_entry_link_tags('mod_document_action_buttons_group') }}
|
||||
{{ vite_entry_link_tags('mod_notification_toggle_read_status') }}
|
||||
{{ vite_entry_link_tags('mod_document_action_buttons_group') }}
|
||||
{% endblock %}
|
||||
|
||||
{% import '@ChillActivity/ActivityReason/macro.html.twig' as m %}
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
// this file loads all assets from the Chill person bundle
|
||||
module.exports = function (encore, entries) {
|
||||
entries.push(__dirname + "/Resources/public/chill/index.js");
|
||||
|
||||
encore.addAliases({
|
||||
ChillActivityAssets: __dirname + "/Resources/public",
|
||||
});
|
||||
|
||||
encore.addEntry(
|
||||
"page_edit_activity",
|
||||
__dirname + "/Resources/public/page/edit_activity/index.scss",
|
||||
);
|
||||
|
||||
encore.addEntry(
|
||||
"vue_activity",
|
||||
__dirname + "/Resources/public/vuejs/Activity/index.js",
|
||||
);
|
||||
};
|
||||
@@ -39,7 +39,7 @@ final class Version20251118124241 extends AbstractMigration
|
||||
$this->addSql("COMMENT ON COLUMN activity_user.by_migration IS 'For backup purpose - can be safely deleted after a while. See migration \\Chill\\Migrations\\Activity\\Version20251118124241'");
|
||||
|
||||
$this->addSql('INSERT INTO activity_user (activity_id, user_id, by_migration)
|
||||
SELECT id, user_id, true FROM activity
|
||||
SELECT id, user_id, true FROM activity WHERE user_id is not null
|
||||
ON CONFLICT DO NOTHING');
|
||||
}
|
||||
|
||||
|
||||
14
src/Bundle/ChillActivityBundle/vite.config.js
Normal file
14
src/Bundle/ChillActivityBundle/vite.config.js
Normal file
@@ -0,0 +1,14 @@
|
||||
export default {
|
||||
chillBase: [
|
||||
"./src/Bundle/ChillActivityBundle/Resources/public/chill/index.js",
|
||||
],
|
||||
aliases: {
|
||||
ChillActivityAssets: "./src/Bundle/ChillActivityBundle/Resources/public",
|
||||
},
|
||||
inputs: {
|
||||
page_edit_activity:
|
||||
"./src/Bundle/ChillActivityBundle/Resources/public/page/edit_activity/index.scss",
|
||||
vue_activity:
|
||||
"./src/Bundle/ChillActivityBundle/Resources/public/vuejs/Activity/index.js",
|
||||
},
|
||||
};
|
||||
@@ -2,12 +2,12 @@
|
||||
|
||||
{% block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags('mod_pickentity_type') }}
|
||||
{{ vite_entry_script_tags('mod_pickentity_type') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_link_tags('mod_pickentity_type') }}
|
||||
{{ vite_entry_link_tags('mod_pickentity_type') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block title %}
|
||||
|
||||
@@ -1 +1 @@
|
||||
require("./chillbudget.scss");
|
||||
import("./chillbudget.scss");
|
||||
|
||||
@@ -7,11 +7,11 @@
|
||||
{% block title title %}
|
||||
|
||||
{% block js %}
|
||||
{{ encore_entry_script_tags('page_budget') }}
|
||||
{{ vite_entry_script_tags('page_budget') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ encore_entry_link_tags('page_budget') }}
|
||||
{{ vite_entry_link_tags('page_budget') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
@@ -7,11 +7,11 @@
|
||||
{% block title title %}
|
||||
|
||||
{% block js %}
|
||||
{{ encore_entry_script_tags('page_budget') }}
|
||||
{{ vite_entry_script_tags('page_budget') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ encore_entry_link_tags('page_budget') }}
|
||||
{{ vite_entry_link_tags('page_budget') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
// this file loads all assets from the Chill budget bundle
|
||||
module.exports = function (encore, entries) {
|
||||
encore.addAliases({
|
||||
ChillBudgetAssets: __dirname + "/Resources/public",
|
||||
});
|
||||
|
||||
encore.addEntry("page_budget", __dirname + "/Resources/public/page/index.js");
|
||||
};
|
||||
8
src/Bundle/ChillBudgetBundle/vite.config.js
Normal file
8
src/Bundle/ChillBudgetBundle/vite.config.js
Normal file
@@ -0,0 +1,8 @@
|
||||
export default {
|
||||
aliases: {
|
||||
ChillBudgetAssets: "./src/Bundle/ChillBudgetBundle/Resources/public",
|
||||
},
|
||||
inputs: {
|
||||
page_budget: "./src/Bundle/ChillBudgetBundle/Resources/public/page/index.js",
|
||||
},
|
||||
};
|
||||
@@ -1 +1 @@
|
||||
require("./scss/calendar.scss");
|
||||
import("./scss/calendar.scss");
|
||||
|
||||
@@ -255,5 +255,3 @@ export default {
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style src="vue-multiselect/dist/vue-multiselect.css"></style>
|
||||
|
||||
@@ -20,13 +20,13 @@
|
||||
window.endDate = {{ entity.endDate|date('Y-m-d H:i:s')|json_encode|raw }};
|
||||
window.mainUser = {{ entity.mainUser.id }};
|
||||
</script>
|
||||
{{ encore_entry_script_tags('vue_calendar') }}
|
||||
{{ vite_entry_script_tags('vue_calendar') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_link_tags('vue_calendar') }}
|
||||
{{ encore_entry_link_tags('page_calendar') }}
|
||||
{{ vite_entry_link_tags('vue_calendar') }}
|
||||
{{ vite_entry_link_tags('page_calendar') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block block_post_menu %}
|
||||
|
||||
@@ -20,13 +20,13 @@
|
||||
window.endDate = {{ entity.endDate|date('Y-m-d H:i:s')|json_encode|raw }};
|
||||
window.mainUser = {{ entity.mainUser.id }};
|
||||
</script>
|
||||
{{ encore_entry_script_tags('vue_calendar') }}
|
||||
{{ vite_entry_script_tags('vue_calendar') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_link_tags('vue_calendar') }}
|
||||
{{ encore_entry_link_tags('page_calendar') }}
|
||||
{{ vite_entry_link_tags('vue_calendar') }}
|
||||
{{ vite_entry_link_tags('page_calendar') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block block_post_menu %}
|
||||
|
||||
@@ -23,10 +23,10 @@
|
||||
window.endDate = {{ entity.endDate|date('Y-m-d H:i:s')|json_encode|raw }};
|
||||
window.mainUser = {{ entity.mainUser.id }};
|
||||
</script>
|
||||
{{ encore_entry_script_tags('vue_calendar') }}
|
||||
{{ vite_entry_script_tags('vue_calendar') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_link_tags('vue_calendar') }}
|
||||
{{ vite_entry_link_tags('vue_calendar') }}
|
||||
{% endblock %}
|
||||
|
||||
@@ -9,14 +9,14 @@
|
||||
|
||||
{% block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags('mod_answer') }}
|
||||
{{ encore_entry_script_tags('mod_document_action_buttons_group') }}
|
||||
{{ vite_entry_script_tags('mod_answer') }}
|
||||
{{ vite_entry_script_tags('mod_document_action_buttons_group') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_link_tags('mod_answer') }}
|
||||
{{ encore_entry_link_tags('mod_document_action_buttons_group') }}
|
||||
{{ vite_entry_link_tags('mod_answer') }}
|
||||
{{ vite_entry_link_tags('mod_document_action_buttons_group') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
@@ -8,14 +8,14 @@
|
||||
|
||||
{% block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags('mod_answer') }}
|
||||
{{ encore_entry_script_tags('mod_document_action_buttons_group') }}
|
||||
{{ vite_entry_script_tags('mod_answer') }}
|
||||
{{ vite_entry_script_tags('mod_document_action_buttons_group') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_link_tags('mod_answer') }}
|
||||
{{ encore_entry_link_tags('mod_document_action_buttons_group') }}
|
||||
{{ vite_entry_link_tags('mod_answer') }}
|
||||
{{ vite_entry_link_tags('mod_document_action_buttons_group') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
@@ -16,10 +16,10 @@
|
||||
<script type="text/javascript">
|
||||
window.userId = {{ user.id }};
|
||||
</script>
|
||||
{{ encore_entry_script_tags('vue_mycalendarrange') }}
|
||||
{{ vite_entry_script_tags('vue_mycalendarrange') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_link_tags('vue_mycalendarrange') }}
|
||||
{{ vite_entry_link_tags('vue_mycalendarrange') }}
|
||||
{% endblock %}
|
||||
|
||||
@@ -15,18 +15,18 @@
|
||||
|
||||
{% block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags('mod_pickentity_type') }}
|
||||
{{ vite_entry_script_tags('mod_pickentity_type') }}
|
||||
<script type="text/javascript">
|
||||
window.entity = {{ entity_json|json_encode|raw }};
|
||||
{% if app.user.currentLocation is not null %}window.default_location_id = {{ app.user.currentLocation.id }};{% endif %};
|
||||
</script>
|
||||
{{ encore_entry_script_tags('vue_calendar') }}
|
||||
{{ vite_entry_script_tags('vue_calendar') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_link_tags('vue_calendar') }}
|
||||
{{ encore_entry_link_tags('mod_pickentity_type') }}
|
||||
{{ vite_entry_link_tags('vue_calendar') }}
|
||||
{{ vite_entry_link_tags('mod_pickentity_type') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block block_post_menu %}
|
||||
|
||||
@@ -15,18 +15,18 @@
|
||||
|
||||
{% block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags('mod_pickentity_type') }}
|
||||
{{ vite_entry_script_tags('mod_pickentity_type') }}
|
||||
<script type="text/javascript">
|
||||
window.entity = {{ entity_json|json_encode|raw }};
|
||||
{% if app.user.currentLocation is not null %}window.default_location_id = {{ app.user.currentLocation.id }};{% endif %};
|
||||
</script>
|
||||
{{ encore_entry_script_tags('vue_calendar') }}
|
||||
{{ vite_entry_script_tags('vue_calendar') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_link_tags('vue_calendar') }}
|
||||
{{ encore_entry_link_tags('mod_pickentity_type') }}
|
||||
{{ vite_entry_link_tags('vue_calendar') }}
|
||||
{{ vite_entry_link_tags('mod_pickentity_type') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block block_post_menu %}
|
||||
|
||||
@@ -9,12 +9,12 @@
|
||||
|
||||
{% block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags('mod_async_upload') }}
|
||||
{{ vite_entry_script_tags('mod_async_upload') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_link_tags('mod_async_upload') }}
|
||||
{{ vite_entry_link_tags('mod_async_upload') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
@@ -8,12 +8,12 @@
|
||||
|
||||
{% block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags('mod_async_upload') }}
|
||||
{{ vite_entry_script_tags('mod_async_upload') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_link_tags('mod_async_upload') }}
|
||||
{{ vite_entry_link_tags('mod_async_upload') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
@@ -9,12 +9,12 @@
|
||||
|
||||
{% block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags('mod_async_upload') }}
|
||||
{{ vite_entry_script_tags('mod_async_upload') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_link_tags('mod_async_upload') }}
|
||||
{{ vite_entry_link_tags('mod_async_upload') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
@@ -8,12 +8,12 @@
|
||||
|
||||
{% block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags('mod_async_upload') }}
|
||||
{{ vite_entry_script_tags('mod_async_upload') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_link_tags('mod_async_upload') }}
|
||||
{{ vite_entry_link_tags('mod_async_upload') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
@@ -29,12 +29,12 @@
|
||||
|
||||
{% block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags('mod_answer') }}
|
||||
{{ encore_entry_script_tags('mod_document_action_buttons_group') }}
|
||||
{{ vite_entry_script_tags('mod_answer') }}
|
||||
{{ vite_entry_script_tags('mod_document_action_buttons_group') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_link_tags('mod_answer') }}
|
||||
{{ encore_entry_link_tags('mod_document_action_buttons_group') }}
|
||||
{{ vite_entry_link_tags('mod_answer') }}
|
||||
{{ vite_entry_link_tags('mod_document_action_buttons_group') }}
|
||||
{% endblock %}
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
// this file loads all assets from the Chill calendar bundle
|
||||
module.exports = function (encore, entries) {
|
||||
entries.push(__dirname + "/Resources/public/chill/chill.js");
|
||||
|
||||
encore.addAliases({
|
||||
ChillCalendarAssets: __dirname + "/Resources/public",
|
||||
});
|
||||
|
||||
encore.addEntry(
|
||||
"vue_calendar",
|
||||
__dirname + "/Resources/public/vuejs/Calendar/index.js",
|
||||
);
|
||||
encore.addEntry(
|
||||
"vue_mycalendarrange",
|
||||
__dirname + "/Resources/public/vuejs/MyCalendarRange/index2.ts",
|
||||
);
|
||||
encore.addEntry(
|
||||
"page_calendar",
|
||||
__dirname + "/Resources/public/chill/index.js",
|
||||
);
|
||||
encore.addEntry(
|
||||
"mod_answer",
|
||||
__dirname + "/Resources/public/module/Invite/answer.js",
|
||||
);
|
||||
};
|
||||
18
src/Bundle/ChillCalendarBundle/vite.config.js
Normal file
18
src/Bundle/ChillCalendarBundle/vite.config.js
Normal file
@@ -0,0 +1,18 @@
|
||||
export default {
|
||||
chillBase: [
|
||||
"./src/Bundle/ChillCalendarBundle/Resources/public/chill/chill.js",
|
||||
],
|
||||
aliases: {
|
||||
ChillCalendarAssets: "./src/Bundle/ChillCalendarBundle/Resources/public",
|
||||
},
|
||||
inputs: {
|
||||
vue_calendar:
|
||||
"./src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/index.js",
|
||||
vue_mycalendarrange:
|
||||
"./src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/index2.ts",
|
||||
page_calendar:
|
||||
"./src/Bundle/ChillCalendarBundle/Resources/public/chill/index.js",
|
||||
mod_answer:
|
||||
"./src/Bundle/ChillCalendarBundle/Resources/public/module/Invite/answer.js",
|
||||
},
|
||||
};
|
||||
@@ -17,9 +17,9 @@
|
||||
|
||||
{% block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags('mod_async_upload') }}
|
||||
{{ vite_entry_script_tags('mod_async_upload') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ encore_entry_link_tags('mod_async_upload') }}
|
||||
{{ vite_entry_link_tags('mod_async_upload') }}
|
||||
{% endblock %}
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
|
||||
{% block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags('mod_document_action_buttons_group') }}
|
||||
{{ vite_entry_script_tags('mod_document_action_buttons_group') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_link_tags('mod_document_action_buttons_group') }}
|
||||
{{ vite_entry_link_tags('mod_document_action_buttons_group') }}
|
||||
{% endblock %}
|
||||
|
||||
|
||||
|
||||
@@ -17,9 +17,9 @@
|
||||
|
||||
{% block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags('mod_async_upload') }}
|
||||
{{ vite_entry_script_tags('mod_async_upload') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ encore_entry_link_tags('mod_async_upload') }}
|
||||
{{ vite_entry_link_tags('mod_async_upload') }}
|
||||
{% endblock %}
|
||||
|
||||
@@ -3,11 +3,11 @@
|
||||
{% block title 'docgen.Generate a document'|trans %}
|
||||
|
||||
{% block js %}
|
||||
{{ encore_entry_script_tags('mod_pickentity_type') }}
|
||||
{{ vite_entry_script_tags('mod_pickentity_type') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ encore_entry_link_tags('mod_pickentity_type') }}
|
||||
{{ vite_entry_link_tags('mod_pickentity_type') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
// this file loads all assets from the Chill DocGenerator bundle
|
||||
module.exports = function (encore, entries) {
|
||||
encore.addAliases({
|
||||
ChillDocGeneratorAssets: __dirname + "/Resources/public",
|
||||
});
|
||||
|
||||
encore.addEntry(
|
||||
"mod_docgen_picktemplate",
|
||||
__dirname + "/Resources/public/module/PickTemplate/index.js",
|
||||
);
|
||||
};
|
||||
10
src/Bundle/ChillDocGeneratorBundle/vite.config.js
Normal file
10
src/Bundle/ChillDocGeneratorBundle/vite.config.js
Normal file
@@ -0,0 +1,10 @@
|
||||
export default {
|
||||
aliases: {
|
||||
ChillDocGeneratorAssets:
|
||||
"./src/Bundle/ChillDocGeneratorBundle/Resources/public",
|
||||
},
|
||||
inputs: {
|
||||
mod_docgen_picktemplate:
|
||||
"./src/Bundle/ChillDocGeneratorBundle/Resources/public/module/PickTemplate/index.js",
|
||||
},
|
||||
};
|
||||
@@ -1,2 +1,2 @@
|
||||
require("./uploader.js");
|
||||
require("./downloader.js");
|
||||
import("./uploader.js");
|
||||
import("./downloader.js");
|
||||
|
||||
@@ -22,8 +22,8 @@ import { initializeButtons } from "./downloader.js";
|
||||
|
||||
// load css
|
||||
//require('dropzone/dist/basic.css');
|
||||
require("dropzone/dist/dropzone.css");
|
||||
require("./index.scss");
|
||||
import("dropzone/dist/dropzone.css");
|
||||
import("./index.scss");
|
||||
//
|
||||
|
||||
// disable dropzone autodiscover
|
||||
|
||||
@@ -366,7 +366,7 @@ import {
|
||||
} from "../../types";
|
||||
import { makeFetch } from "ChillMainAssets/lib/api/apiMethods";
|
||||
import * as pdfjsLib from "pdfjs-dist";
|
||||
import {
|
||||
import type {
|
||||
PDFDocumentProxy,
|
||||
PDFPageProxy,
|
||||
} from "pdfjs-dist/types/src/display/api";
|
||||
|
||||
@@ -42,10 +42,10 @@
|
||||
|
||||
{% block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags('mod_async_upload') }}
|
||||
{{ vite_entry_script_tags('mod_async_upload') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_link_tags('mod_async_upload') }}
|
||||
{{ vite_entry_link_tags('mod_async_upload') }}
|
||||
{% endblock %}
|
||||
|
||||
@@ -38,10 +38,10 @@
|
||||
|
||||
{% block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags('mod_async_upload') }}
|
||||
{{ vite_entry_script_tags('mod_async_upload') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_link_tags('mod_async_upload') }}
|
||||
{{ vite_entry_link_tags('mod_async_upload') }}
|
||||
{% endblock %}
|
||||
|
||||
@@ -12,9 +12,9 @@
|
||||
|
||||
{% block css %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_link_tags('mod_async_upload') }}
|
||||
{{ encore_entry_link_tags('mod_entity_workflow_pick') }}
|
||||
{{ encore_entry_link_tags('mod_document_action_buttons_group') }}
|
||||
{{ vite_entry_link_tags('mod_async_upload') }}
|
||||
{{ vite_entry_link_tags('mod_entity_workflow_pick') }}
|
||||
{{ vite_entry_link_tags('mod_document_action_buttons_group') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
@@ -80,7 +80,7 @@
|
||||
|
||||
{% block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags('mod_async_upload') }}
|
||||
{{ encore_entry_script_tags('mod_entity_workflow_pick') }}
|
||||
{{ encore_entry_script_tags('mod_document_action_buttons_group') }}
|
||||
{{ vite_entry_script_tags('mod_async_upload') }}
|
||||
{{ vite_entry_script_tags('mod_entity_workflow_pick') }}
|
||||
{{ vite_entry_script_tags('mod_document_action_buttons_group') }}
|
||||
{% endblock %}
|
||||
|
||||
@@ -3,14 +3,14 @@ activeRouteKey = '' %} {% block title %}
|
||||
{{ "Documents" }}
|
||||
{% endblock %} {% block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags("mod_docgen_picktemplate") }}
|
||||
{{ encore_entry_script_tags("mod_entity_workflow_pick") }}
|
||||
{{ encore_entry_script_tags("mod_document_action_buttons_group") }}
|
||||
{{ vite_entry_script_tags("mod_docgen_picktemplate") }}
|
||||
{{ vite_entry_script_tags("mod_entity_workflow_pick") }}
|
||||
{{ vite_entry_script_tags("mod_document_action_buttons_group") }}
|
||||
{% endblock %} {% block css %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags("mod_docgen_picktemplate") }}
|
||||
{{ encore_entry_link_tags("mod_entity_workflow_pick") }}
|
||||
{{ encore_entry_link_tags("mod_document_action_buttons_group") }}
|
||||
{{ vite_entry_script_tags("mod_docgen_picktemplate") }}
|
||||
{{ vite_entry_link_tags("mod_entity_workflow_pick") }}
|
||||
{{ vite_entry_link_tags("mod_document_action_buttons_group") }}
|
||||
{% endblock %} {% block content %}
|
||||
<div class="document-list">
|
||||
<h1>{{ "Documents" }}</h1>
|
||||
|
||||
@@ -13,14 +13,14 @@ License * along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
{{ 'Documents for %name%'|trans({ '%name%': person|chill_entity_render_string } ) }}
|
||||
{% endblock %} {% block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags("mod_docgen_picktemplate") }}
|
||||
{{ encore_entry_script_tags("mod_entity_workflow_pick") }}
|
||||
{{ encore_entry_script_tags("mod_document_action_buttons_group") }}
|
||||
{{ vite_entry_script_tags("mod_docgen_picktemplate") }}
|
||||
{{ vite_entry_script_tags("mod_entity_workflow_pick") }}
|
||||
{{ vite_entry_script_tags("mod_document_action_buttons_group") }}
|
||||
{% endblock %} {% block css %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_link_tags("mod_docgen_picktemplate") }}
|
||||
{{ encore_entry_link_tags("mod_entity_workflow_pick") }}
|
||||
{{ encore_entry_link_tags("mod_document_action_buttons_group") }}
|
||||
{{ vite_entry_link_tags("mod_docgen_picktemplate") }}
|
||||
{{ vite_entry_link_tags("mod_entity_workflow_pick") }}
|
||||
{{ vite_entry_link_tags("mod_document_action_buttons_group") }}
|
||||
{% endblock %} {% block content %}
|
||||
|
||||
<div class="document-list">
|
||||
|
||||
@@ -58,9 +58,9 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
{{ encore_entry_script_tags('mod_async_upload') }}
|
||||
{{ vite_entry_script_tags('mod_async_upload') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ encore_entry_link_tags('mod_async_upload') }}
|
||||
{{ vite_entry_link_tags('mod_async_upload') }}
|
||||
{% endblock %}
|
||||
|
||||
@@ -54,9 +54,9 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
{{ encore_entry_script_tags('mod_async_upload') }}
|
||||
{{ vite_entry_script_tags('mod_async_upload') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ encore_entry_link_tags('mod_async_upload') }}
|
||||
{{ vite_entry_link_tags('mod_async_upload') }}
|
||||
{% endblock %}
|
||||
|
||||
@@ -24,11 +24,11 @@
|
||||
{% block title %}{{ 'Detail of document of %name%'|trans({ '%name%': person|chill_entity_render_string } ) }}{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
{{ encore_entry_script_tags('mod_document_action_buttons_group') }}
|
||||
{{ vite_entry_script_tags('mod_document_action_buttons_group') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ encore_entry_link_tags('mod_document_action_buttons_group') }}
|
||||
{{ vite_entry_link_tags('mod_document_action_buttons_group') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
@@ -7,21 +7,21 @@
|
||||
<link rel="shortcut icon" href="{{ asset('build/images/favicon.ico') }}" type="image/x-icon">
|
||||
<title>Signature</title>
|
||||
|
||||
{{ encore_entry_link_tags('mod_bootstrap') }}
|
||||
{{ encore_entry_link_tags('mod_forkawesome') }}
|
||||
{{ encore_entry_link_tags('chill') }}
|
||||
{{ encore_entry_link_tags('vue_document_signature') }}
|
||||
{{ vite_entry_link_tags('mod_bootstrap') }}
|
||||
{{ vite_entry_link_tags('mod_forkawesome') }}
|
||||
{{ vite_entry_link_tags('chill') }}
|
||||
{{ vite_entry_link_tags('vue_document_signature') }}
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
{% block js %}
|
||||
{{ encore_entry_script_tags('mod_document_action_buttons_group') }}
|
||||
{{ vite_entry_script_tags('mod_document_action_buttons_group') }}
|
||||
<script type="text/javascript">
|
||||
window.signature = {{ signature|json_encode|raw }};
|
||||
</script>
|
||||
{{ encore_entry_script_tags('vue_document_signature') }}
|
||||
{{ vite_entry_script_tags('vue_document_signature') }}
|
||||
{% endblock %}
|
||||
|
||||
<div class="content" id="content">
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
|
||||
{% block css %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_link_tags('mod_document_download_button') }}
|
||||
{{ vite_entry_link_tags('mod_document_download_button') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags('mod_document_download_button') }}
|
||||
{{ vite_entry_script_tags('mod_document_download_button') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block title %}{{ 'workflow.public_link.title'|trans }} - {{ title }}{% endblock %}
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
module.exports = function (encore) {
|
||||
encore.addAliases({
|
||||
ChillDocStoreAssets: __dirname + "/Resources/public",
|
||||
});
|
||||
encore.addEntry(
|
||||
"mod_async_upload",
|
||||
__dirname + "/Resources/public/module/async_upload/index.ts",
|
||||
);
|
||||
encore.addEntry(
|
||||
"mod_document_action_buttons_group",
|
||||
__dirname + "/Resources/public/module/document_action_buttons_group/index",
|
||||
);
|
||||
encore.addEntry(
|
||||
"mod_document_download_button",
|
||||
__dirname + "/Resources/public/module/button_download/index",
|
||||
);
|
||||
encore.addEntry(
|
||||
"vue_document_signature",
|
||||
__dirname + "/Resources/public/vuejs/DocumentSignature/index",
|
||||
);
|
||||
};
|
||||
15
src/Bundle/ChillDocStoreBundle/vite.config.js
Normal file
15
src/Bundle/ChillDocStoreBundle/vite.config.js
Normal file
@@ -0,0 +1,15 @@
|
||||
export default {
|
||||
aliases: {
|
||||
ChillDocStoreAssets: "./src/Bundle/ChillDocStoreBundle/Resources/public",
|
||||
},
|
||||
inputs: {
|
||||
mod_async_upload:
|
||||
"./src/Bundle/ChillDocStoreBundle/Resources/public/module/async_upload/index.ts",
|
||||
mod_document_action_buttons_group:
|
||||
"./src/Bundle/ChillDocStoreBundle/Resources/public/module/document_action_buttons_group/index.ts",
|
||||
mod_document_download_button:
|
||||
"./src/Bundle/ChillDocStoreBundle/Resources/public/module/button_download/index.ts",
|
||||
vue_document_signature:
|
||||
"./src/Bundle/ChillDocStoreBundle/Resources/public/vuejs/DocumentSignature/index.ts",
|
||||
},
|
||||
};
|
||||
@@ -1 +1 @@
|
||||
require("./chillevent.scss");
|
||||
import("./chillevent.scss");
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
{% extends '@ChillEvent/layout.html.twig' %} {% block js %}
|
||||
{{ encore_entry_script_tags("mod_async_upload") }}
|
||||
{{ encore_entry_script_tags("mod_pickentity_type") }}
|
||||
{{ vite_entry_script_tags("mod_async_upload") }}
|
||||
{{ vite_entry_script_tags("mod_pickentity_type") }}
|
||||
|
||||
{% endblock %} {% block css %}
|
||||
{{ encore_entry_link_tags("mod_async_upload") }}
|
||||
{{ encore_entry_link_tags("mod_pickentity_type") }}
|
||||
{{ vite_entry_link_tags("mod_async_upload") }}
|
||||
{{ vite_entry_link_tags("mod_pickentity_type") }}
|
||||
|
||||
{% endblock %} {% block title 'Event edit'|trans %} {% block event_content -%}
|
||||
<div class="col-10">
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
{% extends '@ChillEvent/layout.html.twig' %}
|
||||
|
||||
{% block css %}
|
||||
{{ encore_entry_link_tags("mod_async_upload") }}
|
||||
{{ encore_entry_link_tags("mod_pickentity_type") }}
|
||||
{{ encore_entry_link_tags('vue_event') }}
|
||||
{{ vite_entry_link_tags("mod_async_upload") }}
|
||||
{{ vite_entry_link_tags("mod_pickentity_type") }}
|
||||
{{ vite_entry_link_tags('vue_event') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block title 'Event creation'|trans %}
|
||||
@@ -52,9 +52,9 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
{{ encore_entry_script_tags("mod_async_upload") }}
|
||||
{{ encore_entry_script_tags("mod_pickentity_type") }}
|
||||
{{ encore_entry_script_tags('vue_event') }}
|
||||
{{ vite_entry_script_tags("mod_async_upload") }}
|
||||
{{ vite_entry_script_tags("mod_pickentity_type") }}
|
||||
{{ vite_entry_script_tags('vue_event') }}
|
||||
<script type="text/javascript">
|
||||
window.entity = {{ entity_json|json_encode|raw }};
|
||||
{% if app.user.currentLocation is not null %}window.default_location_id = {{ app.user.currentLocation.id }};{% endif %}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
{% extends '@ChillEvent/layout.html.twig' %} {% block title 'Events'|trans %} {%
|
||||
block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags("mod_pickentity_type") }}
|
||||
{{ vite_entry_script_tags("mod_pickentity_type") }}
|
||||
{% endblock %} {% block css %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_link_tags("mod_pickentity_type") }}
|
||||
{{ vite_entry_link_tags("mod_pickentity_type") }}
|
||||
{% endblock %} {% block content %}
|
||||
<div class="col-10">
|
||||
<h1>{{ block("title") }}</h1>
|
||||
|
||||
@@ -6,14 +6,14 @@
|
||||
|
||||
{% block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags('mod_pickentity_type') }}
|
||||
{{ encore_entry_script_tags('mod_document_action_buttons_group') }}
|
||||
{{ vite_entry_script_tags('mod_pickentity_type') }}
|
||||
{{ vite_entry_script_tags('mod_document_action_buttons_group') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_link_tags('mod_pickentity_type') }}
|
||||
{{ encore_entry_link_tags('mod_document_action_buttons_group') }}
|
||||
{{ vite_entry_link_tags('mod_pickentity_type') }}
|
||||
{{ vite_entry_link_tags('mod_document_action_buttons_group') }}
|
||||
{% endblock %}
|
||||
|
||||
{% macro insert_onthefly(type, entity, parent = null) %}
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
module.exports = function (encore, entries) {
|
||||
entries.push(__dirname + "/Resources/public/chill/index.js");
|
||||
|
||||
encore.addEntry(
|
||||
"vue_event",
|
||||
__dirname + "/Resources/public/vuejs/index.js",
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
8
src/Bundle/ChillEventBundle/vite.config.js
Normal file
8
src/Bundle/ChillEventBundle/vite.config.js
Normal file
@@ -0,0 +1,8 @@
|
||||
export default {
|
||||
chillBase: [
|
||||
"./src/Bundle/ChillEventBundle/Resources/public/chill/index.js",
|
||||
],
|
||||
inputs: {
|
||||
vue_event: "./src/Bundle/ChillEventBundle/Resources/public/vuejs/index.js",
|
||||
},
|
||||
};
|
||||
@@ -1 +1 @@
|
||||
require("./footer_bandeau.jpg");
|
||||
import("./footer_bandeau.jpg");
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{% extends '@ChillPerson/CRUD/edit.html.twig' %}
|
||||
|
||||
{% block css %}
|
||||
{{ encore_entry_link_tags('mod_pickentity_type') }}
|
||||
{{ vite_entry_link_tags('mod_pickentity_type') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block title 'Dispositifs de ' ~ entity.person.firstName ~ ' ' ~ entity.person.lastName %}
|
||||
@@ -88,7 +88,7 @@
|
||||
|
||||
{% block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags('mod_pickentity_type') }}
|
||||
{{ vite_entry_script_tags('mod_pickentity_type') }}
|
||||
<script type="text/javascript" src="{{ asset('build/dispositifs_edit.js') }}"></script>
|
||||
<script type="text/javascript">
|
||||
|
||||
|
||||
@@ -114,13 +114,13 @@
|
||||
|
||||
{% block css %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_link_tags('mod_async_upload') }}
|
||||
{{ encore_entry_link_tags('mod_pickentity_type') }}
|
||||
{{ vite_entry_link_tags('mod_async_upload') }}
|
||||
{{ vite_entry_link_tags('mod_pickentity_type') }}
|
||||
{% endblock css %}
|
||||
|
||||
{% block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags('mod_async_upload') }}
|
||||
{{ encore_entry_script_tags('mod_pickentity_type') }}
|
||||
{{ vite_entry_script_tags('mod_async_upload') }}
|
||||
{{ vite_entry_script_tags('mod_pickentity_type') }}
|
||||
<script type="text/javascript" src="{{ asset('build/personal_situation_edit.js') }}"></script>
|
||||
{% endblock js %}
|
||||
|
||||
@@ -274,12 +274,12 @@
|
||||
|
||||
{% block css %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_link_tags('mod_async_upload') }}
|
||||
{{ encore_entry_script_tags('mod_document_action_buttons_group') }}
|
||||
{{ vite_entry_link_tags('mod_async_upload') }}
|
||||
{{ vite_entry_script_tags('mod_document_action_buttons_group') }}
|
||||
{% endblock css %}
|
||||
|
||||
{% block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags('mod_async_upload') }}
|
||||
{{ encore_entry_link_tags('mod_document_action_buttons_group') }}
|
||||
{{ vite_entry_script_tags('mod_async_upload') }}
|
||||
{{ vite_entry_link_tags('mod_document_action_buttons_group') }}
|
||||
{% endblock js %}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
{% set activeRouteKey = '' %}
|
||||
|
||||
{% block css %}
|
||||
{{ encore_entry_link_tags('mod_pickentity_type') }}
|
||||
{{ vite_entry_link_tags('mod_pickentity_type') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block title %}
|
||||
@@ -66,6 +66,6 @@
|
||||
|
||||
{% block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags('mod_pickentity_type') }}
|
||||
{{ vite_entry_script_tags('mod_pickentity_type') }}
|
||||
<script type="text/javascript" src="{{ asset('build/immersion_edit.js') }}"></script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
{% set activeRouteKey = '' %}
|
||||
|
||||
{% block css %}
|
||||
{{ encore_entry_link_tags('mod_pickentity_type') }}
|
||||
{{ vite_entry_link_tags('mod_pickentity_type') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block title %}
|
||||
@@ -69,7 +69,7 @@
|
||||
|
||||
{% block js %}
|
||||
{{ parent() }}
|
||||
{{ encore_entry_script_tags('mod_pickentity_type') }}
|
||||
{{ vite_entry_script_tags('mod_pickentity_type') }}
|
||||
<script type="text/javascript" src="{{ asset('build/immersion_edit.js') }}"></script>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
module.exports = function (encore, chillEntries) {
|
||||
let dispositif_edit_file =
|
||||
__dirname + "/Resources/public/module/dispositif_edit/index.js",
|
||||
personal_situation_edit_file =
|
||||
__dirname + "/Resources/public/module/personal_situation/index.js",
|
||||
cv_edit_file = __dirname + "/Resources/public/module/cv_edit/index.js",
|
||||
immersion_edit_file =
|
||||
__dirname + "/Resources/public/module/immersion_edit/index.js",
|
||||
images = __dirname + "/Resources/public/images/index.js";
|
||||
encore.addEntry("dispositifs_edit", dispositif_edit_file);
|
||||
encore.addEntry("personal_situation_edit", personal_situation_edit_file);
|
||||
encore.addEntry("immersion_edit", immersion_edit_file);
|
||||
encore.addEntry("images", images);
|
||||
encore.addEntry("cs_cv", cv_edit_file);
|
||||
};
|
||||
13
src/Bundle/ChillJobBundle/src/vite.config.js
Normal file
13
src/Bundle/ChillJobBundle/src/vite.config.js
Normal file
@@ -0,0 +1,13 @@
|
||||
export default {
|
||||
inputs: {
|
||||
dispositifs_edit:
|
||||
"./src/Bundle/ChillJobBundle/src/Resources/public/module/dispositif_edit/index.js",
|
||||
personal_situation_edit:
|
||||
"./src/Bundle/ChillJobBundle/src/Resources/public/module/personal_situation/index.js",
|
||||
immersion_edit:
|
||||
"./src/Bundle/ChillJobBundle/src/Resources/public/module/immersion_edit/index.js",
|
||||
images: "./src/Bundle/ChillJobBundle/src/Resources/public/images/index.js",
|
||||
cs_cv:
|
||||
"./src/Bundle/ChillJobBundle/src/Resources/public/module/cv_edit/index.js",
|
||||
},
|
||||
};
|
||||
@@ -1,12 +1,12 @@
|
||||
@font-face {
|
||||
/*font-family: 'open_sanssemibold';*/
|
||||
font-family: 'Open Sans';
|
||||
src: url('opensans-semibold-webfont.eot');
|
||||
src: url('opensans-semibold-webfont.eot?#iefix') format('embedded-opentype'),
|
||||
url('opensans-semibold-webfont.woff2') format('woff2'),
|
||||
url('opensans-semibold-webfont.woff') format('woff'),
|
||||
url('opensans-semibold-webfont.ttf') format('truetype'),
|
||||
url('opensans-semibold-webfont.svg#open_sanssemibold') format('svg');
|
||||
src: url('./opensans-semibold-webfont.eot');
|
||||
src: url('./opensans-semibold-webfont.eot?#iefix') format('embedded-opentype'),
|
||||
url('./opensans-semibold-webfont.woff2') format('woff2'),
|
||||
url('./opensans-semibold-webfont.woff') format('woff'),
|
||||
url('./opensans-semibold-webfont.ttf') format('truetype'),
|
||||
url('./opensans-semibold-webfont.svg#open_sanssemibold') format('svg');
|
||||
font-weight: 600;
|
||||
font-style: normal;
|
||||
}
|
||||
@@ -14,12 +14,12 @@
|
||||
@font-face {
|
||||
/*font-family: 'open_sanssemibold_italic';*/
|
||||
font-family: 'Open Sans';
|
||||
src: url('opensans-semibolditalic-webfont.eot');
|
||||
src: url('opensans-semibolditalic-webfont.eot?#iefix') format('embedded-opentype'),
|
||||
url('opensans-semibolditalic-webfont.woff2') format('woff2'),
|
||||
url('opensans-semibolditalic-webfont.woff') format('woff'),
|
||||
url('opensans-semibolditalic-webfont.ttf') format('truetype'),
|
||||
url('opensans-semibolditalic-webfont.svg#open_sanssemibold_italic') format('svg');
|
||||
src: url('./opensans-semibolditalic-webfont.eot');
|
||||
src: url('./opensans-semibolditalic-webfont.eot?#iefix') format('embedded-opentype'),
|
||||
url('./opensans-semibolditalic-webfont.woff2') format('woff2'),
|
||||
url('./opensans-semibolditalic-webfont.woff') format('woff'),
|
||||
url('./opensans-semibolditalic-webfont.ttf') format('truetype'),
|
||||
url('./opensans-semibolditalic-webfont.svg#open_sanssemibold_italic') format('svg');
|
||||
font-weight: 600;
|
||||
font-style: italic;
|
||||
}
|
||||
@@ -27,12 +27,12 @@
|
||||
@font-face {
|
||||
/*font-family: 'open_sansitalic';*/
|
||||
font-family: 'Open Sans';
|
||||
src: url('opensans-italic-webfont.eot');
|
||||
src: url('opensans-italic-webfont.eot?#iefix') format('embedded-opentype'),
|
||||
url('opensans-italic-webfont.woff2') format('woff2'),
|
||||
url('opensans-italic-webfont.woff') format('woff'),
|
||||
url('opensans-italic-webfont.ttf') format('truetype'),
|
||||
url('opensans-italic-webfont.svg#open_sansitalic') format('svg');
|
||||
src: url('./opensans-italic-webfont.eot');
|
||||
src: url('./opensans-italic-webfont.eot?#iefix') format('embedded-opentype'),
|
||||
url('./opensans-italic-webfont.woff2') format('woff2'),
|
||||
url('./opensans-italic-webfont.woff') format('woff'),
|
||||
url('./opensans-italic-webfont.ttf') format('truetype'),
|
||||
url('./opensans-italic-webfont.svg#open_sansitalic') format('svg');
|
||||
font-weight: normal;
|
||||
font-style: italic;
|
||||
}
|
||||
@@ -40,12 +40,12 @@
|
||||
@font-face {
|
||||
/*font-family: 'open_sanslight';*/
|
||||
font-family: 'Open Sans';
|
||||
src: url('opensans-light-webfont.eot');
|
||||
src: url('opensans-light-webfont.eot?#iefix') format('embedded-opentype'),
|
||||
url('opensans-light-webfont.woff2') format('woff2'),
|
||||
url('opensans-light-webfont.woff') format('woff'),
|
||||
url('opensans-light-webfont.ttf') format('truetype'),
|
||||
url('opensans-light-webfont.svg#open_sanslight') format('svg');
|
||||
src: url('./opensans-light-webfont.eot');
|
||||
src: url('./opensans-light-webfont.eot?#iefix') format('embedded-opentype'),
|
||||
url('./opensans-light-webfont.woff2') format('woff2'),
|
||||
url('./opensans-light-webfont.woff') format('woff'),
|
||||
url('./opensans-light-webfont.ttf') format('truetype'),
|
||||
url('./opensans-light-webfont.svg#open_sanslight') format('svg');
|
||||
font-weight: 300;
|
||||
font-style: normal;
|
||||
}
|
||||
@@ -53,12 +53,12 @@
|
||||
@font-face {
|
||||
/*font-family: 'open_sanslight_italic';*/
|
||||
font-family: 'Open Sans';
|
||||
src: url('opensans-lightitalic-webfont.eot');
|
||||
src: url('opensans-lightitalic-webfont.eot?#iefix') format('embedded-opentype'),
|
||||
url('opensans-lightitalic-webfont.woff2') format('woff2'),
|
||||
url('opensans-lightitalic-webfont.woff') format('woff'),
|
||||
url('opensans-lightitalic-webfont.ttf') format('truetype'),
|
||||
url('opensans-lightitalic-webfont.svg#open_sanslight_italic') format('svg');
|
||||
src: url('./opensans-lightitalic-webfont.eot');
|
||||
src: url('./opensans-lightitalic-webfont.eot?#iefix') format('embedded-opentype'),
|
||||
url('./opensans-lightitalic-webfont.woff2') format('woff2'),
|
||||
url('./opensans-lightitalic-webfont.woff') format('woff'),
|
||||
url('./opensans-lightitalic-webfont.ttf') format('truetype'),
|
||||
url('./opensans-lightitalic-webfont.svg#open_sanslight_italic') format('svg');
|
||||
font-weight: 300;
|
||||
font-style: italic;
|
||||
}
|
||||
@@ -66,12 +66,12 @@
|
||||
@font-face {
|
||||
/*font-family: 'open_sansregular';*/
|
||||
font-family: 'Open Sans';
|
||||
src: url('opensans-regular-webfont.eot');
|
||||
src: url('opensans-regular-webfont.eot?#iefix') format('embedded-opentype'),
|
||||
url('opensans-regular-webfont.woff2') format('woff2'),
|
||||
url('opensans-regular-webfont.woff') format('woff'),
|
||||
url('opensans-regular-webfont.ttf') format('truetype'),
|
||||
url('opensans-regular-webfont.svg#open_sansregular') format('svg');
|
||||
src: url('./opensans-regular-webfont.eot');
|
||||
src: url('./opensans-regular-webfont.eot?#iefix') format('embedded-opentype'),
|
||||
url('./opensans-regular-webfont.woff2') format('woff2'),
|
||||
url('./opensans-regular-webfont.woff') format('woff'),
|
||||
url('./opensans-regular-webfont.ttf') format('truetype'),
|
||||
url('./opensans-regular-webfont.svg#open_sansregular') format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
@@ -79,12 +79,12 @@
|
||||
@font-face {
|
||||
/*font-family: 'open_sansbold';*/
|
||||
font-family: 'Open Sans';
|
||||
src: url('opensans-bold-webfont.eot');
|
||||
src: url('opensans-bold-webfont.eot?#iefix') format('embedded-opentype'),
|
||||
url('opensans-bold-webfont.woff2') format('woff2'),
|
||||
url('opensans-bold-webfont.woff') format('woff'),
|
||||
url('opensans-bold-webfont.ttf') format('truetype'),
|
||||
url('opensans-bold-webfont.svg#open_sansbold') format('svg');
|
||||
src: url('./opensans-bold-webfont.eot');
|
||||
src: url('./opensans-bold-webfont.eot?#iefix') format('embedded-opentype'),
|
||||
url('./opensans-bold-webfont.woff2') format('woff2'),
|
||||
url('./opensans-bold-webfont.woff') format('woff'),
|
||||
url('./opensans-bold-webfont.ttf') format('truetype'),
|
||||
url('./opensans-bold-webfont.svg#open_sansbold') format('svg');
|
||||
font-weight: bold;
|
||||
font-style: normal;
|
||||
}
|
||||
@@ -92,12 +92,12 @@
|
||||
@font-face {
|
||||
/*font-family: 'open_sansbold_italic';*/
|
||||
font-family: 'Open Sans';
|
||||
src: url('opensans-bolditalic-webfont.eot');
|
||||
src: url('opensans-bolditalic-webfont.eot?#iefix') format('embedded-opentype'),
|
||||
url('opensans-bolditalic-webfont.woff2') format('woff2'),
|
||||
url('opensans-bolditalic-webfont.woff') format('woff'),
|
||||
url('opensans-bolditalic-webfont.ttf') format('truetype'),
|
||||
url('opensans-bolditalic-webfont.svg#open_sansbold_italic') format('svg');
|
||||
src: url('./opensans-bolditalic-webfont.eot');
|
||||
src: url('./opensans-bolditalic-webfont.eot?#iefix') format('embedded-opentype'),
|
||||
url('./opensans-bolditalic-webfont.woff2') format('woff2'),
|
||||
url('./opensans-bolditalic-webfont.woff') format('woff'),
|
||||
url('./opensans-bolditalic-webfont.ttf') format('truetype'),
|
||||
url('./opensans-bolditalic-webfont.svg#open_sansbold_italic') format('svg');
|
||||
font-weight: bold;
|
||||
font-style: italic;
|
||||
|
||||
@@ -106,12 +106,12 @@
|
||||
@font-face {
|
||||
/*font-family: 'open_sansextrabold';*/
|
||||
font-family: 'Open Sans';
|
||||
src: url('opensans-extrabold-webfont.eot');
|
||||
src: url('opensans-extrabold-webfont.eot?#iefix') format('embedded-opentype'),
|
||||
url('opensans-extrabold-webfont.woff2') format('woff2'),
|
||||
url('opensans-extrabold-webfont.woff') format('woff'),
|
||||
url('opensans-extrabold-webfont.ttf') format('truetype'),
|
||||
url('opensans-extrabold-webfont.svg#open_sansextrabold') format('svg');
|
||||
src: url('./opensans-extrabold-webfont.eot');
|
||||
src: url('./opensans-extrabold-webfont.eot?#iefix') format('embedded-opentype'),
|
||||
url('./opensans-extrabold-webfont.woff2') format('woff2'),
|
||||
url('./opensans-extrabold-webfont.woff') format('woff'),
|
||||
url('./opensans-extrabold-webfont.ttf') format('truetype'),
|
||||
url('./opensans-extrabold-webfont.svg#open_sansextrabold') format('svg');
|
||||
font-weight: 800;
|
||||
font-style: normal;
|
||||
}
|
||||
@@ -119,12 +119,12 @@
|
||||
@font-face {
|
||||
/*font-family: 'open_sansextrabold_italic';*/
|
||||
font-family: 'Open Sans';
|
||||
src: url('opensans-extrabolditalic-webfont.eot');
|
||||
src: url('opensans-extrabolditalic-webfont.eot?#iefix') format('embedded-opentype'),
|
||||
url('opensans-extrabolditalic-webfont.woff2') format('woff2'),
|
||||
url('opensans-extrabolditalic-webfont.woff') format('woff'),
|
||||
url('opensans-extrabolditalic-webfont.ttf') format('truetype'),
|
||||
url('opensans-extrabolditalic-webfont.svg#open_sansextrabold_italic') format('svg');
|
||||
src: url('./opensans-extrabolditalic-webfont.eot');
|
||||
src: url('./opensans-extrabolditalic-webfont.eot?#iefix') format('embedded-opentype'),
|
||||
url('./opensans-extrabolditalic-webfont.woff2') format('woff2'),
|
||||
url('./opensans-extrabolditalic-webfont.woff') format('woff'),
|
||||
url('./opensans-extrabolditalic-webfont.ttf') format('truetype'),
|
||||
url('./opensans-extrabolditalic-webfont.svg#open_sansextrabold_italic') format('svg');
|
||||
font-weight: 800;
|
||||
font-style: italic;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,44 +4,49 @@
|
||||
*/
|
||||
|
||||
/// import jQuery
|
||||
const $ = require("jquery");
|
||||
global.$ = global.jQuery = $;
|
||||
import $ from "jquery";
|
||||
// expose jQuery globally for plugins expecting it
|
||||
window.$ = window.jQuery = $;
|
||||
|
||||
/// import select2
|
||||
const select2 = require("select2");
|
||||
global.select2 = select2;
|
||||
/// import select2 (relies on global jQuery)
|
||||
import "select2/dist/js/select2.full";
|
||||
window.select2 = window.select2 || window.$?.fn?.select2;
|
||||
|
||||
require("select2/dist/css/select2.css");
|
||||
require("select2-bootstrap-theme/dist/select2-bootstrap.css");
|
||||
import "select2/dist/css/select2.css";
|
||||
import "select2-bootstrap-theme/dist/select2-bootstrap.css";
|
||||
// Global vendor styles
|
||||
import "vue-multiselect/dist/vue-multiselect.css";
|
||||
import "vis-network/dist/dist/vis-network.min.css";
|
||||
|
||||
/*
|
||||
* Load Chill themes assets
|
||||
*/
|
||||
|
||||
require("./chillmain.scss");
|
||||
import "./chillmain.scss";
|
||||
|
||||
import { chill } from "./js/chill.js";
|
||||
global.chill = chill;
|
||||
// expose chill helper globally for legacy inline scripts
|
||||
window.chill = chill;
|
||||
|
||||
require("./js/date");
|
||||
require("./js/counter.js");
|
||||
import "./js/date";
|
||||
import "./js/counter.js";
|
||||
|
||||
/// Load fonts
|
||||
require("./fonts/OpenSans/OpenSans.scss");
|
||||
import "./fonts/OpenSans/OpenSans.scss";
|
||||
|
||||
/// Load images
|
||||
require("./img/favicon.ico");
|
||||
require("./img/logo-chill-sans-slogan_white.png");
|
||||
require("./img/logo-chill-outil-accompagnement_white.png");
|
||||
import "./img/favicon.ico";
|
||||
import "./img/logo-chill-sans-slogan_white.png";
|
||||
import "./img/logo-chill-outil-accompagnement_white.png";
|
||||
|
||||
/*
|
||||
* Load local libs
|
||||
* Some libs are only used in a few pages, they are loaded on a case by case basis
|
||||
*/
|
||||
|
||||
require("../lib/breadcrumb/index.js");
|
||||
require("../lib/download-report/index.js");
|
||||
require("../lib/select_interactive_loading/index.js");
|
||||
import "../lib/breadcrumb/index.js";
|
||||
import "../lib/download-report/index.js";
|
||||
import "../lib/select_interactive_loading/index.js";
|
||||
|
||||
//require('../lib/show_hide/index.js');
|
||||
//require('../lib/tabs/index.js');
|
||||
|
||||
@@ -1 +1 @@
|
||||
require("./layout.scss");
|
||||
import "./layout.scss";
|
||||
|
||||
@@ -14,5 +14,8 @@
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import { download_report } from "./download-report.js";
|
||||
|
||||
chill.download_report = require("./download-report.js");
|
||||
// Ensure global namespace exists, then expose for legacy usage
|
||||
window.chill = window.chill || {};
|
||||
window.chill.download_report = download_report;
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
require("./tabs.js");
|
||||
require("./tabs.scss");
|
||||
import "./tabs.js";
|
||||
import "./tabs.scss";
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
require("./blur.scss");
|
||||
import "./blur.scss";
|
||||
|
||||
document.querySelectorAll(".confidential").forEach(function (el) {
|
||||
let i = document.createElement("i");
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
// Compile all bootstrap assets from nodes-modules
|
||||
//require('bootstrap/scss/bootstrap.scss')
|
||||
|
||||
// Or compile bootstrap only enabled assets
|
||||
require("./bootstrap.scss");
|
||||
// Or compile bootstrap only enabled assets (use ESM import so Vite processes CSS in dev)
|
||||
import "./bootstrap.scss";
|
||||
|
||||
// You can specify which plugins you need
|
||||
import Dropdown from "bootstrap/js/src/dropdown";
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user