Mercurial > defr > drupal > noderef_view
view noderef_view.js @ 3:9372c6448311
Add the link in an after_build callback to be a lot more robust.
This way, we act after the noderefence fields got transformed into normal
widgets by the form processing code. We can thus be pretty sure that the code
we put in there will end up where we expect it too.
author | Franck Deroche <franck@defr.org> |
---|---|
date | Mon, 26 Jan 2009 12:28:09 +0100 |
parents | 25a0c2fcbcfb |
children | b4c1e3d5d5ce |
line wrap: on
line source
// vim: set ts=2 sw=2 expandtab syntax=php: /** * Attach the noderef_view behavior. */ Drupal.behaviors.noderef_view = function(context) { $('.noderef_view_link', context).each(function(i, obj) { $(obj).addClass('noderef_view_link_processed').click(function() { // Get the wrapper var wrapper = $(this).prev(); while (!wrapper.is('div')) { wrapper = wrapper.prev(); } // Suppress behavior if it was previsously attached $(document).unbind('popups_form_success.noderef_view'); // And now bind it. This code will be executed after successful // completion of the popup select form $(document).bind('popups_form_success.noderef_view', function() { selection = noderef_view_get_selection(); for(nid in selection) { // Autocomplete field $('input.form-autocomplete:not([value])', wrapper) .filter(':first') .val(selection[nid]); // Select field $('select', wrapper).val(nid); // Radio field $('input:radio[value='+ nid + '], input:checkbox[value='+ nid +']', wrapper).attr('checked', 'checked'); } }); }); }); } /** * Helper function to extract the references values */ function noderef_view_get_selection() { var cookies = document.cookie.split(';'), selection = {}; for(var i = 0; i < cookies.length; i++) { var cookie = $.trim(cookies[i]).split('='); if (cookie[0].indexOf('noderef[') == 0) { var nid = cookie[0].replace(/noderef\[(\d+)\]/, "$1"); var title = decodeURIComponent(cookie[1]); selection[nid] = title; } } return selection; }