Version 1
[yaffs-website] / web / modules / contrib / entity_browser / js / entity_browser.multi_step_display.js
1 /**
2  * @file entity_browser.multi_step_display.js
3  */
4
5 (function ($, Drupal) {
6
7   'use strict';
8
9   /**
10    * Registers behaviours related to selected entities.
11    */
12   Drupal.behaviors.entityBrowserMultiStepDisplay = {
13     attach: function (context) {
14       var $entities = $(context).find('.entities-list');
15       $entities.sortable({
16         stop: Drupal.entityBrowserMultiStepDisplay.entitiesReordered
17       });
18
19       // Register add/remove entities event handlers.
20       $entities.once('register-add-entities')
21         .bind('add-entities', Drupal.entityBrowserMultiStepDisplay.addEntities);
22
23       $entities.once('register-remove-entities')
24         .bind('remove-entities', Drupal.entityBrowserMultiStepDisplay.removeEntities);
25
26       // Register event for remove button to use AJAX event.
27       var $remove_buttons = $entities.find('.entity-browser-remove-selected-entity');
28       $remove_buttons.once('register-click').on('click', function (event) {
29         event.preventDefault();
30
31         var button_element = $(event.target);
32         var remove_entity_id = button_element.attr('data-remove-entity') + '_' + button_element.attr('data-row-id');
33
34         $entities.trigger('remove-entities', [[remove_entity_id]]);
35       });
36
37       // Add a toggle button for the display of selected entities.
38       var $toggle = $('.entity-browser-show-selection');
39
40       function setToggleText() {
41         if($entities.css('display') == 'none') {
42           $toggle.val(Drupal.t('Show selected'));
43         } else {
44           $toggle.val(Drupal.t('Hide selected'));
45         }
46       }
47
48       if ($entities.length > 0) {
49         $toggle.once('register-click').on('click', function (e) {
50           e.preventDefault();
51           $entities.slideToggle('fast', setToggleText);
52         });
53
54         setToggleText();
55       }
56     }
57   };
58
59   Drupal.entityBrowserMultiStepDisplay = {};
60
61   /**
62    * Reacts on sorting of the entities.
63    *
64    * @param {object} event
65    *   Event object.
66    * @param {object} ui
67    *   Object with detailed information about the sort event.
68    */
69   Drupal.entityBrowserMultiStepDisplay.entitiesReordered = function (event, ui) {
70     var items = $(this).find('.item-container');
71     for (var i = 0; i < items.length; i++) {
72       $(items[i]).find('.weight').val(i);
73     }
74   };
75
76   /**
77    * Remove entities from selection of multistep display.
78    *
79    * @param {object} event
80    *   Event object.
81    * @param {Array} entity_ids
82    *   Entity IDs that should be removed from selection.
83    */
84   Drupal.entityBrowserMultiStepDisplay.removeEntities = function (event, entity_ids) {
85     var entities_list = $(this);
86     var i;
87
88     for (i = 0; i < entity_ids.length; i++) {
89       // Remove dom element, and queue entity for removal in backend.
90       var element_selector = '[data-drupal-selector="edit-selected-'.concat(entity_ids[i].replace(/_/g, '-'), '"]');
91       entities_list.find(element_selector).remove();
92
93       Drupal.entityBrowserCommandQueue.queueCommand(
94         'remove',
95         {
96           entity_id: entity_ids[i]
97         }
98       );
99
100       // Remove action buttons, if there are no more entities selected.
101       if (entities_list.children().length === 0) {
102         entities_list.siblings('.entity-browser-use-selected').remove();
103         entities_list.siblings('.entity-browser-show-selection').remove();
104       }
105     }
106
107     entities_list.siblings('[name=ajax_commands_handler]').trigger('execute-commands', [true]);
108   };
109
110   /**
111    * Add entities into selection of multistep display.
112    *
113    * @param {object} event
114    *   Event object.
115    * @param {Array} entity_ids
116    *   Entity ID that should be added to selection.
117    */
118   Drupal.entityBrowserMultiStepDisplay.addEntities = function (event, entity_ids) {
119     var entities_list = $(this);
120     var i;
121
122     for (i = 0; i < entity_ids.length; i++) {
123       // Add proxy element that will be replaced with returned Ajax Command.
124       var proxy_element = $('<div></div>').uniqueId();
125       entities_list.append(proxy_element);
126
127       Drupal.entityBrowserCommandQueue.queueCommand(
128         'add',
129         {
130           entity_id: entity_ids[i],
131           proxy_id: proxy_element.attr('id')
132         }
133       );
134     }
135
136     entities_list.siblings('[name=ajax_commands_handler]').trigger('execute-commands', [true]);
137   };
138
139 }(jQuery, Drupal));