Commit 10618fbd authored by George's avatar George
Browse files

Issue #3310506: Initial changes for ajax block refresh configuration/js.

parent 1b62d20e
Loading
Loading
Loading
Loading
+101 −91
Original line number Diff line number Diff line
@@ -7,7 +7,6 @@
      let ajaxBlockHandler = function ($block) {
        // Make sure we have block.
        let blockId = $block.data('block-ajax-id');
        if (blockId && drupalSettings.block_ajax.blocks[blockId] !== undefined) {
        let pluginId = $block.data('block-ajax-plugin-id');
        if (!pluginId) {
          return;
@@ -74,8 +73,12 @@
          // Remove contextual-region class and move to inside.
          $blockParent.addClass('block-ajax-processed').removeClass('contextual-region');

            // Replace block content.
          // Replacing block contents.
          if (drupalSettings.block_ajax.blocks[blockId].block_ajax.refresh_block) {
            $block.html(data.content);
          } else {
            $block.replaceWith(data.content);
          }

          // Move contextual links inside new block content.
          $('.contextual', $blockParent).prependTo($('.block-ajax-block', $blockParent));
@@ -106,22 +109,29 @@
          // Throw console log error.
          console.log("Ajax Block: " + blockId + " request failed: " + textStatus);
        });
        }
      };
      /**
       * Initialize and loop over Ajax blocks.
       */
      $(once('block_ajax', '[data-block-ajax-id]', context)).each(function () {
        let $block = $(this);

        // Load in block via AJAX
        let blockId = $block.data('block-ajax-id');
        if (blockId && drupalSettings.block_ajax.blocks[blockId] !== undefined) {
          // 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.
            ajaxBlockHandler($block);

        // On RefreshAjaxBlock event
            // On RefreshAjaxBlock event.
            $block.on('RefreshAjaxBlock', function () {
              // Execute the handler payload.
              ajaxBlockHandler($(this));
            });
          }
        }
      });
    },
    detach: function (context) {
+27 −1
Original line number Diff line number Diff line
@@ -134,12 +134,38 @@ class AjaxBlockForm extends BlockForm {
      ],
    ];

    $form['settings']['block_ajax']['refresh_block'] = [
      '#type' => 'checkbox',
      '#title' => $this->t('Refresh block'),
      '#description' => $this->t('If checked, block will be refreshed on set interval.'),
      '#default_value' => $settings['block_ajax']['refresh_block'] ?? FALSE,
      '#states' => [
        'visible' => [
          ':input[name="settings[block_ajax][is_ajax]"]' => ['checked' => TRUE],
        ],
      ],
    ];

    $form['settings']['block_ajax']['refresh_interval'] = [
      '#type' => 'number',
      '#title' => $this->t('Refresh interval'),
      '#description' => $this->t('Refresh interval in milliseconds.'),
      '#default_value' => $settings['block_ajax']['refresh_interval'] ?? 5000,
      '#min' => 0,
      '#states' => [
        'visible' => [
          ':input[name="settings[block_ajax][is_ajax]"]' => ['checked' => TRUE],
          ':input[name="settings[block_ajax][refresh_block]"]' => ['checked' => TRUE],
        ],
      ],
    ];

    // Ajax defaults form elements.
    $form['settings']['block_ajax']['ajax_defaults'] = [
      '#type' => 'details',
      '#title' => $this->t('Ajax defaults'),
      '#description' => $this->t('Configure settings for Ajax defaults.'),
      '#open' => TRUE,
      '#open' => FALSE,
      '#states' => [
        'visible' => [
          ':input[name="settings[block_ajax][is_ajax]"]' => ['checked' => TRUE],