-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathform.js
More file actions
99 lines (84 loc) · 3.28 KB
/
form.js
File metadata and controls
99 lines (84 loc) · 3.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
var j_forms = require('j-forms')
,fields = j_forms.fields
,widgets = j_forms.widgets
,mongoose = require('mongoose')
,_ = require('underscore')
,jest = require('jest');
var api_loaded = false;
var api_path;
var AdminForm = exports.AdminForm = j_forms.forms.MongooseForm.extend({
init: function(request,options,model)
{
this._super(request,options,model);
this.static['js'].push('/node-forms/js/jquery-ui-1.8.22.custom.min.js');
this.static['css'].push('/node-forms/css/ui-lightness/jquery-ui-1.8.22.custom.css');
this.static['css'].push('/node-forms/css/forms.css');
},
scanFields : function(form_fields){
var self = this;
_.each(form_fields,function(value,key) {
if(value instanceof fields.RefField) {
if( (value.options.url || api_loaded) && value.options.query) {
value.options.widget_options.url = value.options.url || api_path;
value.options.widget_options.data = value.options.widget_options.data || {};
value.options.widget_options.data.data = encodeURIComponent(JSON.stringify({
model: value.options.ref,
query: value.options.query || '/__value__/i.test(this.name || this.title || this._id.toString())'
}));
value.widget = new widgets.AutocompleteWidget(value.options.widget_options);
}
}
else if(value instanceof fields.EnumField)
value.widget = new widgets.ComboBoxWidget(value.options.widget_options);
else if (value instanceof fields.ListField)
self.scanFields(value.fields);
});
},
get_fields: function() {
this._super();
this.scanFields(this.fields);
}
});
exports.loadApi = function(app,path) {
var api = new jest.Api(path || 'admin_api',app);
var Resource = jest.Resource.extend({
init:function(){
this._super();
this.fields = {
value:null,
label:null
};
this.allowed_methods = ['get'];
this.filtering = {
data:null,
query:null
};
},
mapObjects: function(objects) {
return objects.map(function(object) {
return { value: object.id, label:object.toString() };
});
},
get_objects:function(req,filters,sorts,limit,offset,callback) {
var self = this;
var data = JSON.parse(filters.data);
var model = mongoose.model(data.model);
var query = data.query.replace(/__value__/g,escapeRegex(filters.query));
model.find({$where:query},function(err,results) {
if(results) {
if(results.objects)
results.objects = self.mapObjects(results.objects);
else
results = self.mapObjects(results);
}
callback(err,results);
});
}
});
api.register('ref',new Resource());
api_path = '/' + api.path + 'ref';
api_loaded = true;
};
function escapeRegex (a){
return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&");
}