Changelog
phil/block-editor-bundleAll notable changes to phil/block-editor-bundle will be documented in this file.
Updates should follow the Keep a CHANGELOG principles.
0.1.0-alpha - 2026-11-11
Added
Toolset: the block types and inline tools a field offers, named asphil/ujonames them, with thefullandreducedpresets;InvalidToolsetfor an unknown tool or preset, or a toolset without paragraphs.ToolsetNormalizers: onephil/ujonormalizer per toolset, on the application's block type registry, refusing the block types the toolset leaves out and unwrapping its inline elements.DocumentReferences: the mentions, page links and file addresses of a document, for usage tracking.PhilBlockEditorBundle, configured underphil_block_editor:preset,tools,inline_tools,colors,image_uploader,mention_search,link_search,max_upload_bytesandaccess; the editor's CSRF token added to the stateless ones of FrameworkBundle, andCsrfProtectionPass, which stops the container with a message whenframework.csrf_protectionis false; the controller and the stylesheet mapped for AssetMapper.BlockEditorTypeandBlockEditorTransformer: the editor as a form field, its JSON checked by the application'sUjoand narrowed to the toolset, kept as canonical JSON or aDocument, a document without blocks being no value; options for the preset, the tools, read-only mode, the placeholder, the locale, the labels, the colours, the endpoints and foreign blocks; the name of the CSRF cookie given to the editor.- The form theme
@PhilBlockEditor/form/block_editor.html.twig, added to Twig's: the hidden input, the editor's element and its live region, and a label the editor refers to. ImageUploader,ImageUpload,UploadedImageandUploadRefused: the port behind image uploads, andImageUploadController, answering as the Editor.js image tool expects.ReferenceSearchandSuggestion: the port behind the@and[[menus,InvalidSuggestion, andReferenceSearchController.EditorRequestandEndpoints: theaccessattribute,IS_AUTHENTICATEDby default, granted by the application's authorization checker before the uploader or a search is called, every call refused without one, none checked when it is null; the editor's own header, the browser'sSec-Fetch-Siteand Symfony's stateless CSRF check of the tokenphil_block_editoron the upload, theGETsearches carrying none, and the endpoints' URLs given to the editor when their service is configured and their routes imported; the routes inconfig/routes.php.- The
editorStimulus controller: blocks edited in place and written back as UJO, the slash menu, the + button, drag handles, the block menu (turn into, type actions, duplicate, move, delete), block selection, the inline toolbar (bold, italic, underline, strikethrough, inline code, link, highlight, colour, superscript, subscript), keyboard shortcuts and Markdown-like marks, undo and redo, nested lists, tables, toggles and columns,@mentions and[[page links, image uploads by button, drop or paste, clean paste from Word, Google Docs and HTML, blocks of other types kept as they are, read-only mode, labels in English and French, a new CSRF token sent with each upload. Writing together: thefocusevent for the block the writer is in, and thephil-block-editor:apply,removeandlockevents, by which a collaboration controller puts in place the blocks other writers save, removes those they remove, and closes those they hold. - The pure modules of the controller — inline sanitizer, paste reader, document model with the placing of a block saved elsewhere, tools, menus, keyboard, labels, the double-submitted CSRF token — and their tests under Node's test runner.
- The stylesheet
block-editor.css, on custom properties that follow PHIL UX or the page's own colours. - The documentation in
doc/, one file per topic, indexed by the README. CONTRIBUTING.md,SECURITY.mdandCODE_OF_CONDUCT.md.