Chris@0
|
1 (($, { ajax, behaviors }) => {
|
Chris@0
|
2 behaviors.layoutBuilder = {
|
Chris@0
|
3 attach(context) {
|
Chris@0
|
4 $(context).find('.layout-builder--layout__region').sortable({
|
Chris@0
|
5 items: '> .draggable',
|
Chris@0
|
6 connectWith: '.layout-builder--layout__region',
|
Chris@0
|
7 placeholder: 'ui-state-drop',
|
Chris@0
|
8
|
Chris@0
|
9 /**
|
Chris@0
|
10 * Updates the layout with the new position of the block.
|
Chris@0
|
11 *
|
Chris@0
|
12 * @param {jQuery.Event} event
|
Chris@0
|
13 * The jQuery Event object.
|
Chris@0
|
14 * @param {Object} ui
|
Chris@0
|
15 * An object containing information about the item being sorted.
|
Chris@0
|
16 */
|
Chris@0
|
17 update(event, ui) {
|
Chris@0
|
18 // Check if the region from the event and region for the item match.
|
Chris@0
|
19 const itemRegion = ui.item.closest('.layout-builder--layout__region');
|
Chris@0
|
20 if (event.target === itemRegion[0]) {
|
Chris@0
|
21 // Find the destination delta.
|
Chris@0
|
22 const deltaTo = ui.item.closest('[data-layout-delta]').data('layout-delta');
|
Chris@0
|
23 // If the block didn't leave the original delta use the destination.
|
Chris@0
|
24 const deltaFrom = ui.sender ? ui.sender.closest('[data-layout-delta]').data('layout-delta') : deltaTo;
|
Chris@0
|
25 ajax({
|
Chris@0
|
26 url: [
|
Chris@0
|
27 ui.item.closest('[data-layout-update-url]').data('layout-update-url'),
|
Chris@0
|
28 deltaFrom,
|
Chris@0
|
29 deltaTo,
|
Chris@0
|
30 itemRegion.data('region'),
|
Chris@0
|
31 ui.item.data('layout-block-uuid'),
|
Chris@0
|
32 ui.item.prev('[data-layout-block-uuid]').data('layout-block-uuid'),
|
Chris@0
|
33 ]
|
Chris@0
|
34 .filter(element => element !== undefined)
|
Chris@0
|
35 .join('/'),
|
Chris@0
|
36 }).execute();
|
Chris@0
|
37 }
|
Chris@0
|
38 },
|
Chris@0
|
39 });
|
Chris@0
|
40 },
|
Chris@0
|
41 };
|
Chris@0
|
42 })(jQuery, Drupal);
|