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,1669 +0,0 @@
1
- (function webpackUniversalModuleDefinition(root, factory) {
2
- if(typeof exports === 'object' && typeof module === 'object')
3
- module.exports = factory();
4
- else if(typeof define === 'function' && define.amd)
5
- define([], factory);
6
- else if(typeof exports === 'object')
7
- exports["Cleave"] = factory();
8
- else
9
- root["Cleave"] = factory();
10
- })(this, function() {
11
- return /******/ (function(modules) { // webpackBootstrap
12
- /******/ // The module cache
13
- /******/ var installedModules = {};
14
-
15
- /******/ // The require function
16
- /******/ function __webpack_require__(moduleId) {
17
-
18
- /******/ // Check if module is in cache
19
- /******/ if(installedModules[moduleId])
20
- /******/ return installedModules[moduleId].exports;
21
-
22
- /******/ // Create a new module (and put it into the cache)
23
- /******/ var module = installedModules[moduleId] = {
24
- /******/ exports: {},
25
- /******/ id: moduleId,
26
- /******/ loaded: false
27
- /******/ };
28
-
29
- /******/ // Execute the module function
30
- /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
31
-
32
- /******/ // Flag the module as loaded
33
- /******/ module.loaded = true;
34
-
35
- /******/ // Return the exports of the module
36
- /******/ return module.exports;
37
- /******/ }
38
-
39
-
40
- /******/ // expose the modules object (__webpack_modules__)
41
- /******/ __webpack_require__.m = modules;
42
-
43
- /******/ // expose the module cache
44
- /******/ __webpack_require__.c = installedModules;
45
-
46
- /******/ // __webpack_public_path__
47
- /******/ __webpack_require__.p = "";
48
-
49
- /******/ // Load entry module and return exports
50
- /******/ return __webpack_require__(0);
51
- /******/ })
52
- /************************************************************************/
53
- /******/ ([
54
- /* 0 */
55
- /***/ (function(module, exports, __webpack_require__) {
56
-
57
- /* WEBPACK VAR INJECTION */(function(global) {'use strict';
58
-
59
- /**
60
- * Construct a new Cleave instance by passing the configuration object
61
- *
62
- * @param {String | HTMLElement} element
63
- * @param {Object} opts
64
- */
65
- var Cleave = function (element, opts) {
66
- var owner = this;
67
- var hasMultipleElements = false;
68
-
69
- if (typeof element === 'string') {
70
- owner.element = document.querySelector(element);
71
- hasMultipleElements = document.querySelectorAll(element).length > 1;
72
- } else {
73
- if (typeof element.length !== 'undefined' && element.length > 0) {
74
- owner.element = element[0];
75
- hasMultipleElements = element.length > 1;
76
- } else {
77
- owner.element = element;
78
- }
79
- }
80
-
81
- if (!owner.element) {
82
- throw new Error('[cleave.js] Please check the element');
83
- }
84
-
85
- if (hasMultipleElements) {
86
- try {
87
- // eslint-disable-next-line
88
- console.warn('[cleave.js] Multiple input fields matched, cleave.js will only take the first one.');
89
- } catch (e) {
90
- // Old IE
91
- }
92
- }
93
-
94
- opts.initValue = owner.element.value;
95
-
96
- owner.properties = Cleave.DefaultProperties.assign({}, opts);
97
-
98
- owner.init();
99
- };
100
-
101
- Cleave.prototype = {
102
- init: function () {
103
- var owner = this, pps = owner.properties;
104
-
105
- // no need to use this lib
106
- if (!pps.numeral && !pps.phone && !pps.creditCard && !pps.time && !pps.date && (pps.blocksLength === 0 && !pps.prefix)) {
107
- owner.onInput(pps.initValue);
108
-
109
- return;
110
- }
111
-
112
- pps.maxLength = Cleave.Util.getMaxLength(pps.blocks);
113
-
114
- owner.isAndroid = Cleave.Util.isAndroid();
115
- owner.lastInputValue = '';
116
- owner.isBackward = '';
117
-
118
- owner.onChangeListener = owner.onChange.bind(owner);
119
- owner.onKeyDownListener = owner.onKeyDown.bind(owner);
120
- owner.onFocusListener = owner.onFocus.bind(owner);
121
- owner.onCutListener = owner.onCut.bind(owner);
122
- owner.onCopyListener = owner.onCopy.bind(owner);
123
-
124
- owner.initSwapHiddenInput();
125
-
126
- owner.element.addEventListener('input', owner.onChangeListener);
127
- owner.element.addEventListener('keydown', owner.onKeyDownListener);
128
- owner.element.addEventListener('focus', owner.onFocusListener);
129
- owner.element.addEventListener('cut', owner.onCutListener);
130
- owner.element.addEventListener('copy', owner.onCopyListener);
131
-
132
-
133
- owner.initPhoneFormatter();
134
- owner.initDateFormatter();
135
- owner.initTimeFormatter();
136
- owner.initNumeralFormatter();
137
-
138
- // avoid touch input field if value is null
139
- // otherwise Firefox will add red box-shadow for <input required />
140
- if (pps.initValue || (pps.prefix && !pps.noImmediatePrefix)) {
141
- owner.onInput(pps.initValue);
142
- }
143
- },
144
-
145
- initSwapHiddenInput: function () {
146
- var owner = this, pps = owner.properties;
147
- if (!pps.swapHiddenInput) return;
148
-
149
- var inputFormatter = owner.element.cloneNode(true);
150
- owner.element.parentNode.insertBefore(inputFormatter, owner.element);
151
-
152
- owner.elementSwapHidden = owner.element;
153
- owner.elementSwapHidden.type = 'hidden';
154
-
155
- owner.element = inputFormatter;
156
- owner.element.id = '';
157
- },
158
-
159
- initNumeralFormatter: function () {
160
- var owner = this, pps = owner.properties;
161
-
162
- if (!pps.numeral) {
163
- return;
164
- }
165
-
166
- pps.numeralFormatter = new Cleave.NumeralFormatter(
167
- pps.numeralDecimalMark,
168
- pps.numeralIntegerScale,
169
- pps.numeralDecimalScale,
170
- pps.numeralThousandsGroupStyle,
171
- pps.numeralPositiveOnly,
172
- pps.stripLeadingZeroes,
173
- pps.prefix,
174
- pps.signBeforePrefix,
175
- pps.tailPrefix,
176
- pps.delimiter
177
- );
178
- },
179
-
180
- initTimeFormatter: function() {
181
- var owner = this, pps = owner.properties;
182
-
183
- if (!pps.time) {
184
- return;
185
- }
186
-
187
- pps.timeFormatter = new Cleave.TimeFormatter(pps.timePattern, pps.timeFormat);
188
- pps.blocks = pps.timeFormatter.getBlocks();
189
- pps.blocksLength = pps.blocks.length;
190
- pps.maxLength = Cleave.Util.getMaxLength(pps.blocks);
191
- },
192
-
193
- initDateFormatter: function () {
194
- var owner = this, pps = owner.properties;
195
-
196
- if (!pps.date) {
197
- return;
198
- }
199
-
200
- pps.dateFormatter = new Cleave.DateFormatter(pps.datePattern, pps.dateMin, pps.dateMax);
201
- pps.blocks = pps.dateFormatter.getBlocks();
202
- pps.blocksLength = pps.blocks.length;
203
- pps.maxLength = Cleave.Util.getMaxLength(pps.blocks);
204
- },
205
-
206
- initPhoneFormatter: function () {
207
- var owner = this, pps = owner.properties;
208
-
209
- if (!pps.phone) {
210
- return;
211
- }
212
-
213
- // Cleave.AsYouTypeFormatter should be provided by
214
- // external google closure lib
215
- try {
216
- pps.phoneFormatter = new Cleave.PhoneFormatter(
217
- new pps.root.Cleave.AsYouTypeFormatter(pps.phoneRegionCode),
218
- pps.delimiter
219
- );
220
- } catch (ex) {
221
- throw new Error('[cleave.js] Please include phone-type-formatter.{country}.js lib');
222
- }
223
- },
224
-
225
- onKeyDown: function (event) {
226
- var owner = this,
227
- charCode = event.which || event.keyCode;
228
-
229
- owner.lastInputValue = owner.element.value;
230
- owner.isBackward = charCode === 8;
231
- },
232
-
233
- onChange: function (event) {
234
- var owner = this, pps = owner.properties,
235
- Util = Cleave.Util;
236
-
237
- owner.isBackward = owner.isBackward || event.inputType === 'deleteContentBackward';
238
-
239
- var postDelimiter = Util.getPostDelimiter(owner.lastInputValue, pps.delimiter, pps.delimiters);
240
-
241
- if (owner.isBackward && postDelimiter) {
242
- pps.postDelimiterBackspace = postDelimiter;
243
- } else {
244
- pps.postDelimiterBackspace = false;
245
- }
246
-
247
- this.onInput(this.element.value);
248
- },
249
-
250
- onFocus: function () {
251
- var owner = this,
252
- pps = owner.properties;
253
- owner.lastInputValue = owner.element.value;
254
-
255
- if (pps.prefix && pps.noImmediatePrefix && !owner.element.value) {
256
- this.onInput(pps.prefix);
257
- }
258
-
259
- Cleave.Util.fixPrefixCursor(owner.element, pps.prefix, pps.delimiter, pps.delimiters);
260
- },
261
-
262
- onCut: function (e) {
263
- if (!Cleave.Util.checkFullSelection(this.element.value)) return;
264
- this.copyClipboardData(e);
265
- this.onInput('');
266
- },
267
-
268
- onCopy: function (e) {
269
- if (!Cleave.Util.checkFullSelection(this.element.value)) return;
270
- this.copyClipboardData(e);
271
- },
272
-
273
- copyClipboardData: function (e) {
274
- var owner = this,
275
- pps = owner.properties,
276
- Util = Cleave.Util,
277
- inputValue = owner.element.value,
278
- textToCopy = '';
279
-
280
- if (!pps.copyDelimiter) {
281
- textToCopy = Util.stripDelimiters(inputValue, pps.delimiter, pps.delimiters);
282
- } else {
283
- textToCopy = inputValue;
284
- }
285
-
286
- try {
287
- if (e.clipboardData) {
288
- e.clipboardData.setData('Text', textToCopy);
289
- } else {
290
- window.clipboardData.setData('Text', textToCopy);
291
- }
292
-
293
- e.preventDefault();
294
- } catch (ex) {
295
- // empty
296
- }
297
- },
298
-
299
- onInput: function (value) {
300
- var owner = this, pps = owner.properties,
301
- Util = Cleave.Util;
302
-
303
- // case 1: delete one more character "4"
304
- // 1234*| -> hit backspace -> 123|
305
- // case 2: last character is not delimiter which is:
306
- // 12|34* -> hit backspace -> 1|34*
307
- // note: no need to apply this for numeral mode
308
- var postDelimiterAfter = Util.getPostDelimiter(value, pps.delimiter, pps.delimiters);
309
- if (!pps.numeral && pps.postDelimiterBackspace && !postDelimiterAfter) {
310
- value = Util.headStr(value, value.length - pps.postDelimiterBackspace.length);
311
- }
312
-
313
- // phone formatter
314
- if (pps.phone) {
315
- if (pps.prefix && (!pps.noImmediatePrefix || value.length)) {
316
- pps.result = pps.prefix + pps.phoneFormatter.format(value).slice(pps.prefix.length);
317
- } else {
318
- pps.result = pps.phoneFormatter.format(value);
319
- }
320
- owner.updateValueState();
321
-
322
- return;
323
- }
324
-
325
- // numeral formatter
326
- if (pps.numeral) {
327
- // Do not show prefix when noImmediatePrefix is specified
328
- // This mostly because we need to show user the native input placeholder
329
- if (pps.prefix && pps.noImmediatePrefix && value.length === 0) {
330
- pps.result = '';
331
- } else {
332
- pps.result = pps.numeralFormatter.format(value);
333
- }
334
- owner.updateValueState();
335
-
336
- return;
337
- }
338
-
339
- // date
340
- if (pps.date) {
341
- value = pps.dateFormatter.getValidatedDate(value);
342
- }
343
-
344
- // time
345
- if (pps.time) {
346
- value = pps.timeFormatter.getValidatedTime(value);
347
- }
348
-
349
- // strip delimiters
350
- value = Util.stripDelimiters(value, pps.delimiter, pps.delimiters);
351
-
352
- // strip prefix
353
- value = Util.getPrefixStrippedValue(value, pps.prefix, pps.prefixLength, pps.result, pps.delimiter, pps.delimiters, pps.noImmediatePrefix, pps.tailPrefix, pps.signBeforePrefix);
354
-
355
- // strip non-numeric characters
356
- value = pps.numericOnly ? Util.strip(value, /[^\d]/g) : value;
357
-
358
- // convert case
359
- value = pps.uppercase ? value.toUpperCase() : value;
360
- value = pps.lowercase ? value.toLowerCase() : value;
361
-
362
- // prevent from showing prefix when no immediate option enabled with empty input value
363
- if (pps.prefix) {
364
- if (pps.tailPrefix) {
365
- value = value + pps.prefix;
366
- } else {
367
- value = pps.prefix + value;
368
- }
369
-
370
-
371
- // no blocks specified, no need to do formatting
372
- if (pps.blocksLength === 0) {
373
- pps.result = value;
374
- owner.updateValueState();
375
-
376
- return;
377
- }
378
- }
379
-
380
- // update credit card props
381
- if (pps.creditCard) {
382
- owner.updateCreditCardPropsByValue(value);
383
- }
384
-
385
- // strip over length characters
386
- value = Util.headStr(value, pps.maxLength);
387
-
388
- // apply blocks
389
- pps.result = Util.getFormattedValue(
390
- value,
391
- pps.blocks, pps.blocksLength,
392
- pps.delimiter, pps.delimiters, pps.delimiterLazyShow
393
- );
394
-
395
- owner.updateValueState();
396
- },
397
-
398
- updateCreditCardPropsByValue: function (value) {
399
- var owner = this, pps = owner.properties,
400
- Util = Cleave.Util,
401
- creditCardInfo;
402
-
403
- // At least one of the first 4 characters has changed
404
- if (Util.headStr(pps.result, 4) === Util.headStr(value, 4)) {
405
- return;
406
- }
407
-
408
- creditCardInfo = Cleave.CreditCardDetector.getInfo(value, pps.creditCardStrictMode);
409
-
410
- pps.blocks = creditCardInfo.blocks;
411
- pps.blocksLength = pps.blocks.length;
412
- pps.maxLength = Util.getMaxLength(pps.blocks);
413
-
414
- // credit card type changed
415
- if (pps.creditCardType !== creditCardInfo.type) {
416
- pps.creditCardType = creditCardInfo.type;
417
-
418
- pps.onCreditCardTypeChanged.call(owner, pps.creditCardType);
419
- }
420
- },
421
-
422
- updateValueState: function () {
423
- var owner = this,
424
- Util = Cleave.Util,
425
- pps = owner.properties;
426
-
427
- if (!owner.element) {
428
- return;
429
- }
430
-
431
- var endPos = owner.element.selectionEnd;
432
- var oldValue = owner.element.value;
433
- var newValue = pps.result;
434
-
435
- endPos = Util.getNextCursorPosition(endPos, oldValue, newValue, pps.delimiter, pps.delimiters);
436
-
437
- // fix Android browser type="text" input field
438
- // cursor not jumping issue
439
- if (owner.isAndroid) {
440
- window.setTimeout(function () {
441
- owner.element.value = newValue;
442
- Util.setSelection(owner.element, endPos, pps.document, false);
443
- owner.callOnValueChanged();
444
- }, 1);
445
-
446
- return;
447
- }
448
-
449
- owner.element.value = newValue;
450
- if (pps.swapHiddenInput) owner.elementSwapHidden.value = owner.getRawValue();
451
-
452
- Util.setSelection(owner.element, endPos, pps.document, false);
453
- owner.callOnValueChanged();
454
- },
455
-
456
- callOnValueChanged: function () {
457
- var owner = this,
458
- pps = owner.properties;
459
-
460
- pps.onValueChanged.call(owner, {
461
- target: {
462
- name: owner.element.name,
463
- value: pps.result,
464
- rawValue: owner.getRawValue()
465
- }
466
- });
467
- },
468
-
469
- setPhoneRegionCode: function (phoneRegionCode) {
470
- var owner = this, pps = owner.properties;
471
-
472
- pps.phoneRegionCode = phoneRegionCode;
473
- owner.initPhoneFormatter();
474
- owner.onChange();
475
- },
476
-
477
- setRawValue: function (value) {
478
- var owner = this, pps = owner.properties;
479
-
480
- value = value !== undefined && value !== null ? value.toString() : '';
481
-
482
- if (pps.numeral) {
483
- value = value.replace('.', pps.numeralDecimalMark);
484
- }
485
-
486
- pps.postDelimiterBackspace = false;
487
-
488
- owner.element.value = value;
489
- owner.onInput(value);
490
- },
491
-
492
- getRawValue: function () {
493
- var owner = this,
494
- pps = owner.properties,
495
- Util = Cleave.Util,
496
- rawValue = owner.element.value;
497
-
498
- if (pps.rawValueTrimPrefix) {
499
- rawValue = Util.getPrefixStrippedValue(rawValue, pps.prefix, pps.prefixLength, pps.result, pps.delimiter, pps.delimiters, pps.noImmediatePrefix, pps.tailPrefix, pps.signBeforePrefix);
500
- }
501
-
502
- if (pps.numeral) {
503
- rawValue = pps.numeralFormatter.getRawValue(rawValue);
504
- } else {
505
- rawValue = Util.stripDelimiters(rawValue, pps.delimiter, pps.delimiters);
506
- }
507
-
508
- return rawValue;
509
- },
510
-
511
- getISOFormatDate: function () {
512
- var owner = this,
513
- pps = owner.properties;
514
-
515
- return pps.date ? pps.dateFormatter.getISOFormatDate() : '';
516
- },
517
-
518
- getISOFormatTime: function () {
519
- var owner = this,
520
- pps = owner.properties;
521
-
522
- return pps.time ? pps.timeFormatter.getISOFormatTime() : '';
523
- },
524
-
525
- getFormattedValue: function () {
526
- return this.element.value;
527
- },
528
-
529
- destroy: function () {
530
- var owner = this;
531
-
532
- owner.element.removeEventListener('input', owner.onChangeListener);
533
- owner.element.removeEventListener('keydown', owner.onKeyDownListener);
534
- owner.element.removeEventListener('focus', owner.onFocusListener);
535
- owner.element.removeEventListener('cut', owner.onCutListener);
536
- owner.element.removeEventListener('copy', owner.onCopyListener);
537
- },
538
-
539
- toString: function () {
540
- return '[Cleave Object]';
541
- }
542
- };
543
-
544
- Cleave.NumeralFormatter = __webpack_require__(1);
545
- Cleave.DateFormatter = __webpack_require__(2);
546
- Cleave.TimeFormatter = __webpack_require__(3);
547
- Cleave.PhoneFormatter = __webpack_require__(4);
548
- Cleave.CreditCardDetector = __webpack_require__(5);
549
- Cleave.Util = __webpack_require__(6);
550
- Cleave.DefaultProperties = __webpack_require__(7);
551
-
552
- // for angular directive
553
- ((typeof global === 'object' && global) ? global : window)['Cleave'] = Cleave;
554
-
555
- // CommonJS
556
- module.exports = Cleave;
557
-
558
- /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
559
-
560
- /***/ }),
561
- /* 1 */
562
- /***/ (function(module, exports) {
563
-
564
- 'use strict';
565
-
566
- var NumeralFormatter = function (numeralDecimalMark,
567
- numeralIntegerScale,
568
- numeralDecimalScale,
569
- numeralThousandsGroupStyle,
570
- numeralPositiveOnly,
571
- stripLeadingZeroes,
572
- prefix,
573
- signBeforePrefix,
574
- tailPrefix,
575
- delimiter) {
576
- var owner = this;
577
-
578
- owner.numeralDecimalMark = numeralDecimalMark || '.';
579
- owner.numeralIntegerScale = numeralIntegerScale > 0 ? numeralIntegerScale : 0;
580
- owner.numeralDecimalScale = numeralDecimalScale >= 0 ? numeralDecimalScale : 2;
581
- owner.numeralThousandsGroupStyle = numeralThousandsGroupStyle || NumeralFormatter.groupStyle.thousand;
582
- owner.numeralPositiveOnly = !!numeralPositiveOnly;
583
- owner.stripLeadingZeroes = stripLeadingZeroes !== false;
584
- owner.prefix = (prefix || prefix === '') ? prefix : '';
585
- owner.signBeforePrefix = !!signBeforePrefix;
586
- owner.tailPrefix = !!tailPrefix;
587
- owner.delimiter = (delimiter || delimiter === '') ? delimiter : ',';
588
- owner.delimiterRE = delimiter ? new RegExp('\\' + delimiter, 'g') : '';
589
- };
590
-
591
- NumeralFormatter.groupStyle = {
592
- thousand: 'thousand',
593
- lakh: 'lakh',
594
- wan: 'wan',
595
- none: 'none'
596
- };
597
-
598
- NumeralFormatter.prototype = {
599
- getRawValue: function (value) {
600
- return value.replace(this.delimiterRE, '').replace(this.numeralDecimalMark, '.');
601
- },
602
-
603
- format: function (value) {
604
- var owner = this, parts, partSign, partSignAndPrefix, partInteger, partDecimal = '';
605
-
606
- // strip alphabet letters
607
- value = value.replace(/[A-Za-z]/g, '')
608
- // replace the first decimal mark with reserved placeholder
609
- .replace(owner.numeralDecimalMark, 'M')
610
-
611
- // strip non numeric letters except minus and "M"
612
- // this is to ensure prefix has been stripped
613
- .replace(/[^\dM-]/g, '')
614
-
615
- // replace the leading minus with reserved placeholder
616
- .replace(/^\-/, 'N')
617
-
618
- // strip the other minus sign (if present)
619
- .replace(/\-/g, '')
620
-
621
- // replace the minus sign (if present)
622
- .replace('N', owner.numeralPositiveOnly ? '' : '-')
623
-
624
- // replace decimal mark
625
- .replace('M', owner.numeralDecimalMark);
626
-
627
- // strip any leading zeros
628
- if (owner.stripLeadingZeroes) {
629
- value = value.replace(/^(-)?0+(?=\d)/, '$1');
630
- }
631
-
632
- partSign = value.slice(0, 1) === '-' ? '-' : '';
633
- if (typeof owner.prefix != 'undefined') {
634
- if (owner.signBeforePrefix) {
635
- partSignAndPrefix = partSign + owner.prefix;
636
- } else {
637
- partSignAndPrefix = owner.prefix + partSign;
638
- }
639
- } else {
640
- partSignAndPrefix = partSign;
641
- }
642
-
643
- partInteger = value;
644
-
645
- if (value.indexOf(owner.numeralDecimalMark) >= 0) {
646
- parts = value.split(owner.numeralDecimalMark);
647
- partInteger = parts[0];
648
- partDecimal = owner.numeralDecimalMark + parts[1].slice(0, owner.numeralDecimalScale);
649
- }
650
-
651
- if(partSign === '-') {
652
- partInteger = partInteger.slice(1);
653
- }
654
-
655
- if (owner.numeralIntegerScale > 0) {
656
- partInteger = partInteger.slice(0, owner.numeralIntegerScale);
657
- }
658
-
659
- switch (owner.numeralThousandsGroupStyle) {
660
- case NumeralFormatter.groupStyle.lakh:
661
- partInteger = partInteger.replace(/(\d)(?=(\d\d)+\d$)/g, '$1' + owner.delimiter);
662
-
663
- break;
664
-
665
- case NumeralFormatter.groupStyle.wan:
666
- partInteger = partInteger.replace(/(\d)(?=(\d{4})+$)/g, '$1' + owner.delimiter);
667
-
668
- break;
669
-
670
- case NumeralFormatter.groupStyle.thousand:
671
- partInteger = partInteger.replace(/(\d)(?=(\d{3})+$)/g, '$1' + owner.delimiter);
672
-
673
- break;
674
- }
675
-
676
- if (owner.tailPrefix) {
677
- return partSign + partInteger.toString() + (owner.numeralDecimalScale > 0 ? partDecimal.toString() : '') + owner.prefix;
678
- }
679
-
680
- return partSignAndPrefix + partInteger.toString() + (owner.numeralDecimalScale > 0 ? partDecimal.toString() : '');
681
- }
682
- };
683
-
684
- module.exports = NumeralFormatter;
685
-
686
-
687
- /***/ }),
688
- /* 2 */
689
- /***/ (function(module, exports) {
690
-
691
- 'use strict';
692
-
693
- var DateFormatter = function (datePattern, dateMin, dateMax) {
694
- var owner = this;
695
-
696
- owner.date = [];
697
- owner.blocks = [];
698
- owner.datePattern = datePattern;
699
- owner.dateMin = dateMin
700
- .split('-')
701
- .reverse()
702
- .map(function(x) {
703
- return parseInt(x, 10);
704
- });
705
- if (owner.dateMin.length === 2) owner.dateMin.unshift(0);
706
-
707
- owner.dateMax = dateMax
708
- .split('-')
709
- .reverse()
710
- .map(function(x) {
711
- return parseInt(x, 10);
712
- });
713
- if (owner.dateMax.length === 2) owner.dateMax.unshift(0);
714
-
715
- owner.initBlocks();
716
- };
717
-
718
- DateFormatter.prototype = {
719
- initBlocks: function () {
720
- var owner = this;
721
- owner.datePattern.forEach(function (value) {
722
- if (value === 'Y') {
723
- owner.blocks.push(4);
724
- } else {
725
- owner.blocks.push(2);
726
- }
727
- });
728
- },
729
-
730
- getISOFormatDate: function () {
731
- var owner = this,
732
- date = owner.date;
733
-
734
- return date[2] ? (
735
- date[2] + '-' + owner.addLeadingZero(date[1]) + '-' + owner.addLeadingZero(date[0])
736
- ) : '';
737
- },
738
-
739
- getBlocks: function () {
740
- return this.blocks;
741
- },
742
-
743
- getValidatedDate: function (value) {
744
- var owner = this, result = '';
745
-
746
- value = value.replace(/[^\d]/g, '');
747
-
748
- owner.blocks.forEach(function (length, index) {
749
- if (value.length > 0) {
750
- var sub = value.slice(0, length),
751
- sub0 = sub.slice(0, 1),
752
- rest = value.slice(length);
753
-
754
- switch (owner.datePattern[index]) {
755
- case 'd':
756
- if (sub === '00') {
757
- sub = '01';
758
- } else if (parseInt(sub0, 10) > 3) {
759
- sub = '0' + sub0;
760
- } else if (parseInt(sub, 10) > 31) {
761
- sub = '31';
762
- }
763
-
764
- break;
765
-
766
- case 'm':
767
- if (sub === '00') {
768
- sub = '01';
769
- } else if (parseInt(sub0, 10) > 1) {
770
- sub = '0' + sub0;
771
- } else if (parseInt(sub, 10) > 12) {
772
- sub = '12';
773
- }
774
-
775
- break;
776
- }
777
-
778
- result += sub;
779
-
780
- // update remaining string
781
- value = rest;
782
- }
783
- });
784
-
785
- return this.getFixedDateString(result);
786
- },
787
-
788
- getFixedDateString: function (value) {
789
- var owner = this, datePattern = owner.datePattern, date = [],
790
- dayIndex = 0, monthIndex = 0, yearIndex = 0,
791
- dayStartIndex = 0, monthStartIndex = 0, yearStartIndex = 0,
792
- day, month, year, fullYearDone = false;
793
-
794
- // mm-dd || dd-mm
795
- if (value.length === 4 && datePattern[0].toLowerCase() !== 'y' && datePattern[1].toLowerCase() !== 'y') {
796
- dayStartIndex = datePattern[0] === 'd' ? 0 : 2;
797
- monthStartIndex = 2 - dayStartIndex;
798
- day = parseInt(value.slice(dayStartIndex, dayStartIndex + 2), 10);
799
- month = parseInt(value.slice(monthStartIndex, monthStartIndex + 2), 10);
800
-
801
- date = this.getFixedDate(day, month, 0);
802
- }
803
-
804
- // yyyy-mm-dd || yyyy-dd-mm || mm-dd-yyyy || dd-mm-yyyy || dd-yyyy-mm || mm-yyyy-dd
805
- if (value.length === 8) {
806
- datePattern.forEach(function (type, index) {
807
- switch (type) {
808
- case 'd':
809
- dayIndex = index;
810
- break;
811
- case 'm':
812
- monthIndex = index;
813
- break;
814
- default:
815
- yearIndex = index;
816
- break;
817
- }
818
- });
819
-
820
- yearStartIndex = yearIndex * 2;
821
- dayStartIndex = (dayIndex <= yearIndex) ? dayIndex * 2 : (dayIndex * 2 + 2);
822
- monthStartIndex = (monthIndex <= yearIndex) ? monthIndex * 2 : (monthIndex * 2 + 2);
823
-
824
- day = parseInt(value.slice(dayStartIndex, dayStartIndex + 2), 10);
825
- month = parseInt(value.slice(monthStartIndex, monthStartIndex + 2), 10);
826
- year = parseInt(value.slice(yearStartIndex, yearStartIndex + 4), 10);
827
-
828
- fullYearDone = value.slice(yearStartIndex, yearStartIndex + 4).length === 4;
829
-
830
- date = this.getFixedDate(day, month, year);
831
- }
832
-
833
- // mm-yy || yy-mm
834
- if (value.length === 4 && (datePattern[0] === 'y' || datePattern[1] === 'y')) {
835
- monthStartIndex = datePattern[0] === 'm' ? 0 : 2;
836
- yearStartIndex = 2 - monthStartIndex;
837
- month = parseInt(value.slice(monthStartIndex, monthStartIndex + 2), 10);
838
- year = parseInt(value.slice(yearStartIndex, yearStartIndex + 2), 10);
839
-
840
- fullYearDone = value.slice(yearStartIndex, yearStartIndex + 2).length === 2;
841
-
842
- date = [0, month, year];
843
- }
844
-
845
- // mm-yyyy || yyyy-mm
846
- if (value.length === 6 && (datePattern[0] === 'Y' || datePattern[1] === 'Y')) {
847
- monthStartIndex = datePattern[0] === 'm' ? 0 : 4;
848
- yearStartIndex = 2 - 0.5 * monthStartIndex;
849
- month = parseInt(value.slice(monthStartIndex, monthStartIndex + 2), 10);
850
- year = parseInt(value.slice(yearStartIndex, yearStartIndex + 4), 10);
851
-
852
- fullYearDone = value.slice(yearStartIndex, yearStartIndex + 4).length === 4;
853
-
854
- date = [0, month, year];
855
- }
856
-
857
- date = owner.getRangeFixedDate(date);
858
- owner.date = date;
859
-
860
- var result = date.length === 0 ? value : datePattern.reduce(function (previous, current) {
861
- switch (current) {
862
- case 'd':
863
- return previous + (date[0] === 0 ? '' : owner.addLeadingZero(date[0]));
864
- case 'm':
865
- return previous + (date[1] === 0 ? '' : owner.addLeadingZero(date[1]));
866
- case 'y':
867
- return previous + (fullYearDone ? owner.addLeadingZeroForYear(date[2], false) : '');
868
- case 'Y':
869
- return previous + (fullYearDone ? owner.addLeadingZeroForYear(date[2], true) : '');
870
- }
871
- }, '');
872
-
873
- return result;
874
- },
875
-
876
- getRangeFixedDate: function (date) {
877
- var owner = this,
878
- datePattern = owner.datePattern,
879
- dateMin = owner.dateMin || [],
880
- dateMax = owner.dateMax || [];
881
-
882
- if (!date.length || (dateMin.length < 3 && dateMax.length < 3)) return date;
883
-
884
- if (
885
- datePattern.find(function(x) {
886
- return x.toLowerCase() === 'y';
887
- }) &&
888
- date[2] === 0
889
- ) return date;
890
-
891
- if (dateMax.length && (dateMax[2] < date[2] || (
892
- dateMax[2] === date[2] && (dateMax[1] < date[1] || (
893
- dateMax[1] === date[1] && dateMax[0] < date[0]
894
- ))
895
- ))) return dateMax;
896
-
897
- if (dateMin.length && (dateMin[2] > date[2] || (
898
- dateMin[2] === date[2] && (dateMin[1] > date[1] || (
899
- dateMin[1] === date[1] && dateMin[0] > date[0]
900
- ))
901
- ))) return dateMin;
902
-
903
- return date;
904
- },
905
-
906
- getFixedDate: function (day, month, year) {
907
- day = Math.min(day, 31);
908
- month = Math.min(month, 12);
909
- year = parseInt((year || 0), 10);
910
-
911
- if ((month < 7 && month % 2 === 0) || (month > 8 && month % 2 === 1)) {
912
- day = Math.min(day, month === 2 ? (this.isLeapYear(year) ? 29 : 28) : 30);
913
- }
914
-
915
- return [day, month, year];
916
- },
917
-
918
- isLeapYear: function (year) {
919
- return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);
920
- },
921
-
922
- addLeadingZero: function (number) {
923
- return (number < 10 ? '0' : '') + number;
924
- },
925
-
926
- addLeadingZeroForYear: function (number, fullYearMode) {
927
- if (fullYearMode) {
928
- return (number < 10 ? '000' : (number < 100 ? '00' : (number < 1000 ? '0' : ''))) + number;
929
- }
930
-
931
- return (number < 10 ? '0' : '') + number;
932
- }
933
- };
934
-
935
- module.exports = DateFormatter;
936
-
937
-
938
- /***/ }),
939
- /* 3 */
940
- /***/ (function(module, exports) {
941
-
942
- 'use strict';
943
-
944
- var TimeFormatter = function (timePattern, timeFormat) {
945
- var owner = this;
946
-
947
- owner.time = [];
948
- owner.blocks = [];
949
- owner.timePattern = timePattern;
950
- owner.timeFormat = timeFormat;
951
- owner.initBlocks();
952
- };
953
-
954
- TimeFormatter.prototype = {
955
- initBlocks: function () {
956
- var owner = this;
957
- owner.timePattern.forEach(function () {
958
- owner.blocks.push(2);
959
- });
960
- },
961
-
962
- getISOFormatTime: function () {
963
- var owner = this,
964
- time = owner.time;
965
-
966
- return time[2] ? (
967
- owner.addLeadingZero(time[0]) + ':' + owner.addLeadingZero(time[1]) + ':' + owner.addLeadingZero(time[2])
968
- ) : '';
969
- },
970
-
971
- getBlocks: function () {
972
- return this.blocks;
973
- },
974
-
975
- getTimeFormatOptions: function () {
976
- var owner = this;
977
- if (String(owner.timeFormat) === '12') {
978
- return {
979
- maxHourFirstDigit: 1,
980
- maxHours: 12,
981
- maxMinutesFirstDigit: 5,
982
- maxMinutes: 60
983
- };
984
- }
985
-
986
- return {
987
- maxHourFirstDigit: 2,
988
- maxHours: 23,
989
- maxMinutesFirstDigit: 5,
990
- maxMinutes: 60
991
- };
992
- },
993
-
994
- getValidatedTime: function (value) {
995
- var owner = this, result = '';
996
-
997
- value = value.replace(/[^\d]/g, '');
998
-
999
- var timeFormatOptions = owner.getTimeFormatOptions();
1000
-
1001
- owner.blocks.forEach(function (length, index) {
1002
- if (value.length > 0) {
1003
- var sub = value.slice(0, length),
1004
- sub0 = sub.slice(0, 1),
1005
- rest = value.slice(length);
1006
-
1007
- switch (owner.timePattern[index]) {
1008
-
1009
- case 'h':
1010
- if (parseInt(sub0, 10) > timeFormatOptions.maxHourFirstDigit) {
1011
- sub = '0' + sub0;
1012
- } else if (parseInt(sub, 10) > timeFormatOptions.maxHours) {
1013
- sub = timeFormatOptions.maxHours + '';
1014
- }
1015
-
1016
- break;
1017
-
1018
- case 'm':
1019
- case 's':
1020
- if (parseInt(sub0, 10) > timeFormatOptions.maxMinutesFirstDigit) {
1021
- sub = '0' + sub0;
1022
- } else if (parseInt(sub, 10) > timeFormatOptions.maxMinutes) {
1023
- sub = timeFormatOptions.maxMinutes + '';
1024
- }
1025
- break;
1026
- }
1027
-
1028
- result += sub;
1029
-
1030
- // update remaining string
1031
- value = rest;
1032
- }
1033
- });
1034
-
1035
- return this.getFixedTimeString(result);
1036
- },
1037
-
1038
- getFixedTimeString: function (value) {
1039
- var owner = this, timePattern = owner.timePattern, time = [],
1040
- secondIndex = 0, minuteIndex = 0, hourIndex = 0,
1041
- secondStartIndex = 0, minuteStartIndex = 0, hourStartIndex = 0,
1042
- second, minute, hour;
1043
-
1044
- if (value.length === 6) {
1045
- timePattern.forEach(function (type, index) {
1046
- switch (type) {
1047
- case 's':
1048
- secondIndex = index * 2;
1049
- break;
1050
- case 'm':
1051
- minuteIndex = index * 2;
1052
- break;
1053
- case 'h':
1054
- hourIndex = index * 2;
1055
- break;
1056
- }
1057
- });
1058
-
1059
- hourStartIndex = hourIndex;
1060
- minuteStartIndex = minuteIndex;
1061
- secondStartIndex = secondIndex;
1062
-
1063
- second = parseInt(value.slice(secondStartIndex, secondStartIndex + 2), 10);
1064
- minute = parseInt(value.slice(minuteStartIndex, minuteStartIndex + 2), 10);
1065
- hour = parseInt(value.slice(hourStartIndex, hourStartIndex + 2), 10);
1066
-
1067
- time = this.getFixedTime(hour, minute, second);
1068
- }
1069
-
1070
- if (value.length === 4 && owner.timePattern.indexOf('s') < 0) {
1071
- timePattern.forEach(function (type, index) {
1072
- switch (type) {
1073
- case 'm':
1074
- minuteIndex = index * 2;
1075
- break;
1076
- case 'h':
1077
- hourIndex = index * 2;
1078
- break;
1079
- }
1080
- });
1081
-
1082
- hourStartIndex = hourIndex;
1083
- minuteStartIndex = minuteIndex;
1084
-
1085
- second = 0;
1086
- minute = parseInt(value.slice(minuteStartIndex, minuteStartIndex + 2), 10);
1087
- hour = parseInt(value.slice(hourStartIndex, hourStartIndex + 2), 10);
1088
-
1089
- time = this.getFixedTime(hour, minute, second);
1090
- }
1091
-
1092
- owner.time = time;
1093
-
1094
- return time.length === 0 ? value : timePattern.reduce(function (previous, current) {
1095
- switch (current) {
1096
- case 's':
1097
- return previous + owner.addLeadingZero(time[2]);
1098
- case 'm':
1099
- return previous + owner.addLeadingZero(time[1]);
1100
- case 'h':
1101
- return previous + owner.addLeadingZero(time[0]);
1102
- }
1103
- }, '');
1104
- },
1105
-
1106
- getFixedTime: function (hour, minute, second) {
1107
- second = Math.min(parseInt(second || 0, 10), 60);
1108
- minute = Math.min(minute, 60);
1109
- hour = Math.min(hour, 60);
1110
-
1111
- return [hour, minute, second];
1112
- },
1113
-
1114
- addLeadingZero: function (number) {
1115
- return (number < 10 ? '0' : '') + number;
1116
- }
1117
- };
1118
-
1119
- module.exports = TimeFormatter;
1120
-
1121
-
1122
- /***/ }),
1123
- /* 4 */
1124
- /***/ (function(module, exports) {
1125
-
1126
- 'use strict';
1127
-
1128
- var PhoneFormatter = function (formatter, delimiter) {
1129
- var owner = this;
1130
-
1131
- owner.delimiter = (delimiter || delimiter === '') ? delimiter : ' ';
1132
- owner.delimiterRE = delimiter ? new RegExp('\\' + delimiter, 'g') : '';
1133
-
1134
- owner.formatter = formatter;
1135
- };
1136
-
1137
- PhoneFormatter.prototype = {
1138
- setFormatter: function (formatter) {
1139
- this.formatter = formatter;
1140
- },
1141
-
1142
- format: function (phoneNumber) {
1143
- var owner = this;
1144
-
1145
- owner.formatter.clear();
1146
-
1147
- // only keep number and +
1148
- phoneNumber = phoneNumber.replace(/[^\d+]/g, '');
1149
-
1150
- // strip non-leading +
1151
- phoneNumber = phoneNumber.replace(/^\+/, 'B').replace(/\+/g, '').replace('B', '+');
1152
-
1153
- // strip delimiter
1154
- phoneNumber = phoneNumber.replace(owner.delimiterRE, '');
1155
-
1156
- var result = '', current, validated = false;
1157
-
1158
- for (var i = 0, iMax = phoneNumber.length; i < iMax; i++) {
1159
- current = owner.formatter.inputDigit(phoneNumber.charAt(i));
1160
-
1161
- // has ()- or space inside
1162
- if (/[\s()-]/g.test(current)) {
1163
- result = current;
1164
-
1165
- validated = true;
1166
- } else {
1167
- if (!validated) {
1168
- result = current;
1169
- }
1170
- // else: over length input
1171
- // it turns to invalid number again
1172
- }
1173
- }
1174
-
1175
- // strip ()
1176
- // e.g. US: 7161234567 returns (716) 123-4567
1177
- result = result.replace(/[()]/g, '');
1178
- // replace library delimiter with user customized delimiter
1179
- result = result.replace(/[\s-]/g, owner.delimiter);
1180
-
1181
- return result;
1182
- }
1183
- };
1184
-
1185
- module.exports = PhoneFormatter;
1186
-
1187
-
1188
- /***/ }),
1189
- /* 5 */
1190
- /***/ (function(module, exports) {
1191
-
1192
- 'use strict';
1193
-
1194
- var CreditCardDetector = {
1195
- blocks: {
1196
- uatp: [4, 5, 6],
1197
- amex: [4, 6, 5],
1198
- diners: [4, 6, 4],
1199
- discover: [4, 4, 4, 4],
1200
- mastercard: [4, 4, 4, 4],
1201
- dankort: [4, 4, 4, 4],
1202
- instapayment: [4, 4, 4, 4],
1203
- jcb15: [4, 6, 5],
1204
- jcb: [4, 4, 4, 4],
1205
- maestro: [4, 4, 4, 4],
1206
- visa: [4, 4, 4, 4],
1207
- mir: [4, 4, 4, 4],
1208
- unionPay: [4, 4, 4, 4],
1209
- general: [4, 4, 4, 4]
1210
- },
1211
-
1212
- re: {
1213
- // starts with 1; 15 digits, not starts with 1800 (jcb card)
1214
- uatp: /^(?!1800)1\d{0,14}/,
1215
-
1216
- // starts with 34/37; 15 digits
1217
- amex: /^3[47]\d{0,13}/,
1218
-
1219
- // starts with 6011/65/644-649; 16 digits
1220
- discover: /^(?:6011|65\d{0,2}|64[4-9]\d?)\d{0,12}/,
1221
-
1222
- // starts with 300-305/309 or 36/38/39; 14 digits
1223
- diners: /^3(?:0([0-5]|9)|[689]\d?)\d{0,11}/,
1224
-
1225
- // starts with 51-55/2221–2720; 16 digits
1226
- mastercard: /^(5[1-5]\d{0,2}|22[2-9]\d{0,1}|2[3-7]\d{0,2})\d{0,12}/,
1227
-
1228
- // starts with 5019/4175/4571; 16 digits
1229
- dankort: /^(5019|4175|4571)\d{0,12}/,
1230
-
1231
- // starts with 637-639; 16 digits
1232
- instapayment: /^63[7-9]\d{0,13}/,
1233
-
1234
- // starts with 2131/1800; 15 digits
1235
- jcb15: /^(?:2131|1800)\d{0,11}/,
1236
-
1237
- // starts with 2131/1800/35; 16 digits
1238
- jcb: /^(?:35\d{0,2})\d{0,12}/,
1239
-
1240
- // starts with 50/56-58/6304/67; 16 digits
1241
- maestro: /^(?:5[0678]\d{0,2}|6304|67\d{0,2})\d{0,12}/,
1242
-
1243
- // starts with 22; 16 digits
1244
- mir: /^220[0-4]\d{0,12}/,
1245
-
1246
- // starts with 4; 16 digits
1247
- visa: /^4\d{0,15}/,
1248
-
1249
- // starts with 62/81; 16 digits
1250
- unionPay: /^(62|81)\d{0,14}/
1251
- },
1252
-
1253
- getStrictBlocks: function (block) {
1254
- var total = block.reduce(function (prev, current) {
1255
- return prev + current;
1256
- }, 0);
1257
-
1258
- return block.concat(19 - total);
1259
- },
1260
-
1261
- getInfo: function (value, strictMode) {
1262
- var blocks = CreditCardDetector.blocks,
1263
- re = CreditCardDetector.re;
1264
-
1265
- // Some credit card can have up to 19 digits number.
1266
- // Set strictMode to true will remove the 16 max-length restrain,
1267
- // however, I never found any website validate card number like
1268
- // this, hence probably you don't want to enable this option.
1269
- strictMode = !!strictMode;
1270
-
1271
- for (var key in re) {
1272
- if (re[key].test(value)) {
1273
- var matchedBlocks = blocks[key];
1274
- return {
1275
- type: key,
1276
- blocks: strictMode ? this.getStrictBlocks(matchedBlocks) : matchedBlocks
1277
- };
1278
- }
1279
- }
1280
-
1281
- return {
1282
- type: 'unknown',
1283
- blocks: strictMode ? this.getStrictBlocks(blocks.general) : blocks.general
1284
- };
1285
- }
1286
- };
1287
-
1288
- module.exports = CreditCardDetector;
1289
-
1290
-
1291
- /***/ }),
1292
- /* 6 */
1293
- /***/ (function(module, exports) {
1294
-
1295
- 'use strict';
1296
-
1297
- var Util = {
1298
- noop: function () {
1299
- },
1300
-
1301
- strip: function (value, re) {
1302
- return value.replace(re, '');
1303
- },
1304
-
1305
- getPostDelimiter: function (value, delimiter, delimiters) {
1306
- // single delimiter
1307
- if (delimiters.length === 0) {
1308
- return value.slice(-delimiter.length) === delimiter ? delimiter : '';
1309
- }
1310
-
1311
- // multiple delimiters
1312
- var matchedDelimiter = '';
1313
- delimiters.forEach(function (current) {
1314
- if (value.slice(-current.length) === current) {
1315
- matchedDelimiter = current;
1316
- }
1317
- });
1318
-
1319
- return matchedDelimiter;
1320
- },
1321
-
1322
- getDelimiterREByDelimiter: function (delimiter) {
1323
- return new RegExp(delimiter.replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1'), 'g');
1324
- },
1325
-
1326
- getNextCursorPosition: function (prevPos, oldValue, newValue, delimiter, delimiters) {
1327
- // If cursor was at the end of value, just place it back.
1328
- // Because new value could contain additional chars.
1329
- if (oldValue.length === prevPos) {
1330
- return newValue.length;
1331
- }
1332
-
1333
- return prevPos + this.getPositionOffset(prevPos, oldValue, newValue, delimiter ,delimiters);
1334
- },
1335
-
1336
- getPositionOffset: function (prevPos, oldValue, newValue, delimiter, delimiters) {
1337
- var oldRawValue, newRawValue, lengthOffset;
1338
-
1339
- oldRawValue = this.stripDelimiters(oldValue.slice(0, prevPos), delimiter, delimiters);
1340
- newRawValue = this.stripDelimiters(newValue.slice(0, prevPos), delimiter, delimiters);
1341
- lengthOffset = oldRawValue.length - newRawValue.length;
1342
-
1343
- return (lengthOffset !== 0) ? (lengthOffset / Math.abs(lengthOffset)) : 0;
1344
- },
1345
-
1346
- stripDelimiters: function (value, delimiter, delimiters) {
1347
- var owner = this;
1348
-
1349
- // single delimiter
1350
- if (delimiters.length === 0) {
1351
- var delimiterRE = delimiter ? owner.getDelimiterREByDelimiter(delimiter) : '';
1352
-
1353
- return value.replace(delimiterRE, '');
1354
- }
1355
-
1356
- // multiple delimiters
1357
- delimiters.forEach(function (current) {
1358
- current.split('').forEach(function (letter) {
1359
- value = value.replace(owner.getDelimiterREByDelimiter(letter), '');
1360
- });
1361
- });
1362
-
1363
- return value;
1364
- },
1365
-
1366
- headStr: function (str, length) {
1367
- return str.slice(0, length);
1368
- },
1369
-
1370
- getMaxLength: function (blocks) {
1371
- return blocks.reduce(function (previous, current) {
1372
- return previous + current;
1373
- }, 0);
1374
- },
1375
-
1376
- // strip prefix
1377
- // Before type | After type | Return value
1378
- // PEFIX-... | PEFIX-... | ''
1379
- // PREFIX-123 | PEFIX-123 | 123
1380
- // PREFIX-123 | PREFIX-23 | 23
1381
- // PREFIX-123 | PREFIX-1234 | 1234
1382
- getPrefixStrippedValue: function (value, prefix, prefixLength, prevResult, delimiter, delimiters, noImmediatePrefix, tailPrefix, signBeforePrefix) {
1383
- // No prefix
1384
- if (prefixLength === 0) {
1385
- return value;
1386
- }
1387
-
1388
- // Value is prefix
1389
- if (value === prefix && value !== '') {
1390
- return '';
1391
- }
1392
-
1393
- if (signBeforePrefix && (value.slice(0, 1) == '-')) {
1394
- var prev = (prevResult.slice(0, 1) == '-') ? prevResult.slice(1) : prevResult;
1395
- return '-' + this.getPrefixStrippedValue(value.slice(1), prefix, prefixLength, prev, delimiter, delimiters, noImmediatePrefix, tailPrefix, signBeforePrefix);
1396
- }
1397
-
1398
- // Pre result prefix string does not match pre-defined prefix
1399
- if (prevResult.slice(0, prefixLength) !== prefix && !tailPrefix) {
1400
- // Check if the first time user entered something
1401
- if (noImmediatePrefix && !prevResult && value) return value;
1402
- return '';
1403
- } else if (prevResult.slice(-prefixLength) !== prefix && tailPrefix) {
1404
- // Check if the first time user entered something
1405
- if (noImmediatePrefix && !prevResult && value) return value;
1406
- return '';
1407
- }
1408
-
1409
- var prevValue = this.stripDelimiters(prevResult, delimiter, delimiters);
1410
-
1411
- // New value has issue, someone typed in between prefix letters
1412
- // Revert to pre value
1413
- if (value.slice(0, prefixLength) !== prefix && !tailPrefix) {
1414
- return prevValue.slice(prefixLength);
1415
- } else if (value.slice(-prefixLength) !== prefix && tailPrefix) {
1416
- return prevValue.slice(0, -prefixLength - 1);
1417
- }
1418
-
1419
- // No issue, strip prefix for new value
1420
- return tailPrefix ? value.slice(0, -prefixLength) : value.slice(prefixLength);
1421
- },
1422
-
1423
- getFirstDiffIndex: function (prev, current) {
1424
- var index = 0;
1425
-
1426
- while (prev.charAt(index) === current.charAt(index)) {
1427
- if (prev.charAt(index++) === '') {
1428
- return -1;
1429
- }
1430
- }
1431
-
1432
- return index;
1433
- },
1434
-
1435
- getFormattedValue: function (value, blocks, blocksLength, delimiter, delimiters, delimiterLazyShow) {
1436
- var result = '',
1437
- multipleDelimiters = delimiters.length > 0,
1438
- currentDelimiter = '';
1439
-
1440
- // no options, normal input
1441
- if (blocksLength === 0) {
1442
- return value;
1443
- }
1444
-
1445
- blocks.forEach(function (length, index) {
1446
- if (value.length > 0) {
1447
- var sub = value.slice(0, length),
1448
- rest = value.slice(length);
1449
-
1450
- if (multipleDelimiters) {
1451
- currentDelimiter = delimiters[delimiterLazyShow ? (index - 1) : index] || currentDelimiter;
1452
- } else {
1453
- currentDelimiter = delimiter;
1454
- }
1455
-
1456
- if (delimiterLazyShow) {
1457
- if (index > 0) {
1458
- result += currentDelimiter;
1459
- }
1460
-
1461
- result += sub;
1462
- } else {
1463
- result += sub;
1464
-
1465
- if (sub.length === length && index < blocksLength - 1) {
1466
- result += currentDelimiter;
1467
- }
1468
- }
1469
-
1470
- // update remaining string
1471
- value = rest;
1472
- }
1473
- });
1474
-
1475
- return result;
1476
- },
1477
-
1478
- // move cursor to the end
1479
- // the first time user focuses on an input with prefix
1480
- fixPrefixCursor: function (el, prefix, delimiter, delimiters) {
1481
- if (!el) {
1482
- return;
1483
- }
1484
-
1485
- var val = el.value,
1486
- appendix = delimiter || (delimiters[0] || ' ');
1487
-
1488
- if (!el.setSelectionRange || !prefix || (prefix.length + appendix.length) <= val.length) {
1489
- return;
1490
- }
1491
-
1492
- var len = val.length * 2;
1493
-
1494
- // set timeout to avoid blink
1495
- setTimeout(function () {
1496
- el.setSelectionRange(len, len);
1497
- }, 1);
1498
- },
1499
-
1500
- // Check if input field is fully selected
1501
- checkFullSelection: function(value) {
1502
- try {
1503
- var selection = window.getSelection() || document.getSelection() || {};
1504
- return selection.toString().length === value.length;
1505
- } catch (ex) {
1506
- // Ignore
1507
- }
1508
-
1509
- return false;
1510
- },
1511
-
1512
- setSelection: function (element, position, doc) {
1513
- if (element !== this.getActiveElement(doc)) {
1514
- return;
1515
- }
1516
-
1517
- // cursor is already in the end
1518
- if (element && element.value.length <= position) {
1519
- return;
1520
- }
1521
-
1522
- if (element.createTextRange) {
1523
- var range = element.createTextRange();
1524
-
1525
- range.move('character', position);
1526
- range.select();
1527
- } else {
1528
- try {
1529
- element.setSelectionRange(position, position);
1530
- } catch (e) {
1531
- // eslint-disable-next-line
1532
- console.warn('The input element type does not support selection');
1533
- }
1534
- }
1535
- },
1536
-
1537
- getActiveElement: function(parent) {
1538
- var activeElement = parent.activeElement;
1539
- if (activeElement && activeElement.shadowRoot) {
1540
- return this.getActiveElement(activeElement.shadowRoot);
1541
- }
1542
- return activeElement;
1543
- },
1544
-
1545
- isAndroid: function () {
1546
- return navigator && /android/i.test(navigator.userAgent);
1547
- },
1548
-
1549
- // On Android chrome, the keyup and keydown events
1550
- // always return key code 229 as a composition that
1551
- // buffers the user’s keystrokes
1552
- // see https://github.com/nosir/cleave.js/issues/147
1553
- isAndroidBackspaceKeydown: function (lastInputValue, currentInputValue) {
1554
- if (!this.isAndroid() || !lastInputValue || !currentInputValue) {
1555
- return false;
1556
- }
1557
-
1558
- return currentInputValue === lastInputValue.slice(0, -1);
1559
- }
1560
- };
1561
-
1562
- module.exports = Util;
1563
-
1564
-
1565
- /***/ }),
1566
- /* 7 */
1567
- /***/ (function(module, exports) {
1568
-
1569
- /* WEBPACK VAR INJECTION */(function(global) {'use strict';
1570
-
1571
- /**
1572
- * Props Assignment
1573
- *
1574
- * Separate this, so react module can share the usage
1575
- */
1576
- var DefaultProperties = {
1577
- // Maybe change to object-assign
1578
- // for now just keep it as simple
1579
- assign: function (target, opts) {
1580
- target = target || {};
1581
- opts = opts || {};
1582
-
1583
- // credit card
1584
- target.creditCard = !!opts.creditCard;
1585
- target.creditCardStrictMode = !!opts.creditCardStrictMode;
1586
- target.creditCardType = '';
1587
- target.onCreditCardTypeChanged = opts.onCreditCardTypeChanged || (function () {});
1588
-
1589
- // phone
1590
- target.phone = !!opts.phone;
1591
- target.phoneRegionCode = opts.phoneRegionCode || 'AU';
1592
- target.phoneFormatter = {};
1593
-
1594
- // time
1595
- target.time = !!opts.time;
1596
- target.timePattern = opts.timePattern || ['h', 'm', 's'];
1597
- target.timeFormat = opts.timeFormat || '24';
1598
- target.timeFormatter = {};
1599
-
1600
- // date
1601
- target.date = !!opts.date;
1602
- target.datePattern = opts.datePattern || ['d', 'm', 'Y'];
1603
- target.dateMin = opts.dateMin || '';
1604
- target.dateMax = opts.dateMax || '';
1605
- target.dateFormatter = {};
1606
-
1607
- // numeral
1608
- target.numeral = !!opts.numeral;
1609
- target.numeralIntegerScale = opts.numeralIntegerScale > 0 ? opts.numeralIntegerScale : 0;
1610
- target.numeralDecimalScale = opts.numeralDecimalScale >= 0 ? opts.numeralDecimalScale : 2;
1611
- target.numeralDecimalMark = opts.numeralDecimalMark || '.';
1612
- target.numeralThousandsGroupStyle = opts.numeralThousandsGroupStyle || 'thousand';
1613
- target.numeralPositiveOnly = !!opts.numeralPositiveOnly;
1614
- target.stripLeadingZeroes = opts.stripLeadingZeroes !== false;
1615
- target.signBeforePrefix = !!opts.signBeforePrefix;
1616
- target.tailPrefix = !!opts.tailPrefix;
1617
-
1618
- // others
1619
- target.swapHiddenInput = !!opts.swapHiddenInput;
1620
-
1621
- target.numericOnly = target.creditCard || target.date || !!opts.numericOnly;
1622
-
1623
- target.uppercase = !!opts.uppercase;
1624
- target.lowercase = !!opts.lowercase;
1625
-
1626
- target.prefix = (target.creditCard || target.date) ? '' : (opts.prefix || '');
1627
- target.noImmediatePrefix = !!opts.noImmediatePrefix;
1628
- target.prefixLength = target.prefix.length;
1629
- target.rawValueTrimPrefix = !!opts.rawValueTrimPrefix;
1630
- target.copyDelimiter = !!opts.copyDelimiter;
1631
-
1632
- target.initValue = (opts.initValue !== undefined && opts.initValue !== null) ? opts.initValue.toString() : '';
1633
-
1634
- target.delimiter =
1635
- (opts.delimiter || opts.delimiter === '') ? opts.delimiter :
1636
- (opts.date ? '/' :
1637
- (opts.time ? ':' :
1638
- (opts.numeral ? ',' :
1639
- (opts.phone ? ' ' :
1640
- ' '))));
1641
- target.delimiterLength = target.delimiter.length;
1642
- target.delimiterLazyShow = !!opts.delimiterLazyShow;
1643
- target.delimiters = opts.delimiters || [];
1644
-
1645
- target.blocks = opts.blocks || [];
1646
- target.blocksLength = target.blocks.length;
1647
-
1648
- target.root = (typeof global === 'object' && global) ? global : window;
1649
- target.document = opts.document || target.root.document;
1650
-
1651
- target.maxLength = 0;
1652
-
1653
- target.backspace = false;
1654
- target.result = '';
1655
-
1656
- target.onValueChanged = opts.onValueChanged || (function () {});
1657
-
1658
- return target;
1659
- }
1660
- };
1661
-
1662
- module.exports = DefaultProperties;
1663
-
1664
- /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
1665
-
1666
- /***/ })
1667
- /******/ ])
1668
- });
1669
- ;