judge 0.3.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.1
1
+ 0.4.0
@@ -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
+
@@ -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">&#182;</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">&#182;</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">&#182;</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">&#182;</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">&#39;_&#39;</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">&#39;[judge] Underscore.js not found&#39;</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">&#39;JSON&#39;</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">&#39;[judge] JSON global object not found&#39;</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">&#182;</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">&#39;[judge] No DOM element passed to constructor&#39;</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">&#39;[judge] Cannot construct new Watcher for object of this type&#39;</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">&#39;data-validate&#39;</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">&#39;[judge] Cannot construct Watcher for this element, use judge form builders&#39;</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">&#39;data-error-messages&#39;</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">&#39;[judge] Parent form was not created using judge form helper, please amend&#39;</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">&#182;</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">&#182;</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">&#39;data-validate&#39;</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">&#39;data-error-messages&#39;</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">&#182;</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">&amp;&amp;</span> <span class="nx">result</span><span class="p">.</span><span class="nx">hasOwnProperty</span><span class="p">(</span><span class="s1">&#39;messages&#39;</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">&#182;</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">&#182;</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">&#182;</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">&#39;&lt;&#39;</span><span class="p">,</span> <span class="nx">message</span><span class="o">:</span> <span class="s1">&#39;too_short&#39;</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">&#39;&gt;&#39;</span><span class="p">,</span> <span class="nx">message</span><span class="o">:</span> <span class="s1">&#39;too_long&#39;</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">&#39;!=&#39;</span><span class="p">,</span> <span class="nx">message</span><span class="o">:</span> <span class="s1">&#39;wrong_length&#39;</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">&amp;&amp;</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">&#182;</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">&#39;in&#39;</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">&#182;</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">&#39;in&#39;</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">&#182;</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">&#39;&gt;&#39;</span><span class="p">,</span>
105
+ <span class="nx">greater_than_or_equal_to</span><span class="o">:</span> <span class="s1">&#39;&gt;=&#39;</span><span class="p">,</span>
106
+ <span class="nx">equal_to</span><span class="o">:</span> <span class="s1">&#39;==&#39;</span><span class="p">,</span>
107
+ <span class="nx">less_than</span><span class="o">:</span> <span class="s1">&#39;&lt;&#39;</span><span class="p">,</span>
108
+ <span class="nx">less_than_or_equal_to</span><span class="o">:</span> <span class="s1">&#39;&lt;=&#39;</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">&amp;&amp;</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">&amp;&amp;</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">&amp;&amp;</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">&amp;&amp;</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">&#182;</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">&#39;with&#39;</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">&#39;with&#39;</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">&#39;without&#39;</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">&#182;</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">&#182;</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">&#39;id&#39;</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">&#39;_confirmation&#39;</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">&#182;</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">&#182;</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">&#182;</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">&#182;</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">&#39;element&#39;</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">&#182;</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">&#182;</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">&#182;</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">&#39;element&#39;</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">&#39;element&#39;</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">&#182;</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">&#182;</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">&#182;</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">&#182;</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">&quot;HTMLInputElement&quot;</span> <span class="o">||</span>
245
+ <span class="nx">type</span> <span class="o">===</span> <span class="s2">&quot;HTMLTextAreaElement&quot;</span> <span class="o">||</span>
246
+ <span class="nx">type</span> <span class="o">===</span> <span class="s2">&quot;HTMLSelectElement&quot;</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">&#182;</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">&quot;Array&quot;</span> <span class="o">||</span> <span class="nx">type</span> <span class="o">===</span> <span class="s2">&quot;NodeList&quot;</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">&#182;</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">&#39;&#39;</span><span class="p">).</span><span class="nx">split</span><span class="p">(</span><span class="s1">&#39; &#39;</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">&#182;</a> </div> <p>OMG! How can you use eval, you monster! It's totally evil!
257
+ It's used for stuff like <code>(3, '&lt;', 4) =&gt; '3 &lt; 4' =&gt; 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">&#39; &#39;</span><span class="o">+</span><span class="nx">operator</span><span class="o">+</span><span class="s1">&#39; &#39;</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">&#182;</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">&#182;</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">&amp;&amp;</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">&amp;&amp;</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">&#182;</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&hellip; 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">&#39;:&#39;</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">&#39;:&#39;</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">&#39;-&#39;</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">&#39;m&#39;</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">&#39;?&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</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">&#39;&#39;</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">&#39;m&#39;</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>