spree_core 4.2.7 → 4.3.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (249) hide show
  1. checksums.yaml +4 -4
  2. data/app/finders/concerns/spree/product_filterable.rb +9 -0
  3. data/app/finders/spree/cms_pages/find.rb +41 -0
  4. data/app/finders/spree/menus/find.rb +11 -0
  5. data/app/finders/spree/option_values/find_available.rb +20 -0
  6. data/app/finders/spree/orders/find_complete.rb +14 -2
  7. data/app/finders/spree/orders/find_current.rb +1 -13
  8. data/app/finders/spree/product_properties/find_available.rb +20 -0
  9. data/app/finders/spree/products/find.rb +55 -20
  10. data/app/finders/spree/stores/find_current.rb +24 -0
  11. data/app/helpers/spree/base_helper.rb +62 -2
  12. data/app/helpers/spree/locale_helper.rb +5 -1
  13. data/app/helpers/spree/products_helper.rb +7 -3
  14. data/app/models/concerns/spree/display_link.rb +42 -0
  15. data/app/models/concerns/spree/filter_param.rb +21 -0
  16. data/app/models/concerns/spree/memoized_data.rb +24 -0
  17. data/app/models/concerns/spree/multi_store_resource.rb +24 -0
  18. data/app/models/concerns/spree/product_scopes.rb +59 -8
  19. data/app/models/concerns/spree/single_store_resource.rb +9 -0
  20. data/app/models/concerns/spree/user_address.rb +19 -0
  21. data/app/models/concerns/spree/user_methods.rb +5 -4
  22. data/app/models/concerns/spree/user_payment_source.rb +1 -1
  23. data/app/models/spree/ability.rb +3 -1
  24. data/app/models/spree/address.rb +27 -6
  25. data/app/models/spree/app_configuration.rb +8 -0
  26. data/app/models/spree/app_dependencies.rb +18 -6
  27. data/app/models/spree/base.rb +18 -0
  28. data/app/models/spree/classification.rb +3 -0
  29. data/app/models/spree/cms/pages/feature_page.rb +7 -0
  30. data/app/models/spree/cms/pages/homepage.rb +20 -0
  31. data/app/models/spree/cms/pages/standard_page.rb +4 -0
  32. data/app/models/spree/cms/sections/featured_article.rb +29 -0
  33. data/app/models/spree/cms/sections/hero_image.rb +47 -0
  34. data/app/models/spree/cms/sections/image_gallery.rb +103 -0
  35. data/app/models/spree/cms/sections/product_carousel.rb +14 -0
  36. data/app/models/spree/cms/sections/rich_text_content.rb +13 -0
  37. data/app/models/spree/cms/sections/side_by_side_images.rb +74 -0
  38. data/app/models/spree/cms_page.rb +66 -0
  39. data/app/models/spree/cms_section.rb +57 -0
  40. data/app/models/spree/country.rb +14 -6
  41. data/app/models/spree/credit_card.rb +2 -8
  42. data/app/models/spree/customer_return.rb +8 -2
  43. data/app/models/spree/icon.rb +9 -0
  44. data/app/models/spree/image/configuration/active_storage.rb +2 -0
  45. data/app/models/spree/inventory_unit.rb +1 -1
  46. data/app/models/spree/line_item.rb +1 -1
  47. data/app/models/spree/menu.rb +63 -0
  48. data/app/models/spree/menu_item.rb +76 -0
  49. data/app/models/spree/option_type.rb +1 -1
  50. data/app/models/spree/option_value.rb +11 -0
  51. data/app/models/spree/option_value_variant.rb +1 -1
  52. data/app/models/spree/order/address_book.rb +3 -5
  53. data/app/models/spree/order/currency_updater.rb +1 -1
  54. data/app/models/spree/order/emails.rb +32 -0
  55. data/app/models/spree/order/payments.rb +1 -1
  56. data/app/models/spree/order/store_credit.rb +1 -9
  57. data/app/models/spree/order.rb +46 -45
  58. data/app/models/spree/payment.rb +7 -0
  59. data/app/models/spree/payment_method.rb +4 -0
  60. data/app/models/spree/preferences/preferable.rb +12 -0
  61. data/app/models/spree/preferences/preferable_class_methods.rb +10 -1
  62. data/app/models/spree/product.rb +27 -22
  63. data/app/models/spree/product_property.rb +19 -4
  64. data/app/models/spree/promotion/rules/country.rb +1 -1
  65. data/app/models/spree/promotion/rules/first_order.rb +4 -3
  66. data/app/models/spree/promotion/rules/taxon.rb +10 -7
  67. data/app/models/spree/promotion.rb +6 -15
  68. data/app/models/spree/promotion_handler/cart.rb +7 -2
  69. data/app/models/spree/promotion_handler/coupon.rb +5 -4
  70. data/app/models/spree/promotion_handler/free_shipping.rb +5 -6
  71. data/app/models/spree/promotion_handler/page.rb +3 -2
  72. data/app/models/spree/promotion_handler/promotion_duplicator.rb +1 -0
  73. data/app/models/spree/promotion_rule.rb +2 -0
  74. data/app/models/spree/property.rb +27 -0
  75. data/app/models/spree/reimbursement.rb +3 -1
  76. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +2 -1
  77. data/app/models/spree/shipment_handler.rb +4 -2
  78. data/app/models/spree/stock/quantifier.rb +6 -6
  79. data/app/models/spree/store.rb +90 -7
  80. data/app/models/spree/store_credit.rb +7 -3
  81. data/app/models/spree/store_credit_event.rb +2 -2
  82. data/app/models/spree/store_payment_method.rb +11 -0
  83. data/app/models/spree/store_product.rb +11 -0
  84. data/app/models/spree/store_promotion.rb +11 -0
  85. data/app/models/spree/taxon.rb +21 -1
  86. data/app/models/spree/taxon_image/configuration/active_storage.rb +2 -0
  87. data/app/models/spree/taxonomy.rb +3 -1
  88. data/app/models/spree/variant.rb +13 -4
  89. data/app/presenters/spree/filters/options_presenter.rb +27 -0
  90. data/app/presenters/spree/filters/price_presenter.rb +22 -0
  91. data/app/presenters/spree/filters/price_range_presenter.rb +29 -0
  92. data/app/presenters/spree/filters/properties_presenter.rb +23 -0
  93. data/app/presenters/spree/filters/property_presenter.rb +22 -0
  94. data/app/presenters/spree/filters/quantified_price_range_presenter.rb +44 -0
  95. data/app/services/spree/account/addresses/create.rb +1 -0
  96. data/app/services/spree/account/addresses/helper.rb +6 -0
  97. data/app/services/spree/account/addresses/update.rb +9 -3
  98. data/app/services/spree/account/create.rb +17 -0
  99. data/app/services/spree/account/update.rb +15 -0
  100. data/app/services/spree/build_localized_redirect_url.rb +1 -1
  101. data/app/services/spree/cart/create.rb +5 -3
  102. data/app/services/spree/cart/destroy.rb +40 -0
  103. data/app/services/spree/cart/empty.rb +36 -0
  104. data/app/services/spree/cart/estimate_shipping_rates.rb +3 -3
  105. data/app/services/spree/checkout/add_store_credit.rb +1 -1
  106. data/app/services/spree/classifications/reposition.rb +18 -0
  107. data/app/services/spree/credit_cards/destroy.rb +41 -0
  108. data/app/validators/db_maximum_length_validator.rb +5 -0
  109. data/app/validators/email_validator.rb +3 -1
  110. data/app/views/spree/shared/_purchased_items_table.text.erb +25 -0
  111. data/config/initializers/active_storage.rb +2 -0
  112. data/config/locales/en.yml +166 -2
  113. data/config/routes.rb +0 -5
  114. data/db/migrate/20201023152810_add_filterable_to_spree_properties.rb +8 -0
  115. data/db/migrate/20210407200948_create_spree_menus.rb +16 -0
  116. data/db/migrate/20210408092939_create_spree_menu_items.rb +31 -0
  117. data/db/migrate/20210504163720_add_filter_param_to_spree_product_properties.rb +8 -0
  118. data/db/migrate/20210505114659_add_filter_param_to_spree_properties.rb +8 -0
  119. data/db/migrate/20210512191732_create_spree_cms_pages.rb +24 -0
  120. data/db/migrate/20210514204251_create_spree_cms_sections.rb +22 -0
  121. data/db/migrate/20210527094055_create_spree_products_stores.rb +29 -0
  122. data/db/migrate/20210608045519_ensure_store_default_country_is_set.rb +5 -0
  123. data/db/migrate/20210702112334_add_missing_timestamp_columns.rb +46 -0
  124. data/db/migrate/20210713131614_add_unique_index_on_property_id_and_product_id_to_product_properties.rb +29 -0
  125. data/db/migrate/20210715091956_add_store_id_to_spree_store_credits.rb +10 -0
  126. data/db/migrate/20210716093151_add_store_id_to_spree_taxonomies.rb +11 -0
  127. data/db/migrate/20210716104141_add_index_on_name_parent_id_and_taxonomy_id_on_spree_taxons.rb +31 -0
  128. data/db/migrate/20210721120857_add_index_on_permalink_parent_id_and_taxonomy_id_on_spree_taxons.rb +31 -0
  129. data/db/migrate/20210721125657_create_spree_promotions_stores.rb +29 -0
  130. data/db/migrate/20210722090705_add_store_id_to_spree_customer_returns.rb +11 -0
  131. data/db/migrate/20210726065456_change_integer_id_columns_into_bigint.rb +305 -0
  132. data/db/migrate/20210730154425_fix_promotion_code_and_path_unique_indexes.rb +9 -0
  133. data/lib/generators/spree/dummy/dummy_generator.rb +11 -6
  134. data/lib/generators/spree/dummy_model/templates/model.rb.tt +1 -1
  135. data/lib/generators/spree/install/install_generator.rb +12 -24
  136. data/lib/spree/core/components.rb +8 -0
  137. data/lib/spree/core/controller_helpers/auth.rb +7 -1
  138. data/lib/spree/core/controller_helpers/common.rb +1 -1
  139. data/lib/spree/core/controller_helpers/order.rb +4 -4
  140. data/lib/spree/core/controller_helpers/search.rb +1 -0
  141. data/lib/spree/core/controller_helpers/store.rb +10 -1
  142. data/lib/spree/core/engine.rb +6 -0
  143. data/lib/spree/core/importer/product.rb +3 -1
  144. data/lib/spree/core/product_duplicator.rb +1 -0
  145. data/lib/spree/core/search/base.rb +17 -22
  146. data/lib/spree/core/version.rb +1 -1
  147. data/lib/spree/core.rb +8 -4
  148. data/lib/spree/i18n.rb +1 -1
  149. data/lib/spree/money.rb +2 -1
  150. data/lib/spree/permitted_attributes.rb +14 -3
  151. data/lib/spree/testing_support/authorization_helpers.rb +6 -3
  152. data/lib/spree/testing_support/capybara_config.rb +3 -1
  153. data/lib/spree/testing_support/common_rake.rb +17 -4
  154. data/lib/spree/testing_support/extension_rake.rb +2 -2
  155. data/lib/spree/testing_support/factories/address_factory.rb +1 -1
  156. data/lib/spree/testing_support/factories/classification_factory.rb +8 -0
  157. data/lib/spree/testing_support/factories/cms_page_factory.rb +20 -0
  158. data/lib/spree/testing_support/factories/cms_section_factory.rb +31 -0
  159. data/lib/spree/testing_support/factories/customer_return_factory.rb +24 -17
  160. data/lib/spree/testing_support/factories/icon_factory.rb +7 -0
  161. data/lib/spree/testing_support/factories/line_item_factory.rb +6 -2
  162. data/lib/spree/testing_support/factories/menu_factory.rb +16 -0
  163. data/lib/spree/testing_support/factories/menu_item_factory.rb +10 -0
  164. data/lib/spree/testing_support/factories/options_factory.rb +5 -0
  165. data/lib/spree/testing_support/factories/order_factory.rb +11 -2
  166. data/lib/spree/testing_support/factories/payment_method_factory.rb +6 -2
  167. data/lib/spree/testing_support/factories/product_factory.rb +11 -1
  168. data/lib/spree/testing_support/factories/product_property_factory.rb +1 -1
  169. data/lib/spree/testing_support/factories/promotion_factory.rb +18 -9
  170. data/lib/spree/testing_support/factories/property_factory.rb +22 -0
  171. data/lib/spree/testing_support/factories/stock_location_factory.rb +5 -4
  172. data/lib/spree/testing_support/factories/store_credit_factory.rb +1 -0
  173. data/lib/spree/testing_support/factories/store_factory.rb +11 -0
  174. data/lib/spree/testing_support/factories/taxon_factory.rb +3 -1
  175. data/lib/spree/testing_support/factories/taxon_image_factory.rb +7 -0
  176. data/lib/spree/testing_support/factories/taxonomy_factory.rb +1 -0
  177. data/lib/spree/testing_support/factories/user_factory.rb +7 -2
  178. data/lib/spree/testing_support/factories/variant_factory.rb +2 -2
  179. data/lib/spree/testing_support/flatpickr_capybara.rb +58 -35
  180. data/lib/spree/testing_support/order_walkthrough.rb +9 -9
  181. data/lib/tasks/core.rake +1 -1
  182. data/spec/fixtures/favicon.ico +0 -0
  183. data/spec/fixtures/files/icon_256x256.gif +0 -0
  184. data/spec/fixtures/files/icon_256x256.png +0 -0
  185. data/spec/fixtures/files/icon_512x512.png +0 -0
  186. data/spec/fixtures/files/img_256x128.png +0 -0
  187. data/spree_core.gemspec +11 -10
  188. metadata +207 -159
  189. data/app/assets/images/logo/spree_50.png +0 -0
  190. data/app/assets/images/noimage/large.png +0 -0
  191. data/app/assets/images/noimage/mini.png +0 -0
  192. data/app/assets/images/noimage/product.png +0 -0
  193. data/app/assets/images/noimage/small.png +0 -0
  194. data/app/assets/javascripts/spree.js +0 -78
  195. data/app/controllers/spree/errors_controller.rb +0 -11
  196. data/app/helpers/spree/mail_helper.rb +0 -29
  197. data/app/mailers/spree/base_mailer.rb +0 -46
  198. data/app/mailers/spree/order_mailer.rb +0 -26
  199. data/app/mailers/spree/reimbursement_mailer.rb +0 -12
  200. data/app/mailers/spree/shipment_mailer.rb +0 -12
  201. data/app/mailers/spree/test_mailer.rb +0 -8
  202. data/app/models/spree/order_contents.rb +0 -31
  203. data/app/models/spree/validations/db_maximum_length_validator.rb +0 -22
  204. data/app/views/layouts/spree/base_mailer.html.erb +0 -46
  205. data/app/views/spree/errors/forbidden.html.erb +0 -0
  206. data/app/views/spree/errors/unauthorized.html.erb +0 -0
  207. data/app/views/spree/order_mailer/cancel_email.html.erb +0 -24
  208. data/app/views/spree/order_mailer/cancel_email.text.erb +0 -38
  209. data/app/views/spree/order_mailer/confirm_email.html.erb +0 -23
  210. data/app/views/spree/order_mailer/confirm_email.text.erb +0 -39
  211. data/app/views/spree/order_mailer/store_owner_notification_email.html.erb +0 -23
  212. data/app/views/spree/order_mailer/store_owner_notification_email.text.erb +0 -38
  213. data/app/views/spree/reimbursement_mailer/reimbursement_email.html.erb +0 -56
  214. data/app/views/spree/reimbursement_mailer/reimbursement_email.text.erb +0 -24
  215. data/app/views/spree/shared/_base_mailer_footer.html.erb +0 -12
  216. data/app/views/spree/shared/_base_mailer_header.html.erb +0 -13
  217. data/app/views/spree/shared/_base_mailer_stylesheets.html.erb +0 -456
  218. data/app/views/spree/shared/_error_messages.html.erb +0 -11
  219. data/app/views/spree/shared/_mailer_line_item.html.erb +0 -16
  220. data/app/views/spree/shared/_paths.html.erb +0 -8
  221. data/app/views/spree/shared/_purchased_items_table.html.erb +0 -69
  222. data/app/views/spree/shared/purchased_items_table/_adjustment.html.erb +0 -13
  223. data/app/views/spree/shared/purchased_items_table/_line_item.html.erb +0 -27
  224. data/app/views/spree/shared/purchased_items_table/_subtotal.html.erb +0 -13
  225. data/app/views/spree/shared/purchased_items_table/_total.html.erb +0 -13
  226. data/app/views/spree/shipment_mailer/shipped_email.html.erb +0 -36
  227. data/app/views/spree/shipment_mailer/shipped_email.text.erb +0 -17
  228. data/app/views/spree/test_mailer/test_email.html.erb +0 -40
  229. data/app/views/spree/test_mailer/test_email.text.erb +0 -4
  230. data/config/initializers/assets.rb +0 -2
  231. data/config/initializers/premailer_assets.rb +0 -1
  232. data/config/initializers/premailer_rails.rb +0 -3
  233. data/db/migrate/20140805171219_make_existing_credit_cards_default.rb +0 -10
  234. data/lib/generators/spree/dummy/templates/initializers/bullet.rb +0 -5
  235. data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -15
  236. data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -16
  237. data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -16
  238. data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -16
  239. data/lib/generators/spree/mailers_preview/mailers_preview_generator.rb +0 -23
  240. data/lib/generators/spree/mailers_preview/templates/mailers/previews/order_preview.rb +0 -13
  241. data/lib/generators/spree/mailers_preview/templates/mailers/previews/reimbursement_preview.rb +0 -5
  242. data/lib/generators/spree/mailers_preview/templates/mailers/previews/shipment_preview.rb +0 -5
  243. data/lib/generators/spree/mailers_preview/templates/mailers/previews/user_preview.rb +0 -11
  244. data/lib/tasks/email.rake +0 -10
  245. data/vendor/assets/javascripts/cleave.js +0 -1669
  246. data/vendor/assets/javascripts/fetch.umd.js +0 -531
  247. data/vendor/assets/javascripts/jquery.payment.js +0 -652
  248. data/vendor/assets/javascripts/jsuri.js +0 -458
  249. data/vendor/assets/javascripts/polyfill.min.js +0 -1
