ElementTemplatesLoader.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. 'use strict';
  2. var Validator = require('./Validator');
  3. /**
  4. * The guy responsible for template loading.
  5. *
  6. * Provide the actual templates via the `config.elementTemplates`.
  7. *
  8. * That configuration can either be an array of template
  9. * descriptors or a node style callback to retrieve
  10. * the templates asynchronously.
  11. *
  12. * @param {Array<TemplateDescriptor>|Function} loadTemplates
  13. * @param {EventBus} eventBus
  14. * @param {ElementTemplates} elementTemplates
  15. */
  16. function ElementTemplatesLoader(loadTemplates, eventBus, elementTemplates) {
  17. this._loadTemplates = loadTemplates;
  18. this._eventBus = eventBus;
  19. this._elementTemplates = elementTemplates;
  20. var self = this;
  21. eventBus.on('diagram.init', function() {
  22. self.reload();
  23. });
  24. }
  25. module.exports = ElementTemplatesLoader;
  26. ElementTemplatesLoader.$inject = [
  27. 'config.elementTemplates',
  28. 'eventBus',
  29. 'elementTemplates'
  30. ];
  31. ElementTemplatesLoader.prototype.reload = function() {
  32. var self = this;
  33. var loadTemplates = this._loadTemplates;
  34. // no templates specified
  35. if (typeof loadTemplates === 'undefined') {
  36. return;
  37. }
  38. // template loader function specified
  39. if (typeof loadTemplates === 'function') {
  40. return loadTemplates(function(err, templates) {
  41. if (err) {
  42. return self.templateErrors([ err ]);
  43. }
  44. self.setTemplates(templates);
  45. });
  46. }
  47. // templates array specified
  48. if (loadTemplates.length) {
  49. return this.setTemplates(loadTemplates);
  50. }
  51. };
  52. ElementTemplatesLoader.prototype.setTemplates = function(templates) {
  53. var elementTemplates = this._elementTemplates;
  54. var validator = new Validator().addAll(templates);
  55. var errors = validator.getErrors(),
  56. validTemplates = validator.getValidTemplates();
  57. elementTemplates.set(validTemplates);
  58. if (errors.length) {
  59. this.templateErrors(errors);
  60. }
  61. this.templatesChanged();
  62. };
  63. ElementTemplatesLoader.prototype.templatesChanged = function() {
  64. this._eventBus.fire('elementTemplates.changed');
  65. };
  66. ElementTemplatesLoader.prototype.templateErrors = function(errors) {
  67. this._eventBus.fire('elementTemplates.errors', {
  68. errors: errors
  69. });
  70. };