sample skeleton application with dojo toolkit & arcgis js api v 4.30
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

471 lines
19 KiB

<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>Test DateTextBox Widget</title>
<style type="text/css">
@import "../../themes/claro/document.css";
@import "../css/dijitTests.css";
.testExample {
background-color:#fbfbfb;
padding:1em;
margin-bottom:1em;
border:1px solid #bfbfbf;
}
.noticeMessage {
color:#093669;
font-size:0.95em;
margin-left:0.5em;
}
.dojoTitlePaneLabel label {
font-weight:bold;
}
</style>
<!-- required: the default dijit theme: -->
<link id="themeStyles" rel="stylesheet" href="../../../dijit/themes/claro/claro.css"/>
<!-- required: dojo.js -->
<script type="text/javascript" src="../../../dojo/dojo.js"
data-dojo-config="async: true, isDebug: true, parseOnLoad: true, extraLocale: ['de-de', 'en-us']"></script>
<!-- only needed for alternate theme testing: -->
<script type="text/javascript" src="../_testCommon.js"></script>
<script type="text/javascript">
function eventHandler(e){
// use this.domNode.getAttribute('widgetId') to show "this" is the widget
// mouseleave/enter map to mouseout/over in all browsers except IE
console.log(this.domNode.getAttribute('widgetId') + ' ' + e.type);
}
require([
"doh/runner",
"dojo/date",
"dojo/date/locale",
"dojo/_base/lang",
"dojo/on",
"dojo/parser",
"dijit/registry",
"dijit/form/DateTextBox",
"dijit/form/Form",
"dijit/tests/helpers",
"dojo/domReady!"
], function(doh, date, locale, lang, on, parser, registry, DateTextBox){
// Add test=true to the URL to run unit tests.
var test = /mode=test/i.test(window.location.href);
parser.parse();
// See if we can make a widget in script and attach it to the DOM ourselves.
on(registry.byId('pattern'), "onMouseEnter", eventHandler);
on(registry.byId('pattern'), "onMouseLeave", eventHandler);
on(registry.byId('pattern'), "onKeyDown", eventHandler);
var props = {
name: "date4",
value: new Date(2006,10,29),
constraints: {min:new Date(2004,0,1),max:new Date(2006,11,31)},
lang: "de-de",
hasDownArrow: false,
onMouseEnter: eventHandler,
onMouseLeave: eventHandler,
onKeyDown: eventHandler,
promptMessage: "dd.mm.yy",
rangeMessage: "Enter a date in the year range 2004-2006.",
invalidMessage: "Invalid date. Use dd.mm.yy format."
};
var german = new DateTextBox(props, "german");
german.startup();
var localLong = registry.byId("localLong");
var american = registry.byId("american");
localLong.parse = function(value,constraints){
return this.dateLocaleModule.parse(value, (constraints.formatLength="long") && constraints) ||
this.dateLocaleModule.parse(value, (constraints.formatLength="short") && constraints) ||
(this._isEmpty(value) ? null : undefined); // Date
};
if(test){
doh.register("constraints", [
{
name: "initial state",
timeout: 1000,
runTest: function(t){
var expected = new Date(2005,11,30);
var actual = localLong.get('value');
t.is(0, date.compare(expected, actual), 'expected ' + expected.toDateString() + ' but got ' + actual.toDateString());
t.is("", localLong.get('state'));
}
},
{
name: "change value, now invalid",
timeout: 1000,
runTest: function(t){
var expected = new Date(2007,6,15);
localLong.set("value", expected);
var actual = localLong.get('value');
t.is(0, date.compare(expected, actual), 'expected ' + expected.toDateString() + ' but got ' + actual.toDateString());
t.is("Error", localLong.get('state'));
}
},
{
name: "change max, still invalid",
timeout: 1000,
runTest: function(t){
localLong.set("constraints", lang.mixin(localLong.get('constraints'), { max: new Date(2007,5,30)}));
var expected = new Date(2007,6,15);
var actual = localLong.get('value');
t.is(0, date.compare(expected, actual), 'expected ' + expected.toDateString() + ' but got ' + actual.toDateString());
t.is("Error", localLong.get('state'));
}
},
{
name: "change max, now valid",
timeout: 1000,
runTest: function(t){
localLong.set("constraints", lang.mixin(localLong.get('constraints'), { max: new Date(2007,11,31)}));
var expected = new Date(2007,6,15);
var actual = localLong.get('value');
t.is(0, date.compare(expected, actual), 'expected ' + expected.toDateString() + ' but got ' + actual.toDateString());
t.is("", localLong.get('state'));
}
},
{
name: "change max, now invalid",
timeout: 1000,
runTest: function(t){
localLong.set("constraints", lang.mixin(localLong.get('constraints'), { max: new Date(2006,11,30)}));
var expected = new Date(2007,6,15);
var actual = localLong.get('value');
t.is(0, date.compare(expected, actual), 'expected ' + expected.toDateString() + ' but got ' + actual.toDateString());
t.is("Error", localLong.get('state'));
}
},
{
name: "change value, now valid",
timeout: 1000,
runTest: function(t){
var expected = new Date(2005,11,30);
localLong.set("value", expected);
var actual = localLong.get('value');
t.is(0, date.compare(expected, actual), 'expected ' + expected.toDateString() + ' but got ' + actual.toDateString());
t.is("", localLong.get('state'));
}
}
]);
doh.register("misc",
function noYear(){
var widget = registry.byId("noyear");
doh.t(widget.isValid(false), "isValid");
doh.is(2011, widget.get('value').getFullYear(), "programmatic value");
doh.is(2011, widget.value.getFullYear(), "JS value");
},
function noParams(){
// Just making sure we don't get an exception when no parameters are specified.
new DateTextBox();
}
);
doh.register("API", [
function initial(){
// initial conditions
doh.is(0, date.compare(new Date(2005,11,30), american.get('value')), 'wire value of american: ' + american.get('value'));
doh.is('12/30/2005', american.get('displayedValue'), 'displayed value of american');
},
function setValue(){
american.set('value', new Date(2004,9,20));
doh.is(0, date.compare(new Date(2004,9,20), american.get('value')),
'wire value of american is: ' + american.get('value') +
' but should be: ' + new Date(2004,9,20));
doh.is('10/20/2004', american.get('displayedValue'), 'displayed value of american');
doh.t(american.isValid(), 'marked as valid');
},
function setDisplayedValue(){
american.set('displayedValue', '11/12/2006');
doh.is(0, date.compare(new Date(2006, 10, 12), american.get('value')), 'wire value of american');
doh.is('11/12/2006', american.get('displayedValue'), 'displayed value of american');
doh.t(american.isValid(), 'marked as valid');
},
function setInvalidDisplayedValue(){
american.set('displayedValue', 'foo');
doh.t(american.get('value') === undefined, 'value is undefined if displayedValue is garbage');
doh.f(american.isValid(), 'marked as invalid');
// setting the value to get('value') should never change anything, so
// therefore setting the value to undefined shouldn't affect the displayed value
american.set('value', undefined);
doh.is(american.get('displayedValue'), 'foo');
},
function setOutOfRange(){
// This widget is set to be valid between 2004 and 2006 only
american.set('displayedValue', '12/1/2008');
doh.f(american.isValid(), 'marked as invalid since out of range');
doh.is('12/1/2008', american.get('displayedValue'), 'displayed value of american');
},
function noInitialValue(){
var fromDate = registry.byId('fromDate');
doh.is('', fromDate.get('displayedValue'), 'initially blank');
doh.is(new Date('').toString(), fromDate.value.toString(), 'default value');
var d = new doh.Deferred();
var today = new Date();
fromDate.set('value', today, true);
setTimeout(d.getTestCallback(function(){
var toDate = registry.byId('toDate');
doh.is(today.toDateString(), fromDate.value.toDateString(), 'changed value');
doh.is(today.toDateString(), toDate.constraints.min.toDateString(), 'onChange');
}), 500);
return d;
},
function ariaRolesAndAttributes(){
var d = new doh.Deferred(),
button = registry.byId("local");
doh.is("combobox", button._popupStateNode.getAttribute("role"), "button _popupStateNode role");
doh.t(button._popupStateNode.getAttribute("aria-haspopup"), "aria-haspopup on button");
doh.f(button._popupStateNode.getAttribute("aria-expanded"), "initially missing aria-expanded");
doh.f(button._popupStateNode.getAttribute("aria-owns"), "initally missing aria-owns");
button.openDropDown();
setTimeout(d.getTestCallback(function(){
doh.t(button._popupStateNode.getAttribute("aria-expanded"), "now aria-expanded should be true");
doh.is("local_popup", button._popupStateNode.getAttribute("aria-owns"), "should aria-own the Dlg");
// Check roles and attributes on the dialog
var dlg = registry.byId("local_popup");
doh.t(dlg.domNode.hasAttribute("role"), "Dlg.domNode should have a role");
doh.is("local_popup_mddb local_popup_year", dlg.domNode.getAttribute("aria-labelledby"), "aria-labelledby should not overwrite existing labelledby for the Calendar");
button.closeDropDown();
}), 500);
return d;
}
]);
doh.register("localization", [
function initialGerman(){
doh.is(0, date.compare(new Date(2006,10,29), german.get('value')), 'wire value of german: ' + german.get('value'));
doh.is('29.11.2006', german.get('displayedValue'), 'displayed value of german');
},
function setValueGerman(){
german.set('value', new Date(2004,9,20));
doh.is(0, date.compare(new Date(2004,9,20), german.get('value')),
'wire value of german is: ' + german.get('value') +
' but should be: ' + new Date(2004,9,20));
doh.is('20.10.2004', german.get('displayedValue'), 'displayed value of german');
doh.t(german.isValid(), 'marked as valid');
},
function setDisplayedValueGerman(){
german.set('displayedValue', '12.11.2006');
doh.is(0, date.compare(new Date(2006, 10, 12), german.get('value')), 'wire value of german');
doh.is('12.11.2006', german.get('displayedValue'), 'displayed value of german');
doh.t(german.isValid(), 'marked as valid');
},
{
name: "labels",
timeout: 6000,
runTest: function(){
german.set('value', new Date(2006, 9, 15)); // 10/15/2006
german.openDropDown();
var calendar = registry.byId("german_popup");
// calendar exists and is shown
doh.t(calendar && isVisible(calendar), "calendar is visible");
// Month label
doh.is("Oktober", innerText(query(".dijitCalendarCurrentMonthLabel", calendar.domNode)[0]));
// Day labels
var dayLabels = query(".dijitCalendarDayLabelTemplate", calendar.domNode);
doh.is(7, dayLabels.length, "7 day labels");
doh.is("M", innerText(dayLabels[0]), "day 0");
doh.is("D", innerText(dayLabels[1]), "day 1");
doh.is("M", innerText(dayLabels[2]), "day 2");
doh.is("D", innerText(dayLabels[3]), "day 3");
doh.is("F", innerText(dayLabels[4]), "day 4");
doh.is("S", innerText(dayLabels[5]), "day 5");
doh.is("S", innerText(dayLabels[6]), "day 6");
german.closeDropDown();
}
}
]);
doh.run();
}
});
</script>
</head>
<body class="claro" role="main">
<script type="dojo/require">
dom: "dojo/dom",
query: "dojo/query",
registry: "dijit/registry"
</script>
<h1 class="testTitle">Test DateTextBox Widget</h1>
<!-- to test form submission, you'll need to create an action handler similar to
http://www.utexas.edu/teamweb/cgi-bin/generic.cgi -->
<form id="form1" data-dojo-type='dijit/form/Form' data-dojo-props='action:"", name:"example", method:"", onSubmit:function(){ return this.validate() }'>
<div class="dojoTitlePaneLabel">
<label for="local"> Date (local format) </label>
<span class="noticeMessage">DateTextBox class, no attributes</span>
</div>
<div class="testExample">
<input id="local" data-dojo-type="dijit/form/DateTextBox" style="width: 100px"
data-dojo-props='name:"noDOMvalue", value:"2008-12-31", type:"text", onMouseEnter:eventHandler,
onMouseLeave:eventHandler,
onKeyDown:eventHandler,
onChange:function(val){ dom.byId("oc1").value = "" + val; }
'/>
<label for="oc1">onChange:</label><input id="oc1" size="34" disabled value="not fired yet!" autocomplete="off"/>
<span style='white-space:nowrap;'>
<button type="button" onclick="registry.byId('local').set('value', null);">set('value',null)</button>
<button type="button" onclick="dom.byId('gv1').value=''+registry.byId('local').get('value');">get('value')</button>
<button type="button" onclick="dom.byId('gv1').value=''+registry.byId('local').value;">.value</button>
<label for="gv1">l:</label><input id="gv1" size="34" disabled value="not called yet!" autocomplete="off"/>
</span>
</div>
<div class="dojoTitlePaneLabel">
<label for="localLong"> Date (local format - long) </label>
<span class="noticeMessage">DateTextBox class,
Attributes: required="true", trim="true", constraints={min:'2004-01-01',max:'2006-12-31',formatLength:'long'}. Works for leap years</span>
</div>
<div class="testExample">
<input id="localLong" data-dojo-id="localLong" data-dojo-type="dijit/form/DateTextBox"
data-dojo-props='type:"text", name:"date1", value:"2005-12-30",
constraints:{min:"2004-01-01",max:"2006-12-31",formatLength:"long"},
required:true,
trim:true,
onChange:function(val){ dom.byId("oc2").value = val; },
onMouseEnter:eventHandler,
onMouseLeave:eventHandler,
onKeyDown:eventHandler,
invalidMessage:"Invalid date." '/>
<label for="oc2">onChange:</label><input id="oc2" size="34" disabled value="not fired yet!" autocomplete="off"/>
<input type="button" value="Destroy" onClick="registry.byId('localLong').destroy(); return false;"/>
<input type="button" value="set max to 2007-12-31" onClick="registry.byId('localLong').constraints.max = new Date(2007,11,31); registry.byId('localLong').validate(false); return false;"/>
</div>
<div class="dojoTitlePaneLabel">
<label for="american"> Date (American format) </label>
<span class="noticeMessage">DateTextBox class,
Attributes: lang="en-us", required="true", constraints={min:'2004-01-01',max:'2006-12-31'}. Works for leap years.
Prompt message whenever field is blank.
</span>
</div>
<div class="testExample">
<input id="american" data-dojo-type="dijit/form/DateTextBox"
data-dojo-props='type:"text", name:"date2", value:"2005-12-30",
constraints:{min:"2004-01-01",max:"2006-12-31"},
lang:"en-us",
required:true,
onMouseEnter:eventHandler,
onMouseLeave:eventHandler,
onKeyDown:eventHandler,
promptMessage:"mm/dd/yyyy",
invalidMessage:"Invalid date. Use mm/dd/yyyy format."'/>
</div>
<div class="dojoTitlePaneLabel">
<label for="german"> Date (German format)</label>
<span class="noticeMessage">DateTextBox class,
Attributes: lang="de-de", hasDownArrow=false, constraints={min:2004-01-01, max:2006-12-31}. Works for leap years.
Prompt message whenever field is blank.
</span>
</div>
<div class="testExample">
<input id="german"/>
</div>
<div class="dojoTitlePaneLabel">
<label for="pattern"> Date, overriding pattern</label>
<span class="noticeMessage">Date, overriding pattern with dd-MM-yyyy</span>
</div>
<div class="testExample">
<input id="pattern" data-dojo-type="dijit/form/DateTextBox" data-dojo-props='name:"noDOMvalue", type:"text", constraints:{datePattern:"dd-MM-yyyy", strict:true}'/>
</div>
<div class="dojoTitlePaneLabel">
<strong>Using title attribute for label</strong>
<span class="noticeMessage">DateTextBox class,
Attributes: lang="en-us", required="true", prompt message, invalid message
Prompt message whenever field is blank.
</span>
</div>
<div class="testExample">
<div id="american2" data-dojo-type="dijit/form/DateTextBox"
data-dojo-props='type:"text", name:"date20", value:"2008-12-30",
title:"Date in month, day, year format",
lang:"en-us",
required:true,
promptMessage:"mm/dd/yyyy",
invalidMessage:"Invalid date. Use mm/dd/yyyy format."'>
</div>
</div>
<script>
function displayData(){
var f = document.getElementById("form1");
var s = "";
for(var i = 0; i < f.elements.length; i++){
var elem = f.elements[i];
if(elem.name == "button") { continue; }
s += elem.name + ": " + elem.value + "\n";
}
alert(s);
}
</script>
<div class="dojoTitlePaneLabel">
Date pairs, from/to (won't submit unless from/to fields filled in correctly):
</div>
<div class="testExample">
<label for="fromDate">From:</label> <input id="fromDate" data-dojo-type="dijit/form/DateTextBox"
data-dojo-props='type:"text", name:"fromDate", required:true,
onChange:function(){ registry.byId("toDate").constraints.min = this.get("value"); } '/>
<label for="toDate">To:</label> <input id="toDate" data-dojo-type="dijit/form/DateTextBox"
data-dojo-props='type:"text", name:"toDate", required:true,
onChange:function(){ registry.byId("fromDate").constraints.max = this.get("value"); } '/>
</div>
<div class="dojoTitlePaneLabel">
<label for="noyear">Pick a day in 3Q 2011</label>
</div>
<div class="testExample">
<input data-dojo-type="dijit/form/DateTextBox" id="noyear" data-dojo-props='
name:"noyear",
required:"true",
constraints:{datePattern:"MMMM dd",
min:new Date(2011,9,1),
max:new Date(2011,11,31)
},
parse:function(){
var d = this.inherited("parse", arguments);
if(d instanceof Date)d.setFullYear(2011);
return d;
},
value:new Date(2011,10,25)'
/>
</div>
<button type="button" name="button" onclick="displayData(); return false;">view data</button>
<input type="submit" name="submit" />
<input type="reset" name="reset" />
</form>
</body>
</html>