ace-editor.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /* global ace */
  2. import Ember from 'ember';
  3. export default Ember.Service.extend({
  4. includedJs: false,
  5. loadedJs: false,
  6. edit: function(elementId) {
  7. return ace.edit(elementId);
  8. },
  9. load: function() {
  10. if (!this.get('includedJs')) {
  11. this._includeJs();
  12. }
  13. if (!this.get('loadedJs')) {
  14. return this._loadingPromise();
  15. } else {
  16. return this._loadedPromise();
  17. }
  18. },
  19. _includeJs: function() {
  20. this.loader.require('misago/js/ace.js');
  21. this.set('includedJs', true);
  22. },
  23. _loadingPromise: function() {
  24. var self = this;
  25. return new Ember.RSVP.Promise(function(resolve) {
  26. var wait = function() {
  27. if (typeof ace === "undefined") {
  28. Ember.run.later(function () {
  29. wait();
  30. }, 200);
  31. } else {
  32. self.set('loadedJs', true);
  33. Ember.run(null, resolve);
  34. }
  35. };
  36. wait();
  37. });
  38. },
  39. _loadedPromise: function() {
  40. // we have already loaded ace.js, resolve away!
  41. return new Ember.RSVP.Promise(function(resolve) {
  42. Ember.run(null, resolve);
  43. });
  44. }
  45. });