annotate noderef_view.js @ 4:b4c1e3d5d5ce

Warn if value omitted due to lack of space
author Franck Deroche <franck@defr.org>
date Mon, 26 Jan 2009 12:29:17 +0100
parents 25a0c2fcbcfb
children e3f85c9247b7
rev   line source
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@0 6 $('.noderef_view_link', context).each(function(i, obj) {
franck@0 7 $(obj).addClass('noderef_view_link_processed').click(function() {
franck@0 8 // Get the wrapper
franck@2 9 var wrapper = $(this).prev();
franck@2 10 while (!wrapper.is('div')) {
franck@2 11 wrapper = wrapper.prev();
franck@2 12 }
franck@0 13
franck@4 14 // Hide existing "No space left" message
franck@4 15 $('div.noderef_nospace', wrapper).fadeOut();
franck@4 16
franck@0 17 // Suppress behavior if it was previsously attached
franck@0 18 $(document).unbind('popups_form_success.noderef_view');
franck@0 19
franck@0 20 // And now bind it. This code will be executed after successful
franck@0 21 // completion of the popup select form
franck@0 22 $(document).bind('popups_form_success.noderef_view', function() {
franck@4 23 var selection = noderef_view_get_selection(), left = [];
franck@0 24 for(nid in selection) {
franck@4 25 count = 0;
franck@0 26 // Autocomplete field
franck@4 27 count += $('input.form-autocomplete:not([value])', wrapper)
franck@0 28 .filter(':first')
franck@4 29 .val(selection[nid])
franck@4 30 .length;
franck@4 31 // Select field (exclude the weight of autocomplete fields)
franck@4 32 count += $('select:not([id$="--weight"])', wrapper).val(nid).length;
franck@0 33 // Radio field
franck@4 34 count += $('input:radio[value='+ nid + '], input:checkbox[value='+ nid +']', wrapper)
franck@4 35 .attr('checked', 'checked')
franck@4 36 .length;
franck@4 37 if (count == 0) {
franck@4 38 left.push(selection[nid]);
franck@4 39 }
franck@4 40 }
franck@4 41 if (left.length) {
franck@4 42 message = Drupal.t('No space left for value(s): @titles',
franck@4 43 { '@titles': left.join(', ')});
franck@4 44 wrapper.append('<div class="warning noderef_nospace">'+ message +'</div>');
franck@0 45 }
franck@0 46 });
franck@0 47 });
franck@0 48 });
franck@0 49 }
franck@0 50
franck@0 51 /**
franck@0 52 * Helper function to extract the references values
franck@0 53 */
franck@0 54 function noderef_view_get_selection() {
franck@0 55 var cookies = document.cookie.split(';'), selection = {};
franck@0 56 for(var i = 0; i < cookies.length; i++) {
franck@0 57 var cookie = $.trim(cookies[i]).split('=');
franck@0 58 if (cookie[0].indexOf('noderef[') == 0) {
franck@0 59 var nid = cookie[0].replace(/noderef\[(\d+)\]/, "$1");
franck@0 60 var title = decodeURIComponent(cookie[1]);
franck@0 61 selection[nid] = title;
franck@0 62 }
franck@0 63 }
franck@0 64 return selection;
franck@0 65 }