franck@4
|
1 // vim: set ts=2 sw=2 expandtab: |
franck@0
|
2 /** |
franck@0
|
3 * Attach the noderef_view behavior. |
franck@0
|
4 */ |
franck@0
|
5 Drupal.behaviors.noderef_view = function(context) { |
franck@6
|
6 $('.noderef-view-wrapper div[id$="-wrapper"]:first-child').addClass('noderef-view-items'); |
franck@0
|
7 $('.noderef_view_link', context).each(function(i, obj) { |
franck@0
|
8 $(obj).addClass('noderef_view_link_processed').click(function() { |
franck@0
|
9 // Get the wrapper |
franck@7
|
10 var wrapper = $(this) |
franck@7
|
11 .parent() |
franck@7
|
12 .find('.noderef-view-items') |
franck@7
|
13 .filter(':first'); |
franck@7
|
14 var element = $(this); |
franck@0
|
15 |
franck@4
|
16 // Hide existing "No space left" message |
franck@7
|
17 $('div.noderef_outofspace', element.parent()).fadeOut(); |
franck@4
|
18 |
franck@0
|
19 // Suppress behavior if it was previsously attached |
franck@0
|
20 $(document).unbind('popups_form_success.noderef_view'); |
franck@0
|
21 |
franck@0
|
22 // And now bind it. This code will be executed after successful |
franck@0
|
23 // completion of the popup select form |
franck@0
|
24 $(document).bind('popups_form_success.noderef_view', function() { |
franck@4
|
25 var selection = noderef_view_get_selection(), left = []; |
franck@0
|
26 for(nid in selection) { |
franck@4
|
27 count = 0; |
franck@8
|
28 // Let's compute the potential value for autocomplete fields |
franck@8
|
29 acvalue = selection[nid] +' [nid:'+ nid +']'; |
franck@0
|
30 // Autocomplete field |
franck@8
|
31 count += $('input.form-autocomplete[value="'+ acvalue +'"], input.form-autocomplete:not([value])', wrapper) |
franck@0
|
32 .filter(':first') |
franck@8
|
33 .val(acvalue) |
franck@4
|
34 .length; |
franck@4
|
35 // Select field (exclude the weight of autocomplete fields) |
franck@4
|
36 count += $('select:not([id$="--weight"])', wrapper).val(nid).length; |
franck@0
|
37 // Radio field |
franck@4
|
38 count += $('input:radio[value='+ nid + '], input:checkbox[value='+ nid +']', wrapper) |
franck@4
|
39 .attr('checked', 'checked') |
franck@4
|
40 .length; |
franck@4
|
41 if (count == 0) { |
franck@9
|
42 left.push(Drupal.theme('placeholder', selection[nid])); |
franck@4
|
43 } |
franck@4
|
44 } |
franck@4
|
45 if (left.length) { |
franck@9
|
46 message = Drupal.t('No space left for: !titles', |
franck@9
|
47 { '!titles': left.join(', ')}); |
franck@7
|
48 text = $('<br /><div>'+ message + '<div>') |
franck@7
|
49 .css('display', 'inline') |
franck@7
|
50 .addClass('warning') |
franck@7
|
51 .addClass('noderef_outofspace'); |
franck@7
|
52 element.after(text); |
franck@0
|
53 } |
franck@0
|
54 }); |
franck@0
|
55 }); |
franck@0
|
56 }); |
franck@0
|
57 } |
franck@0
|
58 |
franck@0
|
59 /** |
franck@0
|
60 * Helper function to extract the references values |
franck@0
|
61 */ |
franck@0
|
62 function noderef_view_get_selection() { |
franck@0
|
63 var cookies = document.cookie.split(';'), selection = {}; |
franck@0
|
64 for(var i = 0; i < cookies.length; i++) { |
franck@0
|
65 var cookie = $.trim(cookies[i]).split('='); |
franck@0
|
66 if (cookie[0].indexOf('noderef[') == 0) { |
franck@0
|
67 var nid = cookie[0].replace(/noderef\[(\d+)\]/, "$1"); |
franck@0
|
68 var title = decodeURIComponent(cookie[1]); |
franck@0
|
69 selection[nid] = title; |
franck@0
|
70 } |
franck@0
|
71 } |
franck@0
|
72 return selection; |
franck@0
|
73 } |