helpers.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. define(["amber/boot", "require"], function (boot, require) {
  2. var globals = boot.globals,
  3. exports = {},
  4. api = boot.api;
  5. // API
  6. exports.popupHelios = function () {
  7. require(['helios/index'], function (helios) {
  8. helios.popup();
  9. }, function (err) {
  10. window.alert("Error loading helios.\nIf not present, you can install it with 'npm install @ambers/helios --save-dev'.\nThe error follows:\n" + err);
  11. });
  12. };
  13. Object.defineProperty(exports, "api", {
  14. value: api,
  15. enumerable: true, configurable: true, writable: false
  16. });
  17. Object.defineProperty(exports, "globals", {
  18. value: globals,
  19. enumerable: true, configurable: true, writable: false
  20. });
  21. Object.defineProperty(exports, "$nil", {
  22. value: boot.nilAsReceiver,
  23. enumerable: true, configurable: true, writable: false
  24. });
  25. Object.defineProperty(exports, "nil", {
  26. value: boot.nilAsValue,
  27. enumerable: true, configurable: true, writable: false
  28. });
  29. function mixinToSettings (source) {
  30. var settings = globals.SmalltalkSettings;
  31. Object.keys(source).forEach(function (key) {
  32. settings[key] = source[key];
  33. });
  34. }
  35. function settingsInLocalStorage () {
  36. //jshint evil:true
  37. var storage = 'localStorage' in global && global.localStorage;
  38. if (storage) {
  39. var fromStorage;
  40. try {
  41. fromStorage = JSON.parse(storage.getItem('amber.SmalltalkSettings'));
  42. } catch (ex) {
  43. // pass
  44. }
  45. mixinToSettings(fromStorage || {});
  46. if (typeof window !== "undefined") {
  47. window.addEventListener('beforeunload', function () {
  48. storage.setItem('amber.SmalltalkSettings', JSON.stringify(globals.SmalltalkSettings));
  49. });
  50. }
  51. }
  52. }
  53. exports.initialize = function (options) {
  54. return new Promise(function (resolve) {
  55. globals.SmalltalkSettings['transport.defaultAmdNamespace'] = "amber/core";
  56. api.amdRequire = require; // TODO better
  57. settingsInLocalStorage();
  58. mixinToSettings(options || {});
  59. resolve(api.initialize());
  60. });
  61. };
  62. exports.loadPackages = function (modules) {
  63. return new Promise(function (resolve, reject) {
  64. require(modules, resolve, reject);
  65. }).then(function () {
  66. return globals.Smalltalk._postLoad();
  67. });
  68. };
  69. exports.beClean = function () {
  70. return globals.Smalltalk._beClean();
  71. };
  72. // Exports
  73. return exports;
  74. });