Commit c4896b15 authored by George's avatar George
Browse files

Issue #3284033 - Allow ajax block to be loaded via button.

parent dc12bbcd
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -118,14 +118,18 @@
        let $block = $(this);
        let blockId = $block.data('block-ajax-id');
        if (blockId && drupalSettings.block_ajax.blocks[blockId] !== undefined) {
          // Load block via button.
          if (drupalSettings.block_ajax.blocks[blockId].block_ajax.load_button) {
            $('#block-ajax-button-' + blockId).on('click', function() {
              ajaxBlockHandler($block);
            });
          } else if (drupalSettings.block_ajax.blocks[blockId].block_ajax.refresh_block) {
            // Refresh ajax block on set interval.
          if (drupalSettings.block_ajax.blocks[blockId].block_ajax.refresh_block) {
            let refreshInterval = drupalSettings.block_ajax.blocks[blockId].block_ajax.refresh_interval;
            setInterval(ajaxBlockHandler, refreshInterval, $block);
          } else {
            // Load in block via AJAX on page load.
            // Load in block via AJAX on page load (default operation).
            ajaxBlockHandler($block);

            // On RefreshAjaxBlock event.
            $block.on('RefreshAjaxBlock', function () {
              // Execute the handler payload.
+29 −0
Original line number Diff line number Diff line
@@ -134,6 +134,33 @@ class AjaxBlockForm extends BlockForm {
      ],
    ];

    $form['settings']['block_ajax']['load_button'] = [
      '#type' => 'checkbox',
      '#title' => $this->t('Load block via button'),
      '#description' => $this->t('If checked, button will be rendered in place and used to trigger Ajax loading of block.'),
      '#default_value' => $settings['block_ajax']['load_button'] ?? FALSE,
      '#states' => [
        'visible' => [
          ':input[name="settings[block_ajax][is_ajax]"]' => ['checked' => TRUE],
          ':input[name="settings[block_ajax][refresh_block]"]' => ['checked' => FALSE],
        ],
      ],
    ];

    $form['settings']['block_ajax']['load_button_text'] = [
      '#type' => 'textfield',
      '#title' => $this->t('Load button text'),
      '#description' => $this->t('Set the text used for load button.'),
      '#default_value' => $settings['block_ajax']['load_button_text'] ?? 'Load block',
      '#size' => 30,
      '#states' => [
        'visible' => [
          ':input[name="settings[block_ajax][is_ajax]"]' => ['checked' => TRUE],
          ':input[name="settings[block_ajax][load_button]"]' => ['checked' => TRUE],
        ],
      ],
    ];

    $form['settings']['block_ajax']['refresh_block'] = [
      '#type' => 'checkbox',
      '#title' => $this->t('Refresh block'),
@@ -142,6 +169,7 @@ class AjaxBlockForm extends BlockForm {
      '#states' => [
        'visible' => [
          ':input[name="settings[block_ajax][is_ajax]"]' => ['checked' => TRUE],
          ':input[name="settings[block_ajax][load_button]"]' => ['checked' => FALSE],
        ],
      ],
    ];
@@ -156,6 +184,7 @@ class AjaxBlockForm extends BlockForm {
        'visible' => [
          ':input[name="settings[block_ajax][is_ajax]"]' => ['checked' => TRUE],
          ':input[name="settings[block_ajax][refresh_block]"]' => ['checked' => TRUE],
          ':input[name="settings[block_ajax][load_button]"]' => ['checked' => FALSE],
        ],
      ],
    ];
+3 −0
Original line number Diff line number Diff line
@@ -20,5 +20,8 @@
       data-block-ajax-provider="{{ block_settings.provider }}"
       data-block-ajax-placeholder="{{ block_settings.block_ajax.placeholder }}"
       data-block-ajax-show-spinner="{{ block_settings.block_ajax.show_spinner }}">
    {% if block_settings.block_ajax.load_button %}
      <button id="block-ajax-button-{{ block_ajax_id }}" class="block-ajax-button" type="button">{{ block_settings.block_ajax.load_button_text|t }}</button>
    {% endif %}
  </div>
</div>