PageRenderTime 46ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/share/spice/mass_on_time/mass_on_time.js

http://github.com/duckduckgo/zeroclickinfo-spice
JavaScript | 127 lines | 103 code | 16 blank | 8 comment | 31 complexity | e6c5341b4706152d1c00754cea10e118 MD5 | raw file
Possible License(s): Apache-2.0
  1. (function(env){
  2. "use strict";
  3. function backup_link (parish_id) {
  4. return "http://massontime.com/parish/" + parish_id;
  5. }
  6. function parish_address (address, city, province) {
  7. if (address && city && province) {
  8. return address + ", " + city + ", " + province;
  9. } else if (address && city) {
  10. return address + ", " + city;
  11. } else if (address) {
  12. return address;
  13. } else {
  14. return "";
  15. }
  16. }
  17. //Event types are returns as integers. This converts them to their string reps.
  18. Handlebars.registerHelper("MassOnTime_format_eventtypeid", function (eventtypeid) {
  19. var event_type_name = {
  20. 1 : "Adoration",
  21. 2 : "Confession",
  22. 3 : "Devotion",
  23. 5 : "Holy Day Mass",
  24. 6 : "Holy Day Mass (Vigil)",
  25. 7 : "Weekday Mass",
  26. 8 : "Weekend Mass"
  27. };
  28. return event_type_name[eventtypeid] || "Service";
  29. });
  30. env.ddg_spice_mass_on_time = function (api_result) {
  31. if (!api_result || api_result.error) {
  32. return Spice.failed('mass_on_time');
  33. }
  34. var details = api_result['query-details'];
  35. // Check the URL if we passed in the "current" word.
  36. // This says if we should check for relevancy or not.
  37. var script = $('[src*="/js/spice/mass_on_time/"]')[0];
  38. var source = $(script).attr("src");
  39. var generate_header = function (query_details) {
  40. var type;
  41. //Convert the query type to plural and capitalize
  42. if (query_details.type == "mass") {
  43. type = "Masses";
  44. } else if (query_details.type == "parish") {
  45. type = "Parishes";
  46. } else if (query_details.type == "any") {
  47. type = "Services";
  48. } else {
  49. type = query_details.type.charAt(0).toUpperCase() + query_details.type.slice(1) + "s";
  50. }
  51. return type;
  52. };
  53. //Parishes return different info than events, so a different template is in order for those
  54. var pick_item_template = function (query_details) {
  55. if (query_details.type == "parish") {
  56. return Spice.mass_on_time.parish;
  57. } else {
  58. return Spice.mass_on_time.events;
  59. }
  60. };
  61. //Return if service couldn't find the address given
  62. if (details.location.lat === 0 && details.location.lng === 0) {
  63. return Spice.failed('mass_on_time');
  64. }
  65. //Filter results with no address
  66. var results = [];
  67. for(var i = api_result.results.length - 1; i >= 0; i--) {
  68. var result = api_result.results[i];
  69. // Check if it's the current location. If it is, don't check the relevancy.
  70. if (result.address !== null && result.address !== "" &&
  71. (/current$/.test(source) || DDG.stringsRelevant(details.address, result.city))) {
  72. results.unshift(result);
  73. }
  74. }
  75. if (results.length < 1) {
  76. return Spice.failed('mass_on_time');
  77. }
  78. DDG.require(['maps', 'moment.js'], function() {
  79. Spice.add({
  80. id: 'mass_on_time',
  81. data: results,
  82. name: 'Parishes',
  83. model: 'Place',
  84. view: 'Places',
  85. meta: {
  86. primaryText: 'Showing ' + results.length + ' ' + generate_header(details),
  87. sourceName: "Mass On Time",
  88. sourceUrl: 'http://massontime.com/nearest/' + details.type +
  89. "/25?lat=" +details.location.lat +
  90. "&lng=" + details.location.lng
  91. },
  92. normalize: function(item) {
  93. return {
  94. id: item.church_id,
  95. name: item.churchname,
  96. url: item.webaddress ? item.webaddress : backup_link(item.church_id),
  97. lon: item.lng,
  98. lat: item.lat,
  99. city: item.diocesename ? item.diocesename : item.city,
  100. address: parish_address(item.address, item.city, item.province),
  101. startTime: moment(item.starttime).format("h:mmA")
  102. };
  103. },
  104. templates: {
  105. group: 'places',
  106. item: Spice.mass_on_time.item
  107. }
  108. });
  109. });
  110. };
  111. }(this));