index.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import OrderedList from 'misago/utils/ordered-list';
  2. export class Misago {
  3. constructor() {
  4. this._initializers = [];
  5. this._context = {};
  6. }
  7. addInitializer(initializer) {
  8. this._initializers.push({
  9. key: initializer.name,
  10. item: initializer.initializer,
  11. after: initializer.after,
  12. before: initializer.before
  13. });
  14. }
  15. init(context) {
  16. this._context = context;
  17. var initOrder = new OrderedList(this._initializers).orderedValues();
  18. initOrder.forEach(initializer => {
  19. initializer(this);
  20. });
  21. }
  22. // context accessors
  23. has(key) {
  24. return !!this._context[key];
  25. }
  26. get(key, fallback) {
  27. if (this.has(key)) {
  28. return this._context[key];
  29. } else {
  30. return fallback || undefined;
  31. }
  32. }
  33. pop(key) {
  34. if (this.has(key)) {
  35. let value = this._context[key];
  36. this._context[key] = null;
  37. return value;
  38. } else {
  39. return undefined;
  40. }
  41. }
  42. }
  43. // create singleton
  44. var misago = new Misago();
  45. // expose it globally
  46. global.misago = misago;
  47. // and export it for tests and stuff
  48. export default misago;