survos / js-twig-bundle
wrap the jstwig library in a Symfony UX component
Fund package maintenance!
kbond
Installs: 258
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 4
Forks: 0
Open Issues: 1
Language:JavaScript
Type:symfony-bundle
Requires
- php: ^8.3
- survos/core-bundle: ^1.5
- symfony/config: ^6.4 || ^7.1
- symfony/dependency-injection: ^6.4 || ^7.1
- symfony/dom-crawler: ^6.4 || ^7.1
- symfony/http-kernel: ^6.4 || ^7.1
- symfony/ux-twig-component: ^2.8
- twig/twig: ^3.4
Requires (Dev)
- phpstan/phpstan: ^2.0
- symfony/browser-kit: ^6.4 || ^7.1
- symfony/framework-bundle: ^6.4 || ^7.1
- symfony/phpunit-bridge: ^6.4 || ^7.1
- symfony/twig-bundle: ^6.4 || ^7.1
- symfony/var-dumper: ^6.4 || ^7.1
- dev-main
- 1.5.442
- 1.5.441
- 1.5.440
- 1.5.439
- 1.5.438
- 1.5.437
- 1.5.436
- 1.5.435
- 1.5.434
- 1.5.433
- 1.5.432
- 1.5.431
- 1.5.430
- 1.5.429
- 1.5.428
- 1.5.427
- 1.5.426
- 1.5.425
- 1.5.424
- 1.5.423
- 1.5.422
- 1.5.421
- 1.5.420
- 1.5.419
- 1.5.418
- 1.5.417
- 1.5.416
- 1.5.415
- 1.5.414
- 1.5.413
- 1.5.412
- 1.5.411
- 1.5.410
- 1.5.409
- 1.5.408
- 1.5.407
- 1.5.406
- 1.5.405
- 1.5.404
- 1.5.403
- 1.5.402
- 1.5.401
- 1.5.400
- 1.5.399
- 1.5.398
- 1.5.397
- 1.5.396
- 1.5.395
- 1.5.394
- 1.5.393
- 1.5.392
- 1.5.391
- 1.5.390
- 1.5.389
- 1.5.388
- 1.5.387
- 1.5.386
- 1.5.385
- 1.5.384
- 1.5.383
- 1.5.382
- 1.5.381
- 1.5.380
- 1.5.379
- 1.5.378
- 1.5.377
- 1.5.376
- 1.5.375
- 1.5.374
- 1.5.373
- 1.5.372
- 1.5.371
- 1.5.370
- 1.5.369
- 1.5.368
- 1.5.367
- 1.5.366
- 1.5.365
- 1.5.364
- 1.5.363
- 1.5.362
- 1.5.361
- 1.5.360
- 1.5.359
- 1.5.358
- 1.5.357
- 1.5.356
- 1.5.355
- 1.5.354
- 1.5.353
- 1.5.352
- 1.5.351
- 1.5.350
- 1.5.345
- 1.5.344
- 1.5.343
- 1.5.342
- 1.5.341
- 1.5.340
- 1.5.339
- 1.5.338
- 1.5.337
- 1.5.336
- 1.5.335
- 1.5.334
- 1.5.333
- 1.5.332
- 1.5.331
- 1.5.330
- 1.5.329
- 1.5.328
- 1.5.327
- 1.5.326
- 1.5.325
- 1.5.324
- 1.5.323
- 1.5.322
- 1.5.321
- 1.5.320
- 1.5.319
- 1.5.318
- 1.5.317
- 1.5.316
- 1.5.315
- 1.5.314
- 1.5.313
- 1.5.312
- 1.5.311
- 1.5.310
- 1.5.309
- 1.5.308
- 1.5.307
- 1.5.306
- 1.5.305
- 1.5.304
- 1.5.303
- 1.5.302
- 1.5.301
- 1.5.300
- 1.5.299
- 1.5.298
- 1.5.297
- 1.5.296
- 1.5.295
- 1.5.294
- 1.5.293
- 1.5.292
- 1.5.291
- 1.5.290
- 1.5.289
- 1.5.288
- 1.5.287
- 1.5.286
- 1.5.285
- 1.5.284
- 1.5.283
- 1.5.282
- 1.5.281
- 1.5.280
- 1.5.279
- 1.5.278
- 1.5.277
- 1.5.276
- 1.5.275
- 1.5.274
- 1.5.273
- 1.5.272
- 1.5.271
- 1.5.270
- 1.5.269
- 1.5.268
- 1.5.267
- 1.5.266
- 1.5.265
- 1.5.264
- 1.5.263
- 1.5.262
- 1.5.261
- 1.5.260
- 1.5.259
- 1.5.258
- 1.5.257
- 1.5.256
- 1.5.255
- 1.5.254
- 1.5.253
- 1.5.252
- 1.5.251
- 1.5.250
- 1.5.249
- 1.5.248
- 1.5.247
- 1.5.246
- 1.5.245
- 1.5.244
- 1.5.243
- 1.5.242
- 1.5.241
- 1.5.240
- 1.5.239
- 1.5.238
- 1.5.237
- 1.5.236
- 1.5.235
- 1.5.234
- 1.5.233
- 1.5.232
- 1.5.231
- 1.5.230
- 1.5.229
- 1.5.228
- 1.5.227
- 1.5.226
- 1.5.225
- 1.5.224
- 1.5.223
- 1.5.222
- 1.5.221
- 1.5.220
- 1.5.219
- 1.5.218
- 1.5.217
- 1.5.216
- 1.5.215
- 1.5.214
- 1.5.213
- 1.5.212
- 1.5.211
- 1.5.210
- 1.5.209
- 1.5.208
- 1.5.207
- 1.5.206
- 1.5.205
- 1.5.204
- 1.5.203
This package is auto-updated.
Last update: 2024-12-18 12:31:07 UTC
README
Wraps https://www.jsdelivr.com/package/npm/twig and https://www.jsdelivr.com/package/npm/dexie in a Symfony UX component and provides utilties for using twig blocks in javascript.
dexie_controller needs to load a database, as well as fetch individual items and a filtered list.
- Load: /api/pokemon and populate the dexie
When rendering a template, it listens for an event (the tab or page load event), and needs to grab the data before passing it to the renderer. For example:
- items: get all the items from a list
- saved: get items with the saved property as true
- item: look up an item by id
Of course, dexie itself doesn't know about pokemon, it only knows that there is a database. Currently to get things like the filter, it calls app_controller (via an outlet). This is overly complicated, all of the outlet calls should be replaced with simple CustomEvents, which app_controller (or some other javascript) can listen to.
Brainstorming
Load the database
when dexie controller is called, it receives a database name and a filter for loading. (We will later need a dynamic filter for displaying).
This needs to be sync
with an event emitted so that a loader can display a progress bar (at the app level).
Displaying a list
Here's an example call to dexie.
@todo: rename templates, e.g. list_template, item_template, header_template
<twig:dexie refreshEvent="items.prechange" type: 'list' :store="store" :globals="globals" :filter="{}" :caller="_self"> <twig:block name="twig_template" id="end_of_template"> <ons-list> {% for row in rows %} {% set thumb = '/media/cache/small/%s/%s'|format(row.code, row.image) %} <ons-list-item class="list-item" tappable {{ stimulus_action('app','open_page','click', { page: 'player', store: 'items', id: row.id }) }} > <div class="top list-item__top"> <div class="left list-item__left"> <img class="ons-mobile-thumbnail" src="{{ thumb }}" alt="{{ thumb }}"/> </div> <div class="xcenter xlist-item__center"> <h3> {{ row.label }} </h3> <div style="margin: 4px"> {{ row.size }} </div> </div> <div class="right list-item__right"> {{ row.year }} <br /> ${{ row.price|number_format(0, ",", ".") }} </div> </div> </ons-list-item> {% endfor %} </ons-list> <!-- end_of_template --> </twig:block> </twig:dexie>
Properties
refreshEvent="items.prechange"
listen for this event to fire the controller
type: 'list'
The type determines which twig templates are called and what filters are applied.
:store="store"
The name of the database, as defined in survos_js_twig.yaml
:globals="globals"
We can pass globals to the renderer, like icons and other values that can't be rendered directly because it's jstwig, not twig.
:filter="{}"
The filter for loading the database (not the dynamic display)
:caller="_self"
We need this to extract the twig templates from the source file itself.
JSTwg Templates
The templates are defined at application level, they are rendered and then dispatch CustomEvents with the rendered values. type
determines what values are passed to the rendering (item, list).