CRM-14383 - Add CRM.$ and CRM._ noconflict objects
[civicrm-core.git] / js / model / crm.schema-mapped.js
CommitLineData
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);