Commit | Line | Data |
---|---|---|
6a488035 TO |
1 | /** |
2 | * Dynamically-generated alternative to civi.core.js | |
3 | */ | |
4 | (function($) { | |
5 | var CRM = (window.CRM) ? (window.CRM) : (window.CRM = {}); | |
6 | if (!CRM.Schema) CRM.Schema = {}; | |
7 | ||
8 | /** | |
9 | * Data models used by the Civi form designer require more attributes than basic Backbone models: | |
10 | * - sections: array of field-groupings | |
11 | * - schema: array of fields, keyed by field name, per backbone-forms; extra attributes: | |
12 | * + section: string, index to the 'sections' array | |
13 | * + civiFieldType: string | |
14 | * | |
15 | * @see https://github.com/powmedia/backbone-forms | |
16 | */ | |
17 | ||
18 | CRM.Schema.BaseModel = CRM.Backbone.Model.extend({ | |
19 | initialize: function() { | |
20 | } | |
21 | }); | |
22 | ||
23 | CRM.Schema.loadModels = function(civiSchema) { | |
24 | _.each(civiSchema, function(value, key, list) { | |
25 | CRM.Schema[key] = CRM.Schema.BaseModel.extend(value); | |
26 | }); | |
27 | }; | |
28 | ||
29 | CRM.Schema.reloadModels = function(options) { | |
30 | return $ | |
31 | .ajax({ | |
32 | url: CRM.url("civicrm/profile-editor/schema"), | |
33 | data: { | |
34 | 'entityTypes': _.keys(CRM.civiSchema).join(',') | |
35 | }, | |
36 | type: 'POST', | |
37 | dataType: 'json', | |
38 | success: function(data) { | |
39 | if (data) { | |
40 | CRM.civiSchema = data; | |
41 | CRM.Schema.loadModels(CRM.civiSchema); | |
42 | } | |
43 | } | |
44 | }); | |
45 | }; | |
46 | ||
47 | CRM.Schema.loadModels(CRM.civiSchema); | |
48 | })(cj); |