web/data/cubicweb.ajax.box.js
brancholdstable
changeset 6665 90f2f20367bc
parent 6215 759cf097f5aa
child 6448 8590d82e9b1b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/data/cubicweb.ajax.box.js	Wed Nov 03 16:38:28 2010 +0100
@@ -0,0 +1,81 @@
+/**
+ * Functions for ajax boxes.
+ *
+ *  :organization: Logilab
+ *  :copyright: 2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
+ *  :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
+ *
+ */
+
+function ajaxBoxValidateSelectorInput(boxid, eid, separator, fname, msg) {
+    var holderid = cw.utils.domid(boxid) + eid + 'Holder';
+    var value = $('#' + holderid + 'Input').val();
+    if (separator) {
+        value = $.map(value.split(separator), jQuery.trim);
+    }
+    var d = loadRemote('json', ajaxFuncArgs(fname, null, eid, value));
+    d.addCallback(function() {
+            $('#' + holderid).empty();
+            var formparams = ajaxFuncArgs('render', null, 'boxes', boxid, eid);
+            $('#' + cw.utils.domid(boxid) + eid).loadxhtml('json', formparams);
+            if (msg) {
+                document.location.hash = '#header';
+                updateMessage(msg);
+            }
+        });
+}
+
+function ajaxBoxRemoveLinkedEntity(boxid, eid, relatedeid, delfname, msg) {
+    var d = loadRemote('json', ajaxFuncArgs(delfname, null, eid, relatedeid));
+    d.addCallback(function() {
+            var formparams = ajaxFuncArgs('render', null, 'boxes', boxid, eid);
+            $('#' + cw.utils.domid(boxid) + eid).loadxhtml('json', formparams);
+            if (msg) {
+                document.location.hash = '#header';
+                updateMessage(msg);
+            }
+    });
+}
+
+function ajaxBoxShowSelector(boxid, eid,
+                             unrelfname,
+                             addfname, msg,
+                             oklabel, cancellabel,
+                             separator) {
+    var holderid = cw.utils.domid(boxid) + eid + 'Holder';
+    var holder = $('#' + holderid);
+    if (holder.children().length) {
+        holder.empty();
+    }
+    else {
+        var inputid = holderid + 'Input';
+        var deferred = loadRemote('json', ajaxFuncArgs(unrelfname, null, eid));
+        deferred.addCallback(function (unrelated) {
+            var input = INPUT({'type': 'text', 'id': inputid, 'size': 20});
+            holder.append(input).show();
+            $input = $(input);
+            $input.keypress(function (event) {
+                if (event.keyCode == KEYS.KEY_ENTER) {
+                    // XXX not very user friendly: we should test that the suggestions
+                    //     aren't visible anymore
+                    ajaxBoxValidateSelectorInput(boxid, eid, separator, addfname, msg);
+                }
+            });
+            var buttons = DIV({'class' : "sgformbuttons"},
+                              A({'href' : "javascript: noop();",
+                                 'onclick' : cw.utils.strFuncCall('ajaxBoxValidateSelectorInput',
+                                                                  boxid, eid, separator, addfname, msg)},
+                                  oklabel),
+                              ' / ',
+                              A({'href' : "javascript: noop();",
+                                 'onclick' : '$("#' + holderid + '").empty()'},
+                                  cancellabel));
+            holder.append(buttons);
+            $input.autocomplete(unrelated, {
+                multiple: separator,
+                max: 15
+            });
+            $input.focus();
+        });
+    }
+}