models.js 829 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. (function (Misago) {
  2. 'use strict';
  3. var Models = function() {
  4. this.classes = {};
  5. this.deserializers = {};
  6. this.add = function(name, kwargs) {
  7. if (kwargs.class) {
  8. this.classes[name] = kwargs.class;
  9. }
  10. if (kwargs.deserialize) {
  11. this.deserializers[name] = kwargs.deserialize;
  12. }
  13. };
  14. this.new = function(name, data) {
  15. if (this.classes[name]) {
  16. return new this.classes[name](data);
  17. } else {
  18. return data;
  19. }
  20. };
  21. this.deserialize = function(name, json) {
  22. if (this.deserializers[name]) {
  23. return this.new(name, this.deserializers[name](json, this));
  24. } else {
  25. return this.new(name, json);
  26. }
  27. };
  28. };
  29. Misago.addService('models', function() {
  30. return new Models();
  31. });
  32. }(Misago.prototype));