judge 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +5 -1
- data/README.md +11 -4
- data/judge.gemspec +8 -9
- data/lib/generators/judge/templates/judge.js +142 -196
- data/lib/generators/judge/templates/underscore.js +138 -101
- data/lib/judge/version.rb +1 -1
- data/spec/javascripts/JudgeSpec.js +6 -5
- data/spec/javascripts/helpers/json2.js +46 -41
- data/spec/javascripts/helpers/underscore.js +305 -130
- data/spec/javascripts/support/jasmine_runner.rb +4 -15
- metadata +22 -23
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
http://www.JSON.org/json2.js
|
3
|
-
|
3
|
+
2011-10-19
|
4
4
|
|
5
5
|
Public Domain.
|
6
6
|
|
@@ -146,7 +146,7 @@
|
|
146
146
|
redistribute.
|
147
147
|
*/
|
148
148
|
|
149
|
-
/*jslint evil: true,
|
149
|
+
/*jslint evil: true, regexp: true */
|
150
150
|
|
151
151
|
/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
|
152
152
|
call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
|
@@ -159,11 +159,13 @@
|
|
159
159
|
// Create a JSON object only if one does not already exist. We create the
|
160
160
|
// methods in a closure to avoid creating global variables.
|
161
161
|
|
162
|
-
|
163
|
-
|
162
|
+
var JSON;
|
163
|
+
if (!JSON) {
|
164
|
+
JSON = {};
|
164
165
|
}
|
165
166
|
|
166
167
|
(function () {
|
168
|
+
'use strict';
|
167
169
|
|
168
170
|
function f(n) {
|
169
171
|
// Format integers to have at least two digits.
|
@@ -174,20 +176,21 @@ if (!this.JSON) {
|
|
174
176
|
|
175
177
|
Date.prototype.toJSON = function (key) {
|
176
178
|
|
177
|
-
return isFinite(this.valueOf())
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
179
|
+
return isFinite(this.valueOf())
|
180
|
+
? this.getUTCFullYear() + '-' +
|
181
|
+
f(this.getUTCMonth() + 1) + '-' +
|
182
|
+
f(this.getUTCDate()) + 'T' +
|
183
|
+
f(this.getUTCHours()) + ':' +
|
184
|
+
f(this.getUTCMinutes()) + ':' +
|
185
|
+
f(this.getUTCSeconds()) + 'Z'
|
186
|
+
: null;
|
184
187
|
};
|
185
188
|
|
186
|
-
String.prototype.toJSON
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
189
|
+
String.prototype.toJSON =
|
190
|
+
Number.prototype.toJSON =
|
191
|
+
Boolean.prototype.toJSON = function (key) {
|
192
|
+
return this.valueOf();
|
193
|
+
};
|
191
194
|
}
|
192
195
|
|
193
196
|
var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
|
@@ -214,13 +217,12 @@ if (!this.JSON) {
|
|
214
217
|
// sequences.
|
215
218
|
|
216
219
|
escapable.lastIndex = 0;
|
217
|
-
return escapable.test(string) ?
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
'"' + string + '"';
|
220
|
+
return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
|
221
|
+
var c = meta[a];
|
222
|
+
return typeof c === 'string'
|
223
|
+
? c
|
224
|
+
: '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
|
225
|
+
}) + '"' : '"' + string + '"';
|
224
226
|
}
|
225
227
|
|
226
228
|
|
@@ -303,11 +305,11 @@ if (!this.JSON) {
|
|
303
305
|
// Join all of the elements together, separated with commas, and wrap them in
|
304
306
|
// brackets.
|
305
307
|
|
306
|
-
v = partial.length === 0
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
308
|
+
v = partial.length === 0
|
309
|
+
? '[]'
|
310
|
+
: gap
|
311
|
+
? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']'
|
312
|
+
: '[' + partial.join(',') + ']';
|
311
313
|
gap = mind;
|
312
314
|
return v;
|
313
315
|
}
|
@@ -317,8 +319,8 @@ if (!this.JSON) {
|
|
317
319
|
if (rep && typeof rep === 'object') {
|
318
320
|
length = rep.length;
|
319
321
|
for (i = 0; i < length; i += 1) {
|
320
|
-
|
321
|
-
|
322
|
+
if (typeof rep[i] === 'string') {
|
323
|
+
k = rep[i];
|
322
324
|
v = str(k, value);
|
323
325
|
if (v) {
|
324
326
|
partial.push(quote(k) + (gap ? ': ' : ':') + v);
|
@@ -330,7 +332,7 @@ if (!this.JSON) {
|
|
330
332
|
// Otherwise, iterate through all of the keys in the object.
|
331
333
|
|
332
334
|
for (k in value) {
|
333
|
-
if (Object.hasOwnProperty.call(value, k)) {
|
335
|
+
if (Object.prototype.hasOwnProperty.call(value, k)) {
|
334
336
|
v = str(k, value);
|
335
337
|
if (v) {
|
336
338
|
partial.push(quote(k) + (gap ? ': ' : ':') + v);
|
@@ -342,9 +344,11 @@ if (!this.JSON) {
|
|
342
344
|
// Join all of the member texts together, separated with commas,
|
343
345
|
// and wrap them in braces.
|
344
346
|
|
345
|
-
v = partial.length === 0
|
346
|
-
|
347
|
-
|
347
|
+
v = partial.length === 0
|
348
|
+
? '{}'
|
349
|
+
: gap
|
350
|
+
? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}'
|
351
|
+
: '{' + partial.join(',') + '}';
|
348
352
|
gap = mind;
|
349
353
|
return v;
|
350
354
|
}
|
@@ -385,7 +389,7 @@ if (!this.JSON) {
|
|
385
389
|
rep = replacer;
|
386
390
|
if (replacer && typeof replacer !== 'function' &&
|
387
391
|
(typeof replacer !== 'object' ||
|
388
|
-
|
392
|
+
typeof replacer.length !== 'number')) {
|
389
393
|
throw new Error('JSON.stringify');
|
390
394
|
}
|
391
395
|
|
@@ -415,7 +419,7 @@ if (!this.JSON) {
|
|
415
419
|
var k, v, value = holder[key];
|
416
420
|
if (value && typeof value === 'object') {
|
417
421
|
for (k in value) {
|
418
|
-
if (Object.hasOwnProperty.call(value, k)) {
|
422
|
+
if (Object.prototype.hasOwnProperty.call(value, k)) {
|
419
423
|
v = walk(value, k);
|
420
424
|
if (v !== undefined) {
|
421
425
|
value[k] = v;
|
@@ -456,9 +460,9 @@ if (!this.JSON) {
|
|
456
460
|
// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
|
457
461
|
|
458
462
|
if (/^[\],:{}\s]*$/
|
459
|
-
.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')
|
460
|
-
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
|
461
|
-
.replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
|
463
|
+
.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')
|
464
|
+
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
|
465
|
+
.replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
|
462
466
|
|
463
467
|
// In the third stage we use the eval function to compile the text into a
|
464
468
|
// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
|
@@ -470,8 +474,9 @@ if (!this.JSON) {
|
|
470
474
|
// In the optional fourth stage, we recursively walk the new structure, passing
|
471
475
|
// each name/value pair to a reviver function for possible transformation.
|
472
476
|
|
473
|
-
return typeof reviver === 'function'
|
474
|
-
walk({'': j}, '')
|
477
|
+
return typeof reviver === 'function'
|
478
|
+
? walk({'': j}, '')
|
479
|
+
: j;
|
475
480
|
}
|
476
481
|
|
477
482
|
// If the text is not JSON parseable, then a SyntaxError is thrown.
|