diff noderef_view.js @ 0:a3c1e224e807

Import initial du module noderef_view
author Franck Deroche <franck@defr.org>
date Fri, 23 Jan 2009 14:52:03 +0100
parents
children 25a0c2fcbcfb
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/noderef_view.js	Fri Jan 23 14:52:03 2009 +0100
@@ -0,0 +1,48 @@
+// 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 id = $(this).attr('rel');
+      var wrapper = $('#' + id);
+
+      // 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;
+}