92 lines
3.4 KiB
JavaScript
92 lines
3.4 KiB
JavaScript
|
ajax_filtered_fields = {
|
||
|
|
||
|
request_url: "/ajax_filtered_fields/json_index/",
|
||
|
data_loaded: "data_loaded",
|
||
|
|
||
|
_appendOption: function(obj, selector) {
|
||
|
// append a json data row as an option to the selector
|
||
|
var option = $('<option>' + obj[1] + '</option>');
|
||
|
option.attr({value: obj[0]});
|
||
|
option.appendTo(selector);
|
||
|
return option;
|
||
|
},
|
||
|
|
||
|
_removeOptions: function(selector) {
|
||
|
// remove all options from selector
|
||
|
selector.children("option").each(function(i) {
|
||
|
$(this).remove();
|
||
|
});
|
||
|
},
|
||
|
|
||
|
getManyToManyJSON: function(element_id, app_label, object_name,
|
||
|
lookup_string, select_related) {
|
||
|
// manage the ManyToMany ajax request
|
||
|
var selector_from = $("#" + element_id + "_from");
|
||
|
var selector_to = $("#" + element_id + "_to");
|
||
|
|
||
|
$("#" + element_id + "_input").val("");
|
||
|
selector_from.attr("disabled", true);
|
||
|
selector_to.attr("disabled", true);
|
||
|
|
||
|
this._removeOptions(selector_from);
|
||
|
|
||
|
$.getJSON(this.request_url, {
|
||
|
app_label: app_label,
|
||
|
object_name: object_name,
|
||
|
lookup_string: lookup_string,
|
||
|
select_related: select_related},
|
||
|
function(data){
|
||
|
$.each(data, function(i, obj){
|
||
|
var option_is_selected = selector_to.children("option[value='" + obj[0] + "']").length;
|
||
|
if (!option_is_selected) {
|
||
|
ajax_filtered_fields._appendOption(obj, selector_from);
|
||
|
};
|
||
|
});
|
||
|
SelectBox.init(element_id + "_from");
|
||
|
selector_from.attr("disabled", false);
|
||
|
selector_to.attr("disabled", false);
|
||
|
selector_from.trigger(ajax_filtered_fields.data_loaded);
|
||
|
});
|
||
|
},
|
||
|
|
||
|
getForeignKeyJSON: function(element_id, app_label, object_name,
|
||
|
lookup_string, select_related) {
|
||
|
// manage the ForeignKey ajax request
|
||
|
var selector = $("#" + element_id);
|
||
|
var hidden = $("#hidden-" + element_id);
|
||
|
|
||
|
$("#" + element_id + "_input").val("");
|
||
|
selector.attr("disabled", true);
|
||
|
|
||
|
this._removeOptions(selector);
|
||
|
|
||
|
$.getJSON(this.request_url, {
|
||
|
app_label: app_label,
|
||
|
object_name: object_name,
|
||
|
lookup_string: lookup_string,
|
||
|
select_related: select_related},
|
||
|
function(data){
|
||
|
var selection = hidden.val();
|
||
|
ajax_filtered_fields._appendOption(new Array("", "---------"), selector);
|
||
|
$.each(data, function(i, obj){
|
||
|
ajax_filtered_fields._appendOption(obj, selector);
|
||
|
});
|
||
|
selector.children("option[value='" + selection + "']").attr("selected", "selected");
|
||
|
selector.attr("disabled", false);
|
||
|
SelectBox.init(element_id);
|
||
|
ajax_filtered_fields.bindForeignKeyOptions(element_id);
|
||
|
selector.trigger(ajax_filtered_fields.data_loaded);
|
||
|
});
|
||
|
},
|
||
|
|
||
|
bindForeignKeyOptions: function(element_id) {
|
||
|
// bind the dummy options to the hidden field that do the work
|
||
|
var selector = $("#" + element_id);
|
||
|
var hidden = $("#hidden-" + element_id);
|
||
|
selector.change(function(e) {
|
||
|
hidden.val($(this).val());
|
||
|
});
|
||
|
}
|
||
|
|
||
|
};
|