1 | define([ |
---|
2 | "dojo/currency", // currency._mixInDefaults currency.format currency.parse currency.regexp |
---|
3 | "dojo/_base/declare", // declare |
---|
4 | "dojo/_base/lang", // lang.hitch |
---|
5 | "./NumberTextBox" |
---|
6 | ], function(currency, declare, lang, NumberTextBox){ |
---|
7 | |
---|
8 | // module: |
---|
9 | // dijit/form/CurrencyTextBox |
---|
10 | |
---|
11 | /*===== |
---|
12 | var __Constraints = declare([NumberTextBox.__Constraints, currency.__FormatOptions, currency.__ParseOptions], { |
---|
13 | // summary: |
---|
14 | // Specifies both the rules on valid/invalid values (minimum, maximum, |
---|
15 | // number of required decimal places), and also formatting options for |
---|
16 | // displaying the value when the field is not focused (currency symbol, |
---|
17 | // etc.) |
---|
18 | // description: |
---|
19 | // Follows the pattern of `dijit/form/NumberTextBox.__Constraints`. |
---|
20 | // In general developers won't need to set this parameter |
---|
21 | // example: |
---|
22 | // To ensure that the user types in the cents (for example, 1.00 instead of just 1): |
---|
23 | // | {fractional:true} |
---|
24 | }); |
---|
25 | =====*/ |
---|
26 | |
---|
27 | return declare("dijit.form.CurrencyTextBox", NumberTextBox, { |
---|
28 | // summary: |
---|
29 | // A validating currency textbox |
---|
30 | // description: |
---|
31 | // CurrencyTextBox is similar to `dijit/form/NumberTextBox` but has a few |
---|
32 | // extra features related to currency: |
---|
33 | // |
---|
34 | // 1. After specifying the currency type (american dollars, euros, etc.) it automatically |
---|
35 | // sets parse/format options such as how many decimal places to show. |
---|
36 | // 2. The currency mark (dollar sign, euro mark, etc.) is displayed when the field is blurred |
---|
37 | // but erased during editing, so that the user can just enter a plain number. |
---|
38 | |
---|
39 | // currency: [const] String |
---|
40 | // the [ISO4217](http://en.wikipedia.org/wiki/ISO_4217) currency code, a three letter sequence like "USD" |
---|
41 | currency: "", |
---|
42 | |
---|
43 | /*===== |
---|
44 | // constraints: __Constraints |
---|
45 | // Despite the name, this parameter specifies both constraints on the input |
---|
46 | // (including minimum/maximum allowed values) as well as |
---|
47 | // formatting options. |
---|
48 | constraints: {}, |
---|
49 | ======*/ |
---|
50 | |
---|
51 | baseClass: "dijitTextBox dijitCurrencyTextBox", |
---|
52 | |
---|
53 | // Override NumberTextBox._formatter to deal with currencies, ex: converts "123.45" to "$123.45" |
---|
54 | _formatter: currency.format, |
---|
55 | |
---|
56 | _parser: currency.parse, |
---|
57 | |
---|
58 | _regExpGenerator: currency.regexp, |
---|
59 | |
---|
60 | parse: function(/*String*/ value, /*Object*/ constraints){ |
---|
61 | // summary: |
---|
62 | // Parses string value as a Currency, according to the constraints object |
---|
63 | // tags: |
---|
64 | // protected extension |
---|
65 | var v = this.inherited(arguments); |
---|
66 | if(isNaN(v) && /\d+/.test(value)){ // currency parse failed, but it could be because they are using NumberTextBox format so try its parse |
---|
67 | v = lang.hitch(lang.delegate(this, { _parser: NumberTextBox.prototype._parser }), "inherited")(arguments); |
---|
68 | } |
---|
69 | return v; |
---|
70 | }, |
---|
71 | |
---|
72 | _setConstraintsAttr: function(/*Object*/ constraints){ |
---|
73 | if(!constraints.currency && this.currency){ |
---|
74 | constraints.currency = this.currency; |
---|
75 | } |
---|
76 | this.inherited(arguments, [ currency._mixInDefaults(lang.mixin(constraints, { exponent: false })) ]); // get places |
---|
77 | } |
---|
78 | }); |
---|
79 | }); |
---|