angular-translate-loader-static-files.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. /*!
  2. * angular-translate - v2.6.1 - 2015-03-01
  3. * http://github.com/angular-translate/angular-translate
  4. * Copyright (c) 2015 ; Licensed MIT
  5. */
  6. angular.module('pascalprecht.translate')
  7. /**
  8. * @ngdoc object
  9. * @name pascalprecht.translate.$translateStaticFilesLoader
  10. * @requires $q
  11. * @requires $http
  12. *
  13. * @description
  14. * Creates a loading function for a typical static file url pattern:
  15. * "lang-en_US.json", "lang-de_DE.json", etc. Using this builder,
  16. * the response of these urls must be an object of key-value pairs.
  17. *
  18. * @param {object} options Options object, which gets prefix, suffix and key.
  19. */
  20. .factory('$translateStaticFilesLoader', ['$q', '$http', function ($q, $http) {
  21. return function (options) {
  22. if (!options || (!angular.isArray(options.files) && (!angular.isString(options.prefix) || !angular.isString(options.suffix)))) {
  23. throw new Error('Couldn\'t load static files, no files and prefix or suffix specified!');
  24. }
  25. if (!options.files) {
  26. options.files = [{
  27. prefix: options.prefix,
  28. suffix: options.suffix
  29. }];
  30. }
  31. var load = function (file) {
  32. if (!file || (!angular.isString(file.prefix) || !angular.isString(file.suffix))) {
  33. throw new Error('Couldn\'t load static file, no prefix or suffix specified!');
  34. }
  35. var deferred = $q.defer();
  36. $http(angular.extend({
  37. url: [
  38. file.prefix,
  39. options.key,
  40. file.suffix
  41. ].join(''),
  42. method: 'GET',
  43. params: ''
  44. }, options.$http)).success(function (data) {
  45. deferred.resolve(data);
  46. }).error(function (data) {
  47. deferred.reject(options.key);
  48. });
  49. return deferred.promise;
  50. };
  51. var deferred = $q.defer(),
  52. promises = [],
  53. length = options.files.length;
  54. for (var i = 0; i < length; i++) {
  55. promises.push(load({
  56. prefix: options.files[i].prefix,
  57. key: options.key,
  58. suffix: options.files[i].suffix
  59. }));
  60. }
  61. $q.all(promises).then(function (data) {
  62. var length = data.length,
  63. mergedData = {};
  64. for (var i = 0; i < length; i++) {
  65. for (var key in data[i]) {
  66. mergedData[key] = data[i][key];
  67. }
  68. }
  69. deferred.resolve(mergedData);
  70. }, function (data) {
  71. deferred.reject(data);
  72. });
  73. return deferred.promise;
  74. };
  75. }]);