franck@4: // vim: set ts=2 sw=2 expandtab: franck@0: /** franck@0: * Attach the noderef_view behavior. franck@0: */ franck@0: Drupal.behaviors.noderef_view = function(context) { franck@6: $('.noderef-view-wrapper div[id$="-wrapper"]:first-child').addClass('noderef-view-items'); franck@0: $('.noderef_view_link', context).each(function(i, obj) { franck@0: $(obj).addClass('noderef_view_link_processed').click(function() { franck@0: // Get the wrapper franck@7: var wrapper = $(this) franck@7: .parent() franck@7: .find('.noderef-view-items') franck@7: .filter(':first'); franck@7: var element = $(this); franck@0: franck@4: // Hide existing "No space left" message franck@7: $('div.noderef_outofspace', element.parent()).fadeOut(); franck@4: franck@0: // Suppress behavior if it was previsously attached franck@0: $(document).unbind('popups_form_success.noderef_view'); franck@0: franck@0: // And now bind it. This code will be executed after successful franck@0: // completion of the popup select form franck@0: $(document).bind('popups_form_success.noderef_view', function() { franck@4: var selection = noderef_view_get_selection(), left = []; franck@0: for(nid in selection) { franck@4: count = 0; franck@0: // Autocomplete field franck@4: count += $('input.form-autocomplete:not([value])', wrapper) franck@0: .filter(':first') franck@4: .val(selection[nid]) franck@4: .length; franck@4: // Select field (exclude the weight of autocomplete fields) franck@4: count += $('select:not([id$="--weight"])', wrapper).val(nid).length; franck@0: // Radio field franck@4: count += $('input:radio[value='+ nid + '], input:checkbox[value='+ nid +']', wrapper) franck@4: .attr('checked', 'checked') franck@4: .length; franck@4: if (count == 0) { franck@4: left.push(selection[nid]); franck@4: } franck@4: } franck@4: if (left.length) { franck@4: message = Drupal.t('No space left for value(s): @titles', franck@4: { '@titles': left.join(', ')}); franck@7: text = $('
'+ message + '
') franck@7: .css('display', 'inline') franck@7: .addClass('warning') franck@7: .addClass('noderef_outofspace'); franck@7: element.after(text); franck@0: } franck@0: }); franck@0: }); franck@0: }); franck@0: } franck@0: franck@0: /** franck@0: * Helper function to extract the references values franck@0: */ franck@0: function noderef_view_get_selection() { franck@0: var cookies = document.cookie.split(';'), selection = {}; franck@0: for(var i = 0; i < cookies.length; i++) { franck@0: var cookie = $.trim(cookies[i]).split('='); franck@0: if (cookie[0].indexOf('noderef[') == 0) { franck@0: var nid = cookie[0].replace(/noderef\[(\d+)\]/, "$1"); franck@0: var title = decodeURIComponent(cookie[1]); franck@0: selection[nid] = title; franck@0: } franck@0: } franck@0: return selection; franck@0: }