danielebarchiesi@4
|
1 /**
|
danielebarchiesi@4
|
2 * jQuery.fn.sortElements
|
danielebarchiesi@4
|
3 * --------------
|
danielebarchiesi@4
|
4 * @param Function comparator:
|
danielebarchiesi@4
|
5 * Exactly the same behaviour as [1,2,3].sort(comparator)
|
danielebarchiesi@4
|
6 *
|
danielebarchiesi@4
|
7 * @param Function getSortable
|
danielebarchiesi@4
|
8 * A function that should return the element that is
|
danielebarchiesi@4
|
9 * to be sorted. The comparator will run on the
|
danielebarchiesi@4
|
10 * current collection, but you may want the actual
|
danielebarchiesi@4
|
11 * resulting sort to occur on a parent or another
|
danielebarchiesi@4
|
12 * associated element.
|
danielebarchiesi@4
|
13 *
|
danielebarchiesi@4
|
14 * E.g. $('td').sortElements(comparator, function(){
|
danielebarchiesi@4
|
15 * return this.parentNode;
|
danielebarchiesi@4
|
16 * })
|
danielebarchiesi@4
|
17 *
|
danielebarchiesi@4
|
18 * The <td>'s parent (<tr>) will be sorted instead
|
danielebarchiesi@4
|
19 * of the <td> itself.
|
danielebarchiesi@4
|
20 *
|
danielebarchiesi@4
|
21 * Credit: http://james.padolsey.com/javascript/sorting-elements-with-jquery/
|
danielebarchiesi@4
|
22 *
|
danielebarchiesi@4
|
23 */
|
danielebarchiesi@4
|
24 jQuery.fn.sortElements = (function(){
|
danielebarchiesi@4
|
25
|
danielebarchiesi@4
|
26 var sort = [].sort;
|
danielebarchiesi@4
|
27
|
danielebarchiesi@4
|
28 return function(comparator, getSortable) {
|
danielebarchiesi@4
|
29
|
danielebarchiesi@4
|
30 getSortable = getSortable || function(){return this;};
|
danielebarchiesi@4
|
31
|
danielebarchiesi@4
|
32 var placements = this.map(function(){
|
danielebarchiesi@4
|
33
|
danielebarchiesi@4
|
34 var sortElement = getSortable.call(this),
|
danielebarchiesi@4
|
35 parentNode = sortElement.parentNode,
|
danielebarchiesi@4
|
36
|
danielebarchiesi@4
|
37 // Since the element itself will change position, we have
|
danielebarchiesi@4
|
38 // to have some way of storing its original position in
|
danielebarchiesi@4
|
39 // the DOM. The easiest way is to have a 'flag' node:
|
danielebarchiesi@4
|
40 nextSibling = parentNode.insertBefore(
|
danielebarchiesi@4
|
41 document.createTextNode(''),
|
danielebarchiesi@4
|
42 sortElement.nextSibling
|
danielebarchiesi@4
|
43 );
|
danielebarchiesi@4
|
44
|
danielebarchiesi@4
|
45 return function() {
|
danielebarchiesi@4
|
46
|
danielebarchiesi@4
|
47 if (parentNode === this) {
|
danielebarchiesi@4
|
48 throw new Error(
|
danielebarchiesi@4
|
49 "You can't sort elements if any one is a descendant of another."
|
danielebarchiesi@4
|
50 );
|
danielebarchiesi@4
|
51 }
|
danielebarchiesi@4
|
52
|
danielebarchiesi@4
|
53 // Insert before flag:
|
danielebarchiesi@4
|
54 parentNode.insertBefore(this, nextSibling);
|
danielebarchiesi@4
|
55 // Remove flag:
|
danielebarchiesi@4
|
56 parentNode.removeChild(nextSibling);
|
danielebarchiesi@4
|
57
|
danielebarchiesi@4
|
58 };
|
danielebarchiesi@4
|
59
|
danielebarchiesi@4
|
60 });
|
danielebarchiesi@4
|
61
|
danielebarchiesi@4
|
62 return sort.call(this, comparator).each(function(i){
|
danielebarchiesi@4
|
63 placements[i].call(getSortable.call(this));
|
danielebarchiesi@4
|
64 });
|
danielebarchiesi@4
|
65
|
danielebarchiesi@4
|
66 };
|
danielebarchiesi@4
|
67
|
danielebarchiesi@4
|
68 })();
|
danielebarchiesi@4
|
69
|
danielebarchiesi@4
|
70 (function ($) {
|
danielebarchiesi@4
|
71 Drupal.behaviors.features = {
|
danielebarchiesi@4
|
72 attach: function(context, settings) {
|
danielebarchiesi@4
|
73 // Features management form
|
danielebarchiesi@4
|
74 $('table.features:not(.processed)', context).each(function() {
|
danielebarchiesi@4
|
75 $(this).addClass('processed');
|
danielebarchiesi@4
|
76
|
danielebarchiesi@4
|
77 // Check the overridden status of each feature
|
danielebarchiesi@4
|
78 Drupal.features.checkStatus();
|
danielebarchiesi@4
|
79
|
danielebarchiesi@4
|
80 // Add some nicer row hilighting when checkboxes change values
|
danielebarchiesi@4
|
81 $('input', this).bind('change', function() {
|
danielebarchiesi@4
|
82 if (!$(this).attr('checked')) {
|
danielebarchiesi@4
|
83 $(this).parents('tr').removeClass('enabled').addClass('disabled');
|
danielebarchiesi@4
|
84 }
|
danielebarchiesi@4
|
85 else {
|
danielebarchiesi@4
|
86 $(this).parents('tr').addClass('enabled').removeClass('disabled');
|
danielebarchiesi@4
|
87 }
|
danielebarchiesi@4
|
88 });
|
danielebarchiesi@4
|
89 });
|
danielebarchiesi@4
|
90
|
danielebarchiesi@4
|
91 // Export form component selector
|
danielebarchiesi@4
|
92 $('form.features-export-form select.features-select-components:not(.processed)', context).each(function() {
|
danielebarchiesi@4
|
93 $(this)
|
danielebarchiesi@4
|
94 .addClass('processed')
|
danielebarchiesi@4
|
95 .change(function() {
|
danielebarchiesi@4
|
96 var target = $(this).val();
|
danielebarchiesi@4
|
97 $('div.features-select').hide();
|
danielebarchiesi@4
|
98 $('div.features-select-' + target).show();
|
danielebarchiesi@4
|
99 return false;
|
danielebarchiesi@4
|
100 }).trigger('change');
|
danielebarchiesi@4
|
101 });
|
danielebarchiesi@4
|
102
|
danielebarchiesi@4
|
103 // Export form machine-readable JS
|
danielebarchiesi@4
|
104 $('.feature-name:not(.processed)', context).each(function() {
|
danielebarchiesi@4
|
105 $('.feature-name')
|
danielebarchiesi@4
|
106 .addClass('processed')
|
danielebarchiesi@4
|
107 .after(' <small class="feature-module-name-suffix"> </small>');
|
danielebarchiesi@4
|
108 if ($('.feature-module-name').val() === $('.feature-name').val().toLowerCase().replace(/[^a-z0-9]+/g, '_').replace(/_+/g, '_') || $('.feature-module-name').val() === '') {
|
danielebarchiesi@4
|
109 $('.feature-module-name').parents('.form-item').hide();
|
danielebarchiesi@4
|
110 $('.feature-name').bind('keyup change', function() {
|
danielebarchiesi@4
|
111 var machine = $(this).val().toLowerCase().replace(/[^a-z0-9]+/g, '_').replace(/_+/g, '_');
|
danielebarchiesi@4
|
112 if (machine !== '_' && machine !== '') {
|
danielebarchiesi@4
|
113 $('.feature-module-name').val(machine);
|
danielebarchiesi@4
|
114 $('.feature-module-name-suffix').empty().append(' Machine name: ' + machine + ' [').append($('<a href="#">'+ Drupal.t('Edit') +'</a>').click(function() {
|
danielebarchiesi@4
|
115 $('.feature-module-name').parents('.form-item').show();
|
danielebarchiesi@4
|
116 $('.feature-module-name-suffix').hide();
|
danielebarchiesi@4
|
117 $('.feature-name').unbind('keyup');
|
danielebarchiesi@4
|
118 return false;
|
danielebarchiesi@4
|
119 })).append(']');
|
danielebarchiesi@4
|
120 }
|
danielebarchiesi@4
|
121 else {
|
danielebarchiesi@4
|
122 $('.feature-module-name').val(machine);
|
danielebarchiesi@4
|
123 $('.feature-module-name-suffix').text('');
|
danielebarchiesi@4
|
124 }
|
danielebarchiesi@4
|
125 });
|
danielebarchiesi@4
|
126 $('.feature-name').keyup();
|
danielebarchiesi@4
|
127 }
|
danielebarchiesi@4
|
128 });
|
danielebarchiesi@4
|
129
|
danielebarchiesi@4
|
130 //View info dialog
|
danielebarchiesi@4
|
131 var infoDialog = $('#features-info-file');
|
danielebarchiesi@4
|
132 if (infoDialog.length != 0) {
|
danielebarchiesi@4
|
133 infoDialog.dialog({
|
danielebarchiesi@4
|
134 autoOpen: false,
|
danielebarchiesi@4
|
135 modal: true,
|
danielebarchiesi@4
|
136 draggable: false,
|
danielebarchiesi@4
|
137 resizable: false,
|
danielebarchiesi@4
|
138 width: 600,
|
danielebarchiesi@4
|
139 height: 480
|
danielebarchiesi@4
|
140 });
|
danielebarchiesi@4
|
141 }
|
danielebarchiesi@4
|
142
|
danielebarchiesi@4
|
143 if ((Drupal.settings.features != undefined) && (Drupal.settings.features.info != undefined)) {
|
danielebarchiesi@4
|
144 $('#features-info-file textarea').val(Drupal.settings.features.info);
|
danielebarchiesi@4
|
145 $('#features-info-file').dialog('open');
|
danielebarchiesi@4
|
146 //To be reset by the button click ajax
|
danielebarchiesi@4
|
147 Drupal.settings.features.info = undefined;
|
danielebarchiesi@4
|
148 }
|
danielebarchiesi@4
|
149
|
danielebarchiesi@4
|
150 // mark any conflicts with a class
|
danielebarchiesi@4
|
151 if ((Drupal.settings.features != undefined) && (Drupal.settings.features.conflicts != undefined)) {
|
danielebarchiesi@4
|
152 for (var moduleName in Drupal.settings.features.conflicts) {
|
danielebarchiesi@4
|
153 moduleConflicts = Drupal.settings.features.conflicts[moduleName];
|
danielebarchiesi@4
|
154 $('#features-export-wrapper input[type=checkbox]', context).each(function() {
|
danielebarchiesi@4
|
155 if (!$(this).hasClass('features-checkall')) {
|
danielebarchiesi@4
|
156 var key = $(this).attr('name');
|
danielebarchiesi@4
|
157 var matches = key.match(/^([^\[]+)(\[.+\])?\[(.+)\]\[(.+)\]$/);
|
danielebarchiesi@4
|
158 var component = matches[1];
|
danielebarchiesi@4
|
159 var item = matches[4];
|
danielebarchiesi@4
|
160 if ((component in moduleConflicts) && (moduleConflicts[component].indexOf(item) != -1)) {
|
danielebarchiesi@4
|
161 $(this).parent().addClass('features-conflict');
|
danielebarchiesi@4
|
162 }
|
danielebarchiesi@4
|
163 }
|
danielebarchiesi@4
|
164 });
|
danielebarchiesi@4
|
165 }
|
danielebarchiesi@4
|
166 }
|
danielebarchiesi@4
|
167
|
danielebarchiesi@4
|
168 function _checkAll(value) {
|
danielebarchiesi@4
|
169 if (value) {
|
danielebarchiesi@4
|
170 $('#features-export-wrapper .component-select input[type=checkbox]:visible', context).each(function() {
|
danielebarchiesi@4
|
171 var move_id = $(this).attr('id');
|
danielebarchiesi@4
|
172 $(this).click();
|
danielebarchiesi@4
|
173 $('#'+ move_id).attr('checked', 'checked');
|
danielebarchiesi@4
|
174 });
|
danielebarchiesi@4
|
175 }
|
danielebarchiesi@4
|
176 else {
|
danielebarchiesi@4
|
177 $('#features-export-wrapper .component-added input[type=checkbox]:visible', context).each(function() {
|
danielebarchiesi@4
|
178 var move_id = $(this).attr('id');
|
danielebarchiesi@4
|
179 $('#'+ move_id).removeAttr('checked');
|
danielebarchiesi@4
|
180 $(this).click();
|
danielebarchiesi@4
|
181 $('#'+ move_id).removeAttr('checked');
|
danielebarchiesi@4
|
182 });
|
danielebarchiesi@4
|
183 }
|
danielebarchiesi@4
|
184 }
|
danielebarchiesi@4
|
185
|
danielebarchiesi@4
|
186 function moveCheckbox(item, section, value) {
|
danielebarchiesi@4
|
187 var curParent = item;
|
danielebarchiesi@4
|
188 if ($(item).hasClass('form-type-checkbox')) {
|
danielebarchiesi@4
|
189 item = $(item).children('input[type=checkbox]');
|
danielebarchiesi@4
|
190 }
|
danielebarchiesi@4
|
191 else {
|
danielebarchiesi@4
|
192 curParent = $(item).parents('.form-type-checkbox');
|
danielebarchiesi@4
|
193 }
|
danielebarchiesi@4
|
194 var newParent = $(curParent).parents('.features-export-parent').find('.form-checkboxes.component-'+section);
|
danielebarchiesi@4
|
195 $(curParent).detach();
|
danielebarchiesi@4
|
196 $(curParent).appendTo(newParent);
|
danielebarchiesi@4
|
197 var list = ['select', 'added', 'detected', 'included'];
|
danielebarchiesi@4
|
198 for (i in list) {
|
danielebarchiesi@4
|
199 $(curParent).removeClass('component-' + list[i]);
|
danielebarchiesi@4
|
200 $(item).removeClass('component-' + list[i]);
|
danielebarchiesi@4
|
201 }
|
danielebarchiesi@4
|
202 $(curParent).addClass('component-'+section);
|
danielebarchiesi@4
|
203 $(item).addClass('component-'+section);
|
danielebarchiesi@4
|
204 if (value) {
|
danielebarchiesi@4
|
205 $(item).attr('checked', 'checked');
|
danielebarchiesi@4
|
206 }
|
danielebarchiesi@4
|
207 else {
|
danielebarchiesi@4
|
208 $(item).removeAttr('checked')
|
danielebarchiesi@4
|
209 }
|
danielebarchiesi@4
|
210 $(newParent).parent().removeClass('features-export-empty');
|
danielebarchiesi@4
|
211
|
danielebarchiesi@4
|
212 // re-sort new list of checkboxes based on labels
|
danielebarchiesi@4
|
213 $(newParent).find('label').sortElements(
|
danielebarchiesi@4
|
214 function(a, b){
|
danielebarchiesi@4
|
215 return $(a).text() > $(b).text() ? 1 : -1;
|
danielebarchiesi@4
|
216 },
|
danielebarchiesi@4
|
217 function(){
|
danielebarchiesi@4
|
218 return this.parentNode;
|
danielebarchiesi@4
|
219 }
|
danielebarchiesi@4
|
220 );
|
danielebarchiesi@4
|
221 }
|
danielebarchiesi@4
|
222
|
danielebarchiesi@4
|
223 // provide timer for auto-refresh trigger
|
danielebarchiesi@4
|
224 var timeoutID = 0;
|
danielebarchiesi@4
|
225 var inTimeout = 0;
|
danielebarchiesi@4
|
226 function _triggerTimeout() {
|
danielebarchiesi@4
|
227 timeoutID = 0;
|
danielebarchiesi@4
|
228 _updateDetected();
|
danielebarchiesi@4
|
229 }
|
danielebarchiesi@4
|
230 function _resetTimeout() {
|
danielebarchiesi@4
|
231 inTimeout++;
|
danielebarchiesi@4
|
232 // if timeout is already active, reset it
|
danielebarchiesi@4
|
233 if (timeoutID != 0) {
|
danielebarchiesi@4
|
234 window.clearTimeout(timeoutID);
|
danielebarchiesi@4
|
235 if (inTimeout > 0) inTimeout--;
|
danielebarchiesi@4
|
236 }
|
danielebarchiesi@4
|
237 timeoutID = window.setTimeout(_triggerTimeout, 500);
|
danielebarchiesi@4
|
238 }
|
danielebarchiesi@4
|
239
|
danielebarchiesi@4
|
240 function _updateDetected() {
|
danielebarchiesi@4
|
241 var autodetect = $('#features-autodetect input[type=checkbox]');
|
danielebarchiesi@4
|
242 if ((autodetect.length > 0) && (!autodetect.is(':checked'))) return;
|
danielebarchiesi@4
|
243 // query the server for a list of components/items in the feature and update
|
danielebarchiesi@4
|
244 // the auto-detected items
|
danielebarchiesi@4
|
245 var items = []; // will contain a list of selected items exported to feature
|
danielebarchiesi@4
|
246 var components = {}; // contains object of component names that have checked items
|
danielebarchiesi@4
|
247 $('#features-export-wrapper input[type=checkbox]:checked', context).each(function() {
|
danielebarchiesi@4
|
248 if (!$(this).hasClass('features-checkall')) {
|
danielebarchiesi@4
|
249 var key = $(this).attr('name');
|
danielebarchiesi@4
|
250 var matches = key.match(/^([^\[]+)(\[.+\])?\[(.+)\]\[(.+)\]$/);
|
danielebarchiesi@4
|
251 components[matches[1]] = matches[1];
|
danielebarchiesi@4
|
252 if (!$(this).hasClass('component-detected')) {
|
danielebarchiesi@4
|
253 items.push(key);
|
danielebarchiesi@4
|
254 }
|
danielebarchiesi@4
|
255 }
|
danielebarchiesi@4
|
256 });
|
danielebarchiesi@4
|
257 var featureName = $('#edit-module-name').val();
|
danielebarchiesi@4
|
258 if (featureName == '') {
|
danielebarchiesi@4
|
259 featureName = '*';
|
danielebarchiesi@4
|
260 }
|
danielebarchiesi@4
|
261 var url = Drupal.settings.basePath + 'features/ajaxcallback/' + featureName;
|
danielebarchiesi@4
|
262 var excluded = Drupal.settings.features.excluded;
|
danielebarchiesi@4
|
263 var postData = {'items': items, 'excluded': excluded};
|
danielebarchiesi@4
|
264 jQuery.post(url, postData, function(data) {
|
danielebarchiesi@4
|
265 if (inTimeout > 0) inTimeout--;
|
danielebarchiesi@4
|
266 // if we have triggered another timeout then don't update with old results
|
danielebarchiesi@4
|
267 if (inTimeout == 0) {
|
danielebarchiesi@4
|
268 // data is an object keyed by component listing the exports of the feature
|
danielebarchiesi@4
|
269 for (var component in data) {
|
danielebarchiesi@4
|
270 var itemList = data[component];
|
danielebarchiesi@4
|
271 $('#features-export-wrapper .component-' + component + ' input[type=checkbox]', context).each(function() {
|
danielebarchiesi@4
|
272 var key = $(this).attr('value');
|
danielebarchiesi@4
|
273 // first remove any auto-detected items that are no longer in component
|
danielebarchiesi@4
|
274 if ($(this).hasClass('component-detected')) {
|
danielebarchiesi@4
|
275 if (!(key in itemList)) {
|
danielebarchiesi@4
|
276 moveCheckbox(this, 'select', false)
|
danielebarchiesi@4
|
277 }
|
danielebarchiesi@4
|
278 }
|
danielebarchiesi@4
|
279 // next, add any new auto-detected items
|
danielebarchiesi@4
|
280 else if ($(this).hasClass('component-select')) {
|
danielebarchiesi@4
|
281 if (key in itemList) {
|
danielebarchiesi@4
|
282 moveCheckbox(this, 'detected', itemList[key]);
|
danielebarchiesi@4
|
283 $(this).parent().show(); // make sure it's not hidden from filter
|
danielebarchiesi@4
|
284 }
|
danielebarchiesi@4
|
285 }
|
danielebarchiesi@4
|
286 });
|
danielebarchiesi@4
|
287 }
|
danielebarchiesi@4
|
288 // loop over all selected components and check for any that have been completely removed
|
danielebarchiesi@4
|
289 for (var component in components) {
|
danielebarchiesi@4
|
290 if ((data == null) || !(component in data)) {
|
danielebarchiesi@4
|
291 $('#features-export-wrapper .component-' + component + ' input[type=checkbox].component-detected', context).each(function() {
|
danielebarchiesi@4
|
292 moveCheckbox(this, 'select', false);
|
danielebarchiesi@4
|
293 });
|
danielebarchiesi@4
|
294 }
|
danielebarchiesi@4
|
295 }
|
danielebarchiesi@4
|
296 }
|
danielebarchiesi@4
|
297 }, "json");
|
danielebarchiesi@4
|
298 }
|
danielebarchiesi@4
|
299
|
danielebarchiesi@4
|
300 // Handle component selection UI
|
danielebarchiesi@4
|
301 $('#features-export-wrapper input[type=checkbox]', context).click(function() {
|
danielebarchiesi@4
|
302 _resetTimeout();
|
danielebarchiesi@4
|
303 if ($(this).hasClass('component-select')) {
|
danielebarchiesi@4
|
304 moveCheckbox(this, 'added', true);
|
danielebarchiesi@4
|
305 }
|
danielebarchiesi@4
|
306 else if ($(this).hasClass('component-included')) {
|
danielebarchiesi@4
|
307 moveCheckbox(this, 'added', false);
|
danielebarchiesi@4
|
308 }
|
danielebarchiesi@4
|
309 else if ($(this).hasClass('component-added')) {
|
danielebarchiesi@4
|
310 if ($(this).is(':checked')) {
|
danielebarchiesi@4
|
311 moveCheckbox(this, 'included', true);
|
danielebarchiesi@4
|
312 }
|
danielebarchiesi@4
|
313 else {
|
danielebarchiesi@4
|
314 moveCheckbox(this, 'select', false);
|
danielebarchiesi@4
|
315 }
|
danielebarchiesi@4
|
316 }
|
danielebarchiesi@4
|
317 });
|
danielebarchiesi@4
|
318
|
danielebarchiesi@4
|
319 // Handle select/unselect all
|
danielebarchiesi@4
|
320 $('#features-filter .features-checkall', context).click(function() {
|
danielebarchiesi@4
|
321 if ($(this).attr('checked')) {
|
danielebarchiesi@4
|
322 _checkAll(true);
|
danielebarchiesi@4
|
323 $(this).next().html(Drupal.t('Deselect all'));
|
danielebarchiesi@4
|
324 }
|
danielebarchiesi@4
|
325 else {
|
danielebarchiesi@4
|
326 _checkAll(false);
|
danielebarchiesi@4
|
327 $(this).next().html(Drupal.t('Select all'));
|
danielebarchiesi@4
|
328 }
|
danielebarchiesi@4
|
329 _resetTimeout();
|
danielebarchiesi@4
|
330 });
|
danielebarchiesi@4
|
331
|
danielebarchiesi@4
|
332 // Handle filtering
|
danielebarchiesi@4
|
333
|
danielebarchiesi@4
|
334 // provide timer for auto-refresh trigger
|
danielebarchiesi@4
|
335 var filterTimeoutID = 0;
|
danielebarchiesi@4
|
336 var inFilterTimeout = 0;
|
danielebarchiesi@4
|
337 function _triggerFilterTimeout() {
|
danielebarchiesi@4
|
338 filterTimeoutID = 0;
|
danielebarchiesi@4
|
339 _updateFilter();
|
danielebarchiesi@4
|
340 }
|
danielebarchiesi@4
|
341 function _resetFilterTimeout() {
|
danielebarchiesi@4
|
342 inFilterTimeout++;
|
danielebarchiesi@4
|
343 // if timeout is already active, reset it
|
danielebarchiesi@4
|
344 if (filterTimeoutID != 0) {
|
danielebarchiesi@4
|
345 window.clearTimeout(filterTimeoutID);
|
danielebarchiesi@4
|
346 if (inFilterTimeout > 0) inFilterTimeout--;
|
danielebarchiesi@4
|
347 }
|
danielebarchiesi@4
|
348 filterTimeoutID = window.setTimeout(_triggerFilterTimeout, 200);
|
danielebarchiesi@4
|
349 }
|
danielebarchiesi@4
|
350 function _updateFilter() {
|
danielebarchiesi@4
|
351 var filter = $('#features-filter input').val();
|
danielebarchiesi@4
|
352 var regex = new RegExp(filter, 'i');
|
danielebarchiesi@4
|
353 // collapse fieldsets
|
danielebarchiesi@4
|
354 var newState = {};
|
danielebarchiesi@4
|
355 var currentState = {};
|
danielebarchiesi@4
|
356 $('#features-export-wrapper fieldset.features-export-component', context).each(function() {
|
danielebarchiesi@4
|
357 // expand parent fieldset
|
danielebarchiesi@4
|
358 var section = $(this).attr('id');
|
danielebarchiesi@4
|
359 currentState[section] = !($(this).hasClass('collapsed'));
|
danielebarchiesi@4
|
360 if (!(section in newState)) {
|
danielebarchiesi@4
|
361 newState[section] = false;
|
danielebarchiesi@4
|
362 }
|
danielebarchiesi@4
|
363
|
danielebarchiesi@4
|
364 $(this).find('div.component-select label').each(function() {
|
danielebarchiesi@4
|
365 if (filter == '') {
|
danielebarchiesi@4
|
366 if (currentState[section]) {
|
danielebarchiesi@4
|
367 Drupal.toggleFieldset($('#'+section));
|
danielebarchiesi@4
|
368 currentState[section] = false;
|
danielebarchiesi@4
|
369 }
|
danielebarchiesi@4
|
370 $(this).parent().show();
|
danielebarchiesi@4
|
371 }
|
danielebarchiesi@4
|
372 else if ($(this).text().match(regex)) {
|
danielebarchiesi@4
|
373 $(this).parent().show();
|
danielebarchiesi@4
|
374 newState[section] = true;
|
danielebarchiesi@4
|
375 }
|
danielebarchiesi@4
|
376 else {
|
danielebarchiesi@4
|
377 $(this).parent().hide();
|
danielebarchiesi@4
|
378 }
|
danielebarchiesi@4
|
379 });
|
danielebarchiesi@4
|
380 });
|
danielebarchiesi@4
|
381 for (section in newState) {
|
danielebarchiesi@4
|
382 if (currentState[section] != newState[section]) {
|
danielebarchiesi@4
|
383 Drupal.toggleFieldset($('#'+section));
|
danielebarchiesi@4
|
384 }
|
danielebarchiesi@4
|
385 }
|
danielebarchiesi@4
|
386 }
|
danielebarchiesi@4
|
387 $('#features-filter input', context).bind("input", function() {
|
danielebarchiesi@4
|
388 _resetFilterTimeout();
|
danielebarchiesi@4
|
389 });
|
danielebarchiesi@4
|
390 $('#features-filter .features-filter-clear', context).click(function() {
|
danielebarchiesi@4
|
391 $('#features-filter input').val('');
|
danielebarchiesi@4
|
392 _updateFilter();
|
danielebarchiesi@4
|
393 });
|
danielebarchiesi@4
|
394
|
danielebarchiesi@4
|
395 // show the filter bar
|
danielebarchiesi@4
|
396 $('#features-filter', context).removeClass('element-invisible');
|
danielebarchiesi@4
|
397 }
|
danielebarchiesi@4
|
398 }
|
danielebarchiesi@4
|
399
|
danielebarchiesi@4
|
400
|
danielebarchiesi@4
|
401 Drupal.features = {
|
danielebarchiesi@4
|
402 'checkStatus': function() {
|
danielebarchiesi@4
|
403 $('table.features tbody tr').not('.processed').filter(':first').each(function() {
|
danielebarchiesi@4
|
404 var elem = $(this);
|
danielebarchiesi@4
|
405 $(elem).addClass('processed');
|
danielebarchiesi@4
|
406 var uri = $(this).find('a.admin-check').attr('href');
|
danielebarchiesi@4
|
407 if (uri) {
|
danielebarchiesi@4
|
408 $.get(uri, [], function(data) {
|
danielebarchiesi@4
|
409 $(elem).find('.admin-loading').hide();
|
danielebarchiesi@4
|
410 switch (data.storage) {
|
danielebarchiesi@4
|
411 case 3:
|
danielebarchiesi@4
|
412 $(elem).find('.admin-rebuilding').show();
|
danielebarchiesi@4
|
413 break;
|
danielebarchiesi@4
|
414 case 2:
|
danielebarchiesi@4
|
415 $(elem).find('.admin-needs-review').show();
|
danielebarchiesi@4
|
416 break;
|
danielebarchiesi@4
|
417 case 1:
|
danielebarchiesi@4
|
418 $(elem).find('.admin-overridden').show();
|
danielebarchiesi@4
|
419 break;
|
danielebarchiesi@4
|
420 default:
|
danielebarchiesi@4
|
421 $(elem).find('.admin-default').show();
|
danielebarchiesi@4
|
422 break;
|
danielebarchiesi@4
|
423 }
|
danielebarchiesi@4
|
424 Drupal.features.checkStatus();
|
danielebarchiesi@4
|
425 }, 'json');
|
danielebarchiesi@4
|
426 }
|
danielebarchiesi@4
|
427 else {
|
danielebarchiesi@4
|
428 Drupal.features.checkStatus();
|
danielebarchiesi@4
|
429 }
|
danielebarchiesi@4
|
430 });
|
danielebarchiesi@4
|
431 }
|
danielebarchiesi@4
|
432 };
|
danielebarchiesi@4
|
433
|
danielebarchiesi@4
|
434
|
danielebarchiesi@4
|
435 })(jQuery);
|
danielebarchiesi@4
|
436
|
danielebarchiesi@4
|
437
|