Element::preRenderTextFormat(array $element)
Additional #pre_render callback for 'text_format' elements.
File
- core/modules/editor/src/Element.php, line 35
Class
- Element
- Defines a service for Text Editor's render elements.
Namespace
Drupal\editor
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | function preRenderTextFormat( array $element ) { // Allow modules to programmatically enforce no client-side editor by // setting the #editor property to FALSE. if (isset( $element [ '#editor' ]) && ! $element [ '#editor' ]) { return $element ; } // filter_process_format() copies properties to the expanded 'value' child // element, including the #pre_render property. Skip this text format // widget, if it contains no 'format'. if (!isset( $element [ 'format' ])) { return $element ; } $format_ids = array_keys ( $element [ 'format' ][ 'format' ][ '#options' ]); // Early-return if no text editor is associated with any of the text formats. $editors = Editor::loadMultiple( $format_ids ); foreach ( $editors as $key => $editor ) { $definition = $this ->pluginManager->getDefinition( $editor ->getEditor()); if (!in_array( $element [ '#base_type' ], $definition [ 'supported_element_types' ])) { unset( $editors [ $key ]); } } if ( count ( $editors ) === 0) { return $element ; } // Use a hidden element for a single text format. $field_id = $element [ 'value' ][ '#id' ]; if (! $element [ 'format' ][ 'format' ][ '#access' ]) { // Use the first (and only) available text format. $format_id = $format_ids [0]; $element [ 'format' ][ 'editor' ] = array ( '#type' => 'hidden' , '#name' => $element [ 'format' ][ 'format' ][ '#name' ], '#value' => $format_id , '#attributes' => array ( 'data-editor-for' => $field_id , ), ); } // Otherwise, attach to text format selector. else { $element [ 'format' ][ 'format' ][ '#attributes' ][ 'class' ][] = 'editor' ; $element [ 'format' ][ 'format' ][ '#attributes' ][ 'data-editor-for' ] = $field_id ; } // Hide the text format's filters' guidelines of those text formats that have // a text editor associated: they're rather useless when using a text editor. foreach ( $editors as $format_id => $editor ) { $element [ 'format' ][ 'guidelines' ][ $format_id ][ '#access' ] = FALSE; } // Attach Text Editor module's (this module) library. $element [ '#attached' ][ 'library' ][] = 'editor/drupal.editor' ; // Attach attachments for all available editors. $element [ '#attached' ] = BubbleableMetadata::mergeAttachments( $element [ '#attached' ], $this ->pluginManager->getAttachments( $format_ids )); // Apply XSS filters when editing content if necessary. Some types of text // editors cannot guarantee that the end user won't become a victim of XSS. if (! empty ( $element [ 'value' ][ '#value' ])) { $original = $element [ 'value' ][ '#value' ]; $format = FilterFormat::load( $element [ 'format' ][ 'format' ][ '#value' ]); // Ensure XSS-safety for the current text format/editor. $filtered = editor_filter_xss( $original , $format ); if ( $filtered !== FALSE) { $element [ 'value' ][ '#value' ] = $filtered ; } // Only when the user has access to multiple text formats, we must add data- // attributes for the original value and change tracking, because they are // only necessary when the end user can switch between text formats/editors. if ( $element [ 'format' ][ 'format' ][ '#access' ]) { $element [ 'value' ][ '#attributes' ][ 'data-editor-value-is-changed' ] = 'false' ; $element [ 'value' ][ '#attributes' ][ 'data-editor-value-original' ] = $original ; } } return $element ; } |
Please login to continue.