Safari Date Bug, Dojo 1.5
A funky Date bug in Safari, impacting DateTextBox
by brianarn
HTML
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/dojo/1.5/dojo/resources/dojo.css">
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/dojo/1.5/dijit/themes/claro/claro.css">
<h2>Instructions to duplicate error (Safari 5+ only)</h2>
<ol>
<li>Click "Make a new DateTextBox". The new DTB should be blank.</li>
<li>Click 'new Date("")', which will console.log out an empty date. In all browsers, this should be an invalid date.</li>
<li>Click 'new Date("01/01/2021")', which will console.log out a Date object representing January 1st, 2021 in all browsers.</li>
<li>Click 'new Date("")'. This action <em>should</em> log out an Invalid Date again, but in Safari 5, it's logging out January 1st, 2021 again.</li>
<li>Click "Make a new DateTextBox". The default date is effectively the same as `new Date("")`, and therefore, in Safari 5, it is inheriting the far-future date.</li>
<li>Click 'new Date("X")', which will console.log out an invalid date in all browsers.</li>
<li>Click 'new Date("")', which will console.log out an invalid date in all browsers, as Safari 5 is now hanging onto the Invalid Date.</li>
<li>Click "Make a new DateTextBox". It should result in an empty DTB, like the first.
</ol>
<h2>Actions</h2>
<div id="actions">
<div id="newDTB" jsId="newDTB" dojoType="dijit.form.Button">Make a new DateTextBox</div>
<div id="newDateX" jsId="newDateX" dojoType="dijit.form.Button">new Date("X")</div>
<div id="newDateEmpty" jsId="newDateEmpty" dojoType="dijit.form.Button">new Date("")</div>
<div id="newDateStr" jsId="newDateStr" dojoType="dijit.form.Button">new Date("01/01/2021")</div>
</div>
<h2>Widgets</h2>
<ul id="widgets"></ul>
CSS
label { width: 40px; display: inline-block; text-align: right; padding: 10px; }
JavaScript
// Require things here
dojo.require('dijit.form.Button');
dojo.require('dijit.form.DateTextBox');
// Do something once DOM/requires are ready
dojo.ready(function(){
var widgets = dojo.byId('widgets'), count = 1;
// Set up actions
dojo.connect(newDateX, 'onClick', function(){ console.log(new Date("X")); });
dojo.connect(newDateEmpty, 'onClick', function(){ console.log(new Date("")); });
dojo.connect(newDateStr, 'onClick', function(){ console.log(new Date("01/01/2021")); });
dojo.connect(newDTB, 'onClick', function(){
var li = dojo.create('li'),
label = dojo.place('<label>' + count + ':</label>', li),
dtb = new dijit.form.DateTextBox({}).placeAt(li);
dojo.place(li, widgets);
++count;
});
});