public EditorImageDialog::buildForm(array $form, FormStateInterface $form_state, Editor$editor= NULL)
Parameters
\Drupal\editor\Entity\Editor $editor: The text editor to which this dialog corresponds.
Overrides FormInterface::buildForm
File
- core/modules/editor/src/Form/EditorImageDialog.php, line 60
Class
- EditorImageDialog
- Provides an image dialog for text editors.
Namespace
Drupal\editor\Form
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 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | public function buildForm( array $form , FormStateInterface $form_state , Editor $editor = NULL) { // This form is special, in that the default values do not come from the // server side, but from the client side, from a text editor. We must cache // this data in form state, because when the form is rebuilt, we will be // receiving values from the form, instead of the values from the text // editor. If we don't cache it, this data will be lost. if (isset( $form_state ->getUserInput()[ 'editor_object' ])) { // By convention, the data that the text editor sends to any dialog is in // the 'editor_object' key. And the image dialog for text editors expects // that data to be the attributes for an <img> element. $image_element = $form_state ->getUserInput()[ 'editor_object' ]; $form_state ->set( 'image_element' , $image_element ); $form_state ->setCached(TRUE); } else { // Retrieve the image element's attributes from form state. $image_element = $form_state ->get( 'image_element' ) ? : []; } $form [ '#tree' ] = TRUE; $form [ '#attached' ][ 'library' ][] = 'editor/drupal.editor.dialog' ; $form [ '#prefix' ] = '<div id="editor-image-dialog-form">' ; $form [ '#suffix' ] = '</div>' ; // Construct strings to use in the upload validators. $image_upload = $editor ->getImageUploadSettings(); if (! empty ( $image_upload [ 'max_dimensions' ][ 'width' ]) || ! empty ( $image_upload [ 'max_dimensions' ][ 'height' ])) { $max_dimensions = $image_upload [ 'max_dimensions' ][ 'width' ] . 'x' . $image_upload [ 'max_dimensions' ][ 'height' ]; } else { $max_dimensions = 0; } $max_filesize = min(Bytes::toInt( $image_upload [ 'max_size' ]), file_upload_max_size()); $existing_file = isset( $image_element [ 'data-entity-uuid' ]) ? \Drupal::entityManager()->loadEntityByUuid( 'file' , $image_element [ 'data-entity-uuid' ]) : NULL; $fid = $existing_file ? $existing_file ->id() : NULL; $form [ 'fid' ] = array ( '#title' => $this ->t( 'Image' ), '#type' => 'managed_file' , '#upload_location' => $image_upload [ 'scheme' ] . '://' . $image_upload [ 'directory' ], '#default_value' => $fid ? array ( $fid ) : NULL, '#upload_validators' => array ( 'file_validate_extensions' => array ( 'gif png jpg jpeg' ), 'file_validate_size' => array ( $max_filesize ), 'file_validate_image_resolution' => array ( $max_dimensions ), ), '#required' => TRUE, ); $form [ 'attributes' ][ 'src' ] = array ( '#title' => $this ->t( 'URL' ), '#type' => 'textfield' , '#default_value' => isset( $image_element [ 'src' ]) ? $image_element [ 'src' ] : '' , '#maxlength' => 2048, '#required' => TRUE, ); // If the editor has image uploads enabled, show a managed_file form item, // otherwise show a (file URL) text form item. if ( $image_upload [ 'status' ]) { $form [ 'attributes' ][ 'src' ][ '#access' ] = FALSE; $form [ 'attributes' ][ 'src' ][ '#required' ] = FALSE; } else { $form [ 'fid' ][ '#access' ] = FALSE; $form [ 'fid' ][ '#required' ] = FALSE; } // The alt attribute is *required*, but we allow users to opt-in to empty // alt attributes for the very rare edge cases where that is valid by // specifying two double quotes as the alternative text in the dialog. // However, that *is* stored as an empty alt attribute, so if we're editing // an existing image (which means the src attribute is set) and its alt // attribute is empty, then we show that as two double quotes in the dialog. $alt = isset( $image_element [ 'alt' ]) ? $image_element [ 'alt' ] : '' ; if ( $alt === '' && ! empty ( $image_element [ 'src' ])) { $alt = '""' ; } $form [ 'attributes' ][ 'alt' ] = array ( '#title' => $this ->t( 'Alternative text' ), '#placeholder' => $this ->t( 'Short description for the visually impaired' ), '#type' => 'textfield' , '#required' => TRUE, '#required_error' => $this ->t( 'Alternative text is required.<br />(Only in rare cases should this be left empty. To create empty alternative text, enter <code>""</code> — two double quotes without any content).' ), '#default_value' => $alt , '#maxlength' => 2048, ); // When Drupal core's filter_align is being used, the text editor may // offer the ability to change the alignment. if (isset( $image_element [ 'data-align' ]) && $editor ->getFilterFormat()->filters( 'filter_align' )->status) { $form [ 'align' ] = array ( '#title' => $this ->t( 'Align' ), '#type' => 'radios' , '#options' => array ( 'none' => $this ->t( 'None' ), 'left' => $this ->t( 'Left' ), 'center' => $this ->t( 'Center' ), 'right' => $this ->t( 'Right' ), ), '#default_value' => $image_element [ 'data-align' ] === '' ? 'none' : $image_element [ 'data-align' ], '#wrapper_attributes' => array ( 'class' => array ( 'container-inline' )), '#attributes' => array ( 'class' => array ( 'container-inline' )), '#parents' => array ( 'attributes' , 'data-align' ), ); } // When Drupal core's filter_caption is being used, the text editor may // offer the ability to in-place edit the image's caption: show a toggle. if (isset( $image_element [ 'hasCaption' ]) && $editor ->getFilterFormat()->filters( 'filter_caption' )->status) { $form [ 'caption' ] = array ( '#title' => $this ->t( 'Caption' ), '#type' => 'checkbox' , '#default_value' => $image_element [ 'hasCaption' ] === 'true' , '#parents' => array ( 'attributes' , 'hasCaption' ), ); } $form [ 'actions' ] = array ( '#type' => 'actions' , ); $form [ 'actions' ][ 'save_modal' ] = array ( '#type' => 'submit' , '#value' => $this ->t( 'Save' ), // No regular submit-handler. This form only works via JavaScript. '#submit' => array (), '#ajax' => array ( 'callback' => '::submitForm' , 'event' => 'click' , ), ); return $form ; } |
Please login to continue.