@@ -1,458 +0,0 @@
1
- /*!
2
- * jsUri
3
- * https://github.com/derek-watson/jsUri
4
- *
5
- * Copyright 2013, Derek Watson
6
- * Released under the MIT license.
7
- *
8
- * Includes parseUri regular expressions
9
- * http://blog.stevenlevithan.com/archives/parseuri
10
- * Copyright 2007, Steven Levithan
11
- * Released under the MIT license.
12
- */
13
-
14
- /*globals define, module */
15
-
16
- (function(global) {
17
-
18
- var re = {
19
- starts_with_slashes: /^\/+/,
20
- ends_with_slashes: /\/+$/,
21
- pluses: /\+/g,
22
- query_separator: /[&;]/,
23
- uri_parser: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*)(?::([^:@]*))?)?@)?(\[[0-9a-fA-F:.]+\]|[^:\/?#]*)(?::(\d+|(?=:)))?(:)?)((((?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
24
- };
25
-
26
- /**
27
- * Define forEach for older js environments
28
- * @see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/forEach#Compatibility
29
- */
30
- if (!Array.prototype.forEach) {
31
- Array.prototype.forEach = function(callback, thisArg) {
32
- var T, k;
33
-
34
- if (this == null) {
35
- throw new TypeError(' this is null or not defined');
36
- }
37
-
38
- var O = Object(this);
39
- var len = O.length >>> 0;
40
-
41
- if (typeof callback !== "function") {
42
- throw new TypeError(callback + ' is not a function');
43
- }
44
-
45
- if (arguments.length > 1) {
46
- T = thisArg;
47
- }
48
-
49
- k = 0;
50
-
51
- while (k < len) {
52
- var kValue;
53
- if (k in O) {
54
- kValue = O[k];
55
- callback.call(T, kValue, k, O);
56
- }
57
- k++;
58
- }
59
- };
60
- }
61
-
62
- /**
63
- * unescape a query param value
64
- * @param {string} s encoded value
65
- * @return {string} decoded value
66
- */
67
- function decode(s) {
68
- if (s) {
69
- s = s.toString().replace(re.pluses, '%20');
70
- s = decodeURIComponent(s);
71
- }
72
- return s;
73
- }
74
-
75
- /**
76
- * Breaks a uri string down into its individual parts
77
- * @param {string} str uri
78
- * @return {object} parts
79
- */
80
- function parseUri(str) {
81
- var parser = re.uri_parser;
82
- var parserKeys = ["source", "protocol", "authority", "userInfo", "user", "password", "host", "port", "isColonUri", "relative", "path", "directory", "file", "query", "anchor"];
83
- var m = parser.exec(str || '');
84
- var parts = {};
85
-
86
- parserKeys.forEach(function(key, i) {
87
- parts[key] = m[i] || '';
88
- });
89
-
90
- return parts;
91
- }
92
-
93
- /**
94
- * Breaks a query string down into an array of key/value pairs
95
- * @param {string} str query
96
- * @return {array} array of arrays (key/value pairs)
97
- */
98
- function parseQuery(str) {
99
- var i, ps, p, n, k, v, l;
100
- var pairs = [];
101
-
102
- if (typeof(str) === 'undefined' || str === null || str === '') {
103
- return pairs;
104
- }
105
-
106
- if (str.indexOf('?') === 0) {
107
- str = str.substring(1);
108
- }
109
-
110
- ps = str.toString().split(re.query_separator);
111
-
112
- for (i = 0, l = ps.length; i < l; i++) {
113
- p = ps[i];
114
- n = p.indexOf('=');
115
-
116
- if (n !== 0) {
117
- k = decode(p.substring(0, n));
118
- v = decode(p.substring(n + 1));
119
- pairs.push(n === -1 ? [p, null] : [k, v]);
120
- }
121
-
122
- }
123
- return pairs;
124
- }
125
-
126
- /**
127
- * Creates a new Uri object
128
- * @constructor
129
- * @param {string} str
130
- */
131
- function Uri(str) {
132
- this.uriParts = parseUri(str);
133
- this.queryPairs = parseQuery(this.uriParts.query);
134
- this.hasAuthorityPrefixUserPref = null;
135
- }
136
-
137
- /**
138
- * Define getter/setter methods
139
- */
140
- ['protocol', 'userInfo', 'host', 'port', 'path', 'anchor'].forEach(function(key) {
141
- Uri.prototype[key] = function(val) {
142
- if (typeof val !== 'undefined') {
143
- this.uriParts[key] = val;
144
- }
145
- return this.uriParts[key];
146
- };
147
- });
148
-
149
- /**
150
- * if there is no protocol, the leading // can be enabled or disabled
151
- * @param {Boolean} val
152
- * @return {Boolean}
153
- */
154
- Uri.prototype.hasAuthorityPrefix = function(val) {
155
- if (typeof val !== 'undefined') {
156
- this.hasAuthorityPrefixUserPref = val;
157
- }
158
-
159
- if (this.hasAuthorityPrefixUserPref === null) {
160
- return (this.uriParts.source.indexOf('//') !== -1);
161
- } else {
162
- return this.hasAuthorityPrefixUserPref;
163
- }
164
- };
165
-
166
- Uri.prototype.isColonUri = function (val) {
167
- if (typeof val !== 'undefined') {
168
- this.uriParts.isColonUri = !!val;
169
- } else {
170
- return !!this.uriParts.isColonUri;
171
- }
172
- };
173
-
174
- /**
175
- * Serializes the internal state of the query pairs
176
- * @param {string} [val] set a new query string
177
- * @return {string} query string
178
- */
179
- Uri.prototype.query = function(val) {
180
- var s = '', i, param, l;
181
-
182
- if (typeof val !== 'undefined') {
183
- this.queryPairs = parseQuery(val);
184
- }
185
-
186
- for (i = 0, l = this.queryPairs.length; i < l; i++) {
187
- param = this.queryPairs[i];
188
- if (s.length > 0) {
189
- s += '&';
190
- }
191
- if (param[1] === null) {
192
- s += param[0];
193
- } else {
194
- s += param[0];
195
- s += '=';
196
- if (typeof param[1] !== 'undefined') {
197
- s += encodeURIComponent(param[1]);
198
- }
199
- }
200
- }
201
- return s.length > 0 ? '?' + s : s;
202
- };
203
-
204
- /**
205
- * returns the first query param value found for the key
206
- * @param {string} key query key
207
- * @return {string} first value found for key
208
- */
209
- Uri.prototype.getQueryParamValue = function (key) {
210
- var param, i, l;
211
- for (i = 0, l = this.queryPairs.length; i < l; i++) {
212
- param = this.queryPairs[i];
213
- if (key === param[0]) {
214
- return param[1];
215
- }
216
- }
217
- };
218
-
219
- /**
220
- * returns an array of query param values for the key
221
- * @param {string} key query key
222
- * @return {array} array of values
223
- */
224
- Uri.prototype.getQueryParamValues = function (key) {
225
- var arr = [], i, param, l;
226
- for (i = 0, l = this.queryPairs.length; i < l; i++) {
227
- param = this.queryPairs[i];
228
- if (key === param[0]) {
229
- arr.push(param[1]);
230
- }
231
- }
232
- return arr;
233
- };
234
-
235
- /**
236
- * removes query parameters
237
- * @param {string} key remove values for key
238
- * @param {val} [val] remove a specific value, otherwise removes all
239
- * @return {Uri} returns self for fluent chaining
240
- */
241
- Uri.prototype.deleteQueryParam = function (key, val) {
242
- var arr = [], i, param, keyMatchesFilter, valMatchesFilter, l;
243
-
244
- for (i = 0, l = this.queryPairs.length; i < l; i++) {
245
-
246
- param = this.queryPairs[i];
247
- keyMatchesFilter = decode(param[0]) === decode(key);
248
- valMatchesFilter = param[1] === val;
249
-
250
- if ((arguments.length === 1 && !keyMatchesFilter) || (arguments.length === 2 && (!keyMatchesFilter || !valMatchesFilter))) {
251
- arr.push(param);
252
- }
253
- }
254
-
255
- this.queryPairs = arr;
256
-
257
- return this;
258
- };
259
-
260
- /**
261
- * adds a query parameter
262
- * @param {string} key add values for key
263
- * @param {string} val value to add
264
- * @param {integer} [index] specific index to add the value at
265
- * @return {Uri} returns self for fluent chaining
266
- */
267
- Uri.prototype.addQueryParam = function (key, val, index) {
268
- if (arguments.length === 3 && index !== -1) {
269
- index = Math.min(index, this.queryPairs.length);
270
- this.queryPairs.splice(index, 0, [key, val]);
271
- } else if (arguments.length > 0) {
272
- this.queryPairs.push([key, val]);
273
- }
274
- return this;
275
- };
276
-
277
- /**
278
- * test for the existence of a query parameter
279
- * @param {string} key check values for key
280
- * @return {Boolean} true if key exists, otherwise false
281
- */
282
- Uri.prototype.hasQueryParam = function (key) {
283
- var i, len = this.queryPairs.length;
284
- for (i = 0; i < len; i++) {
285
- if (this.queryPairs[i][0] == key)
286
- return true;
287
- }
288
- return false;
289
- };
290
-
291
- /**
292
- * replaces query param values
293
- * @param {string} key key to replace value for
294
- * @param {string} newVal new value
295
- * @param {string} [oldVal] replace only one specific value (otherwise replaces all)
296
- * @return {Uri} returns self for fluent chaining
297
- */
298
- Uri.prototype.replaceQueryParam = function (key, newVal, oldVal) {
299
- var index = -1, len = this.queryPairs.length, i, param;
300
-
301
- if (arguments.length === 3) {
302
- for (i = 0; i < len; i++) {
303
- param = this.queryPairs[i];
304
- if (decode(param[0]) === decode(key) && decodeURIComponent(param[1]) === decode(oldVal)) {
305
- index = i;
306
- break;
307
- }
308
- }
309
- if (index >= 0) {
310
- this.deleteQueryParam(key, decode(oldVal)).addQueryParam(key, newVal, index);
311
- }
312
- } else {
313
- for (i = 0; i < len; i++) {
314
- param = this.queryPairs[i];
315
- if (decode(param[0]) === decode(key)) {
316
- index = i;
317
- break;
318
- }
319
- }
320
- this.deleteQueryParam(key);
321
- this.addQueryParam(key, newVal, index);
322
- }
323
- return this;
324
- };
325
-
326
- /**
327
- * Define fluent setter methods (setProtocol, setHasAuthorityPrefix, etc)
328
- */
329
- ['protocol', 'hasAuthorityPrefix', 'isColonUri', 'userInfo', 'host', 'port', 'path', 'query', 'anchor'].forEach(function(key) {
330
- var method = 'set' + key.charAt(0).toUpperCase() + key.slice(1);
331
- Uri.prototype[method] = function(val) {
332
- this[key](val);
333
- return this;
334
- };
335
- });
336
-
337
- /**
338
- * Scheme name, colon and doubleslash, as required
339
- * @return {string} http:// or possibly just //
340
- */
341
- Uri.prototype.scheme = function() {
342
- var s = '';
343
-
344
- if (this.protocol()) {
345
- s += this.protocol();
346
- if (this.protocol().indexOf(':') !== this.protocol().length - 1) {
347
- s += ':';
348
- }
349
- s += '//';
350
- } else {
351
- if (this.hasAuthorityPrefix() && this.host()) {
352
- s += '//';
353
- }
354
- }
355
-
356
- return s;
357
- };
358
-
359
- /**
360
- * Same as Mozilla nsIURI.prePath
361
- * @return {string} scheme://user:password@host:port
362
- * @see https://developer.mozilla.org/en/nsIURI
363
- */
364
- Uri.prototype.origin = function() {
365
- var s = this.scheme();
366
-
367
- if (this.userInfo() && this.host()) {
368
- s += this.userInfo();
369
- if (this.userInfo().indexOf('@') !== this.userInfo().length - 1) {
370
- s += '@';
371
- }
372
- }
373
-
374
- if (this.host()) {
375
- s += this.host();
376
- if (this.port() || (this.path() && this.path().substr(0, 1).match(/[0-9]/))) {
377
- s += ':' + this.port();
378
- }
379
- }
380
-
381
- return s;
382
- };
383
-
384
- /**
385
- * Adds a trailing slash to the path
386
- */
387
- Uri.prototype.addTrailingSlash = function() {
388
- var path = this.path() || '';
389
-
390
- if (path.substr(-1) !== '/') {
391
- this.path(path + '/');
392
- }
393
-
394
- return this;
395
- };
396
-
397
- /**
398
- * Serializes the internal state of the Uri object
399
- * @return {string}
400
- */
401
- Uri.prototype.toString = function() {
402
- var path, s = this.origin();
403
-
404
- if (this.isColonUri()) {
405
- if (this.path()) {
406
- s += ':'+this.path();
407
- }
408
- } else if (this.path()) {
409
- path = this.path();
410
- if (!(re.ends_with_slashes.test(s) || re.starts_with_slashes.test(path))) {
411
- s += '/';
412
- } else {
413
- if (s) {
414
- s.replace(re.ends_with_slashes, '/');
415
- }
416
- path = path.replace(re.starts_with_slashes, '/');
417
- }
418
- s += path;
419
- } else {
420
- if (this.host() && (this.query().toString() || this.anchor())) {
421
- s += '/';
422
- }
423
- }
424
- if (this.query().toString()) {
425
- s += this.query().toString();
426
- }
427
-
428
- if (this.anchor()) {
429
- if (this.anchor().indexOf('#') !== 0) {
430
- s += '#';
431
- }
432
- s += this.anchor();
433
- }
434
-
435
- return s;
436
- };
437
-
438
- /**
439
- * Clone a Uri object
440
- * @return {Uri} duplicate copy of the Uri
441
- */
442
- Uri.prototype.clone = function() {
443
- return new Uri(this.toString());
444
- };
445
-
446
- /**
447
- * export via AMD or CommonJS, otherwise leak a global
448
- */
449
- if (typeof define === 'function' && define.amd) {
450
- define(function() {
451
- return Uri;
452
- });
453
- } else if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
454
- module.exports = Uri;
455
- } else {
456
- global.Uri = Uri;
457
- }
458
- }(this));
@@ -1 +0,0 @@
1
- !function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n():"function"==typeof define&&define.amd?define(n):n()}(0,function(){"use strict";function e(e){var n=this.constructor;return this.then(function(t){return n.resolve(e()).then(function(){return t})},function(t){return n.resolve(e()).then(function(){return n.reject(t)})})}function n(){}function t(e){if(!(this instanceof t))throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=undefined,this._deferreds=[],u(e,this)}function o(e,n){for(;3===e._state;)e=e._value;0!==e._state?(e._handled=!0,t._immediateFn(function(){var t=1===e._state?n.onFulfilled:n.onRejected;if(null!==t){var o;try{o=t(e._value)}catch(f){return void i(n.promise,f)}r(n.promise,o)}else(1===e._state?r:i)(n.promise,e._value)})):e._deferreds.push(n)}function r(e,n){try{if(n===e)throw new TypeError("A promise cannot be resolved with itself.");if(n&&("object"==typeof n||"function"==typeof n)){var o=n.then;if(n instanceof t)return e._state=3,e._value=n,void f(e);if("function"==typeof o)return void u(function(e,n){return function(){e.apply(n,arguments)}}(o,n),e)}e._state=1,e._value=n,f(e)}catch(r){i(e,r)}}function i(e,n){e._state=2,e._value=n,f(e)}function f(e){2===e._state&&0===e._deferreds.length&&t._immediateFn(function(){e._handled||t._unhandledRejectionFn(e._value)});for(var n=0,r=e._deferreds.length;r>n;n++)o(e,e._deferreds[n]);e._deferreds=null}function u(e,n){var t=!1;try{e(function(e){t||(t=!0,r(n,e))},function(e){t||(t=!0,i(n,e))})}catch(o){if(t)return;t=!0,i(n,o)}}var c=setTimeout;t.prototype["catch"]=function(e){return this.then(null,e)},t.prototype.then=function(e,t){var r=new this.constructor(n);return o(this,new function(e,n,t){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof n?n:null,this.promise=t}(e,t,r)),r},t.prototype["finally"]=e,t.all=function(e){return new t(function(n,t){function o(e,f){try{if(f&&("object"==typeof f||"function"==typeof f)){var u=f.then;if("function"==typeof u)return void u.call(f,function(n){o(e,n)},t)}r[e]=f,0==--i&&n(r)}catch(c){t(c)}}if(!e||"undefined"==typeof e.length)throw new TypeError("Promise.all accepts an array");var r=Array.prototype.slice.call(e);if(0===r.length)return n([]);for(var i=r.length,f=0;r.length>f;f++)o(f,r[f])})},t.resolve=function(e){return e&&"object"==typeof e&&e.constructor===t?e:new t(function(n){n(e)})},t.reject=function(e){return new t(function(n,t){t(e)})},t.race=function(e){return new t(function(n,t){for(var o=0,r=e.length;r>o;o++)e[o].then(n,t)})},t._immediateFn="function"==typeof setImmediate&&function(e){setImmediate(e)}||function(e){c(e,0)},t._unhandledRejectionFn=function(e){void 0!==console&&console&&console.warn("Possible Unhandled Promise Rejection:",e)};var l=function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if("undefined"!=typeof global)return global;throw Error("unable to locate global object")}();"Promise"in l?l.Promise.prototype["finally"]||(l.Promise.prototype["finally"]=e):l.Promise=t});