All of my work from commits: dd4a194, 692644a, 4a60203, 5de46bc, 152042d, 64a2d4e...
[philo.git] / contrib / gilbert / media / gilbert / lib / models.js
diff --git a/contrib/gilbert/media/gilbert/lib/models.js b/contrib/gilbert/media/gilbert/lib/models.js
new file mode 100644 (file)
index 0000000..8d33dca
--- /dev/null
@@ -0,0 +1,86 @@
+Ext.ns('Gilbert.lib.models');
+
+
+Gilbert.lib.models.Model = Ext.extend(Object, {
+       
+       constructor: function (config) {
+               Ext.apply(this, config);
+               this.drag_drop_group = 'Gilbert.lib.models.Model(' + this.app_label + ',' + this.name + ') ';
+       },
+       
+       create_reader: function (config) {
+               return new Ext.data.JsonReader(Ext.applyIf(config||{}, {}));
+       },
+       
+       create_writer: function (config) {
+               return new Ext.data.JsonWriter(Ext.applyIf(config||{}, {
+                       encode: false,
+               }));
+       },
+       
+       create_proxy: function (config) {
+               return new Ext.data.DirectProxy(Ext.applyIf(config||{},{
+                       paramsAsHash: true,
+                       api: {
+                               read: this.api.data_read,
+                               create: this.api.data_create,
+                               update: this.api.data_update,
+                               destroy: this.api.data_destroy,
+                       },
+               }));
+       },
+       
+       create_store: function (config) {
+               return new Ext.data.Store(Ext.applyIf(config||{},{
+                       proxy: this.create_proxy(),
+                       reader: this.create_reader(),
+                       writer: this.create_writer(),
+                       remoteSort: true,
+               }));
+       },
+       
+});
+
+
+Gilbert.lib.models.ModelInstance = Ext.extend(Object, {
+       
+       constructor: function (model, pk) {
+               this.model = model;
+               this.pk = pk;
+       },
+       
+});
+
+
+Ext.data.Types.GILBERTMODELFOREIGNKEY = {
+       
+       convert: function (v, data) {
+               if (v) {
+                       return new Gilbert.lib.models.ModelInstance(Gilbert.get_model(v.app_label, v.name), v.pk);
+               } else {
+                       return null;
+               }
+       },
+       
+       sortType: Ext.data.SortTypes.none,
+       
+       type: 'gilbertmodelforeignkey',
+       
+}
+
+
+Ext.data.Types.GILBERTMODELFILEFIELD = {
+       
+       convert: function (v, data) {
+               if (v) {
+                       return v.url;
+               } else {
+                       return null;
+               }
+       },
+       
+       sortType: Ext.data.SortTypes.none,
+       
+       type: 'gilbertmodelfilefield',
+       
+}
\ No newline at end of file