load.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /**
  2. * Plugin to load a single locale. For example, load!en returns
  3. * an Object like { currencies: ..., numbers: ..., "ca-gregorian": ... }.
  4. * Used by locales! plugin.
  5. */
  6. define([
  7. "./calendars",
  8. "./common",
  9. "require",
  10. "module",
  11. "requirejs-text/text" // just so builder knows we will be using that module
  12. ], function (calendars, common, require, module) {
  13. return {
  14. id: module.id,
  15. load: function (locale, callerRequire, onload, loaderConfig) {
  16. // Compute dependencies to require().
  17. // For specified locale, load JSON files for its "currencies", "numbers" data.
  18. var jsonElements = ["currencies", "numbers"];
  19. var calendarsToLoad = [];
  20. var region = common._getRegion(locale);
  21. var supportedCalendars = common._getSupportedCalendars(region);
  22. supportedCalendars.forEach(function (calendar) {
  23. var calendarName = "ca-" + (calendar === "gregory" ? "gregorian" : calendar);
  24. // Add json data
  25. jsonElements.push(calendarName);
  26. // Add calendar module
  27. if (calendar !== "gregory") {
  28. calendarsToLoad.push(calendar);
  29. }
  30. });
  31. var dependencies;
  32. // Check if there is a layer
  33. var config = module.config();
  34. if (config[locale]) {
  35. dependencies = jsonElements = [config._layerMid + "_" + locale];
  36. } else {
  37. dependencies = jsonElements.map(function (element) {
  38. return "requirejs-text/text!../cldr/" + locale + "/" + element + ".json";
  39. });
  40. }
  41. var calendarDependencies = calendarsToLoad.map(function (calendar) {
  42. return "../calendars/" + calendars.dependencies[calendar].calendar;
  43. });
  44. dependencies = dependencies.concat(calendarDependencies);
  45. // Load all the JSON files requested, and any non-gregorian calendars
  46. // that are required. Return the locale data in a hash
  47. require(dependencies, function () {
  48. var dataAsArray = arguments, dataAsHash = {};
  49. jsonElements.forEach(function (element, idx) {
  50. if (config[locale]) {
  51. dataAsHash = dataAsArray[0];
  52. } else {
  53. dataAsHash[element] = JSON.parse(dataAsArray[idx]);
  54. }
  55. });
  56. calendarsToLoad.forEach(function (cal, idx) {
  57. calendars.calendarMap[cal] = dataAsArray[idx + jsonElements.length];
  58. });
  59. if (loaderConfig.isBuild) {
  60. dataAsHash.calendars = calendarsToLoad.map(function (calendar) {
  61. return calendars.dependencies[calendar].calendar;
  62. });
  63. }
  64. onload(dataAsHash);
  65. });
  66. }
  67. };
  68. });