mailcatcher 0.5.12 → 0.6.0pre1

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.
metadata.gz.sig CHANGED
Binary file
@@ -1,16 +0,0 @@
1
- module MailCatcher
2
- module Growl extend self
3
- def start
4
- MailCatcher::Events::MessageAdded.subscribe MailCatcher::Growl.method :notify
5
- end
6
-
7
- def notify message
8
- image_path = File.expand_path(File.join(__FILE__, '..', '..', '..', 'public', 'images', 'logo_large.png'))
9
- system "growlnotify", "--image", image_path, "--name", "MailCatcher", "--message", "Message received:\n#{message["subject"]}"
10
- end
11
-
12
- # TODO: Native support on MacRuby with click backs
13
- #def click
14
- #end
15
- end
16
- end
@@ -1,408 +0,0 @@
1
- (function() {
2
- var MailCatcher,
3
- _this = this;
4
-
5
- jQuery.expr[':'].icontains = function(a, i, m) {
6
- var _ref, _ref1;
7
- return ((_ref = (_ref1 = a.textContent) != null ? _ref1 : a.innerText) != null ? _ref : "").toUpperCase().indexOf(m[3].toUpperCase()) >= 0;
8
- };
9
-
10
- MailCatcher = (function() {
11
-
12
- function MailCatcher() {
13
- var _this = this;
14
- this.nextTab = function(tab) {
15
- return MailCatcher.prototype.nextTab.apply(_this, arguments);
16
- };
17
- this.previousTab = function(tab) {
18
- return MailCatcher.prototype.previousTab.apply(_this, arguments);
19
- };
20
- this.openTab = function(i) {
21
- return MailCatcher.prototype.openTab.apply(_this, arguments);
22
- };
23
- this.selectedTab = function() {
24
- return MailCatcher.prototype.selectedTab.apply(_this, arguments);
25
- };
26
- this.getTab = function(i) {
27
- return MailCatcher.prototype.getTab.apply(_this, arguments);
28
- };
29
- $('#messages tr').live('click', function(e) {
30
- e.preventDefault();
31
- return _this.loadMessage($(e.currentTarget).attr('data-message-id'));
32
- });
33
- $('input[name=search]').keyup(function(e) {
34
- var query;
35
- query = $.trim($(e.currentTarget).val());
36
- if (query) {
37
- return _this.searchMessages(query);
38
- } else {
39
- return _this.clearSearch();
40
- }
41
- });
42
- $('#message .views .format.tab a').live('click', function(e) {
43
- e.preventDefault();
44
- return _this.loadMessageBody(_this.selectedMessage(), $($(e.currentTarget).parent('li')).data('message-format'));
45
- });
46
- $('#message .views .analysis.tab a').live('click', function(e) {
47
- e.preventDefault();
48
- return _this.loadMessageAnalysis(_this.selectedMessage());
49
- });
50
- $('#resizer').live({
51
- mousedown: function(e) {
52
- var events;
53
- e.preventDefault();
54
- return $(window).bind(events = {
55
- mouseup: function(e) {
56
- e.preventDefault();
57
- return $(window).unbind(events);
58
- },
59
- mousemove: function(e) {
60
- e.preventDefault();
61
- return $('#messages').css({
62
- height: e.clientY - $('#messages').offset().top
63
- });
64
- }
65
- });
66
- }
67
- });
68
- $('nav.app .clear a').live('click', function(e) {
69
- e.preventDefault();
70
- if (confirm("You will lose all your received messages.\n\nAre you sure you want to clear all messages?")) {
71
- return $.ajax({
72
- url: '/messages',
73
- type: 'DELETE',
74
- success: function() {
75
- return _this.unselectMessage();
76
- },
77
- error: function() {
78
- return alert('Error while clearing all messages.');
79
- }
80
- });
81
- }
82
- });
83
- $('nav.app .quit a').live('click', function(e) {
84
- e.preventDefault();
85
- if (confirm("You will lose all your received messages.\n\nAre you sure you want to quit?")) {
86
- return $.ajax({
87
- type: 'DELETE',
88
- success: function() {
89
- return location.replace($('body > header h1 a').attr('href'));
90
- },
91
- error: function() {
92
- return alert('Error while quitting.');
93
- }
94
- });
95
- }
96
- });
97
- key('up', function() {
98
- if (_this.selectedMessage()) {
99
- _this.loadMessage($('#messages tr.selected').prev().data('message-id'));
100
- } else {
101
- _this.loadMessage($('#messages tbody tr[data-message-id]:first').data('message-id'));
102
- }
103
- return false;
104
- });
105
- key('down', function() {
106
- if (_this.selectedMessage()) {
107
- _this.loadMessage($('#messages tr.selected').next().data('message-id'));
108
- } else {
109
- _this.loadMessage($('#messages tbody tr[data-message-id]:first').data('message-id'));
110
- }
111
- return false;
112
- });
113
- key('⌘+up, ctrl+up', function() {
114
- _this.loadMessage($('#messages tbody tr[data-message-id]:first').data('message-id'));
115
- return false;
116
- });
117
- key('⌘+down, ctrl+down', function() {
118
- _this.loadMessage($('#messages tbody tr[data-message-id]:last').data('message-id'));
119
- return false;
120
- });
121
- key('left', function() {
122
- _this.openTab(_this.previousTab());
123
- return false;
124
- });
125
- key('right', function() {
126
- _this.openTab(_this.nextTab());
127
- return false;
128
- });
129
- key('backspace, delete', function() {
130
- var id;
131
- id = _this.selectedMessage();
132
- if (id != null) {
133
- $.ajax({
134
- url: '/messages/' + id,
135
- type: 'DELETE',
136
- success: function() {
137
- var messageRow, switchTo;
138
- messageRow = $("#messages tbody tr[data-message-id='" + id + "']");
139
- switchTo = messageRow.next().data('message-id') || messageRow.prev().data('message-id');
140
- messageRow.remove();
141
- if (switchTo) {
142
- return _this.loadMessage(switchTo);
143
- } else {
144
- return _this.unselectMessage();
145
- }
146
- },
147
- error: function() {
148
- return alert('Error while removing message.');
149
- }
150
- });
151
- }
152
- return false;
153
- });
154
- this.refresh();
155
- this.subscribe();
156
- }
157
-
158
- MailCatcher.prototype.parseDateRegexp = /^(\d{4})[-\/\\](\d{2})[-\/\\](\d{2})(?:\s+|T)(\d{2})[:-](\d{2})[:-](\d{2})(?:([ +-]\d{2}:\d{2}|\s*\S+|Z?))?$/;
159
-
160
- MailCatcher.prototype.parseDate = function(date) {
161
- var match;
162
- if (match = this.parseDateRegexp.exec(date)) {
163
- return new Date(match[1], match[2] - 1, match[3], match[4], match[5], match[6], 0);
164
- }
165
- };
166
-
167
- MailCatcher.prototype.offsetTimeZone = function(date) {
168
- var offset;
169
- offset = Date.now().getTimezoneOffset() * 60000;
170
- date.setTime(date.getTime() - offset);
171
- return date;
172
- };
173
-
174
- MailCatcher.prototype.formatDate = function(date) {
175
- if (typeof date === "string") {
176
- date && (date = this.parseDate(date));
177
- }
178
- date && (date = this.offsetTimeZone(date));
179
- return date && (date = date.toString("dddd, d MMM yyyy h:mm:ss tt"));
180
- };
181
-
182
- MailCatcher.prototype.messagesCount = function() {
183
- return $('#messages tr').length - 1;
184
- };
185
-
186
- MailCatcher.prototype.tabs = function() {
187
- return $('#message ul').children('.tab');
188
- };
189
-
190
- MailCatcher.prototype.getTab = function(i) {
191
- return $(this.tabs()[i]);
192
- };
193
-
194
- MailCatcher.prototype.selectedTab = function() {
195
- return this.tabs().index($('#message li.tab.selected'));
196
- };
197
-
198
- MailCatcher.prototype.openTab = function(i) {
199
- return this.getTab(i).children('a').click();
200
- };
201
-
202
- MailCatcher.prototype.previousTab = function(tab) {
203
- var i;
204
- i = tab || tab === 0 ? tab : this.selectedTab() - 1;
205
- if (i < 0) {
206
- i = this.tabs().length - 1;
207
- }
208
- if (this.getTab(i).is(":visible")) {
209
- return i;
210
- } else {
211
- return this.previousTab(i - 1);
212
- }
213
- };
214
-
215
- MailCatcher.prototype.nextTab = function(tab) {
216
- var i;
217
- i = tab ? tab : this.selectedTab() + 1;
218
- if (i > this.tabs().length - 1) {
219
- i = 0;
220
- }
221
- if (this.getTab(i).is(":visible")) {
222
- return i;
223
- } else {
224
- return this.nextTab(i + 1);
225
- }
226
- };
227
-
228
- MailCatcher.prototype.haveMessage = function(message) {
229
- if (message.id != null) {
230
- message = message.id;
231
- }
232
- return $("#messages tbody tr[data-message-id=\"" + message + "\"]").length > 0;
233
- };
234
-
235
- MailCatcher.prototype.selectedMessage = function() {
236
- return $('#messages tr.selected').data('message-id');
237
- };
238
-
239
- MailCatcher.prototype.searchMessages = function(query) {
240
- var $rows, selector, token;
241
- selector = ((function() {
242
- var _i, _len, _ref, _results;
243
- _ref = query.split(/\s+/);
244
- _results = [];
245
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
246
- token = _ref[_i];
247
- _results.push(":icontains('" + token + "')");
248
- }
249
- return _results;
250
- })()).join("");
251
- $rows = $("#messages tbody tr");
252
- $rows.not(selector).hide();
253
- return $rows.filter(selector).show();
254
- };
255
-
256
- MailCatcher.prototype.clearSearch = function() {
257
- return $('#messages tbody tr').show();
258
- };
259
-
260
- MailCatcher.prototype.addMessage = function(message) {
261
- return $('#messages tbody').prepend($('<tr />').attr('data-message-id', message.id.toString()).append($('<td/>').text(message.sender || "No sender").toggleClass("blank", !message.sender)).append($('<td/>').text((message.recipients || []).join(', ') || "No receipients").toggleClass("blank", !message.recipients.length)).append($('<td/>').text(message.subject || "No subject").toggleClass("blank", !message.subject)).append($('<td/>').text(this.formatDate(message.created_at))));
262
- };
263
-
264
- MailCatcher.prototype.scrollToRow = function(row) {
265
- var overflow, relativePosition;
266
- relativePosition = row.offset().top - $('#messages').offset().top;
267
- if (relativePosition < 0) {
268
- return $('#messages').scrollTop($('#messages').scrollTop() + relativePosition - 20);
269
- } else {
270
- overflow = relativePosition + row.height() - $('#messages').height();
271
- if (overflow > 0) {
272
- return $('#messages').scrollTop($('#messages').scrollTop() + overflow + 20);
273
- }
274
- }
275
- };
276
-
277
- MailCatcher.prototype.unselectMessage = function() {
278
- $('#messages tbody, #message .metadata dd').empty();
279
- $('#message .metadata .attachments').hide();
280
- $('#message iframe').attr('src', 'about:blank');
281
- return null;
282
- };
283
-
284
- MailCatcher.prototype.loadMessage = function(id) {
285
- var messageRow,
286
- _this = this;
287
- if ((id != null ? id.id : void 0) != null) {
288
- id = id.id;
289
- }
290
- id || (id = $('#messages tr.selected').attr('data-message-id'));
291
- if (id != null) {
292
- $("#messages tbody tr:not([data-message-id='" + id + "'])").removeClass('selected');
293
- messageRow = $("#messages tbody tr[data-message-id='" + id + "']");
294
- messageRow.addClass('selected');
295
- this.scrollToRow(messageRow);
296
- return $.getJSON("/messages/" + id + ".json", function(message) {
297
- var $ul;
298
- $('#message .metadata dd.created_at').text(_this.formatDate(message.created_at));
299
- $('#message .metadata dd.from').text(message.sender);
300
- $('#message .metadata dd.to').text((message.recipients || []).join(', '));
301
- $('#message .metadata dd.subject').text(message.subject);
302
- $('#message .views .tab.format').each(function(i, el) {
303
- var $el, format;
304
- $el = $(el);
305
- format = $el.attr('data-message-format');
306
- if ($.inArray(format, message.formats) >= 0) {
307
- $el.find('a').attr('href', "/messages/" + id + "." + format);
308
- return $el.show();
309
- } else {
310
- return $el.hide();
311
- }
312
- });
313
- if ($("#message .views .tab.selected:not(:visible)").length) {
314
- $("#message .views .tab.selected").removeClass("selected");
315
- $("#message .views .tab:visible:first").addClass("selected");
316
- }
317
- if (message.attachments.length) {
318
- $ul = $('<ul/>').appendTo($('#message .metadata dd.attachments').empty());
319
- $.each(message.attachments, function(i, attachment) {
320
- return $ul.append($('<li>').append($('<a>').attr('href', attachment['href']).addClass(attachment['type'].split('/', 1)[0]).addClass(attachment['type'].replace('/', '-')).text(attachment['filename'])));
321
- });
322
- $('#message .metadata .attachments').show();
323
- } else {
324
- $('#message .metadata .attachments').hide();
325
- }
326
- $('#message .views .download a').attr('href', "/messages/" + id + ".eml");
327
- if ($('#message .views .tab.analysis.selected').length) {
328
- return _this.loadMessageAnalysis();
329
- } else {
330
- return _this.loadMessageBody();
331
- }
332
- });
333
- }
334
- };
335
-
336
- MailCatcher.prototype.loadMessageBody = function(id, format) {
337
- id || (id = this.selectedMessage());
338
- format || (format = $('#message .views .tab.format.selected').attr('data-message-format'));
339
- format || (format = 'html');
340
- $("#message .views .tab[data-message-format=\"" + format + "\"]:not(.selected)").addClass('selected');
341
- $("#message .views .tab:not([data-message-format=\"" + format + "\"]).selected").removeClass('selected');
342
- if (id != null) {
343
- return $('#message iframe').attr("src", "/messages/" + id + "." + format);
344
- }
345
- };
346
-
347
- MailCatcher.prototype.loadMessageAnalysis = function(id) {
348
- var $form, $iframe;
349
- id || (id = this.selectedMessage());
350
- $("#message .views .analysis.tab:not(.selected)").addClass('selected');
351
- $("#message .views :not(.analysis).tab.selected").removeClass('selected');
352
- if (id != null) {
353
- $iframe = $('#message iframe').contents().children().html("<html>\n<head>\n<title>Analysis</title>\n" + ($('link[rel="stylesheet"]')[0].outerHTML) + "\n</head>\n<body class=\"iframe\">\n<h1>Analyse your email with Fractal</h1>\n<p><a href=\"http://getfractal.com/\" target=\"_blank\">Fractal</a> is a really neat service that applies common email design and development knowledge from <a href=\"http://www.email-standards.org/\" target=\"_blank\">Email Standards Project</a> to your HTML email and tells you what you've done wrong or what you should do instead.</p>\n<p>Please note that this <strong>sends your email to the Fractal service</strong> for analysis. Read their <a href=\"https://www.getfractal.com/page/terms\" target=\"_blank\">terms of service</a> if you're paranoid.</p>\n<form>\n<input type=\"submit\" value=\"Analyse\" /><span class=\"loading\" style=\"color: #999; display: none\">Analysing&hellip;</span>\n</form>\n</body>\n</html>");
354
- return $form = $iframe.find('form').submit(function(e) {
355
- e.preventDefault();
356
- $(this).find('input[type="submit"]').attr('disabled', 'disabled').end().find('.loading').show();
357
- return $('#message iframe').contents().find('body').xslt("/messages/" + id + "/analysis.xml", "/stylesheets/analysis.xsl");
358
- });
359
- }
360
- };
361
-
362
- MailCatcher.prototype.refresh = function() {
363
- var _this = this;
364
- return $.getJSON('/messages', function(messages) {
365
- return $.each(messages, function(i, message) {
366
- if (!_this.haveMessage(message)) {
367
- return _this.addMessage(message);
368
- }
369
- });
370
- });
371
- };
372
-
373
- MailCatcher.prototype.subscribe = function() {
374
- if (typeof WebSocket !== "undefined" && WebSocket !== null) {
375
- return this.subscribeWebSocket();
376
- } else {
377
- return this.subscribePoll();
378
- }
379
- };
380
-
381
- MailCatcher.prototype.subscribeWebSocket = function() {
382
- var secure,
383
- _this = this;
384
- secure = window.location.scheme === 'https';
385
- this.websocket = new WebSocket("" + (secure ? 'wss' : 'ws') + "://" + window.location.host + "/messages");
386
- return this.websocket.onmessage = function(event) {
387
- return _this.addMessage($.parseJSON(event.data));
388
- };
389
- };
390
-
391
- MailCatcher.prototype.subscribePoll = function() {
392
- var _this = this;
393
- if (this.refreshInterval == null) {
394
- return this.refreshInterval = setInterval((function() {
395
- return _this.refresh();
396
- }), 1000);
397
- }
398
- };
399
-
400
- return MailCatcher;
401
-
402
- })();
403
-
404
- $(function() {
405
- return window.MailCatcher = new MailCatcher;
406
- });
407
-
408
- }).call(this);
@@ -1,104 +0,0 @@
1
- /**
2
- * Version: 1.0 Alpha-1
3
- * Build Date: 13-Nov-2007
4
- * Copyright (c) 2006-2007, Coolite Inc. (http://www.coolite.com/). All rights reserved.
5
- * License: Licensed under The MIT License. See license.txt and http://www.datejs.com/license/.
6
- * Website: http://www.datejs.com/ or http://www.coolite.com/datejs/
7
- */
8
- Date.CultureInfo={name:"en-US",englishName:"English (United States)",nativeName:"English (United States)",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Su","Mo","Tu","We","Th","Fr","Sa"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"mdy",formatPatterns:{shortDate:"M/d/yyyy",longDate:"dddd, MMMM dd, yyyy",shortTime:"h:mm tt",longTime:"h:mm:ss tt",fullDateTime:"dddd, MMMM dd, yyyy h:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^jan(uary)?/i,feb:/^feb(ruary)?/i,mar:/^mar(ch)?/i,apr:/^apr(il)?/i,may:/^may/i,jun:/^jun(e)?/i,jul:/^jul(y)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^oct(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^su(n(day)?)?/i,mon:/^mo(n(day)?)?/i,tue:/^tu(e(s(day)?)?)?/i,wed:/^we(d(nesday)?)?/i,thu:/^th(u(r(s(day)?)?)?)?/i,fri:/^fr(i(day)?)?/i,sat:/^sa(t(urday)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\+|after|from)/i,subtract:/^(\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\.?m?\.?|p\.?m?\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\s*(\+|\-)\s*\d\d\d\d?)|gmt)/i,ordinalSuffix:/^\s*(st|nd|rd|th)/i,timeContext:/^\s*(\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}};
9
- Date.getMonthNumberFromName=function(name){var n=Date.CultureInfo.monthNames,m=Date.CultureInfo.abbreviatedMonthNames,s=name.toLowerCase();for(var i=0;i<n.length;i++){if(n[i].toLowerCase()==s||m[i].toLowerCase()==s){return i;}}
10
- return-1;};Date.getDayNumberFromName=function(name){var n=Date.CultureInfo.dayNames,m=Date.CultureInfo.abbreviatedDayNames,o=Date.CultureInfo.shortestDayNames,s=name.toLowerCase();for(var i=0;i<n.length;i++){if(n[i].toLowerCase()==s||m[i].toLowerCase()==s){return i;}}
11
- return-1;};Date.isLeapYear=function(year){return(((year%4===0)&&(year%100!==0))||(year%400===0));};Date.getDaysInMonth=function(year,month){return[31,(Date.isLeapYear(year)?29:28),31,30,31,30,31,31,30,31,30,31][month];};Date.getTimezoneOffset=function(s,dst){return(dst||false)?Date.CultureInfo.abbreviatedTimeZoneDST[s.toUpperCase()]:Date.CultureInfo.abbreviatedTimeZoneStandard[s.toUpperCase()];};Date.getTimezoneAbbreviation=function(offset,dst){var n=(dst||false)?Date.CultureInfo.abbreviatedTimeZoneDST:Date.CultureInfo.abbreviatedTimeZoneStandard,p;for(p in n){if(n[p]===offset){return p;}}
12
- return null;};Date.prototype.clone=function(){return new Date(this.getTime());};Date.prototype.compareTo=function(date){if(isNaN(this)){throw new Error(this);}
13
- if(date instanceof Date&&!isNaN(date)){return(this>date)?1:(this<date)?-1:0;}else{throw new TypeError(date);}};Date.prototype.equals=function(date){return(this.compareTo(date)===0);};Date.prototype.between=function(start,end){var t=this.getTime();return t>=start.getTime()&&t<=end.getTime();};Date.prototype.addMilliseconds=function(value){this.setMilliseconds(this.getMilliseconds()+value);return this;};Date.prototype.addSeconds=function(value){return this.addMilliseconds(value*1000);};Date.prototype.addMinutes=function(value){return this.addMilliseconds(value*60000);};Date.prototype.addHours=function(value){return this.addMilliseconds(value*3600000);};Date.prototype.addDays=function(value){return this.addMilliseconds(value*86400000);};Date.prototype.addWeeks=function(value){return this.addMilliseconds(value*604800000);};Date.prototype.addMonths=function(value){var n=this.getDate();this.setDate(1);this.setMonth(this.getMonth()+value);this.setDate(Math.min(n,this.getDaysInMonth()));return this;};Date.prototype.addYears=function(value){return this.addMonths(value*12);};Date.prototype.add=function(config){if(typeof config=="number"){this._orient=config;return this;}
14
- var x=config;if(x.millisecond||x.milliseconds){this.addMilliseconds(x.millisecond||x.milliseconds);}
15
- if(x.second||x.seconds){this.addSeconds(x.second||x.seconds);}
16
- if(x.minute||x.minutes){this.addMinutes(x.minute||x.minutes);}
17
- if(x.hour||x.hours){this.addHours(x.hour||x.hours);}
18
- if(x.month||x.months){this.addMonths(x.month||x.months);}
19
- if(x.year||x.years){this.addYears(x.year||x.years);}
20
- if(x.day||x.days){this.addDays(x.day||x.days);}
21
- return this;};Date._validate=function(value,min,max,name){if(typeof value!="number"){throw new TypeError(value+" is not a Number.");}else if(value<min||value>max){throw new RangeError(value+" is not a valid value for "+name+".");}
22
- return true;};Date.validateMillisecond=function(n){return Date._validate(n,0,999,"milliseconds");};Date.validateSecond=function(n){return Date._validate(n,0,59,"seconds");};Date.validateMinute=function(n){return Date._validate(n,0,59,"minutes");};Date.validateHour=function(n){return Date._validate(n,0,23,"hours");};Date.validateDay=function(n,year,month){return Date._validate(n,1,Date.getDaysInMonth(year,month),"days");};Date.validateMonth=function(n){return Date._validate(n,0,11,"months");};Date.validateYear=function(n){return Date._validate(n,1,9999,"seconds");};Date.prototype.set=function(config){var x=config;if(!x.millisecond&&x.millisecond!==0){x.millisecond=-1;}
23
- if(!x.second&&x.second!==0){x.second=-1;}
24
- if(!x.minute&&x.minute!==0){x.minute=-1;}
25
- if(!x.hour&&x.hour!==0){x.hour=-1;}
26
- if(!x.day&&x.day!==0){x.day=-1;}
27
- if(!x.month&&x.month!==0){x.month=-1;}
28
- if(!x.year&&x.year!==0){x.year=-1;}
29
- if(x.millisecond!=-1&&Date.validateMillisecond(x.millisecond)){this.addMilliseconds(x.millisecond-this.getMilliseconds());}
30
- if(x.second!=-1&&Date.validateSecond(x.second)){this.addSeconds(x.second-this.getSeconds());}
31
- if(x.minute!=-1&&Date.validateMinute(x.minute)){this.addMinutes(x.minute-this.getMinutes());}
32
- if(x.hour!=-1&&Date.validateHour(x.hour)){this.addHours(x.hour-this.getHours());}
33
- if(x.month!==-1&&Date.validateMonth(x.month)){this.addMonths(x.month-this.getMonth());}
34
- if(x.year!=-1&&Date.validateYear(x.year)){this.addYears(x.year-this.getFullYear());}
35
- if(x.day!=-1&&Date.validateDay(x.day,this.getFullYear(),this.getMonth())){this.addDays(x.day-this.getDate());}
36
- if(x.timezone){this.setTimezone(x.timezone);}
37
- if(x.timezoneOffset){this.setTimezoneOffset(x.timezoneOffset);}
38
- return this;};Date.prototype.clearTime=function(){this.setHours(0);this.setMinutes(0);this.setSeconds(0);this.setMilliseconds(0);return this;};Date.prototype.isLeapYear=function(){var y=this.getFullYear();return(((y%4===0)&&(y%100!==0))||(y%400===0));};Date.prototype.isWeekday=function(){return!(this.is().sat()||this.is().sun());};Date.prototype.getDaysInMonth=function(){return Date.getDaysInMonth(this.getFullYear(),this.getMonth());};Date.prototype.moveToFirstDayOfMonth=function(){return this.set({day:1});};Date.prototype.moveToLastDayOfMonth=function(){return this.set({day:this.getDaysInMonth()});};Date.prototype.moveToDayOfWeek=function(day,orient){var diff=(day-this.getDay()+7*(orient||+1))%7;return this.addDays((diff===0)?diff+=7*(orient||+1):diff);};Date.prototype.moveToMonth=function(month,orient){var diff=(month-this.getMonth()+12*(orient||+1))%12;return this.addMonths((diff===0)?diff+=12*(orient||+1):diff);};Date.prototype.getDayOfYear=function(){return Math.floor((this-new Date(this.getFullYear(),0,1))/86400000);};Date.prototype.getWeekOfYear=function(firstDayOfWeek){var y=this.getFullYear(),m=this.getMonth(),d=this.getDate();var dow=firstDayOfWeek||Date.CultureInfo.firstDayOfWeek;var offset=7+1-new Date(y,0,1).getDay();if(offset==8){offset=1;}
39
- var daynum=((Date.UTC(y,m,d,0,0,0)-Date.UTC(y,0,1,0,0,0))/86400000)+1;var w=Math.floor((daynum-offset+7)/7);if(w===dow){y--;var prevOffset=7+1-new Date(y,0,1).getDay();if(prevOffset==2||prevOffset==8){w=53;}else{w=52;}}
40
- return w;};Date.prototype.isDST=function(){console.log('isDST');return this.toString().match(/(E|C|M|P)(S|D)T/)[2]=="D";};Date.prototype.getTimezone=function(){return Date.getTimezoneAbbreviation(this.getUTCOffset,this.isDST());};Date.prototype.setTimezoneOffset=function(s){var here=this.getTimezoneOffset(),there=Number(s)*-6/10;this.addMinutes(there-here);return this;};Date.prototype.setTimezone=function(s){return this.setTimezoneOffset(Date.getTimezoneOffset(s));};Date.prototype.getUTCOffset=function(){var n=this.getTimezoneOffset()*-10/6,r;if(n<0){r=(n-10000).toString();return r[0]+r.substr(2);}else{r=(n+10000).toString();return"+"+r.substr(1);}};Date.prototype.getDayName=function(abbrev){return abbrev?Date.CultureInfo.abbreviatedDayNames[this.getDay()]:Date.CultureInfo.dayNames[this.getDay()];};Date.prototype.getMonthName=function(abbrev){return abbrev?Date.CultureInfo.abbreviatedMonthNames[this.getMonth()]:Date.CultureInfo.monthNames[this.getMonth()];};Date.prototype._toString=Date.prototype.toString;Date.prototype.toString=function(format){var self=this;var p=function p(s){return(s.toString().length==1)?"0"+s:s;};return format?format.replace(/dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?/g,function(format){switch(format){case"hh":return p(self.getHours()<13?self.getHours():(self.getHours()-12));case"h":return self.getHours()<13?self.getHours():(self.getHours()-12);case"HH":return p(self.getHours());case"H":return self.getHours();case"mm":return p(self.getMinutes());case"m":return self.getMinutes();case"ss":return p(self.getSeconds());case"s":return self.getSeconds();case"yyyy":return self.getFullYear();case"yy":return self.getFullYear().toString().substring(2,4);case"dddd":return self.getDayName();case"ddd":return self.getDayName(true);case"dd":return p(self.getDate());case"d":return self.getDate().toString();case"MMMM":return self.getMonthName();case"MMM":return self.getMonthName(true);case"MM":return p((self.getMonth()+1));case"M":return self.getMonth()+1;case"t":return self.getHours()<12?Date.CultureInfo.amDesignator.substring(0,1):Date.CultureInfo.pmDesignator.substring(0,1);case"tt":return self.getHours()<12?Date.CultureInfo.amDesignator:Date.CultureInfo.pmDesignator;case"zzz":case"zz":case"z":return"";}}):this._toString();};
41
- Date.now=function(){return new Date();};Date.today=function(){return Date.now().clearTime();};Date.prototype._orient=+1;Date.prototype.next=function(){this._orient=+1;return this;};Date.prototype.last=Date.prototype.prev=Date.prototype.previous=function(){this._orient=-1;return this;};Date.prototype._is=false;Date.prototype.is=function(){this._is=true;return this;};Number.prototype._dateElement="day";Number.prototype.fromNow=function(){var c={};c[this._dateElement]=this;return Date.now().add(c);};Number.prototype.ago=function(){var c={};c[this._dateElement]=this*-1;return Date.now().add(c);};(function(){var $D=Date.prototype,$N=Number.prototype;var dx=("sunday monday tuesday wednesday thursday friday saturday").split(/\s/),mx=("january february march april may june july august september october november december").split(/\s/),px=("Millisecond Second Minute Hour Day Week Month Year").split(/\s/),de;var df=function(n){return function(){if(this._is){this._is=false;return this.getDay()==n;}
42
- return this.moveToDayOfWeek(n,this._orient);};};for(var i=0;i<dx.length;i++){$D[dx[i]]=$D[dx[i].substring(0,3)]=df(i);}
43
- var mf=function(n){return function(){if(this._is){this._is=false;return this.getMonth()===n;}
44
- return this.moveToMonth(n,this._orient);};};for(var j=0;j<mx.length;j++){$D[mx[j]]=$D[mx[j].substring(0,3)]=mf(j);}
45
- var ef=function(j){return function(){if(j.substring(j.length-1)!="s"){j+="s";}
46
- return this["add"+j](this._orient);};};var nf=function(n){return function(){this._dateElement=n;return this;};};for(var k=0;k<px.length;k++){de=px[k].toLowerCase();$D[de]=$D[de+"s"]=ef(px[k]);$N[de]=$N[de+"s"]=nf(de);}}());Date.prototype.toJSONString=function(){return this.toString("yyyy-MM-ddThh:mm:ssZ");};Date.prototype.toShortDateString=function(){return this.toString(Date.CultureInfo.formatPatterns.shortDatePattern);};Date.prototype.toLongDateString=function(){return this.toString(Date.CultureInfo.formatPatterns.longDatePattern);};Date.prototype.toShortTimeString=function(){return this.toString(Date.CultureInfo.formatPatterns.shortTimePattern);};Date.prototype.toLongTimeString=function(){return this.toString(Date.CultureInfo.formatPatterns.longTimePattern);};Date.prototype.getOrdinal=function(){switch(this.getDate()){case 1:case 21:case 31:return"st";case 2:case 22:return"nd";case 3:case 23:return"rd";default:return"th";}};
47
- (function(){Date.Parsing={Exception:function(s){this.message="Parse error at '"+s.substring(0,10)+" ...'";}};var $P=Date.Parsing;var _=$P.Operators={rtoken:function(r){return function(s){var mx=s.match(r);if(mx){return([mx[0],s.substring(mx[0].length)]);}else{throw new $P.Exception(s);}};},token:function(s){return function(s){return _.rtoken(new RegExp("^\s*"+s+"\s*"))(s);};},stoken:function(s){return _.rtoken(new RegExp("^"+s));},until:function(p){return function(s){var qx=[],rx=null;while(s.length){try{rx=p.call(this,s);}catch(e){qx.push(rx[0]);s=rx[1];continue;}
48
- break;}
49
- return[qx,s];};},many:function(p){return function(s){var rx=[],r=null;while(s.length){try{r=p.call(this,s);}catch(e){return[rx,s];}
50
- rx.push(r[0]);s=r[1];}
51
- return[rx,s];};},optional:function(p){return function(s){var r=null;try{r=p.call(this,s);}catch(e){return[null,s];}
52
- return[r[0],r[1]];};},not:function(p){return function(s){try{p.call(this,s);}catch(e){return[null,s];}
53
- throw new $P.Exception(s);};},ignore:function(p){return p?function(s){var r=null;r=p.call(this,s);return[null,r[1]];}:null;},product:function(){var px=arguments[0],qx=Array.prototype.slice.call(arguments,1),rx=[];for(var i=0;i<px.length;i++){rx.push(_.each(px[i],qx));}
54
- return rx;},cache:function(rule){var cache={},r=null;return function(s){try{r=cache[s]=(cache[s]||rule.call(this,s));}catch(e){r=cache[s]=e;}
55
- if(r instanceof $P.Exception){throw r;}else{return r;}};},any:function(){var px=arguments;return function(s){var r=null;for(var i=0;i<px.length;i++){if(px[i]==null){continue;}
56
- try{r=(px[i].call(this,s));}catch(e){r=null;}
57
- if(r){return r;}}
58
- throw new $P.Exception(s);};},each:function(){var px=arguments;return function(s){var rx=[],r=null;for(var i=0;i<px.length;i++){if(px[i]==null){continue;}
59
- try{r=(px[i].call(this,s));}catch(e){throw new $P.Exception(s);}
60
- rx.push(r[0]);s=r[1];}
61
- return[rx,s];};},all:function(){var px=arguments,_=_;return _.each(_.optional(px));},sequence:function(px,d,c){d=d||_.rtoken(/^\s*/);c=c||null;if(px.length==1){return px[0];}
62
- return function(s){var r=null,q=null;var rx=[];for(var i=0;i<px.length;i++){try{r=px[i].call(this,s);}catch(e){break;}
63
- rx.push(r[0]);try{q=d.call(this,r[1]);}catch(ex){q=null;break;}
64
- s=q[1];}
65
- if(!r){throw new $P.Exception(s);}
66
- if(q){throw new $P.Exception(q[1]);}
67
- if(c){try{r=c.call(this,r[1]);}catch(ey){throw new $P.Exception(r[1]);}}
68
- return[rx,(r?r[1]:s)];};},between:function(d1,p,d2){d2=d2||d1;var _fn=_.each(_.ignore(d1),p,_.ignore(d2));return function(s){var rx=_fn.call(this,s);return[[rx[0][0],r[0][2]],rx[1]];};},list:function(p,d,c){d=d||_.rtoken(/^\s*/);c=c||null;return(p instanceof Array?_.each(_.product(p.slice(0,-1),_.ignore(d)),p.slice(-1),_.ignore(c)):_.each(_.many(_.each(p,_.ignore(d))),px,_.ignore(c)));},set:function(px,d,c){d=d||_.rtoken(/^\s*/);c=c||null;return function(s){var r=null,p=null,q=null,rx=null,best=[[],s],last=false;for(var i=0;i<px.length;i++){q=null;p=null;r=null;last=(px.length==1);try{r=px[i].call(this,s);}catch(e){continue;}
69
- rx=[[r[0]],r[1]];if(r[1].length>0&&!last){try{q=d.call(this,r[1]);}catch(ex){last=true;}}else{last=true;}
70
- if(!last&&q[1].length===0){last=true;}
71
- if(!last){var qx=[];for(var j=0;j<px.length;j++){if(i!=j){qx.push(px[j]);}}
72
- p=_.set(qx,d).call(this,q[1]);if(p[0].length>0){rx[0]=rx[0].concat(p[0]);rx[1]=p[1];}}
73
- if(rx[1].length<best[1].length){best=rx;}
74
- if(best[1].length===0){break;}}
75
- if(best[0].length===0){return best;}
76
- if(c){try{q=c.call(this,best[1]);}catch(ey){throw new $P.Exception(best[1]);}
77
- best[1]=q[1];}
78
- return best;};},forward:function(gr,fname){return function(s){return gr[fname].call(this,s);};},replace:function(rule,repl){return function(s){var r=rule.call(this,s);return[repl,r[1]];};},process:function(rule,fn){return function(s){var r=rule.call(this,s);return[fn.call(this,r[0]),r[1]];};},min:function(min,rule){return function(s){var rx=rule.call(this,s);if(rx[0].length<min){throw new $P.Exception(s);}
79
- return rx;};}};var _generator=function(op){return function(){var args=null,rx=[];if(arguments.length>1){args=Array.prototype.slice.call(arguments);}else if(arguments[0]instanceof Array){args=arguments[0];}
80
- if(args){for(var i=0,px=args.shift();i<px.length;i++){args.unshift(px[i]);rx.push(op.apply(null,args));args.shift();return rx;}}else{return op.apply(null,arguments);}};};var gx="optional not ignore cache".split(/\s/);for(var i=0;i<gx.length;i++){_[gx[i]]=_generator(_[gx[i]]);}
81
- var _vector=function(op){return function(){if(arguments[0]instanceof Array){return op.apply(null,arguments[0]);}else{return op.apply(null,arguments);}};};var vx="each any all".split(/\s/);for(var j=0;j<vx.length;j++){_[vx[j]]=_vector(_[vx[j]]);}}());(function(){var flattenAndCompact=function(ax){var rx=[];for(var i=0;i<ax.length;i++){if(ax[i]instanceof Array){rx=rx.concat(flattenAndCompact(ax[i]));}else{if(ax[i]){rx.push(ax[i]);}}}
82
- return rx;};Date.Grammar={};Date.Translator={hour:function(s){return function(){this.hour=Number(s);};},minute:function(s){return function(){this.minute=Number(s);};},second:function(s){return function(){this.second=Number(s);};},meridian:function(s){return function(){this.meridian=s.slice(0,1).toLowerCase();};},timezone:function(s){return function(){var n=s.replace(/[^\d\+\-]/g,"");if(n.length){this.timezoneOffset=Number(n);}else{this.timezone=s.toLowerCase();}};},day:function(x){var s=x[0];return function(){this.day=Number(s.match(/\d+/)[0]);};},month:function(s){return function(){this.month=((s.length==3)?Date.getMonthNumberFromName(s):(Number(s)-1));};},year:function(s){return function(){var n=Number(s);this.year=((s.length>2)?n:(n+(((n+2000)<Date.CultureInfo.twoDigitYearMax)?2000:1900)));};},rday:function(s){return function(){switch(s){case"yesterday":this.days=-1;break;case"tomorrow":this.days=1;break;case"today":this.days=0;break;case"now":this.days=0;this.now=true;break;}};},finishExact:function(x){x=(x instanceof Array)?x:[x];var now=new Date();this.year=now.getFullYear();this.month=now.getMonth();this.day=1;this.hour=0;this.minute=0;this.second=0;for(var i=0;i<x.length;i++){if(x[i]){x[i].call(this);}}
83
- this.hour=(this.meridian=="p"&&this.hour<13)?this.hour+12:this.hour;if(this.day>Date.getDaysInMonth(this.year,this.month)){throw new RangeError(this.day+" is not a valid value for days.");}
84
- var r=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second);if(this.timezone){r.set({timezone:this.timezone});}else if(this.timezoneOffset){r.set({timezoneOffset:this.timezoneOffset});}
85
- return r;},finish:function(x){x=(x instanceof Array)?flattenAndCompact(x):[x];if(x.length===0){return null;}
86
- for(var i=0;i<x.length;i++){if(typeof x[i]=="function"){x[i].call(this);}}
87
- if(this.now){return new Date();}
88
- var today=Date.today();var method=null;var expression=!!(this.days!=null||this.orient||this.operator);if(expression){var gap,mod,orient;orient=((this.orient=="past"||this.operator=="subtract")?-1:1);if(this.weekday){this.unit="day";gap=(Date.getDayNumberFromName(this.weekday)-today.getDay());mod=7;this.days=gap?((gap+(orient*mod))%mod):(orient*mod);}
89
- if(this.month){this.unit="month";gap=(this.month-today.getMonth());mod=12;this.months=gap?((gap+(orient*mod))%mod):(orient*mod);this.month=null;}
90
- if(!this.unit){this.unit="day";}
91
- if(this[this.unit+"s"]==null||this.operator!=null){if(!this.value){this.value=1;}
92
- if(this.unit=="week"){this.unit="day";this.value=this.value*7;}
93
- this[this.unit+"s"]=this.value*orient;}
94
- return today.add(this);}else{if(this.meridian&&this.hour){this.hour=(this.hour<13&&this.meridian=="p")?this.hour+12:this.hour;}
95
- if(this.weekday&&!this.day){this.day=(today.addDays((Date.getDayNumberFromName(this.weekday)-today.getDay()))).getDate();}
96
- if(this.month&&!this.day){this.day=1;}
97
- return today.set(this);}}};var _=Date.Parsing.Operators,g=Date.Grammar,t=Date.Translator,_fn;g.datePartDelimiter=_.rtoken(/^([\s\-\.\,\/\x27]+)/);g.timePartDelimiter=_.stoken(":");g.whiteSpace=_.rtoken(/^\s*/);g.generalDelimiter=_.rtoken(/^(([\s\,]|at|on)+)/);var _C={};g.ctoken=function(keys){var fn=_C[keys];if(!fn){var c=Date.CultureInfo.regexPatterns;var kx=keys.split(/\s+/),px=[];for(var i=0;i<kx.length;i++){px.push(_.replace(_.rtoken(c[kx[i]]),kx[i]));}
98
- fn=_C[keys]=_.any.apply(null,px);}
99
- return fn;};g.ctoken2=function(key){return _.rtoken(Date.CultureInfo.regexPatterns[key]);};g.h=_.cache(_.process(_.rtoken(/^(0[0-9]|1[0-2]|[1-9])/),t.hour));g.hh=_.cache(_.process(_.rtoken(/^(0[0-9]|1[0-2])/),t.hour));g.H=_.cache(_.process(_.rtoken(/^([0-1][0-9]|2[0-3]|[0-9])/),t.hour));g.HH=_.cache(_.process(_.rtoken(/^([0-1][0-9]|2[0-3])/),t.hour));g.m=_.cache(_.process(_.rtoken(/^([0-5][0-9]|[0-9])/),t.minute));g.mm=_.cache(_.process(_.rtoken(/^[0-5][0-9]/),t.minute));g.s=_.cache(_.process(_.rtoken(/^([0-5][0-9]|[0-9])/),t.second));g.ss=_.cache(_.process(_.rtoken(/^[0-5][0-9]/),t.second));g.hms=_.cache(_.sequence([g.H,g.mm,g.ss],g.timePartDelimiter));g.t=_.cache(_.process(g.ctoken2("shortMeridian"),t.meridian));g.tt=_.cache(_.process(g.ctoken2("longMeridian"),t.meridian));g.z=_.cache(_.process(_.rtoken(/^(\+|\-)?\s*\d\d\d\d?/),t.timezone));g.zz=_.cache(_.process(_.rtoken(/^(\+|\-)\s*\d\d\d\d/),t.timezone));g.zzz=_.cache(_.process(g.ctoken2("timezone"),t.timezone));g.timeSuffix=_.each(_.ignore(g.whiteSpace),_.set([g.tt,g.zzz]));g.time=_.each(_.optional(_.ignore(_.stoken("T"))),g.hms,g.timeSuffix);g.d=_.cache(_.process(_.each(_.rtoken(/^([0-2]\d|3[0-1]|\d)/),_.optional(g.ctoken2("ordinalSuffix"))),t.day));g.dd=_.cache(_.process(_.each(_.rtoken(/^([0-2]\d|3[0-1])/),_.optional(g.ctoken2("ordinalSuffix"))),t.day));g.ddd=g.dddd=_.cache(_.process(g.ctoken("sun mon tue wed thu fri sat"),function(s){return function(){this.weekday=s;};}));g.M=_.cache(_.process(_.rtoken(/^(1[0-2]|0\d|\d)/),t.month));g.MM=_.cache(_.process(_.rtoken(/^(1[0-2]|0\d)/),t.month));g.MMM=g.MMMM=_.cache(_.process(g.ctoken("jan feb mar apr may jun jul aug sep oct nov dec"),t.month));g.y=_.cache(_.process(_.rtoken(/^(\d\d?)/),t.year));g.yy=_.cache(_.process(_.rtoken(/^(\d\d)/),t.year));g.yyy=_.cache(_.process(_.rtoken(/^(\d\d?\d?\d?)/),t.year));g.yyyy=_.cache(_.process(_.rtoken(/^(\d\d\d\d)/),t.year));_fn=function(){return _.each(_.any.apply(null,arguments),_.not(g.ctoken2("timeContext")));};g.day=_fn(g.d,g.dd);g.month=_fn(g.M,g.MMM);g.year=_fn(g.yyyy,g.yy);g.orientation=_.process(g.ctoken("past future"),function(s){return function(){this.orient=s;};});g.operator=_.process(g.ctoken("add subtract"),function(s){return function(){this.operator=s;};});g.rday=_.process(g.ctoken("yesterday tomorrow today now"),t.rday);g.unit=_.process(g.ctoken("minute hour day week month year"),function(s){return function(){this.unit=s;};});g.value=_.process(_.rtoken(/^\d\d?(st|nd|rd|th)?/),function(s){return function(){this.value=s.replace(/\D/g,"");};});g.expression=_.set([g.rday,g.operator,g.value,g.unit,g.orientation,g.ddd,g.MMM]);_fn=function(){return _.set(arguments,g.datePartDelimiter);};g.mdy=_fn(g.ddd,g.month,g.day,g.year);g.ymd=_fn(g.ddd,g.year,g.month,g.day);g.dmy=_fn(g.ddd,g.day,g.month,g.year);g.date=function(s){return((g[Date.CultureInfo.dateElementOrder]||g.mdy).call(this,s));};g.format=_.process(_.many(_.any(_.process(_.rtoken(/^(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),function(fmt){if(g[fmt]){return g[fmt];}else{throw Date.Parsing.Exception(fmt);}}),_.process(_.rtoken(/^[^dMyhHmstz]+/),function(s){return _.ignore(_.stoken(s));}))),function(rules){return _.process(_.each.apply(null,rules),t.finishExact);});var _F={};var _get=function(f){return _F[f]=(_F[f]||g.format(f)[0]);};g.formats=function(fx){if(fx instanceof Array){var rx=[];for(var i=0;i<fx.length;i++){rx.push(_get(fx[i]));}
100
- return _.any.apply(null,rx);}else{return _get(fx);}};g._formats=g.formats(["yyyy-MM-ddTHH:mm:ss","ddd, MMM dd, yyyy H:mm:ss tt","ddd MMM d yyyy HH:mm:ss zzz","d"]);g._start=_.process(_.set([g.date,g.time,g.expression],g.generalDelimiter,g.whiteSpace),t.finish);g.start=function(s){try{var r=g._formats.call({},s);if(r[1].length===0){return r;}}catch(e){}
101
- return g._start.call({},s);};}());Date._parse=Date.parse;Date.parse=function(s){var r=null;if(!s){return null;}
102
- try{r=Date.Grammar.start.call({},s);}catch(e){return null;}
103
- return((r[1].length===0)?r[0]:null);};Date.getParseFunction=function(fx){var fn=Date.Grammar.formats(fx);return function(s){var r=null;try{r=fn.call({},s);}catch(e){return null;}
104
- return((r[1].length===0)?r[0]:null);};};Date.parseExact=function(s,fx){return Date.getParseFunction(fx)(s);};