judge 0.3.1 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/docs/docco.css +196 -0
- data/docs/judge.html +284 -0
- data/judge.gemspec +4 -4
- data/lib/generators/judge/templates/judge.js +107 -47
- data/lib/judge/form.rb +17 -2
- data/test/dummy/app/models/foo.rb +6 -0
- data/test/dummy/app/views/foos/new.html.erb +21 -0
- data/test/judge_test.rb +84 -9
- metadata +7 -7
- data/test/dummy/log/development.log +0 -310
- data/test/dummy/log/production.log +0 -0
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
data/docs/docco.css
ADDED
@@ -0,0 +1,196 @@
|
|
1
|
+
/*--------------------- Layout and Typography ----------------------------*/
|
2
|
+
body {
|
3
|
+
font-family: 'Helvetica Neue', Helvetica, Arial, FreeSans, sans-serif;
|
4
|
+
font-size: 15px;
|
5
|
+
line-height: 1.8em;
|
6
|
+
color: #333;
|
7
|
+
margin: 0; padding: 0;
|
8
|
+
}
|
9
|
+
a {
|
10
|
+
color: #000;
|
11
|
+
background: #D8D9C7;
|
12
|
+
padding:3px;
|
13
|
+
}
|
14
|
+
a:visited {
|
15
|
+
color: #000;
|
16
|
+
}
|
17
|
+
p {
|
18
|
+
margin: 0 0 15px 0;
|
19
|
+
}
|
20
|
+
h1, h2, h3, h4, h5, h6 {
|
21
|
+
font-family: "Goudy Bookletter 1911", Georgia, Times New Roman, serif;
|
22
|
+
margin: 0px 0 15px 0;
|
23
|
+
}
|
24
|
+
h1 {
|
25
|
+
margin-top: 40px;
|
26
|
+
font-size:2.8em;
|
27
|
+
}
|
28
|
+
#container {
|
29
|
+
position: relative;
|
30
|
+
background:#EAEBD5;
|
31
|
+
}
|
32
|
+
#background {
|
33
|
+
position: fixed;
|
34
|
+
top: 0; left: 525px; right: 0; bottom: 0;
|
35
|
+
background: #f5f5ff;
|
36
|
+
border-left: 1px solid #e5e5ee;
|
37
|
+
z-index: -1;
|
38
|
+
}
|
39
|
+
#jump_to, #jump_page {
|
40
|
+
background: #EAEBD5;
|
41
|
+
-webkit-box-shadow: 0 0 25px #777; -moz-box-shadow: 0 0 25px #777;
|
42
|
+
-webkit-border-bottom-left-radius: 5px; -moz-border-radius-bottomleft: 5px;
|
43
|
+
font: 10px Arial;
|
44
|
+
text-transform: uppercase;
|
45
|
+
cursor: pointer;
|
46
|
+
text-align: right;
|
47
|
+
}
|
48
|
+
#jump_to, #jump_wrapper {
|
49
|
+
position: fixed;
|
50
|
+
right: 0; top: 0;
|
51
|
+
padding: 5px 10px;
|
52
|
+
}
|
53
|
+
#jump_wrapper {
|
54
|
+
padding: 0;
|
55
|
+
display: none;
|
56
|
+
}
|
57
|
+
#jump_to:hover #jump_wrapper {
|
58
|
+
display: block;
|
59
|
+
}
|
60
|
+
#jump_page {
|
61
|
+
padding: 5px 0 3px;
|
62
|
+
margin: 0 0 25px 25px;
|
63
|
+
}
|
64
|
+
#jump_page .source {
|
65
|
+
display: block;
|
66
|
+
padding: 5px 10px;
|
67
|
+
text-decoration: none;
|
68
|
+
border-top: 1px solid #eee;
|
69
|
+
}
|
70
|
+
#jump_page .source:hover {
|
71
|
+
background: #f5f5ff;
|
72
|
+
}
|
73
|
+
#jump_page .source:first-child {
|
74
|
+
}
|
75
|
+
table td {
|
76
|
+
border: 0;
|
77
|
+
outline: 0;
|
78
|
+
}
|
79
|
+
td.docs, th.docs {
|
80
|
+
max-width: 450px;
|
81
|
+
min-width: 450px;
|
82
|
+
min-height: 5px;
|
83
|
+
padding: 10px 25px 1px 50px;
|
84
|
+
overflow-x: hidden;
|
85
|
+
vertical-align: top;
|
86
|
+
text-align: left;
|
87
|
+
}
|
88
|
+
.docs pre {
|
89
|
+
margin: 15px 0 15px;
|
90
|
+
padding-left: 15px;
|
91
|
+
}
|
92
|
+
.docs p tt, .docs p code {
|
93
|
+
font-size: 15px;
|
94
|
+
padding: 3px;
|
95
|
+
font-weight:bold;
|
96
|
+
}
|
97
|
+
.pilwrap {
|
98
|
+
position: relative;
|
99
|
+
}
|
100
|
+
.pilcrow {
|
101
|
+
font: 12px Arial;
|
102
|
+
text-decoration: none;
|
103
|
+
color: #454545;
|
104
|
+
position: absolute;
|
105
|
+
top: 3px; left: -20px;
|
106
|
+
padding: 1px 2px;
|
107
|
+
opacity: 0;
|
108
|
+
-webkit-transition: opacity 0.2s linear;
|
109
|
+
}
|
110
|
+
td.docs:hover .pilcrow {
|
111
|
+
opacity: 1;
|
112
|
+
}
|
113
|
+
td.code, th.code {
|
114
|
+
padding: 14px 15px 16px 25px;
|
115
|
+
width: 100%;
|
116
|
+
vertical-align: top;
|
117
|
+
background: #C6C7AB;
|
118
|
+
/*border-left: 1px solid #ADAE8F;*/
|
119
|
+
moz-box-shadow: inset 5px 0px 5px -2px #adae8f;
|
120
|
+
-webkit-box-shadow: inset 5px 0px 5px -2px #adae8f;
|
121
|
+
box-shadow: inset 5px 0px 5px -2px #adae8f;
|
122
|
+
|
123
|
+
}
|
124
|
+
pre, tt, code {
|
125
|
+
font-size: 14px; line-height: 18px;
|
126
|
+
font-family: monospace;
|
127
|
+
margin: 0; padding: 0;
|
128
|
+
}
|
129
|
+
|
130
|
+
|
131
|
+
/*---------------------- Syntax Highlighting -----------------------------*/
|
132
|
+
td.linenos { background-color: #f0f0f0; padding-right: 10px; }
|
133
|
+
span.lineno { background-color: #f0f0f0; padding: 0 5px 0 5px; }
|
134
|
+
body .hll { background-color: #ffffcc }
|
135
|
+
body .c { color: #408080; font-style: italic } /* Comment */
|
136
|
+
body .err { border: 1px solid #FF0000 } /* Error */
|
137
|
+
body .k { color: #954121 } /* Keyword */
|
138
|
+
body .o { color: #666666 } /* Operator */
|
139
|
+
body .cm { color: #408080; font-style: italic } /* Comment.Multiline */
|
140
|
+
body .cp { color: #BC7A00 } /* Comment.Preproc */
|
141
|
+
body .c1 { color: #408080; font-style: italic } /* Comment.Single */
|
142
|
+
body .cs { color: #408080; font-style: italic } /* Comment.Special */
|
143
|
+
body .gd { color: #A00000 } /* Generic.Deleted */
|
144
|
+
body .ge { font-style: italic } /* Generic.Emph */
|
145
|
+
body .gr { color: #FF0000 } /* Generic.Error */
|
146
|
+
body .gh { color: #000080; font-weight: bold } /* Generic.Heading */
|
147
|
+
body .gi { color: #00A000 } /* Generic.Inserted */
|
148
|
+
body .go { color: #808080 } /* Generic.Output */
|
149
|
+
body .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
|
150
|
+
body .gs { font-weight: bold } /* Generic.Strong */
|
151
|
+
body .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
|
152
|
+
body .gt { color: #0040D0 } /* Generic.Traceback */
|
153
|
+
body .kc { color: #954121 } /* Keyword.Constant */
|
154
|
+
body .kd { color: #954121; font-weight: bold } /* Keyword.Declaration */
|
155
|
+
body .kn { color: #954121; font-weight: bold } /* Keyword.Namespace */
|
156
|
+
body .kp { color: #954121 } /* Keyword.Pseudo */
|
157
|
+
body .kr { color: #954121; font-weight: bold } /* Keyword.Reserved */
|
158
|
+
body .kt { color: #B00040 } /* Keyword.Type */
|
159
|
+
body .m { color: #666666 } /* Literal.Number */
|
160
|
+
body .s { color: #219161 } /* Literal.String */
|
161
|
+
body .na { color: #7D9029 } /* Name.Attribute */
|
162
|
+
body .nb { color: #954121 } /* Name.Builtin */
|
163
|
+
body .nc { color: #0000FF; font-weight: bold } /* Name.Class */
|
164
|
+
body .no { color: #880000 } /* Name.Constant */
|
165
|
+
body .nd { color: #AA22FF } /* Name.Decorator */
|
166
|
+
body .ni { color: #999999; font-weight: bold } /* Name.Entity */
|
167
|
+
body .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
|
168
|
+
body .nf { color: #0000FF } /* Name.Function */
|
169
|
+
body .nl { color: #A0A000 } /* Name.Label */
|
170
|
+
body .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
|
171
|
+
body .nt { color: #954121; font-weight: bold } /* Name.Tag */
|
172
|
+
body .nv { color: #19469D } /* Name.Variable */
|
173
|
+
body .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
|
174
|
+
body .w { color: #bbbbbb } /* Text.Whitespace */
|
175
|
+
body .mf { color: #666666 } /* Literal.Number.Float */
|
176
|
+
body .mh { color: #666666 } /* Literal.Number.Hex */
|
177
|
+
body .mi { color: #666666 } /* Literal.Number.Integer */
|
178
|
+
body .mo { color: #666666 } /* Literal.Number.Oct */
|
179
|
+
body .sb { color: #219161 } /* Literal.String.Backtick */
|
180
|
+
body .sc { color: #219161 } /* Literal.String.Char */
|
181
|
+
body .sd { color: #219161; font-style: italic } /* Literal.String.Doc */
|
182
|
+
body .s2 { color: #219161 } /* Literal.String.Double */
|
183
|
+
body .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
|
184
|
+
body .sh { color: #219161 } /* Literal.String.Heredoc */
|
185
|
+
body .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
|
186
|
+
body .sx { color: #954121 } /* Literal.String.Other */
|
187
|
+
body .sr { color: #BB6688 } /* Literal.String.Regex */
|
188
|
+
body .s1 { color: #219161 } /* Literal.String.Single */
|
189
|
+
body .ss { color: #19469D } /* Literal.String.Symbol */
|
190
|
+
body .bp { color: #954121 } /* Name.Builtin.Pseudo */
|
191
|
+
body .vc { color: #19469D } /* Name.Variable.Class */
|
192
|
+
body .vg { color: #19469D } /* Name.Variable.Global */
|
193
|
+
body .vi { color: #19469D } /* Name.Variable.Instance */
|
194
|
+
body .il { color: #666666 } /* Literal.Number.Integer.Long */
|
195
|
+
|
196
|
+
|
data/docs/judge.html
ADDED
@@ -0,0 +1,284 @@
|
|
1
|
+
<!DOCTYPE html> <html> <head> <title>judge.js</title> <link href="http://fonts.googleapis.com/css?family=Goudy+Bookletter+1911&v1" rel="stylesheet" type="text/css"> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th class="docs"> <h1> judge.js </h1> </th> <th class="code"> </th> </tr> </thead> <tbody> <tr id="section-1"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-1">¶</a> </div> <p>This is the JavaScript part of Judge, a client-side validation gem for Rails 3.
|
2
|
+
You can find a guide and some more traditional API documentation at <a href="http://joecorcoran.github.com/judge/">http://joecorcoran.github.com/judge/</a>.
|
3
|
+
Hopefully this page will help you understand what's happening under the hood.</p> </td> <td class="code"> <div class="highlight"><pre><span class="cm">/*jshint curly: true, evil: true, newcap: true, noarg: true */</span>
|
4
|
+
<span class="cm">/*global _: false, JSON: false */</span> </pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-2">¶</a> </div> <p>The judge namespace.</p> </td> <td class="code"> <div class="highlight"><pre><span class="kd">var</span> <span class="nx">judge</span> <span class="o">=</span> <span class="nx">judge</span> <span class="o">||</span> <span class="p">{};</span></pre></div> </td> </tr> <tr id="section-3"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-3">¶</a> </div> <p>A judge.Watcher is a DOM element wrapper that judge uses to store validation info and instance methods.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nx">judge</span><span class="p">.</span><span class="nx">Watcher</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">element</span><span class="p">)</span> <span class="p">{</span>
|
5
|
+
</pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-4">¶</a> </div> <p>Throw dependency errors.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nb">window</span><span class="p">.</span><span class="nx">hasOwnProperty</span><span class="p">(</span><span class="s1">'_'</span><span class="p">))</span> <span class="p">{</span>
|
6
|
+
<span class="k">throw</span> <span class="k">new</span> <span class="nx">ReferenceError</span><span class="p">(</span><span class="s1">'[judge] Underscore.js not found'</span><span class="p">);</span>
|
7
|
+
<span class="p">}</span>
|
8
|
+
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nb">window</span><span class="p">.</span><span class="nx">hasOwnProperty</span><span class="p">(</span><span class="s1">'JSON'</span><span class="p">))</span> <span class="p">{</span>
|
9
|
+
<span class="k">throw</span> <span class="k">new</span> <span class="nx">ReferenceError</span><span class="p">(</span><span class="s1">'[judge] JSON global object not found'</span><span class="p">);</span>
|
10
|
+
<span class="p">}</span></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-5">¶</a> </div> <p>Throw some constructor usage errors.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">if</span> <span class="p">(</span><span class="nx">_</span><span class="p">(</span><span class="nx">element</span><span class="p">).</span><span class="nx">isUndefined</span><span class="p">())</span> <span class="p">{</span>
|
11
|
+
<span class="k">throw</span> <span class="k">new</span> <span class="nx">ReferenceError</span><span class="p">(</span><span class="s1">'[judge] No DOM element passed to constructor'</span><span class="p">);</span>
|
12
|
+
<span class="p">}</span>
|
13
|
+
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">judge</span><span class="p">.</span><span class="nx">utils</span><span class="p">.</span><span class="nx">isValidatable</span><span class="p">(</span><span class="nx">element</span><span class="p">))</span> <span class="p">{</span>
|
14
|
+
<span class="k">throw</span> <span class="k">new</span> <span class="nx">TypeError</span><span class="p">(</span><span class="s1">'[judge] Cannot construct new Watcher for object of this type'</span><span class="p">);</span>
|
15
|
+
<span class="p">}</span>
|
16
|
+
<span class="k">if</span> <span class="p">(</span><span class="nx">element</span><span class="p">.</span><span class="nx">getAttribute</span><span class="p">(</span><span class="s1">'data-validate'</span><span class="p">)</span> <span class="o">===</span> <span class="kc">null</span><span class="p">)</span> <span class="p">{</span>
|
17
|
+
<span class="k">throw</span> <span class="k">new</span> <span class="nx">ReferenceError</span><span class="p">(</span><span class="s1">'[judge] Cannot construct Watcher for this element, use judge form builders'</span><span class="p">);</span>
|
18
|
+
<span class="p">}</span>
|
19
|
+
<span class="k">if</span> <span class="p">(</span><span class="nx">element</span><span class="p">.</span><span class="nx">form</span><span class="p">.</span><span class="nx">getAttribute</span><span class="p">(</span><span class="s1">'data-error-messages'</span><span class="p">)</span> <span class="o">===</span> <span class="kc">null</span><span class="p">)</span> <span class="p">{</span>
|
20
|
+
<span class="k">throw</span> <span class="k">new</span> <span class="nx">ReferenceError</span><span class="p">(</span><span class="s1">'[judge] Parent form was not created using judge form helper, please amend'</span><span class="p">);</span>
|
21
|
+
<span class="p">}</span></pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-6">¶</a> </div> <p>Convenient access to this Watcher.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="kd">var</span> <span class="nx">instance</span> <span class="o">=</span> <span class="k">this</span><span class="p">;</span></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-7">¶</a> </div> <p>Watcher instance properties.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">this</span><span class="p">.</span><span class="nx">element</span> <span class="o">=</span> <span class="nx">element</span><span class="p">;</span>
|
22
|
+
<span class="k">this</span><span class="p">.</span><span class="nx">validators</span> <span class="o">=</span> <span class="nx">JSON</span><span class="p">.</span><span class="nx">parse</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">element</span><span class="p">.</span><span class="nx">getAttribute</span><span class="p">(</span><span class="s1">'data-validate'</span><span class="p">));</span>
|
23
|
+
<span class="k">this</span><span class="p">.</span><span class="nx">defaultMessages</span> <span class="o">=</span> <span class="nx">JSON</span><span class="p">.</span><span class="nx">parse</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">element</span><span class="p">.</span><span class="nx">form</span><span class="p">.</span><span class="nx">getAttribute</span><span class="p">(</span><span class="s1">'data-error-messages'</span><span class="p">));</span>
|
24
|
+
</pre></div> </td> </tr> <tr id="section-8"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-8">¶</a> </div> <p>This instance method returns the validity of the watched element,
|
25
|
+
represented as an array of objects containing validity information
|
26
|
+
for each validator found on the element.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">this</span><span class="p">.</span><span class="nx">validate</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
|
27
|
+
<span class="nx">instance</span><span class="p">.</span><span class="nx">errorMessages</span> <span class="o">=</span> <span class="p">[];</span>
|
28
|
+
<span class="kd">var</span> <span class="nx">validators</span> <span class="o">=</span> <span class="nx">instance</span><span class="p">.</span><span class="nx">validators</span><span class="p">,</span>
|
29
|
+
<span class="nx">validity</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span>
|
30
|
+
<span class="nx">messages</span> <span class="o">=</span> <span class="p">[];</span>
|
31
|
+
<span class="nx">_</span><span class="p">(</span><span class="nx">validators</span><span class="p">).</span><span class="nx">each</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">validator</span><span class="p">)</span> <span class="p">{</span>
|
32
|
+
<span class="kd">var</span> <span class="nx">options</span> <span class="o">=</span> <span class="nx">validator</span><span class="p">.</span><span class="nx">options</span><span class="p">;</span>
|
33
|
+
<span class="k">if</span> <span class="p">(</span><span class="nx">instance</span><span class="p">.</span><span class="nx">element</span><span class="p">.</span><span class="nx">value</span><span class="p">.</span><span class="nx">length</span> <span class="o">||</span> <span class="nx">options</span><span class="p">.</span><span class="nx">allow_blank</span> <span class="o">!==</span> <span class="kc">true</span><span class="p">)</span> <span class="p">{</span>
|
34
|
+
<span class="kd">var</span> <span class="nx">result</span> <span class="o">=</span> <span class="nx">instance</span><span class="p">.</span><span class="nx">validates</span><span class="p">()[</span><span class="nx">validator</span><span class="p">.</span><span class="nx">kind</span><span class="p">](</span><span class="nx">options</span><span class="p">);</span>
|
35
|
+
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">result</span><span class="p">.</span><span class="nx">valid</span> <span class="o">&&</span> <span class="nx">result</span><span class="p">.</span><span class="nx">hasOwnProperty</span><span class="p">(</span><span class="s1">'messages'</span><span class="p">))</span> <span class="p">{</span>
|
36
|
+
<span class="nx">validity</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span>
|
37
|
+
<span class="nx">messages</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">result</span><span class="p">.</span><span class="nx">messages</span><span class="p">);</span>
|
38
|
+
<span class="p">}</span>
|
39
|
+
<span class="p">}</span>
|
40
|
+
<span class="p">});</span>
|
41
|
+
<span class="k">return</span> <span class="p">{</span>
|
42
|
+
<span class="nx">valid</span><span class="o">:</span> <span class="nx">validity</span><span class="p">,</span>
|
43
|
+
<span class="nx">messages</span><span class="o">:</span> <span class="nx">_</span><span class="p">(</span><span class="nx">messages</span><span class="p">).</span><span class="nx">flatten</span><span class="p">(),</span>
|
44
|
+
<span class="nx">element</span><span class="o">:</span> <span class="nx">instance</span><span class="p">.</span><span class="nx">element</span>
|
45
|
+
<span class="p">};</span>
|
46
|
+
<span class="p">};</span>
|
47
|
+
|
48
|
+
<span class="p">};</span></pre></div> </td> </tr> <tr id="section-9"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-9">¶</a> </div> <p>Watcher prototype methods.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nx">judge</span><span class="p">.</span><span class="nx">Watcher</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">validates</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
|
49
|
+
<span class="kd">var</span> <span class="nx">instance</span> <span class="o">=</span> <span class="k">this</span><span class="p">,</span>
|
50
|
+
<span class="nx">extendedMethods</span> <span class="o">=</span> <span class="nx">judge</span><span class="p">.</span><span class="nx">customValidators</span><span class="p">,</span>
|
51
|
+
<span class="nx">methods</span> <span class="o">=</span> <span class="p">{</span></pre></div> </td> </tr> <tr id="section-10"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-10">¶</a> </div> <p>Presence validator ported as closely as possible
|
52
|
+
from <a href="http://api.rubyonrails.org/classes/ActiveModel/Validations/PresenceValidator.html">ActiveModel::Validations::PresenceValidator</a>.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">presence</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">options</span><span class="p">)</span> <span class="p">{</span>
|
53
|
+
<span class="k">if</span> <span class="p">(</span><span class="nx">instance</span><span class="p">.</span><span class="nx">element</span><span class="p">.</span><span class="nx">value</span><span class="p">.</span><span class="nx">length</span><span class="p">)</span> <span class="p">{</span>
|
54
|
+
<span class="k">return</span> <span class="p">{</span> <span class="nx">valid</span><span class="o">:</span><span class="kc">true</span> <span class="p">};</span>
|
55
|
+
<span class="p">}</span> <span class="k">else</span><span class="p">{</span>
|
56
|
+
<span class="k">return</span> <span class="p">{</span> <span class="nx">valid</span><span class="o">:</span><span class="kc">false</span><span class="p">,</span> <span class="nx">messages</span><span class="o">:</span><span class="p">[</span><span class="nx">options</span><span class="p">.</span><span class="nx">message</span> <span class="o">||</span> <span class="nx">instance</span><span class="p">.</span><span class="nx">defaultMessages</span><span class="p">.</span><span class="nx">blank</span><span class="p">]</span> <span class="p">};</span>
|
57
|
+
<span class="p">}</span>
|
58
|
+
<span class="p">},</span>
|
59
|
+
</pre></div> </td> </tr> <tr id="section-11"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-11">¶</a> </div> <p>Length validator ported as closely as possible
|
60
|
+
from <a href="http://api.rubyonrails.org/classes/ActiveModel/Validations/LengthValidator.html">ActiveModel::Validations::LengthValidator</a>.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">length</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">options</span><span class="p">)</span> <span class="p">{</span>
|
61
|
+
<span class="kd">var</span> <span class="nx">msgs</span> <span class="o">=</span> <span class="p">[],</span>
|
62
|
+
<span class="nx">length</span> <span class="o">=</span> <span class="nx">instance</span><span class="p">.</span><span class="nx">element</span><span class="p">.</span><span class="nx">value</span><span class="p">.</span><span class="nx">length</span><span class="p">,</span>
|
63
|
+
<span class="nx">types</span> <span class="o">=</span> <span class="p">{</span>
|
64
|
+
<span class="nx">minimum</span><span class="o">:</span> <span class="p">{</span> <span class="nx">operator</span><span class="o">:</span> <span class="s1">'<'</span><span class="p">,</span> <span class="nx">message</span><span class="o">:</span> <span class="s1">'too_short'</span> <span class="p">},</span>
|
65
|
+
<span class="nx">maximum</span><span class="o">:</span> <span class="p">{</span> <span class="nx">operator</span><span class="o">:</span> <span class="s1">'>'</span><span class="p">,</span> <span class="nx">message</span><span class="o">:</span> <span class="s1">'too_long'</span> <span class="p">},</span>
|
66
|
+
<span class="nx">is</span><span class="o">:</span> <span class="p">{</span> <span class="nx">operator</span><span class="o">:</span> <span class="s1">'!='</span><span class="p">,</span> <span class="nx">message</span><span class="o">:</span> <span class="s1">'wrong_length'</span> <span class="p">}</span>
|
67
|
+
<span class="p">};</span>
|
68
|
+
<span class="nx">_</span><span class="p">(</span><span class="nx">types</span><span class="p">).</span><span class="nx">each</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">properties</span><span class="p">,</span> <span class="nx">type</span><span class="p">)</span> <span class="p">{</span>
|
69
|
+
<span class="kd">var</span> <span class="nx">invalid</span> <span class="o">=</span> <span class="nx">judge</span><span class="p">.</span><span class="nx">utils</span><span class="p">.</span><span class="nx">operate</span><span class="p">(</span><span class="nx">length</span><span class="p">,</span> <span class="nx">properties</span><span class="p">.</span><span class="nx">operator</span><span class="p">,</span> <span class="nx">options</span><span class="p">[</span><span class="nx">type</span><span class="p">]);</span>
|
70
|
+
<span class="k">if</span> <span class="p">(</span><span class="nx">options</span><span class="p">.</span><span class="nx">hasOwnProperty</span><span class="p">(</span><span class="nx">type</span><span class="p">)</span> <span class="o">&&</span> <span class="nx">invalid</span><span class="p">)</span> <span class="p">{</span>
|
71
|
+
<span class="kd">var</span> <span class="nx">m</span> <span class="o">=</span> <span class="nx">options</span><span class="p">[</span><span class="nx">properties</span><span class="p">.</span><span class="nx">message</span><span class="p">]</span> <span class="o">||</span> <span class="nx">instance</span><span class="p">.</span><span class="nx">defaultMessages</span><span class="p">[</span><span class="nx">properties</span><span class="p">.</span><span class="nx">message</span><span class="p">];</span>
|
72
|
+
<span class="nx">msgs</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">judge</span><span class="p">.</span><span class="nx">utils</span><span class="p">.</span><span class="nx">countMsg</span><span class="p">(</span><span class="nx">m</span><span class="p">,</span> <span class="nx">options</span><span class="p">[</span><span class="nx">type</span><span class="p">]));</span>
|
73
|
+
<span class="p">}</span>
|
74
|
+
<span class="p">});</span>
|
75
|
+
<span class="k">return</span> <span class="nx">msgs</span><span class="p">.</span><span class="nx">length</span> <span class="o">?</span> <span class="p">{</span> <span class="nx">valid</span><span class="o">:</span><span class="kc">false</span><span class="p">,</span> <span class="nx">messages</span><span class="o">:</span><span class="nx">msgs</span> <span class="p">}</span> <span class="o">:</span> <span class="p">{</span> <span class="nx">valid</span><span class="o">:</span><span class="kc">true</span> <span class="p">};</span>
|
76
|
+
<span class="p">},</span>
|
77
|
+
</pre></div> </td> </tr> <tr id="section-12"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-12">¶</a> </div> <p>Exclusion validator ported as closely as possible
|
78
|
+
from <a href="http://api.rubyonrails.org/classes/ActiveModel/Validations/ExclusionValidator.html">ActiveModel::Validations::ExclusionValidator</a>.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">exclusion</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">options</span><span class="p">)</span> <span class="p">{</span>
|
79
|
+
<span class="kd">var</span> <span class="nx">stringIn</span> <span class="o">=</span> <span class="nx">_</span><span class="p">(</span><span class="nx">options</span><span class="p">[</span><span class="s1">'in'</span><span class="p">]).</span><span class="nx">map</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="p">{</span> <span class="k">return</span> <span class="nx">o</span><span class="p">.</span><span class="nx">toString</span><span class="p">();</span> <span class="p">});</span>
|
80
|
+
<span class="k">if</span> <span class="p">(</span><span class="nx">_</span><span class="p">(</span><span class="nx">stringIn</span><span class="p">).</span><span class="nx">include</span><span class="p">(</span><span class="nx">instance</span><span class="p">.</span><span class="nx">element</span><span class="p">.</span><span class="nx">value</span><span class="p">))</span> <span class="p">{</span>
|
81
|
+
<span class="k">return</span> <span class="p">{</span>
|
82
|
+
<span class="nx">valid</span><span class="o">:</span><span class="kc">false</span><span class="p">,</span>
|
83
|
+
<span class="nx">messages</span><span class="o">:</span><span class="p">[</span><span class="nx">options</span><span class="p">.</span><span class="nx">message</span> <span class="o">||</span> <span class="nx">instance</span><span class="p">.</span><span class="nx">defaultMessages</span><span class="p">.</span><span class="nx">exclusion</span><span class="p">]</span>
|
84
|
+
<span class="p">};</span>
|
85
|
+
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
|
86
|
+
<span class="k">return</span> <span class="p">{</span> <span class="nx">valid</span><span class="o">:</span><span class="kc">true</span> <span class="p">};</span>
|
87
|
+
<span class="p">}</span>
|
88
|
+
<span class="p">},</span>
|
89
|
+
</pre></div> </td> </tr> <tr id="section-13"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-13">¶</a> </div> <p>Inclusion validator ported as closely as possible
|
90
|
+
from <a href="http://api.rubyonrails.org/classes/ActiveModel/Validations/InclusionValidator.html">ActiveModel::Validations::InclusionValidator</a>.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">inclusion</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">options</span><span class="p">)</span> <span class="p">{</span>
|
91
|
+
<span class="kd">var</span> <span class="nx">stringIn</span> <span class="o">=</span> <span class="nx">_</span><span class="p">(</span><span class="nx">options</span><span class="p">[</span><span class="s1">'in'</span><span class="p">]).</span><span class="nx">map</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="p">{</span> <span class="k">return</span> <span class="nx">o</span><span class="p">.</span><span class="nx">toString</span><span class="p">();</span> <span class="p">});</span>
|
92
|
+
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">_</span><span class="p">(</span><span class="nx">stringIn</span><span class="p">).</span><span class="nx">include</span><span class="p">(</span><span class="nx">instance</span><span class="p">.</span><span class="nx">element</span><span class="p">.</span><span class="nx">value</span><span class="p">))</span> <span class="p">{</span>
|
93
|
+
<span class="k">return</span> <span class="p">{</span>
|
94
|
+
<span class="nx">valid</span><span class="o">:</span><span class="kc">false</span><span class="p">,</span>
|
95
|
+
<span class="nx">messages</span><span class="o">:</span><span class="p">[</span><span class="nx">options</span><span class="p">.</span><span class="nx">message</span> <span class="o">||</span> <span class="nx">instance</span><span class="p">.</span><span class="nx">defaultMessages</span><span class="p">.</span><span class="nx">inclusion</span><span class="p">]</span>
|
96
|
+
<span class="p">};</span>
|
97
|
+
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
|
98
|
+
<span class="k">return</span> <span class="p">{</span> <span class="nx">valid</span><span class="o">:</span><span class="kc">true</span> <span class="p">};</span>
|
99
|
+
<span class="p">}</span>
|
100
|
+
<span class="p">},</span>
|
101
|
+
</pre></div> </td> </tr> <tr id="section-14"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-14">¶</a> </div> <p>Numericality validator ported as closely as possible
|
102
|
+
from <a href="http://api.rubyonrails.org/classes/ActiveModel/Validations/NumericalityValidator.html">ActiveModel::Validations::NumericalityValidator</a>.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">numericality</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">options</span><span class="p">)</span> <span class="p">{</span>
|
103
|
+
<span class="kd">var</span> <span class="nx">operators</span> <span class="o">=</span> <span class="p">{</span>
|
104
|
+
<span class="nx">greater_than</span><span class="o">:</span> <span class="s1">'>'</span><span class="p">,</span>
|
105
|
+
<span class="nx">greater_than_or_equal_to</span><span class="o">:</span> <span class="s1">'>='</span><span class="p">,</span>
|
106
|
+
<span class="nx">equal_to</span><span class="o">:</span> <span class="s1">'=='</span><span class="p">,</span>
|
107
|
+
<span class="nx">less_than</span><span class="o">:</span> <span class="s1">'<'</span><span class="p">,</span>
|
108
|
+
<span class="nx">less_than_or_equal_to</span><span class="o">:</span> <span class="s1">'<='</span>
|
109
|
+
<span class="p">},</span>
|
110
|
+
<span class="nx">msgs</span> <span class="o">=</span> <span class="p">[],</span>
|
111
|
+
<span class="nx">value</span> <span class="o">=</span> <span class="nx">instance</span><span class="p">.</span><span class="nx">element</span><span class="p">.</span><span class="nx">value</span><span class="p">,</span>
|
112
|
+
<span class="nx">parsedValue</span> <span class="o">=</span> <span class="nb">parseFloat</span><span class="p">(</span><span class="nx">value</span><span class="p">,</span> <span class="mi">10</span><span class="p">);</span>
|
113
|
+
|
114
|
+
<span class="k">if</span> <span class="p">(</span><span class="nb">isNaN</span><span class="p">(</span><span class="nb">Number</span><span class="p">(</span><span class="nx">value</span><span class="p">)))</span> <span class="p">{</span>
|
115
|
+
<span class="nx">msgs</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">options</span><span class="p">.</span><span class="nx">message</span> <span class="o">||</span> <span class="nx">instance</span><span class="p">.</span><span class="nx">defaultMessages</span><span class="p">.</span><span class="nx">not_a_number</span><span class="p">);</span>
|
116
|
+
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
|
117
|
+
<span class="k">if</span> <span class="p">(</span><span class="nx">options</span><span class="p">.</span><span class="nx">odd</span> <span class="o">&&</span> <span class="nx">judge</span><span class="p">.</span><span class="nx">utils</span><span class="p">.</span><span class="nx">isEven</span><span class="p">(</span><span class="nx">parsedValue</span><span class="p">))</span> <span class="p">{</span>
|
118
|
+
<span class="nx">msgs</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">instance</span><span class="p">.</span><span class="nx">defaultMessages</span><span class="p">.</span><span class="nx">odd</span><span class="p">);</span>
|
119
|
+
<span class="p">}</span>
|
120
|
+
<span class="k">if</span> <span class="p">(</span><span class="nx">options</span><span class="p">.</span><span class="nx">even</span> <span class="o">&&</span> <span class="nx">judge</span><span class="p">.</span><span class="nx">utils</span><span class="p">.</span><span class="nx">isOdd</span><span class="p">(</span><span class="nx">parsedValue</span><span class="p">))</span> <span class="p">{</span>
|
121
|
+
<span class="nx">msgs</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">instance</span><span class="p">.</span><span class="nx">defaultMessages</span><span class="p">.</span><span class="nx">even</span><span class="p">);</span>
|
122
|
+
<span class="p">}</span>
|
123
|
+
<span class="k">if</span> <span class="p">(</span><span class="nx">options</span><span class="p">.</span><span class="nx">only_integer</span> <span class="o">&&</span> <span class="o">!</span><span class="nx">judge</span><span class="p">.</span><span class="nx">utils</span><span class="p">.</span><span class="nx">isInt</span><span class="p">(</span><span class="nx">parsedValue</span><span class="p">))</span> <span class="p">{</span>
|
124
|
+
<span class="nx">msgs</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">instance</span><span class="p">.</span><span class="nx">defaultMessages</span><span class="p">.</span><span class="nx">not_an_integer</span><span class="p">);</span>
|
125
|
+
<span class="p">}</span>
|
126
|
+
<span class="nx">_</span><span class="p">(</span><span class="nx">operators</span><span class="p">).</span><span class="nx">each</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">operator</span><span class="p">,</span> <span class="nx">key</span><span class="p">)</span> <span class="p">{</span>
|
127
|
+
<span class="kd">var</span> <span class="nx">valid</span> <span class="o">=</span> <span class="nx">judge</span><span class="p">.</span><span class="nx">utils</span><span class="p">.</span><span class="nx">operate</span><span class="p">(</span><span class="nx">parsedValue</span><span class="p">,</span> <span class="nx">operators</span><span class="p">[</span><span class="nx">key</span><span class="p">],</span> <span class="nb">parseFloat</span><span class="p">(</span><span class="nx">options</span><span class="p">[</span><span class="nx">key</span><span class="p">],</span> <span class="mi">10</span><span class="p">));</span>
|
128
|
+
<span class="k">if</span> <span class="p">(</span><span class="nx">options</span><span class="p">.</span><span class="nx">hasOwnProperty</span><span class="p">(</span><span class="nx">key</span><span class="p">)</span> <span class="o">&&</span> <span class="o">!</span><span class="nx">valid</span><span class="p">)</span> <span class="p">{</span>
|
129
|
+
<span class="kd">var</span> <span class="nx">m</span> <span class="o">=</span> <span class="nx">options</span><span class="p">.</span><span class="nx">message</span> <span class="o">||</span> <span class="nx">instance</span><span class="p">.</span><span class="nx">defaultMessages</span><span class="p">[</span><span class="nx">key</span><span class="p">];</span>
|
130
|
+
<span class="nx">msgs</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">judge</span><span class="p">.</span><span class="nx">utils</span><span class="p">.</span><span class="nx">countMsg</span><span class="p">(</span><span class="nx">m</span><span class="p">,</span> <span class="nx">options</span><span class="p">[</span><span class="nx">key</span><span class="p">]));</span>
|
131
|
+
<span class="p">}</span>
|
132
|
+
<span class="p">});</span>
|
133
|
+
<span class="p">}</span>
|
134
|
+
<span class="k">return</span> <span class="nx">msgs</span><span class="p">.</span><span class="nx">length</span><span class="o">?</span> <span class="p">{</span> <span class="nx">valid</span><span class="o">:</span><span class="kc">false</span><span class="p">,</span> <span class="nx">messages</span><span class="o">:</span><span class="nx">msgs</span> <span class="p">}</span> <span class="o">:</span> <span class="p">{</span> <span class="nx">valid</span><span class="o">:</span><span class="kc">true</span> <span class="p">};</span>
|
135
|
+
<span class="p">},</span>
|
136
|
+
</pre></div> </td> </tr> <tr id="section-15"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-15">¶</a> </div> <p>Format validator ported as closely as possible
|
137
|
+
from <a href="http://api.rubyonrails.org/classes/ActiveModel/Validations/FormatValidator.html">ActiveModel::Validations::FormatValidator</a>.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">format</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">options</span><span class="p">)</span> <span class="p">{</span>
|
138
|
+
<span class="kd">var</span> <span class="nx">msgs</span> <span class="o">=</span> <span class="p">[],</span>
|
139
|
+
<span class="nx">value</span> <span class="o">=</span> <span class="nx">instance</span><span class="p">.</span><span class="nx">element</span><span class="p">.</span><span class="nx">value</span><span class="p">;</span>
|
140
|
+
<span class="k">if</span> <span class="p">(</span><span class="nx">options</span><span class="p">.</span><span class="nx">hasOwnProperty</span><span class="p">(</span><span class="s1">'with'</span><span class="p">))</span> <span class="p">{</span>
|
141
|
+
<span class="kd">var</span> <span class="nx">withReg</span> <span class="o">=</span> <span class="nx">judge</span><span class="p">.</span><span class="nx">utils</span><span class="p">.</span><span class="nx">convertRegExp</span><span class="p">(</span><span class="nx">options</span><span class="p">[</span><span class="s1">'with'</span><span class="p">]);</span>
|
142
|
+
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">withReg</span><span class="p">.</span><span class="nx">test</span><span class="p">(</span><span class="nx">value</span><span class="p">))</span> <span class="p">{</span>
|
143
|
+
<span class="nx">msgs</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">options</span><span class="p">.</span><span class="nx">message</span> <span class="o">||</span> <span class="nx">instance</span><span class="p">.</span><span class="nx">defaultMessages</span><span class="p">.</span><span class="nx">invalid</span><span class="p">);</span>
|
144
|
+
<span class="p">}</span>
|
145
|
+
<span class="p">}</span>
|
146
|
+
<span class="k">if</span> <span class="p">(</span><span class="nx">options</span><span class="p">.</span><span class="nx">hasOwnProperty</span><span class="p">(</span><span class="s1">'without'</span><span class="p">))</span> <span class="p">{</span>
|
147
|
+
<span class="kd">var</span> <span class="nx">withoutReg</span> <span class="o">=</span> <span class="nx">judge</span><span class="p">.</span><span class="nx">utils</span><span class="p">.</span><span class="nx">convertRegExp</span><span class="p">(</span><span class="nx">options</span><span class="p">.</span><span class="nx">without</span><span class="p">);</span>
|
148
|
+
<span class="k">if</span> <span class="p">(</span><span class="nx">withoutReg</span><span class="p">.</span><span class="nx">test</span><span class="p">(</span><span class="nx">value</span><span class="p">))</span> <span class="p">{</span>
|
149
|
+
<span class="nx">msgs</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">options</span><span class="p">.</span><span class="nx">message</span> <span class="o">||</span> <span class="nx">instance</span><span class="p">.</span><span class="nx">defaultMessages</span><span class="p">.</span><span class="nx">invalid</span><span class="p">);</span>
|
150
|
+
<span class="p">}</span>
|
151
|
+
<span class="p">}</span>
|
152
|
+
<span class="k">return</span> <span class="nx">msgs</span><span class="p">.</span><span class="nx">length</span> <span class="o">?</span> <span class="p">{</span> <span class="nx">valid</span><span class="o">:</span><span class="kc">false</span><span class="p">,</span> <span class="nx">messages</span><span class="o">:</span><span class="nx">msgs</span> <span class="p">}</span> <span class="o">:</span> <span class="p">{</span> <span class="nx">valid</span><span class="o">:</span><span class="kc">true</span> <span class="p">};</span>
|
153
|
+
<span class="p">},</span>
|
154
|
+
</pre></div> </td> </tr> <tr id="section-16"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-16">¶</a> </div> <p>Acceptance validator ported as closely as possible
|
155
|
+
from <a href="http://api.rubyonrails.org/classes/ActiveModel/Validations/AcceptanceValidator.html">ActiveModel::Validations::AcceptanceValidator</a>.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">acceptance</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">options</span><span class="p">)</span> <span class="p">{</span>
|
156
|
+
<span class="k">if</span> <span class="p">(</span><span class="nx">instance</span><span class="p">.</span><span class="nx">element</span><span class="p">.</span><span class="nx">checked</span> <span class="o">===</span> <span class="kc">true</span><span class="p">)</span> <span class="p">{</span>
|
157
|
+
<span class="k">return</span> <span class="p">{</span> <span class="nx">valid</span><span class="o">:</span><span class="kc">true</span> <span class="p">};</span>
|
158
|
+
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
|
159
|
+
<span class="k">return</span> <span class="p">{</span>
|
160
|
+
<span class="nx">valid</span><span class="o">:</span><span class="kc">false</span><span class="p">,</span>
|
161
|
+
<span class="nx">messages</span><span class="o">:</span><span class="p">[</span><span class="nx">options</span><span class="p">.</span><span class="nx">message</span> <span class="o">||</span> <span class="nx">instance</span><span class="p">.</span><span class="nx">defaultMessages</span><span class="p">.</span><span class="nx">accepted</span><span class="p">]</span>
|
162
|
+
<span class="p">};</span>
|
163
|
+
<span class="p">}</span>
|
164
|
+
<span class="p">},</span>
|
165
|
+
</pre></div> </td> </tr> <tr id="section-17"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-17">¶</a> </div> <p>Confirmation validator ported as closely as possible
|
166
|
+
from <a href="http://api.rubyonrails.org/classes/ActiveModel/Validations/ConfirmationValidator.html">ActiveModel::Validations::ConfirmationValidator</a>.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">confirmation</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">options</span><span class="p">)</span> <span class="p">{</span>
|
167
|
+
<span class="kd">var</span> <span class="nx">id</span> <span class="o">=</span> <span class="nx">instance</span><span class="p">.</span><span class="nx">element</span><span class="p">.</span><span class="nx">getAttribute</span><span class="p">(</span><span class="s1">'id'</span><span class="p">),</span>
|
168
|
+
<span class="nx">confId</span> <span class="o">=</span> <span class="nx">id</span> <span class="o">+</span> <span class="s1">'_confirmation'</span><span class="p">,</span>
|
169
|
+
<span class="nx">confElem</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="nx">confId</span><span class="p">);</span>
|
170
|
+
<span class="k">if</span> <span class="p">(</span><span class="nx">instance</span><span class="p">.</span><span class="nx">element</span><span class="p">.</span><span class="nx">value</span> <span class="o">===</span> <span class="nx">confElem</span><span class="p">.</span><span class="nx">value</span><span class="p">)</span> <span class="p">{</span>
|
171
|
+
<span class="k">return</span> <span class="p">{</span> <span class="nx">valid</span><span class="o">:</span><span class="kc">true</span> <span class="p">};</span>
|
172
|
+
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
|
173
|
+
<span class="k">return</span> <span class="p">{</span>
|
174
|
+
<span class="nx">valid</span><span class="o">:</span><span class="kc">false</span><span class="p">,</span>
|
175
|
+
<span class="nx">messages</span><span class="o">:</span><span class="p">[</span><span class="nx">options</span><span class="p">.</span><span class="nx">message</span> <span class="o">||</span> <span class="nx">instance</span><span class="p">.</span><span class="nx">defaultMessages</span><span class="p">.</span><span class="nx">confirmation</span><span class="p">]</span>
|
176
|
+
<span class="p">};</span>
|
177
|
+
<span class="p">}</span>
|
178
|
+
<span class="p">}</span>
|
179
|
+
<span class="p">};</span></pre></div> </td> </tr> <tr id="section-18"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-18">¶</a> </div> <p>Return all validation methods, including those found in judge.customValidators.
|
180
|
+
If you name a custom validation method the same as a default one, for example
|
181
|
+
<code>judge.customValidators.presence = function() {};</code>
|
182
|
+
then the custom method <em>will overwrite</em> the default one, so be careful!</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">return</span> <span class="nx">_</span><span class="p">.</span><span class="nx">extend</span><span class="p">(</span><span class="nx">methods</span><span class="p">,</span> <span class="nx">extendedMethods</span><span class="p">);</span>
|
183
|
+
<span class="p">};</span></pre></div> </td> </tr> <tr id="section-19"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-19">¶</a> </div> <p>This object should contain any judge validation methods
|
184
|
+
that correspond to custom validators used in the model.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nx">judge</span><span class="p">.</span><span class="nx">customValidators</span> <span class="o">=</span> <span class="p">{};</span></pre></div> </td> </tr> <tr id="section-20"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-20">¶</a> </div> <p>The judge store is now open :)</p> </td> <td class="code"> <div class="highlight"><pre><span class="nx">judge</span><span class="p">.</span><span class="nx">store</span> <span class="o">=</span> <span class="p">(</span><span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
|
185
|
+
<span class="kd">var</span> <span class="nx">store</span> <span class="o">=</span> <span class="p">{};</span>
|
186
|
+
|
187
|
+
<span class="k">return</span> <span class="p">{</span></pre></div> </td> </tr> <tr id="section-21"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-21">¶</a> </div> <p>Stores a Watcher for an element against a user defined key.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">save</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">key</span><span class="p">,</span> <span class="nx">element</span><span class="p">)</span> <span class="p">{</span>
|
188
|
+
<span class="kd">var</span> <span class="nx">elements</span> <span class="o">=</span> <span class="nx">judge</span><span class="p">.</span><span class="nx">utils</span><span class="p">.</span><span class="nx">isCollection</span><span class="p">(</span><span class="nx">element</span><span class="p">)</span> <span class="o">?</span> <span class="nx">element</span> <span class="o">:</span> <span class="p">[</span><span class="nx">element</span><span class="p">];</span>
|
189
|
+
<span class="nx">_</span><span class="p">(</span><span class="nx">elements</span><span class="p">).</span><span class="nx">each</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">element</span><span class="p">)</span> <span class="p">{</span>
|
190
|
+
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">store</span><span class="p">.</span><span class="nx">hasOwnProperty</span><span class="p">(</span><span class="nx">key</span><span class="p">))</span> <span class="p">{</span> <span class="nx">store</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="p">[];</span> <span class="p">}</span>
|
191
|
+
<span class="kd">var</span> <span class="nx">watchedInstance</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">judge</span><span class="p">.</span><span class="nx">Watcher</span><span class="p">(</span><span class="nx">element</span><span class="p">),</span>
|
192
|
+
<span class="nx">currentStored</span> <span class="o">=</span> <span class="nx">_</span><span class="p">(</span><span class="nx">store</span><span class="p">[</span><span class="nx">key</span><span class="p">]).</span><span class="nx">pluck</span><span class="p">(</span><span class="s1">'element'</span><span class="p">);</span>
|
193
|
+
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">_</span><span class="p">(</span><span class="nx">currentStored</span><span class="p">).</span><span class="nx">include</span><span class="p">(</span><span class="nx">element</span><span class="p">))</span> <span class="p">{</span>
|
194
|
+
<span class="nx">store</span><span class="p">[</span><span class="nx">key</span><span class="p">].</span><span class="nx">push</span><span class="p">(</span><span class="nx">watchedInstance</span><span class="p">);</span>
|
195
|
+
<span class="p">}</span>
|
196
|
+
<span class="p">});</span>
|
197
|
+
<span class="k">return</span> <span class="nx">store</span><span class="p">;</span>
|
198
|
+
<span class="p">},</span></pre></div> </td> </tr> <tr id="section-22"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-22">¶</a> </div> <p>Removes an individual stored Watcher.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">remove</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">key</span><span class="p">,</span> <span class="nx">element</span><span class="p">)</span> <span class="p">{</span>
|
199
|
+
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">store</span><span class="p">.</span><span class="nx">hasOwnProperty</span><span class="p">(</span><span class="nx">key</span><span class="p">))</span> <span class="p">{</span>
|
200
|
+
<span class="k">return</span> <span class="kc">null</span><span class="p">;</span>
|
201
|
+
<span class="p">}</span>
|
202
|
+
<span class="kd">var</span> <span class="nx">elements</span> <span class="o">=</span> <span class="nx">judge</span><span class="p">.</span><span class="nx">utils</span><span class="p">.</span><span class="nx">isCollection</span><span class="p">(</span><span class="nx">element</span><span class="p">)</span> <span class="o">?</span> <span class="nx">element</span> <span class="o">:</span> <span class="p">[</span><span class="nx">element</span><span class="p">];</span>
|
203
|
+
<span class="nx">store</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="nx">_</span><span class="p">(</span><span class="nx">store</span><span class="p">[</span><span class="nx">key</span><span class="p">]).</span><span class="nx">reject</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">j</span><span class="p">)</span> <span class="p">{</span> <span class="k">return</span> <span class="nx">_</span><span class="p">(</span><span class="nx">elements</span><span class="p">).</span><span class="nx">include</span><span class="p">(</span><span class="nx">j</span><span class="p">.</span><span class="nx">element</span><span class="p">);</span> <span class="p">});</span>
|
204
|
+
<span class="k">return</span> <span class="nx">store</span><span class="p">;</span>
|
205
|
+
<span class="p">},</span></pre></div> </td> </tr> <tr id="section-23"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-23">¶</a> </div> <p>Returns the entire store object, or an array of Watchers stored against
|
206
|
+
the given key.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">get</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">key</span><span class="p">)</span> <span class="p">{</span>
|
207
|
+
<span class="k">if</span> <span class="p">(</span><span class="nx">_</span><span class="p">(</span><span class="nx">key</span><span class="p">).</span><span class="nx">isUndefined</span><span class="p">())</span> <span class="p">{</span> <span class="k">return</span> <span class="nx">store</span><span class="p">;</span> <span class="p">}</span>
|
208
|
+
<span class="k">return</span> <span class="nx">store</span><span class="p">.</span><span class="nx">hasOwnProperty</span><span class="p">(</span><span class="nx">key</span><span class="p">)</span> <span class="o">?</span> <span class="nx">store</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">:</span> <span class="kc">null</span><span class="p">;</span>
|
209
|
+
<span class="p">},</span></pre></div> </td> </tr> <tr id="section-24"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-24">¶</a> </div> <p>Returns the entire store object with Watchers converted to elements,
|
210
|
+
or all DOM elements stored within all Watchers stored against the given key.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">getDOM</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">key</span><span class="p">)</span> <span class="p">{</span>
|
211
|
+
<span class="k">if</span> <span class="p">(</span><span class="nx">_</span><span class="p">(</span><span class="nx">key</span><span class="p">).</span><span class="nx">isUndefined</span><span class="p">())</span> <span class="p">{</span>
|
212
|
+
<span class="kd">var</span> <span class="nx">convertedStore</span> <span class="o">=</span> <span class="p">{};</span>
|
213
|
+
<span class="nx">_</span><span class="p">(</span><span class="nx">store</span><span class="p">).</span><span class="nx">each</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">array</span><span class="p">,</span> <span class="nx">key</span><span class="p">)</span> <span class="p">{</span>
|
214
|
+
<span class="nx">convertedStore</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="nx">_</span><span class="p">(</span><span class="nx">array</span><span class="p">).</span><span class="nx">pluck</span><span class="p">(</span><span class="s1">'element'</span><span class="p">);</span>
|
215
|
+
<span class="p">});</span>
|
216
|
+
<span class="k">return</span> <span class="nx">convertedStore</span><span class="p">;</span>
|
217
|
+
<span class="p">}</span>
|
218
|
+
<span class="k">return</span> <span class="nx">store</span><span class="p">.</span><span class="nx">hasOwnProperty</span><span class="p">(</span><span class="nx">key</span><span class="p">)</span> <span class="o">?</span> <span class="nx">_</span><span class="p">(</span><span class="nx">store</span><span class="p">[</span><span class="nx">key</span><span class="p">]).</span><span class="nx">pluck</span><span class="p">(</span><span class="s1">'element'</span><span class="p">)</span> <span class="o">:</span> <span class="kc">null</span><span class="p">;</span>
|
219
|
+
<span class="p">},</span></pre></div> </td> </tr> <tr id="section-25"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-25">¶</a> </div> <p>Wipes the entire store object, or wipes all Watchers stored against
|
220
|
+
the given key.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">clear</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">key</span><span class="p">)</span> <span class="p">{</span>
|
221
|
+
<span class="k">if</span> <span class="p">(</span><span class="nx">_</span><span class="p">(</span><span class="nx">key</span><span class="p">).</span><span class="nx">isUndefined</span><span class="p">())</span> <span class="p">{</span>
|
222
|
+
<span class="nx">store</span> <span class="o">=</span> <span class="p">{};</span>
|
223
|
+
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
|
224
|
+
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">store</span><span class="p">.</span><span class="nx">hasOwnProperty</span><span class="p">(</span><span class="nx">key</span><span class="p">))</span> <span class="p">{</span> <span class="k">return</span> <span class="kc">null</span><span class="p">;</span> <span class="p">}</span>
|
225
|
+
<span class="nx">store</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="p">[];</span>
|
226
|
+
<span class="p">}</span>
|
227
|
+
<span class="k">return</span> <span class="nx">store</span><span class="p">;</span>
|
228
|
+
<span class="p">}</span>
|
229
|
+
|
230
|
+
<span class="p">};</span>
|
231
|
+
<span class="p">}());</span></pre></div> </td> </tr> <tr id="section-26"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-26">¶</a> </div> <p>Validate all given element(s) without storing. Watcher creation is handled for you,
|
232
|
+
but the created Watchers will not be returned, so it's less flexible.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nx">judge</span><span class="p">.</span><span class="nx">validate</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">elements</span><span class="p">)</span> <span class="p">{</span>
|
233
|
+
<span class="kd">var</span> <span class="nx">results</span> <span class="o">=</span> <span class="p">[];</span>
|
234
|
+
<span class="nx">elements</span> <span class="o">=</span> <span class="nx">judge</span><span class="p">.</span><span class="nx">utils</span><span class="p">.</span><span class="nx">isCollection</span><span class="p">(</span><span class="nx">elements</span><span class="p">)</span> <span class="o">?</span> <span class="nx">elements</span> <span class="o">:</span> <span class="p">[</span><span class="nx">elements</span><span class="p">];</span>
|
235
|
+
<span class="nx">_</span><span class="p">(</span><span class="nx">elements</span><span class="p">).</span><span class="nx">each</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">element</span><span class="p">)</span> <span class="p">{</span>
|
236
|
+
<span class="kd">var</span> <span class="nx">j</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">judge</span><span class="p">.</span><span class="nx">Watcher</span><span class="p">(</span><span class="nx">element</span><span class="p">);</span>
|
237
|
+
<span class="nx">results</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">j</span><span class="p">.</span><span class="nx">validate</span><span class="p">());</span>
|
238
|
+
<span class="p">});</span>
|
239
|
+
<span class="k">return</span> <span class="nx">results</span><span class="p">;</span>
|
240
|
+
<span class="p">};</span></pre></div> </td> </tr> <tr id="section-27"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-27">¶</a> </div> <p>The obligatory utilities.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nx">judge</span><span class="p">.</span><span class="nx">utils</span> <span class="o">=</span> <span class="p">{</span>
|
241
|
+
</pre></div> </td> </tr> <tr id="section-28"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-28">¶</a> </div> <p>Determines whether an object is a DOM element of the types that judge can work with.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">isValidatable</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">object</span><span class="p">)</span> <span class="p">{</span>
|
242
|
+
<span class="kd">var</span> <span class="nx">type</span> <span class="o">=</span> <span class="nx">judge</span><span class="p">.</span><span class="nx">utils</span><span class="p">.</span><span class="nx">getObjectString</span><span class="p">(</span><span class="nx">object</span><span class="p">);</span>
|
243
|
+
<span class="k">return</span> <span class="p">(</span>
|
244
|
+
<span class="nx">type</span> <span class="o">===</span> <span class="s2">"HTMLInputElement"</span> <span class="o">||</span>
|
245
|
+
<span class="nx">type</span> <span class="o">===</span> <span class="s2">"HTMLTextAreaElement"</span> <span class="o">||</span>
|
246
|
+
<span class="nx">type</span> <span class="o">===</span> <span class="s2">"HTMLSelectElement"</span>
|
247
|
+
<span class="p">);</span>
|
248
|
+
<span class="p">},</span></pre></div> </td> </tr> <tr id="section-29"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-29">¶</a> </div> <p>A way of checking isArray but including NodeList.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">isCollection</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">object</span><span class="p">)</span> <span class="p">{</span>
|
249
|
+
<span class="kd">var</span> <span class="nx">type</span> <span class="o">=</span> <span class="nx">judge</span><span class="p">.</span><span class="nx">utils</span><span class="p">.</span><span class="nx">getObjectString</span><span class="p">(</span><span class="nx">object</span><span class="p">);</span>
|
250
|
+
<span class="k">return</span> <span class="p">(</span>
|
251
|
+
<span class="nx">type</span> <span class="o">===</span> <span class="s2">"Array"</span> <span class="o">||</span> <span class="nx">type</span> <span class="o">===</span> <span class="s2">"NodeList"</span>
|
252
|
+
<span class="p">);</span>
|
253
|
+
<span class="p">},</span></pre></div> </td> </tr> <tr id="section-30"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-30">¶</a> </div> <p>Returns the object type as represented in <code>Object.prototype.toString</code>.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">getObjectString</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">object</span><span class="p">)</span> <span class="p">{</span>
|
254
|
+
<span class="kd">var</span> <span class="nx">string</span> <span class="o">=</span> <span class="nb">Object</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">toString</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="nx">object</span><span class="p">);</span>
|
255
|
+
<span class="k">return</span> <span class="nx">string</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/\[|\]/g</span><span class="p">,</span> <span class="s1">''</span><span class="p">).</span><span class="nx">split</span><span class="p">(</span><span class="s1">' '</span><span class="p">)[</span><span class="mi">1</span><span class="p">];</span>
|
256
|
+
<span class="p">},</span></pre></div> </td> </tr> <tr id="section-31"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-31">¶</a> </div> <p>OMG! How can you use eval, you monster! It's totally evil!
|
257
|
+
It's used for stuff like <code>(3, '<', 4) => '3 < 4' => true</code>.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">operate</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">input</span><span class="p">,</span> <span class="nx">operator</span><span class="p">,</span> <span class="nx">validInput</span><span class="p">)</span> <span class="p">{</span>
|
258
|
+
<span class="k">return</span> <span class="nb">eval</span><span class="p">(</span><span class="nx">input</span><span class="o">+</span><span class="s1">' '</span><span class="o">+</span><span class="nx">operator</span><span class="o">+</span><span class="s1">' '</span><span class="o">+</span><span class="nx">validInput</span><span class="p">);</span>
|
259
|
+
<span class="p">},</span></pre></div> </td> </tr> <tr id="section-32"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-32">¶</a> </div> <p>Sub the expected value into an error message.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">countMsg</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">message</span><span class="p">,</span> <span class="nx">count</span><span class="p">)</span> <span class="p">{</span> <span class="k">return</span> <span class="nx">message</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/\%\{count\}/</span><span class="p">,</span> <span class="nx">count</span><span class="p">);</span> <span class="p">},</span></pre></div> </td> </tr> <tr id="section-33"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-33">¶</a> </div> <p>Some nifty numerical helpers.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">isInt</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">value</span><span class="p">)</span> <span class="p">{</span> <span class="k">return</span> <span class="nx">value</span> <span class="o">===</span> <span class="o">+</span><span class="nx">value</span> <span class="o">&&</span> <span class="nx">value</span> <span class="o">===</span> <span class="p">(</span><span class="nx">value</span><span class="o">|</span><span class="mi">0</span><span class="p">);</span> <span class="p">},</span>
|
260
|
+
<span class="nx">isFloat</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">value</span><span class="p">)</span> <span class="p">{</span> <span class="k">return</span> <span class="nx">value</span> <span class="o">===</span> <span class="o">+</span><span class="nx">value</span> <span class="o">&&</span> <span class="nx">value</span> <span class="o">!==</span> <span class="p">(</span><span class="nx">value</span><span class="o">|</span><span class="mi">0</span><span class="p">);</span> <span class="p">},</span>
|
261
|
+
<span class="nx">isEven</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">value</span><span class="p">)</span> <span class="p">{</span> <span class="k">return</span> <span class="p">(</span><span class="nx">value</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">===</span> <span class="mi">0</span><span class="p">)</span> <span class="o">?</span> <span class="kc">true</span> <span class="o">:</span> <span class="kc">false</span><span class="p">;</span> <span class="p">},</span>
|
262
|
+
<span class="nx">isOdd</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">value</span><span class="p">)</span> <span class="p">{</span> <span class="k">return</span> <span class="o">!</span><span class="nx">judge</span><span class="p">.</span><span class="nx">utils</span><span class="p">.</span><span class="nx">isEven</span><span class="p">(</span><span class="nx">value</span><span class="p">);</span> <span class="p">},</span></pre></div> </td> </tr> <tr id="section-34"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-34">¶</a> </div> <p>Converts a ruby flag-first formatted regular expression, given as a string, into JavaScript.
|
263
|
+
This is rudimentary at best, as there are many, many difference between Ruby
|
264
|
+
and JavaScript when it comes to regexp-fu. Basically, if you validate your records
|
265
|
+
records using complex regular expressions AND you hope that this will "just work"
|
266
|
+
on the client-side too… you are going to be pretty disappointed.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">convertRegExp</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">string</span><span class="p">)</span> <span class="p">{</span>
|
267
|
+
<span class="kd">var</span> <span class="nx">p</span> <span class="o">=</span> <span class="nx">string</span><span class="p">.</span><span class="nx">slice</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">).</span><span class="nx">split</span><span class="p">(</span><span class="s1">':'</span><span class="p">),</span>
|
268
|
+
<span class="nx">o</span> <span class="o">=</span> <span class="nx">p</span><span class="p">.</span><span class="nx">shift</span><span class="p">(),</span>
|
269
|
+
<span class="nx">r</span> <span class="o">=</span> <span class="nx">p</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s1">':'</span><span class="p">);</span>
|
270
|
+
<span class="k">return</span> <span class="k">new</span> <span class="nb">RegExp</span><span class="p">(</span><span class="nx">r</span><span class="p">,</span> <span class="nx">judge</span><span class="p">.</span><span class="nx">utils</span><span class="p">.</span><span class="nx">convertFlags</span><span class="p">(</span><span class="nx">o</span><span class="p">));</span>
|
271
|
+
<span class="p">},</span>
|
272
|
+
<span class="nx">convertFlags</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">string</span><span class="p">)</span> <span class="p">{</span>
|
273
|
+
<span class="kd">var</span> <span class="nx">off</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">RegExp</span><span class="p">(</span><span class="s1">'-'</span><span class="p">),</span>
|
274
|
+
<span class="nx">multi</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">RegExp</span><span class="p">(</span><span class="s1">'m'</span><span class="p">);</span>
|
275
|
+
<span class="nx">string</span> <span class="o">=</span> <span class="nx">string</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="s1">'?'</span><span class="p">,</span> <span class="s1">''</span><span class="p">);</span>
|
276
|
+
<span class="k">if</span> <span class="p">(</span><span class="nx">off</span><span class="p">.</span><span class="nx">test</span><span class="p">(</span><span class="nx">string</span><span class="p">)</span> <span class="o">||</span> <span class="o">!</span><span class="nx">multi</span><span class="p">.</span><span class="nx">test</span><span class="p">(</span><span class="nx">string</span><span class="p">))</span> <span class="p">{</span>
|
277
|
+
<span class="k">return</span> <span class="s1">''</span><span class="p">;</span>
|
278
|
+
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
|
279
|
+
<span class="k">return</span> <span class="s1">'m'</span><span class="p">;</span>
|
280
|
+
<span class="p">}</span>
|
281
|
+
<span class="p">}</span>
|
282
|
+
<span class="p">};</span>
|
283
|
+
|
284
|
+
</pre></div> </td> </tr> </tbody> </table> </div> </body> </html>
|