--- a/testing/marionette/doc/api/interaction.js.html
+++ b/testing/marionette/doc/api/interaction.js.html
@@ -53,17 +53,16 @@ this.EXPORTED_SYMBOLS = ["interaction"];
/** XUL elements that support disabled attribute. */
const DISABLED_ATTRIBUTE_SUPPORTED_XUL = new Set([
"ARROWSCROLLBOX",
"BUTTON",
"CHECKBOX",
"COLORPICKER",
"COMMAND",
- "DATEPICKER",
"DESCRIPTION",
"KEY",
"KEYSET",
"LABEL",
"LISTBOX",
"LISTCELL",
"LISTHEAD",
"LISTHEADER",
@@ -76,17 +75,16 @@ const DISABLED_ATTRIBUTE_SUPPORTED_XUL =
"RADIO",
"RADIOGROUP",
"RICHLISTBOX",
"RICHLISTITEM",
"SCALE",
"TAB",
"TABS",
"TEXTBOX",
- "TIMEPICKER",
"TOOLBARBUTTON",
"TREE",
]);
/** XUL elements that support checked property. */
const CHECKED_PROPERTY_SUPPORTED_XUL = new Set([
"BUTTON",
"CHECKBOX",
--- a/testing/marionette/interaction.js
+++ b/testing/marionette/interaction.js
@@ -27,17 +27,16 @@ this.EXPORTED_SYMBOLS = ["interaction"];
/** XUL elements that support disabled attribute. */
const DISABLED_ATTRIBUTE_SUPPORTED_XUL = new Set([
"ARROWSCROLLBOX",
"BUTTON",
"CHECKBOX",
"COLORPICKER",
"COMMAND",
- "DATEPICKER",
"DESCRIPTION",
"KEY",
"KEYSET",
"LABEL",
"LISTBOX",
"LISTCELL",
"LISTHEAD",
"LISTHEADER",
@@ -50,17 +49,16 @@ const DISABLED_ATTRIBUTE_SUPPORTED_XUL =
"RADIO",
"RADIOGROUP",
"RICHLISTBOX",
"RICHLISTITEM",
"SCALE",
"TAB",
"TABS",
"TEXTBOX",
- "TIMEPICKER",
"TOOLBARBUTTON",
"TREE",
]);
/**
* Common form controls that user can change the value property
* interactively.
*/
--- a/toolkit/content/jar.mn
+++ b/toolkit/content/jar.mn
@@ -66,17 +66,16 @@ toolkit.jar:
content/global/bindings/autocomplete.xml (widgets/autocomplete.xml)
content/global/bindings/browser.xml (widgets/browser.xml)
content/global/bindings/button.xml (widgets/button.xml)
content/global/bindings/calendar.js (widgets/calendar.js)
content/global/bindings/checkbox.xml (widgets/checkbox.xml)
content/global/bindings/colorpicker.xml (widgets/colorpicker.xml)
content/global/bindings/datekeeper.js (widgets/datekeeper.js)
content/global/bindings/datepicker.js (widgets/datepicker.js)
- content/global/bindings/datetimepicker.xml (widgets/datetimepicker.xml)
content/global/bindings/datetimepopup.xml (widgets/datetimepopup.xml)
content/global/bindings/datetimebox.xml (widgets/datetimebox.xml)
content/global/bindings/datetimebox.css (widgets/datetimebox.css)
* content/global/bindings/dialog.xml (widgets/dialog.xml)
content/global/bindings/editor.xml (widgets/editor.xml)
content/global/bindings/filefield.xml (widgets/filefield.xml)
* content/global/bindings/findbar.xml (widgets/findbar.xml)
content/global/bindings/general.xml (widgets/general.xml)
--- a/toolkit/content/tests/chrome/chrome.ini
+++ b/toolkit/content/tests/chrome/chrome.ini
@@ -98,17 +98,16 @@ fail-if = (os == 'win' && ccov) # Bug 14
skip-if = (os == 'mac' && os_version == '10.10') # Unexpectedly perma-passes on OSX 10.10
[test_bug792324.xul]
[test_bug1048178.xul]
skip-if = toolkit == "cocoa"
[test_button.xul]
[test_closemenu_attribute.xul]
[test_colorpicker_popup.xul]
[test_contextmenu_list.xul]
-[test_datepicker.xul]
[test_deck.xul]
[test_dialogfocus.xul]
[test_findbar.xul]
fail-if = (os == 'win' && ccov) # Bug 1423667
subsuite = clipboard
[test_findbar_entireword.xul]
[test_findbar_events.xul]
[test_focus_anons.xul]
@@ -172,17 +171,16 @@ support-files = window_preferences_onsyn
[test_showcaret.xul]
[test_subframe_origin.xul]
[test_tabbox.xul]
[test_tabindex.xul]
[test_textbox_dictionary.xul]
[test_textbox_emptytext.xul]
[test_textbox_number.xul]
[test_textbox_search.xul]
-[test_timepicker.xul]
[test_titlebar.xul]
skip-if = os == "linux"
[test_toolbar.xul]
[test_tooltip.xul]
skip-if = (os == 'mac' && os_version == '10.10') || (os == 'win') # Bug 1141245, frequent timeouts on OSX 10.10, Windows
[test_tooltip_noautohide.xul]
[test_tree.xul]
[test_tree_hier.xul]
deleted file mode 100644
--- a/toolkit/content/tests/chrome/test_datepicker.xul
+++ /dev/null
@@ -1,415 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
-<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
-<!--
- XUL Widget Test for datepicker
- -->
-<window title="datepicker" width="500" height="600"
- onload="setTimeout(testtag_datepickers, 0);"
- xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>
-
-<hbox onpopupshown="testtag_datepicker_UI_popup()"
- onpopuphidden="testtag_finish()">
-<datepicker id="datepicker"/>
-<datepicker id="datepicker-popup" type="popup"/>
-<hbox onDOMMouseScroll="mouseScrolled = event.defaultPrevented;">
- <datepicker id="datepicker-grid" type="grid" value="2007-04-21"/>
-</hbox>
-</hbox>
-
-<!-- Test-only key bindings, but must not conflict with the application. -->
-<keyset id="mainKeyset">
- <key id="key_alt_z" key="Z" oncommand="return" modifiers="alt"/>
- <key id="key_ctrl_q" key="Q" oncommand="return" modifiers="control"/>
- <key id="key_meta_e" key="E" oncommand="return" modifiers="meta"/>
-</keyset>
-
-<body xmlns="http://www.w3.org/1999/xhtml">
-<p id="display"></p>
-<div id="content" style="display: none">
-</div>
-<pre id="test">
-</pre>
-</body>
-
-<script>
-<![CDATA[
-
-var mouseScrolled = false;
-
-SimpleTest.waitForExplicitFinish();
-
-function testtag_datepickers()
-{
- var dppopup = document.getElementById("datepicker-popup");
- testtag_datepicker(document.getElementById("datepicker"), "", "datepicker");
- testtag_datepicker(dppopup, "popup", "datepicker popup");
-
- var gridpicker = document.getElementById("datepicker-grid");
- is(gridpicker.monthField.selectedIndex, "3", "datepicker grid correct month is initially selected");
- testtag_datepicker(gridpicker, "grid", "datepicker grid");
- dppopup.open = true;
-}
-
-function testtag_finish()
-{
- ok(!document.getElementById("datepicker-popup").open, "datepicker popup open false again");
-
- var dpgrid = document.getElementById("datepicker-grid");
- synthesizeWheel(dpgrid, 5, 5, { deltaY: 10.0,
- deltaMode: WheelEvent.DOM_DELTA_LINE });
- is(mouseScrolled, true, "mouse scrolled");
- is(dpgrid.displayedMonth, 2, "mouse scroll changed month");
-
- SimpleTest.finish();
-}
-
-function testtag_datepicker(dp, type, testid)
-{
- testid += " ";
-
- var today = new Date();
- var tyear = today.getFullYear();
- var tmonth = today.getMonth();
- var tdate = today.getDate();
-
- // testtag_comparedate(dp, testid + "initial", tyear, tmonth, tdate);
-
- // check that setting the value property works
- dp.value = testtag_getdatestring(tyear, tmonth, tdate);
- testtag_comparedate(dp, testid + "set value", tyear, tmonth, tdate);
-
- // check that setting the dateValue property works
- dp.dateValue = today;
- testtag_comparedate(dp, testid + "set dateValue", tyear, tmonth, tdate);
- ok(dp.value !== today, testid + " set dateValue different date");
-
- ok(!dp.readOnly, testid + "readOnly");
- dp.readOnly = true;
- ok(dp.readOnly, testid + "set readOnly");
- dp.readOnly = false;
- ok(!dp.readOnly, testid + "clear readOnly");
-
- var setDateField = function(field, value, expectException,
- expectedYear, expectedMonth, expectedDate)
- {
- var exh = false;
- try {
- dp[field] = value;
- } catch (ex) { exh = true; }
- is(exh, expectException, testid + "set " + field + " " + value);
- testtag_comparedate(dp, testid + "set " + field + " " + value,
- expectedYear, expectedMonth, expectedDate);
- }
-
- // check the value property
- setDateField("value", "2003-1-27", false, 2003, 0, 27);
- setDateField("value", "2002-11-8", false, 2002, 10, 8);
- setDateField("value", "2001-07-02", false, 2001, 6, 2);
- setDateField("value", "2002-10-25", false, 2002, 9, 25);
-
- // check that the year, month and date fields can be set properly
- setDateField("year", 2002, false, 2002, 9, 25);
- setDateField("year", 0, true, 2002, 9, 25);
-
- setDateField("month", 6, false, 2002, 6, 25);
- setDateField("month", 9, false, 2002, 9, 25);
- setDateField("month", 10, false, 2002, 10, 25);
- setDateField("month", -1, true, 2002, 10, 25);
- setDateField("month", 12, true, 2002, 10, 25);
-
- setDateField("date", 9, false, 2002, 10, 9);
- setDateField("date", 10, false, 2002, 10, 10);
- setDateField("date", 15, false, 2002, 10, 15);
- setDateField("date", 0, true, 2002, 10, 15);
- setDateField("date", 32, true, 2002, 10, 15);
-
- // check leap year handling
- setDateField("value", "1600-2-29", false, 1600, 1, 29);
- setDateField("value", "2000-2-29", false, 2000, 1, 29);
- setDateField("value", "2003-2-29", false, 2003, 2, 1);
- setDateField("value", "2004-2-29", false, 2004, 1, 29);
- setDateField("value", "2100-2-29", false, 2100, 2, 1);
-
- // check invalid values for the value and dateValue properties
- dp.value = "2002-07-15";
- setDateField("value", "", true, 2002, 6, 15);
- setDateField("value", "2-2", true, 2002, 6, 15);
- setDateField("value", "2000-5-6-6", true, 2002, 6, 15);
- setDateField("value", "2000-a-19", true, 2002, 6, 15);
- setDateField("dateValue", "none", true, 2002, 6, 15);
-
- // grid and popup types can display a different month than the current one
- var isGridOrPopup = (type == "grid" || type == "popup");
- dp.displayedMonth = 3;
- testtag_comparedate(dp, testid + "set displayedMonth",
- 2002, isGridOrPopup ? 6 : 3, 15, 3);
-
- dp.displayedYear = 2009;
- testtag_comparedate(dp, testid + "set displayedYear",
- isGridOrPopup ? 2002 : 2009, isGridOrPopup ? 6 : 3, 15, 3, 2009);
-
- if (isGridOrPopup) {
- dp.value = "2008-02-29";
- dp.displayedYear = 2009;
- is(dp.displayedMonth, 1, "set displayedYear during leap year");
- }
-
- is(dp.open, false, testid + "open false");
- if (type != "popup") {
- dp.open = true;
- ok(!dp.open, testid + "open still false");
- }
-
- // check the fields
- if (type != "grid") {
- ok(dp.yearField instanceof HTMLInputElement, testid + "yearField");
- ok(dp.monthField instanceof HTMLInputElement, testid + "monthField");
- ok(dp.dateField instanceof HTMLInputElement, testid + "dateField");
-
- testtag_datepicker_UI_fields(dp, testid);
-
- dp.readOnly = true;
-
- // check that keyboard usage doesn't change the value when the datepicker
- // is read only
- testtag_datepicker_UI_key(dp, testid + "readonly ", "2003-01-29",
- dp.yearField, 2003, 0, 29, 2003, 0, 29);
- testtag_datepicker_UI_key(dp, testid + "readonly ", "2003-04-29",
- dp.monthField, 2003, 3, 29, 2003, 3, 29);
- testtag_datepicker_UI_key(dp, testid + "readonly ", "2003-06-15",
- dp.dateField, 2003, 5, 15, 2003, 5, 15);
-
- dp.readOnly = false;
- }
- else {
- testtag_datepicker_UI_grid(dp, "grid", testid);
- }
-}
-
-function testtag_datepicker_UI_fields(dp, testid)
-{
- testid += "UI";
- dp.focus();
-
- // test adjusting the date with the up and down keys
- testtag_datepicker_UI_key(dp, testid, "2003-01-29", dp.yearField, 2004, 0, 29, 2003, 0, 29);
- testtag_datepicker_UI_key(dp, testid, "1600-02-29", dp.yearField, 1601, 1, 28, 1600, 1, 28);
- testtag_datepicker_UI_key(dp, testid, "2000-02-29", dp.yearField, 2001, 1, 28, 2000, 1, 28);
- testtag_datepicker_UI_key(dp, testid, "2004-02-29", dp.yearField, 2005, 1, 28, 2004, 1, 28);
-
- testtag_datepicker_UI_key(dp, testid, "2003-04-29", dp.monthField, 2003, 4, 29, 2003, 3, 29);
- testtag_datepicker_UI_key(dp, testid, "2003-01-15", dp.monthField, 2003, 1, 15, 2003, 0, 15);
- testtag_datepicker_UI_key(dp, testid, "2003-12-29", dp.monthField, 2003, 0, 29, 2003, 11, 29);
- testtag_datepicker_UI_key(dp, testid, "2003-03-31", dp.monthField, 2003, 3, 30, 2003, 2, 30);
-
- testtag_datepicker_UI_key(dp, testid, "2003-06-15", dp.dateField, 2003, 5, 16, 2003, 5, 15);
- testtag_datepicker_UI_key(dp, testid, "2003-06-01", dp.dateField, 2003, 5, 2, 2003, 5, 1);
- testtag_datepicker_UI_key(dp, testid, "2003-06-30", dp.dateField, 2003, 5, 1, 2003, 5, 30);
- testtag_datepicker_UI_key(dp, testid, "1600-02-28", dp.dateField, 1600, 1, 29, 1600, 1, 28);
- testtag_datepicker_UI_key(dp, testid, "2000-02-28", dp.dateField, 2000, 1, 29, 2000, 1, 28);
- testtag_datepicker_UI_key(dp, testid, "2003-02-28", dp.dateField, 2003, 1, 1, 2003, 1, 28);
- testtag_datepicker_UI_key(dp, testid, "2004-02-28", dp.dateField, 2004, 1, 29, 2004, 1, 28);
- testtag_datepicker_UI_key(dp, testid, "2100-02-28", dp.dateField, 2100, 1, 1, 2100, 1, 28);
-
- synthesizeKeyExpectEvent('Z', { altKey: true }, $("key_alt_z"), "command", testid + " alt shortcut");
- synthesizeKeyExpectEvent('Q', { ctrlKey: true }, $("key_ctrl_q"), "command", testid + " ctrl shortcut");
- synthesizeKeyExpectEvent('E', { metaKey: true }, $("key_meta_e"), "command", testid + " meta shortcut");
-}
-
-function testtag_datepicker_UI_grid(dp, type, testid)
-{
- testid += "UI ";
-
- // check that pressing the cursor keys moves the date properly. For grid
- // types, focus the grid first. For popup types, the grid should be focused
- // automatically when opening the popup.
- var ktarget = dp;
- if (type == "grid")
- dp.focus();
- else
- ktarget = dp.attachedControl;
-
- dp.value = "2003-02-22";
-
- synthesizeKeyExpectEvent("VK_LEFT", { }, ktarget, "change", testid + "key left");
- is(dp.value, "2003-02-21", testid + "key left");
-
- synthesizeKeyExpectEvent("VK_RIGHT", { }, ktarget, "change", testid + "key right");
- is(dp.value, "2003-02-22", testid + "key right");
- synthesizeKeyExpectEvent("VK_RIGHT", { }, ktarget, "change", testid + "key right next week");
- is(dp.value, "2003-02-23", testid + "key right next week");
- synthesizeKeyExpectEvent("VK_LEFT", { }, ktarget, "change", testid + "key left previous week");
- is(dp.value, "2003-02-22", testid + "key left previous week");
-
- synthesizeKeyExpectEvent("VK_UP", { }, ktarget, "change", testid + "key up");
- is(dp.value, "2003-02-15", testid + "key up");
- synthesizeKeyExpectEvent("VK_DOWN", { }, ktarget, "change", testid + "key down");
- is(dp.value, "2003-02-22", testid + "key down");
- synthesizeKeyExpectEvent("VK_DOWN", { }, ktarget, "change");
- is(dp.value, "2003-03-01", testid + "key down next month", testid + "key down next month");
- synthesizeKeyExpectEvent("VK_UP", { }, ktarget, "change");
- is(dp.value, "2003-02-22", testid + "key up previous month", testid + "key up previous month");
-
- // the displayed month may be changed with the page up and page down keys,
- // however this only changes the displayed month, not the current value.
- synthesizeKeyExpectEvent("VK_PAGE_DOWN", { }, ktarget, "monthchange", testid + "key page down");
- is(dp.value, "2003-02-22", testid + "key page down");
-
- // the monthchange event is fired when the displayed month is changed
- synthesizeKeyExpectEvent("VK_UP", { }, ktarget, "monthchange", testid + "key up after month change");
- is(dp.value, "2003-02-15", testid + "key up after month change");
-
- synthesizeKeyExpectEvent("VK_PAGE_UP", { }, ktarget, "monthchange", testid + "key page up");
- is(dp.value, "2003-02-15", testid + "key page up");
-
- // check handling at the start and end of the month
- dp.value = "2010-10-01";
- synthesizeKeyExpectEvent("VK_PAGE_UP", { }, ktarget, "monthchange", testid + "key page up 2010-10-01");
- is(dp.displayedMonth, 8, testid + "key page up 2010-10-01 displayedMonth");
- is(dp.displayedYear, 2010, testid + "key page up 2010-10-01 displayedYear");
-
- dp.value = "2010-10-01";
- synthesizeKeyExpectEvent("VK_PAGE_DOWN", { }, ktarget, "monthchange", testid + "key page down 2010-10-01");
- is(dp.displayedMonth, 10, testid + "key page down 2010-10-01 displayedMonth");
- is(dp.displayedYear, 2010, testid + "key page down 2010-10-01 displayedYear");
-
- dp.value = "2010-10-31";
- synthesizeKeyExpectEvent("VK_PAGE_UP", { }, ktarget, "monthchange", testid + "key page up 2010-10-31");
- is(dp.displayedMonth, 8, testid + "key page up 2010-10-31 displayedMonth");
- is(dp.displayedYear, 2010, testid + "key page up 2010-10-01 displayedYear");
- dp.value = "2010-10-31";
- synthesizeKeyExpectEvent("VK_PAGE_DOWN", { }, ktarget, "monthchange", testid + "key page down 2010-10-31");
- is(dp.displayedMonth, 10, testid + "key page down 2010-10-31 displayedMonth");
- is(dp.displayedYear, 2010, testid + "key page up 2010-10-31 displayedYear");
-
- // check handling at the end of february
- dp.value = "2010-03-31";
- synthesizeKeyExpectEvent("VK_PAGE_UP", { }, ktarget, "monthchange", testid + "key page up 2010-03-31");
- is(dp.displayedMonth, 1, testid + "key page up 2010-03-31 displayedMonth");
- is(dp.displayedYear, 2010, testid + "key page up 2010-03-31 displayedYear");
- synthesizeKeyExpectEvent("VK_PAGE_UP", { }, ktarget, "monthchange", testid + "key page up 2010-02-28");
- is(dp.displayedMonth, 0, testid + "key page up 2010-02-28 displayedMonth");
- is(dp.displayedYear, 2010, testid + "key page up 2010-02-28 displayedYear");
-
- dp.value = "2010-01-31";
- synthesizeKeyExpectEvent("VK_PAGE_DOWN", { }, ktarget, "monthchange", testid + "key page down 2010-01-31");
- is(dp.displayedMonth, 1, testid + "key page down 2010-01-31 displayedMonth");
- is(dp.displayedYear, 2010, testid + "key page up 2010-01-31 displayedYear");
- synthesizeKeyExpectEvent("VK_PAGE_DOWN", { }, ktarget, "monthchange", testid + "key page down 2010-02-28");
- is(dp.displayedMonth, 2, testid + "key page down 2010-02-28 displayedMonth");
- is(dp.displayedYear, 2010, testid + "key page up 2010-02-28 displayedYear");
-
- // check handling at the end of february during a leap year
- dp.value = "2008-01-31";
- synthesizeKeyExpectEvent("VK_PAGE_DOWN", { }, ktarget, "monthchange", testid + "key page down 2008-01-31");
- is(dp.displayedMonth, 1, testid + "key page down 2008-01-31 displayedMonth");
- is(dp.displayedYear, 2008, testid + "key page up 2008-01-31 displayedYear");
- dp.value = "2008-03-31";
- synthesizeKeyExpectEvent("VK_PAGE_UP", { }, ktarget, "monthchange", testid + "key page up 2008-03-31");
- is(dp.displayedMonth, 1, testid + "key page up 2008-03-31 displayedMonth");
- is(dp.displayedYear, 2008, testid + "key page up 2008-03-31 displayedYear");
-
- // the value of a read only datepicker cannot be changed
- dp.value = "2003-02-15";
-
- dp.readOnly = true;
- synthesizeKeyExpectEvent("VK_LEFT", { }, ktarget, "!change", testid + "key left read only");
- is(dp.value, "2003-02-15", testid + "key left read only");
- synthesizeKeyExpectEvent("VK_RIGHT", { }, ktarget, "!change", testid + "key right read only");
- is(dp.value, "2003-02-15", testid + "key right read only");
- synthesizeKeyExpectEvent("VK_DOWN", { }, ktarget, "!change", testid + "key down read only");
- is(dp.value, "2003-02-15", testid + "key down read only");
- synthesizeKeyExpectEvent("VK_UP", { }, ktarget, "!change", testid + "key up read only");
- is(dp.value, "2003-02-15", testid + "key up read only");
-
- // month can still be changed even when readonly
- synthesizeKeyExpectEvent("VK_PAGE_DOWN", { }, ktarget, "monthchange",
- testid + "key page up read only");
- synthesizeKeyExpectEvent("VK_PAGE_UP", { }, ktarget, "monthchange",
- testid + "key page down read only");
-
- dp.readOnly = false;
- synthesizeKeyExpectEvent("VK_LEFT", { }, ktarget, "change", testid + "key left changeable again");
- is(dp.value, "2003-02-14", testid + "key left changeable again");
-
- // the value of a disabled datepicker cannot be changed
- dp.disabled = true;
- synthesizeKeyExpectEvent("VK_LEFT", { }, ktarget, "!change", testid + "key left disabled");
- is(dp.value, "2003-02-14", testid + "key left disabled");
- synthesizeKeyExpectEvent("VK_RIGHT", { }, ktarget, "!change", testid + "key right disabled");
- is(dp.value, "2003-02-14", testid + "key right disabled");
- synthesizeKeyExpectEvent("VK_DOWN", { }, ktarget, "!change", testid + "key down disabled");
- is(dp.value, "2003-02-14", testid + "key down disabled");
- synthesizeKeyExpectEvent("VK_UP", { }, ktarget, "!change", testid + "key up disabled");
- is(dp.value, "2003-02-14", testid + "key up disabled");
-
- // month cannot be changed even when disabled
- synthesizeKeyExpectEvent("VK_PAGE_DOWN", { }, ktarget, "!monthchange",
- testid + "key page down disabled");
- synthesizeKeyExpectEvent("VK_PAGE_UP", { }, ktarget, "!monthchange",
- testid + "key page up disabled");
-
- dp.disabled = false;
- synthesizeKeyExpectEvent("VK_RIGHT", { }, ktarget, "change", testid + "key right enabled again");
- is(dp.value, "2003-02-15", testid + "key right enabled again");
-}
-
-function testtag_datepicker_UI_popup()
-{
- var dppopup = document.getElementById("datepicker-popup");
- is(dppopup.open, true, "datepicker popup after open");
- testtag_datepicker_UI_grid(dppopup, "popup", "datepicker popup ");
- dppopup.open = false;
-}
-
-function testtag_datepicker_UI_key(dp, testid, value, field,
- uyear, umonth, udate,
- dyear, dmonth, ddate)
-{
- dp.value = value;
- field.focus();
-
- synthesizeKey("VK_UP", { });
- testtag_comparedate(dp, testid + " " + value + " key up", uyear, umonth, udate);
-
- synthesizeKey("VK_DOWN", { });
- testtag_comparedate(dp, testid + " " + value + " key down", dyear, dmonth, ddate);
-}
-
-function testtag_getdatestring(year, month, date)
-{
- month = (month < 9) ? ("0" + ++month) : month + 1;
- if (date < 10)
- date = "0" + date;
- return year + "-" + month + "-" + date;
-}
-
-function testtag_comparedate(dp, testid, year, month, date, displayedMonth, displayedYear)
-{
- is(dp.value, testtag_getdatestring(year, month, date), testid + " value");
- if (testid.indexOf("initial") == -1)
- is(dp.getAttribute("value"),
- testtag_getdatestring(year, month, date),
- testid + " value attribute");
-
- var dateValue = dp.dateValue;
- ok(dateValue.getFullYear() == year &&
- dateValue.getMonth() == month &&
- dateValue.getDate() == date,
- testid + " dateValue");
-
- is(dp.year, year, testid + " year");
- is(dp.month, month, testid + " month");
- is(dp.displayedMonth, displayedMonth ? displayedMonth : month, testid + " displayedMonth");
- is(dp.displayedYear, displayedYear ? displayedYear : year, testid + " displayedYear");
- is(dp.date, date, testid + " date");
-}
-
-]]>
-
-</script>
-
-</window>
deleted file mode 100644
--- a/toolkit/content/tests/chrome/test_timepicker.xul
+++ /dev/null
@@ -1,207 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
-<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
-<!--
- XUL Widget Test for timepicker
- -->
-<window title="timepicker" width="500" height="600"
- onload="setTimeout(testtag_timepicker, 0);"
- xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>
-
-<timepicker id="timepicker"/>
-
-<body xmlns="http://www.w3.org/1999/xhtml">
-<p id="display"></p>
-<div id="content" style="display: none">
-</div>
-<pre id="test">
-</pre>
-</body>
-
-<script>
-<![CDATA[
-
-SimpleTest.waitForExplicitFinish();
-
-function testtag_timepicker()
-{
- var tp = document.getElementById("timepicker");
-
- var testid = "timepicker ";
-
- var today = new Date();
- var thour = today.getHours();
- var tminute = today.getMinutes();
- var tsecond = today.getSeconds();
-
- // testtag_comparetime(tp, testid + "initial", thour, tminute, tsecond);
-
- // check that setting the value property works
- tp.value = testtag_gettimestring(thour, tminute, tsecond);
- testtag_comparetime(tp, testid + "set value", thour, tminute, tsecond);
-
- var numberOrder = /^(\D*)\s*(\d+)(\D*)(\d+)(\D*)(\d+)\s*(\D*)$/;
- var locale = Intl.DateTimeFormat().resolvedOptions().locale + "-u-ca-gregory-nu-latn";
- var fdt = new Date(2000,0,1,16,7,9).toLocaleTimeString(locale);
- is(tp.is24HourClock, Number(fdt.match(numberOrder)[2]) > 12, "is24HourClock");
-
- // check that setting the dateValue property works
- tp.dateValue = today;
- testtag_comparetime(tp, testid + "set dateValue", thour, tminute, tsecond);
- ok(tp.value !== today, testid + " set dateValue different time");
-
- ok(!tp.readOnly, testid + "readOnly");
- tp.readOnly = true;
- ok(tp.readOnly, testid + "set readOnly");
- tp.readOnly = false;
- ok(!tp.readOnly, testid + "clear readOnly");
-
- function setTimeField(field, value, expectException,
- expectedHour, expectedMinute, expectedSecond)
- {
- var exh = false;
- try {
- tp[field] = value;
- } catch (ex) { exh = true; }
- is(exh, expectException, testid + "set " + field + " " + value);
- testtag_comparetime(tp, testid + "set " + field + " " + value,
- expectedHour, expectedMinute, expectedSecond);
- }
-
- // check the value property
- setTimeField("value", "0:0:0", false, 0, 0, 0);
- setTimeField("value", "21:1:40", false, 21, 1, 40);
- setTimeField("value", "7:11:8", false, 7, 11, 8);
- setTimeField("value", "04:07:02", false, 4, 7, 2);
- setTimeField("value", "10:42:20", false, 10, 42, 20);
-
- // check that the hour, minute and second fields can be set properly
- setTimeField("hour", 7, false, 7, 42, 20);
- setTimeField("hour", 0, false, 0, 42, 20);
- setTimeField("hour", 21, false, 21, 42, 20);
- setTimeField("hour", -1, true, 21, 42, 20);
- setTimeField("hour", 24, true, 21, 42, 20);
-
- setTimeField("minute", 0, false, 21, 0, 20);
- setTimeField("minute", 9, false, 21, 9, 20);
- setTimeField("minute", 10, false, 21, 10, 20);
- setTimeField("minute", 35, false, 21, 35, 20);
- setTimeField("minute", -1, true, 21, 35, 20);
- setTimeField("minute", 60, true, 21, 35, 20);
-
- setTimeField("second", 0, false, 21, 35, 0);
- setTimeField("second", 9, false, 21, 35, 9);
- setTimeField("second", 10, false, 21, 35, 10);
- setTimeField("second", 51, false, 21, 35, 51);
- setTimeField("second", -1, true, 21, 35, 51);
- setTimeField("second", 60, true, 21, 35, 51);
-
- // check when seconds is not specified
- setTimeField("value", "06:05", false, 6, 5, 0);
- setTimeField("value", "06:15", false, 6, 15, 0);
- setTimeField("value", "16:15", false, 16, 15, 0);
-
- // check that times overflow properly
- setTimeField("value", "5:65:21", false, 6, 5, 21);
- setTimeField("value", "5:25:72", false, 5, 26, 12);
-
- // check invalid values for the value and dateValue properties
- tp.value = "14:25:48";
- setTimeField("value", "", true, 14, 25, 48);
- setTimeField("value", "1:5:6:6", true, 14, 25, 48);
- setTimeField("value", "2:a:19", true, 14, 25, 48);
- setTimeField("dateValue", "none", true, 14, 25, 48);
-
- // check the fields
- ok(tp.hourField instanceof HTMLInputElement, testid + "hourField");
- ok(tp.minuteField instanceof HTMLInputElement, testid + "minuteField");
- ok(tp.secondField instanceof HTMLInputElement, testid + "secondField");
-
- testtag_timepicker_UI(tp, testid);
-
- tp.readOnly = true;
-
- // check that keyboard usage doesn't change the value when the timepicker
- // is read only
- testtag_timepicker_UI_key(tp, testid + "readonly ", "14:25:48",
- tp.hourField, 14, 25, 48, 14, 25, 48);
- testtag_timepicker_UI_key(tp, testid + "readonly ", "14:25:48",
- tp.minuteField, 14, 25, 48, 14, 25, 48);
- testtag_timepicker_UI_key(tp, testid + "readonly ", "14:25:48",
- tp.secondField, 14, 25, 48, 14, 25, 48);
-
- SimpleTest.finish();
-}
-
-function testtag_timepicker_UI(tp, testid)
-{
- testid += "UI";
-
- // test adjusting the time with the up and down keys
- testtag_timepicker_UI_key(tp, testid, "0:12:25", tp.hourField, 1, 12, 25, 0, 12, 25);
- testtag_timepicker_UI_key(tp, testid, "11:12:25", tp.hourField, 12, 12, 25, 11, 12, 25);
- testtag_timepicker_UI_key(tp, testid, "7:12:25", tp.hourField, 8, 12, 25, 7, 12, 25);
- testtag_timepicker_UI_key(tp, testid, "16:12:25", tp.hourField, 17, 12, 25, 16, 12, 25);
- testtag_timepicker_UI_key(tp, testid, "23:12:25", tp.hourField, 0, 12, 25, 23, 12, 25);
-
- testtag_timepicker_UI_key(tp, testid, "15:23:46", tp.minuteField, 15, 24, 46, 15, 23, 46);
- testtag_timepicker_UI_key(tp, testid, "15:0:46", tp.minuteField, 15, 1, 46, 15, 0, 46);
- testtag_timepicker_UI_key(tp, testid, "15:59:46", tp.minuteField, 15, 0, 46, 15, 59, 46);
-
- testtag_timepicker_UI_key(tp, testid, "11:50:46", tp.secondField, 11, 50, 47, 11, 50, 46);
- testtag_timepicker_UI_key(tp, testid, "11:50:0", tp.secondField, 11, 50, 1, 11, 50, 0);
- testtag_timepicker_UI_key(tp, testid, "11:50:59", tp.secondField, 11, 50, 0, 11, 50, 59);
-}
-
-function testtag_timepicker_UI_key(tp, testid, value, field,
- uhour, uminute, usecond,
- dhour, dminute, dsecond)
-{
- tp.value = value;
- field.focus();
-
- var eventTarget = tp.readOnly ? null : tp;
-
- var testname = testid + " " + value + " key up";
- synthesizeKeyExpectEvent("VK_UP", { }, eventTarget, "change", testname);
- testtag_comparetime(tp, testname, uhour, uminute, usecond);
-
- testname = testid + " " + value + " key down";
- synthesizeKeyExpectEvent("VK_DOWN", { }, eventTarget, "change", testname);
- testtag_comparetime(tp, testname, dhour, dminute, dsecond);
-}
-
-function testtag_gettimestring(hour, minute, second)
-{
- if (minute < 10)
- minute = "0" + minute;
- if (second < 10)
- second = "0" + second;
- return hour + ":" + minute + ":" + second;
-}
-
-function testtag_comparetime(tp, testid, hour, minute, second)
-{
- is(tp.value, testtag_gettimestring(hour, minute, second), testid + " value");
- is(tp.getAttribute("value"),
- testtag_gettimestring(hour, minute, second),
- testid + " value attribute");
-
- var dateValue = tp.dateValue;
- ok(dateValue.getHours() == hour &&
- dateValue.getMinutes() == minute &&
- dateValue.getSeconds() == second,
- testid + " dateValue");
-
- is(tp.hour, hour, testid + " hour");
- is(tp.minute, minute, testid + " minute");
- is(tp.second, second, testid + " second");
-}
-
-]]>
-
-</script>
-
-</window>
deleted file mode 100644
--- a/toolkit/content/widgets/datetimepicker.xml
+++ /dev/null
@@ -1,1282 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE bindings [
- <!ENTITY % datetimepickerDTD SYSTEM "chrome://global/locale/datetimepicker.dtd">
- %datetimepickerDTD;
-]>
-
-<bindings id="timepickerBindings"
- xmlns="http://www.mozilla.org/xbl"
- xmlns:html="http://www.w3.org/1999/xhtml"
- xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
- xmlns:xbl="http://www.mozilla.org/xbl">
-
- <binding id="datetimepicker-base"
- extends="chrome://global/content/bindings/general.xml#basecontrol">
-
- <resources>
- <stylesheet src="chrome://global/content/textbox.css"/>
- <stylesheet src="chrome://global/skin/textbox.css"/>
- <stylesheet src="chrome://global/skin/dropmarker.css"/>
- <stylesheet src="chrome://global/skin/datetimepicker.css"/>
- </resources>
-
- <content align="center">
- <xul:hbox class="datetimepicker-input-box" align="center"
- xbl:inherits="context,disabled,readonly">
- <xul:hbox class="textbox-input-box datetimepicker-input-subbox" align="center">
- <html:input class="datetimepicker-input textbox-input" anonid="input-one"
- size="2" maxlength="2"
- xbl:inherits="disabled,readonly"/>
- </xul:hbox>
- <xul:label anonid="sep-first" class="datetimepicker-separator" value=":"/>
- <xul:hbox class="textbox-input-box datetimepicker-input-subbox" align="center">
- <html:input class="datetimepicker-input textbox-input" anonid="input-two"
- size="2" maxlength="2"
- xbl:inherits="disabled,readonly"/>
- </xul:hbox>
- <xul:label anonid="sep-second" class="datetimepicker-separator" value=":"/>
- <xul:hbox class="textbox-input-box datetimepicker-input-subbox" align="center">
- <html:input class="datetimepicker-input textbox-input" anonid="input-three"
- size="2" maxlength="2"
- xbl:inherits="disabled,readonly"/>
- </xul:hbox>
- <xul:hbox class="textbox-input-box datetimepicker-input-subbox" align="center">
- <html:input class="datetimepicker-input textbox-input" anonid="input-ampm"
- size="2" maxlength="2"
- xbl:inherits="disabled,readonly"/>
- </xul:hbox>
- </xul:hbox>
- <xul:spinbuttons anonid="buttons" xbl:inherits="disabled"
- onup="this.parentNode._increaseOrDecrease(1);"
- ondown="this.parentNode._increaseOrDecrease(-1);"/>
- </content>
-
- <implementation>
- <field name="_dateValue">null</field>
- <field name="_fieldOne">
- document.getAnonymousElementByAttribute(this, "anonid", "input-one");
- </field>
- <field name="_fieldTwo">
- document.getAnonymousElementByAttribute(this, "anonid", "input-two");
- </field>
- <field name="_fieldThree">
- document.getAnonymousElementByAttribute(this, "anonid", "input-three");
- </field>
- <field name="_fieldAMPM">
- document.getAnonymousElementByAttribute(this, "anonid", "input-ampm");
- </field>
- <field name="_separatorFirst">
- document.getAnonymousElementByAttribute(this, "anonid", "sep-first");
- </field>
- <field name="_separatorSecond">
- document.getAnonymousElementByAttribute(this, "anonid", "sep-second");
- </field>
- <field name="_lastFocusedField">null</field>
- <field name="_hasEntry">true</field>
- <field name="_valueEntered">false</field>
- <field name="attachedControl">null</field>
-
- <property name="_currentField" readonly="true">
- <getter>
- var focusedInput = document.activeElement;
- if (focusedInput == this._fieldOne ||
- focusedInput == this._fieldTwo ||
- focusedInput == this._fieldThree ||
- focusedInput == this._fieldAMPM)
- return focusedInput;
- return this._lastFocusedField || this._fieldOne;
- </getter>
- </property>
-
- <property name="dateValue" onget="return new Date(this._dateValue);">
- <setter>
- <![CDATA[
- if (!(val instanceof Date))
- throw "Invalid Date";
-
- this._setValueNoSync(val);
- if (this.attachedControl)
- this.attachedControl._setValueNoSync(val);
- return val;
- ]]>
- </setter>
- </property>
-
- <property name="readOnly" onset="if (val) this.setAttribute('readonly', 'true');
- else this.removeAttribute('readonly'); return val;"
- onget="return this.getAttribute('readonly') == 'true';"/>
-
- <method name="_fireEvent">
- <parameter name="aEventName"/>
- <parameter name="aTarget"/>
- <body>
- var event = document.createEvent("Events");
- event.initEvent(aEventName, true, true);
- return !aTarget.dispatchEvent(event);
- </body>
- </method>
-
- <method name="_setValueOnChange">
- <parameter name="aField"/>
- <body>
- <![CDATA[
- if (!this._hasEntry)
- return;
-
- if (aField == this._fieldOne ||
- aField == this._fieldTwo ||
- aField == this._fieldThree) {
- var value = Number(aField.value);
- if (isNaN(value))
- value = 0;
-
- value = this._constrainValue(aField, value, true);
- this._setFieldValue(aField, value);
- }
- ]]>
- </body>
- </method>
-
- <method name="_init">
- <body/>
- </method>
-
- <constructor>
- this._init();
-
- var cval = this.getAttribute("value");
- if (cval) {
- try {
- this.value = cval;
- return;
- } catch (ex) { }
- }
- this.dateValue = new Date();
- </constructor>
-
- <destructor>
- if (this.attachedControl) {
- this.attachedControl.attachedControl = null;
- this.attachedControl = null;
- }
- </destructor>
-
- </implementation>
-
- <handlers>
- <handler event="focus" phase="capturing">
- <![CDATA[
- var target = event.originalTarget;
- if (target == this._fieldOne ||
- target == this._fieldTwo ||
- target == this._fieldThree ||
- target == this._fieldAMPM)
- this._lastFocusedField = target;
- ]]>
- </handler>
-
- <handler event="keypress">
- <![CDATA[
- if (this._hasEntry && event.charCode &&
- this._currentField != this._fieldAMPM &&
- !(event.altKey || event.ctrlKey || event.metaKey) &&
- (event.charCode < 48 || event.charCode > 57))
- event.preventDefault();
- ]]>
- </handler>
-
- <handler event="keypress" keycode="VK_UP">
- if (this._hasEntry)
- this._increaseOrDecrease(1);
- </handler>
- <handler event="keypress" keycode="VK_DOWN">
- if (this._hasEntry)
- this._increaseOrDecrease(-1);
- </handler>
-
- <handler event="input">
- this._valueEntered = true;
- </handler>
-
- <handler event="change">
- this._setValueOnChange(event.originalTarget);
- </handler>
- </handlers>
-
- </binding>
-
- <binding id="timepicker"
- extends="chrome://global/content/bindings/datetimepicker.xml#datetimepicker-base">
-
- <implementation>
- <field name="is24HourClock">false</field>
- <field name="hourLeadingZero">false</field>
- <field name="minuteLeadingZero">true</field>
- <field name="secondLeadingZero">true</field>
- <field name="amIndicator">"AM"</field>
- <field name="pmIndicator">"PM"</field>
-
- <field name="hourField">null</field>
- <field name="minuteField">null</field>
- <field name="secondField">null</field>
-
- <property name="value">
- <getter>
- <![CDATA[
- var minute = this._dateValue.getMinutes();
- if (minute < 10)
- minute = "0" + minute;
-
- var second = this._dateValue.getSeconds();
- if (second < 10)
- second = "0" + second;
- return this._dateValue.getHours() + ":" + minute + ":" + second;
- ]]>
- </getter>
- <setter>
- <![CDATA[
- var items = val.match(/^([0-9]{1,2})\:([0-9]{1,2})\:?([0-9]{1,2})?$/);
- if (!items)
- throw "Invalid Time";
-
- var dt = this.dateValue;
- dt.setHours(items[1]);
- dt.setMinutes(items[2]);
- dt.setSeconds(items[3] ? items[3] : 0);
- this.dateValue = dt;
- return val;
- ]]>
- </setter>
- </property>
- <property name="hour" onget="return this._dateValue.getHours();">
- <setter>
- <![CDATA[
- var valnum = Number(val);
- if (isNaN(valnum) || valnum < 0 || valnum > 23)
- throw "Invalid Hour";
- this._setFieldValue(this.hourField, valnum);
- return val;
- ]]>
- </setter>
- </property>
- <property name="minute" onget="return this._dateValue.getMinutes();">
- <setter>
- <![CDATA[
- var valnum = Number(val);
- if (isNaN(valnum) || valnum < 0 || valnum > 59)
- throw "Invalid Minute";
- this._setFieldValue(this.minuteField, valnum);
- return val;
- ]]>
- </setter>
- </property>
- <property name="second" onget="return this._dateValue.getSeconds();">
- <setter>
- <![CDATA[
- var valnum = Number(val);
- if (isNaN(valnum) || valnum < 0 || valnum > 59)
- throw "Invalid Second";
- this._setFieldValue(this.secondField, valnum);
- return val;
- ]]>
- </setter>
- </property>
- <property name="isPM">
- <getter>
- <![CDATA[
- return (this.hour >= 12);
- ]]>
- </getter>
- <setter>
- <![CDATA[
- if (val) {
- if (this.hour < 12)
- this.hour += 12;
- } else if (this.hour >= 12)
- this.hour -= 12;
- return val;
- ]]>
- </setter>
- </property>
- <property name="hideSeconds">
- <getter>
- return (this.getAttribute("hideseconds") == "true");
- </getter>
- <setter>
- if (val)
- this.setAttribute("hideseconds", "true");
- else
- this.removeAttribute("hideseconds");
- if (this.secondField)
- this.secondField.parentNode.collapsed = val;
- this._separatorSecond.collapsed = val;
- return val;
- </setter>
- </property>
- <property name="increment">
- <getter>
- <![CDATA[
- var increment = this.getAttribute("increment");
- increment = Number(increment);
- if (isNaN(increment) || increment <= 0 || increment >= 60)
- return 1;
- return increment;
- ]]>
- </getter>
- <setter>
- <![CDATA[
- if (typeof val == "number")
- this.setAttribute("increment", val);
- return val;
- ]]>
- </setter>
- </property>
-
- <method name="_setValueNoSync">
- <parameter name="aValue"/>
- <body>
- <![CDATA[
- var dt = new Date(aValue);
- if (!isNaN(dt)) {
- this._dateValue = dt;
- this.setAttribute("value", this.value);
- this._updateUI(this.hourField, this.hour);
- this._updateUI(this.minuteField, this.minute);
- this._updateUI(this.secondField, this.second);
- }
- ]]>
- </body>
- </method>
- <method name="_increaseOrDecrease">
- <parameter name="aDir"/>
- <body>
- <![CDATA[
- if (this.disabled || this.readOnly)
- return;
-
- var field = this._currentField;
- if (this._valueEntered)
- this._setValueOnChange(field);
-
- if (field == this._fieldAMPM) {
- this.isPM = !this.isPM;
- this._fireEvent("change", this);
- } else {
- var oldval;
- var change = aDir;
- if (field == this.hourField) {
- oldval = this.hour;
- } else if (field == this.minuteField) {
- oldval = this.minute;
- change *= this.increment;
- } else if (field == this.secondField) {
- oldval = this.second;
- }
-
- var newval = this._constrainValue(field, oldval + change, false);
-
- if (field == this.hourField)
- this.hour = newval;
- else if (field == this.minuteField)
- this.minute = newval;
- else if (field == this.secondField)
- this.second = newval;
-
- if (oldval != newval)
- this._fireEvent("change", this);
- }
- field.select();
- ]]>
- </body>
- </method>
- <method name="_setFieldValue">
- <parameter name="aField"/>
- <parameter name="aValue"/>
- <body>
- <![CDATA[
- if (aField == this.hourField)
- this._dateValue.setHours(aValue);
- else if (aField == this.minuteField)
- this._dateValue.setMinutes(aValue);
- else if (aField == this.secondField)
- this._dateValue.setSeconds(aValue);
-
- this.setAttribute("value", this.value);
- this._updateUI(aField, aValue);
-
- if (this.attachedControl)
- this.attachedControl._setValueNoSync(this._dateValue);
- ]]>
- </body>
- </method>
- <method name="_updateUI">
- <parameter name="aField"/>
- <parameter name="aValue"/>
- <body>
- <![CDATA[
- this._valueEntered = false;
-
- var prependZero = false;
- if (aField == this.hourField) {
- prependZero = this.hourLeadingZero;
- if (!this.is24HourClock) {
- if (aValue >= 12) {
- if (aValue > 12)
- aValue -= 12;
- this._fieldAMPM.value = this.pmIndicator;
- } else {
- if (aValue == 0)
- aValue = 12;
- this._fieldAMPM.value = this.amIndicator;
- }
- }
- } else if (aField == this.minuteField) {
- prependZero = this.minuteLeadingZero;
- } else if (aField == this.secondField) {
- prependZero = this.secondLeadingZero;
- }
-
- if (prependZero && aValue < 10)
- aField.value = "0" + aValue;
- else
- aField.value = aValue;
- ]]>
- </body>
- </method>
- <method name="_constrainValue">
- <parameter name="aField"/>
- <parameter name="aValue"/>
- <parameter name="aNoWrap"/>
- <body>
- <![CDATA[
- // aNoWrap is true when the user entered a value, so just
- // constrain within limits. If false, the value is being
- // incremented or decremented, so wrap around values
- var max = (aField == this.hourField) ? 24 : 60;
- if (aValue < 0)
- return aNoWrap ? 0 : max + aValue;
- if (aValue >= max)
- return aNoWrap ? max - 1 : aValue - max;
- return aValue;
- ]]>
- </body>
- </method>
- <method name="_init">
- <body>
- <![CDATA[
- this.hourField = this._fieldOne;
- this.minuteField = this._fieldTwo;
- this.secondField = this._fieldThree;
-
- var numberOrder = /^(\D*)\s*(\d+)(\D*)(\d+)(\D*)(\d+)\s*(\D*)$/;
-
- var locale = Intl.DateTimeFormat().resolvedOptions().locale + "-u-ca-gregory-nu-latn";
-
- var pmTime = new Date(2000, 0, 1, 16, 7, 9).toLocaleTimeString(locale);
- var numberFields = pmTime.match(numberOrder);
- if (numberFields) {
- this._separatorFirst.value = numberFields[3];
- this._separatorSecond.value = numberFields[5];
- if (Number(numberFields[2]) > 12)
- this.is24HourClock = true;
- else
- this.pmIndicator = numberFields[1] || numberFields[7];
- }
-
- var amTime = new Date(2000, 0, 1, 1, 7, 9).toLocaleTimeString(locale);
- numberFields = amTime.match(numberOrder);
- if (numberFields) {
- this.hourLeadingZero = (numberFields[2].length > 1);
- this.minuteLeadingZero = (numberFields[4].length > 1);
- this.secondLeadingZero = (numberFields[6].length > 1);
-
- if (!this.is24HourClock) {
- this.amIndicator = numberFields[1] || numberFields[7];
- if (numberFields[1]) {
- var mfield = this._fieldAMPM.parentNode;
- var mcontainer = mfield.parentNode;
- mcontainer.insertBefore(mfield, mcontainer.firstChild);
- }
- var size = (numberFields[1] || numberFields[7]).length;
- if (this.pmIndicator.length > size)
- size = this.pmIndicator.length;
- this._fieldAMPM.size = size;
- this._fieldAMPM.maxLength = size;
- } else {
- this._fieldAMPM.parentNode.collapsed = true;
- }
- }
-
- this.hideSeconds = this.hideSeconds;
- ]]>
- </body>
- </method>
- </implementation>
-
- <handlers>
- <handler event="keypress">
- <![CDATA[
- // just allow any printable character to switch the AM/PM state
- if (event.charCode && !this.disabled && !this.readOnly &&
- this._currentField == this._fieldAMPM) {
- this.isPM = !this.isPM;
- this._fieldAMPM.select();
- this._fireEvent("change", this);
- event.preventDefault();
- }
- ]]>
- </handler>
- </handlers>
-
- </binding>
-
- <binding id="datepicker"
- extends="chrome://global/content/bindings/datetimepicker.xml#datetimepicker-base">
-
- <implementation>
- <field name="yearLeadingZero">false</field>
- <field name="monthLeadingZero">true</field>
- <field name="dateLeadingZero">true</field>
-
- <field name="yearField"/>
- <field name="monthField"/>
- <field name="dateField"/>
-
- <property name="value">
- <getter>
- <![CDATA[
- var month = this._dateValue.getMonth();
- month = (month < 9) ? month = "0" + ++month : month + 1;
-
- var date = this._dateValue.getDate();
- if (date < 10)
- date = "0" + date;
- return this._dateValue.getFullYear() + "-" + month + "-" + date;
- ]]>
-
- </getter>
- <setter>
- <![CDATA[
- var results = val.match(/^([0-9]{1,4})\-([0-9]{1,2})\-([0-9]{1,2})$/);
- if (!results)
- throw "Invalid Date";
-
- this.dateValue = new Date(results[1] + "/" + results[2] + "/" + results[3]);
- this.setAttribute("value", this.value);
- return val;
- ]]>
- </setter>
- </property>
- <property name="year" onget="return this._dateValue.getFullYear();">
- <setter>
- <![CDATA[
- var valnum = Number(val);
- if (isNaN(valnum) || valnum < 1 || valnum > 9999)
- throw "Invalid Year";
- this._setFieldValue(this.yearField, valnum);
- return val;
- ]]>
- </setter>
- </property>
- <property name="month" onget="return this._dateValue.getMonth();">
- <setter>
- <![CDATA[
- var valnum = Number(val);
- if (isNaN(valnum) || valnum < 0 || valnum > 11)
- throw "Invalid Month";
- this._setFieldValue(this.monthField, valnum);
- return val;
- ]]>
- </setter>
- </property>
- <property name="date" onget="return this._dateValue.getDate();">
- <setter>
- <![CDATA[
- var valnum = Number(val);
- if (isNaN(valnum) || valnum < 1 || valnum > 31)
- throw "Invalid Date";
- this._setFieldValue(this.dateField, valnum);
- return val;
- ]]>
- </setter>
- </property>
- <property name="open" onget="return false;" onset="return val;"/>
-
- <property name="displayedMonth" onget="return this.month;"
- onset="this.month = val; return val;"/>
- <property name="displayedYear" onget="return this.year;"
- onset="this.year = val; return val;"/>
-
- <method name="_setValueNoSync">
- <parameter name="aValue"/>
- <body>
- <![CDATA[
- var dt = new Date(aValue);
- if (!isNaN(dt)) {
- this._dateValue = dt;
- this.setAttribute("value", this.value);
- this._updateUI(this.yearField, this.year);
- this._updateUI(this.monthField, this.month);
- this._updateUI(this.dateField, this.date);
- }
- ]]>
- </body>
- </method>
- <method name="_increaseOrDecrease">
- <parameter name="aDir"/>
- <body>
- <![CDATA[
- if (this.disabled || this.readOnly)
- return;
-
- var field = this._currentField;
- if (this._valueEntered)
- this._setValueOnChange(field);
-
- var oldval;
- if (field == this.yearField)
- oldval = this.year;
- else if (field == this.monthField)
- oldval = this.month;
- else if (field == this.dateField)
- oldval = this.date;
-
- var newval = this._constrainValue(field, oldval + aDir, false);
-
- if (field == this.yearField)
- this.year = newval;
- else if (field == this.monthField)
- this.month = newval;
- else if (field == this.dateField)
- this.date = newval;
-
- if (oldval != newval)
- this._fireEvent("change", this);
- field.select();
- ]]>
- </body>
- </method>
- <method name="_setFieldValue">
- <parameter name="aField"/>
- <parameter name="aValue"/>
- <body>
- <![CDATA[
- if (aField == this.yearField) {
- let oldDate = this.date;
- this._dateValue.setFullYear(aValue);
- if (oldDate != this.date) {
- this._dateValue.setDate(0);
- this._updateUI(this.dateField, this.date);
- }
- } else if (aField == this.monthField) {
- let oldDate = this.date;
- this._dateValue.setMonth(aValue);
- if (oldDate != this.date) {
- this._dateValue.setDate(0);
- this._updateUI(this.dateField, this.date);
- }
- } else if (aField == this.dateField) {
- this._dateValue.setDate(aValue);
- }
-
- this.setAttribute("value", this.value);
- this._updateUI(aField, aValue);
-
- if (this.attachedControl)
- this.attachedControl._setValueNoSync(this._dateValue);
- ]]>
- </body>
- </method>
- <method name="_updateUI">
- <parameter name="aField"/>
- <parameter name="aValue"/>
- <body>
- <![CDATA[
- this._valueEntered = false;
-
- var prependZero = false;
- if (aField == this.yearField) {
- if (this.yearLeadingZero) {
- aField.value = ("000" + aValue).slice(-4);
- return;
- }
- } else if (aField == this.monthField) {
- aValue++;
- prependZero = this.monthLeadingZero;
- } else if (aField == this.dateField) {
- prependZero = this.dateLeadingZero;
- }
- if (prependZero && aValue < 10)
- aField.value = "0" + aValue;
- else
- aField.value = aValue;
- ]]>
- </body>
- </method>
- <method name="_constrainValue">
- <parameter name="aField"/>
- <parameter name="aValue"/>
- <parameter name="aNoWrap"/>
- <body>
- <![CDATA[
- // the month will be 1 to 12 if entered by the user, so subtract 1
- if (aNoWrap && aField == this.monthField)
- aValue--;
-
- if (aField == this.dateField) {
- if (aValue < 1)
- return new Date(this.year, this.month + 1, 0).getDate();
-
- var currentMonth = this.month;
- var dt = new Date(this.year, currentMonth, aValue);
- return (dt.getMonth() != currentMonth ? 1 : aValue);
- }
- var min = (aField == this.monthField) ? 0 : 1;
- var max = (aField == this.monthField) ? 11 : 9999;
- if (aValue < min)
- return aNoWrap ? min : max;
- if (aValue > max)
- return aNoWrap ? max : min;
- return aValue;
- ]]>
- </body>
- </method>
- <method name="_init">
- <body>
- <![CDATA[
- // We'll default to YYYY/MM/DD to start.
- var yfield = "input-one";
- var mfield = "input-two";
- var dfield = "input-three";
- var twoDigitYear = false;
- this.yearLeadingZero = true;
- this.monthLeadingZero = true;
- this.dateLeadingZero = true;
-
- var numberOrder = /^(\D*)\s*(\d+)(\D*)(\d+)(\D*)(\d+)\s*(\D*)$/;
-
- var locale = Intl.DateTimeFormat().resolvedOptions().locale + "-u-ca-gregory-nu-latn";
-
- var dt = new Date(2002, 9, 4).toLocaleDateString(locale);
- var numberFields = dt.match(numberOrder);
- if (numberFields) {
- this._separatorFirst.value = numberFields[3];
- this._separatorSecond.value = numberFields[5];
-
- var yi = 2, mi = 4, di = 6;
-
- function fieldForNumber(i) {
- if (i == 2)
- return "input-one";
- if (i == 4)
- return "input-two";
- return "input-three";
- }
-
- for (var i = 1; i < numberFields.length; i++) {
- switch (Number(numberFields[i])) {
- case 2:
- twoDigitYear = true; // fall through
- case 2002:
- yi = i;
- yfield = fieldForNumber(i);
- break;
- case 9, 10:
- mi = i;
- mfield = fieldForNumber(i);
- break;
- case 4:
- di = i;
- dfield = fieldForNumber(i);
- break;
- }
- }
-
- this.yearLeadingZero = (numberFields[yi].length > 1);
- this.monthLeadingZero = (numberFields[mi].length > 1);
- this.dateLeadingZero = (numberFields[di].length > 1);
- }
-
- this.yearField = document.getAnonymousElementByAttribute(this, "anonid", yfield);
- if (!twoDigitYear)
- this.yearField.parentNode.classList.add("datetimepicker-input-subbox", "datetimepicker-year");
- this.monthField = document.getAnonymousElementByAttribute(this, "anonid", mfield);
- this.dateField = document.getAnonymousElementByAttribute(this, "anonid", dfield);
-
- this._fieldAMPM.parentNode.collapsed = true;
- this.yearField.size = twoDigitYear ? 2 : 4;
- this.yearField.maxLength = twoDigitYear ? 2 : 4;
- ]]>
- </body>
- </method>
- </implementation>
-
- </binding>
-
- <binding id="datepicker-grid"
- extends="chrome://global/content/bindings/datetimepicker.xml#datepicker">
-
- <content>
- <vbox class="datepicker-mainbox"
- xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
- <hbox class="datepicker-monthbox" align="center">
- <button class="datepicker-previous datepicker-button" type="repeat"
- xbl:inherits="disabled"
- oncommand="document.getBindingParent(this)._increaseOrDecreaseMonth(-1);"/>
- <spacer flex="1"/>
- <deck anonid="monthlabeldeck">
- <label class="datepicker-gridlabel" value=""/>
- <label class="datepicker-gridlabel" value=""/>
- <label class="datepicker-gridlabel" value=""/>
- <label class="datepicker-gridlabel" value=""/>
- <label class="datepicker-gridlabel" value=""/>
- <label class="datepicker-gridlabel" value=""/>
- <label class="datepicker-gridlabel" value=""/>
- <label class="datepicker-gridlabel" value=""/>
- <label class="datepicker-gridlabel" value=""/>
- <label class="datepicker-gridlabel" value=""/>
- <label class="datepicker-gridlabel" value=""/>
- <label class="datepicker-gridlabel" value=""/>
- </deck>
- <label anonid="yearlabel" class="datepicker-gridlabel"/>
- <spacer flex="1"/>
- <button class="datepicker-next datepicker-button" type="repeat"
- xbl:inherits="disabled"
- oncommand="document.getBindingParent(this)._increaseOrDecreaseMonth(1);"/>
- </hbox>
- <grid class="datepicker-grid" role="grid">
- <columns>
- <column class="datepicker-gridrow" flex="1"/>
- <column class="datepicker-gridrow" flex="1"/>
- <column class="datepicker-gridrow" flex="1"/>
- <column class="datepicker-gridrow" flex="1"/>
- <column class="datepicker-gridrow" flex="1"/>
- <column class="datepicker-gridrow" flex="1"/>
- <column class="datepicker-gridrow" flex="1"/>
- </columns>
- <rows anonid="datebox">
- <row anonid="dayofweekbox">
- <label class="datepicker-weeklabel" role="columnheader"/>
- <label class="datepicker-weeklabel" role="columnheader"/>
- <label class="datepicker-weeklabel" role="columnheader"/>
- <label class="datepicker-weeklabel" role="columnheader"/>
- <label class="datepicker-weeklabel" role="columnheader"/>
- <label class="datepicker-weeklabel" role="columnheader"/>
- <label class="datepicker-weeklabel" role="columnheader"/>
- </row>
- <row>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- </row>
- <row>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- </row>
- <row>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- </row>
- <row>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- </row>
- <row>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- </row>
- <row>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- <label class="datepicker-gridlabel" role="gridcell"/>
- </row>
- </rows>
- </grid>
- </vbox>
- </content>
-
- <implementation>
- <field name="_hasEntry">false</field>
- <field name="_weekStart">&firstdayofweek.default;</field>
- <field name="_displayedDate">null</field>
- <field name="_todayItem">null</field>
-
- <field name="yearField">
- document.getAnonymousElementByAttribute(this, "anonid", "yearlabel");
- </field>
- <field name="monthField">
- document.getAnonymousElementByAttribute(this, "anonid", "monthlabeldeck");
- </field>
- <field name="dateField">
- document.getAnonymousElementByAttribute(this, "anonid", "datebox");
- </field>
-
- <field name="_selectedItem">null</field>
-
- <property name="selectedItem" onget="return this._selectedItem">
- <setter>
- <![CDATA[
- if (!val.value)
- return val;
- if (val.parentNode.parentNode != this.dateField)
- return val;
-
- if (this._selectedItem)
- this._selectedItem.removeAttribute("selected");
- this._selectedItem = val;
- val.setAttribute("selected", "true");
- this._displayedDate.setDate(val.value);
- return val;
- ]]>
- </setter>
- </property>
-
- <property name="displayedMonth">
- <getter>
- return this._displayedDate.getMonth();
- </getter>
- <setter>
- this._updateUI(this.monthField, val, true);
- return val;
- </setter>
- </property>
- <property name="displayedYear">
- <getter>
- return this._displayedDate.getFullYear();
- </getter>
- <setter>
- this._updateUI(this.yearField, val, true);
- return val;
- </setter>
- </property>
-
- <method name="_init">
- <body>
- <![CDATA[
- var locale = Intl.DateTimeFormat().resolvedOptions().locale + "-u-ca-gregory";
- var dtfMonth = Intl.DateTimeFormat(locale, {month: "long", timeZone: "UTC"});
- var dtfWeekday = Intl.DateTimeFormat(locale, {weekday: "narrow"});
-
- var monthLabel = this.monthField.firstChild;
- var tempDate = new Date(Date.UTC(2005, 0, 1));
- for (var month = 0; month < 12; month++) {
- tempDate.setUTCMonth(month);
- monthLabel.setAttribute("value", dtfMonth.format(tempDate));
- monthLabel = monthLabel.nextSibling;
- }
-
- var fdow = Number(this.getAttribute("firstdayofweek"));
- if (!isNaN(fdow) && fdow >= 0 && fdow <= 6)
- this._weekStart = fdow;
-
- var weekbox = document.getAnonymousElementByAttribute(this, "anonid", "dayofweekbox").childNodes;
- var date = new Date();
- date.setDate(date.getDate() - (date.getDay() - this._weekStart));
- for (var i = 0; i < weekbox.length; i++) {
- weekbox[i].value = dtfWeekday.format(date);
- date.setDate(date.getDate() + 1);
- }
- ]]>
- </body>
- </method>
- <method name="_setValueNoSync">
- <parameter name="aValue"/>
- <body>
- <![CDATA[
- var dt = new Date(aValue);
- if (!isNaN(dt)) {
- this._dateValue = dt;
- this.setAttribute("value", this.value);
- this._updateUI();
- }
- ]]>
- </body>
- </method>
- <method name="_updateUI">
- <parameter name="aField"/>
- <parameter name="aValue"/>
- <parameter name="aCheckMonth"/>
- <body>
- <![CDATA[
- var date;
- var currentMonth;
- if (aCheckMonth) {
- if (!this._displayedDate)
- this._displayedDate = this.dateValue;
-
- var expectedMonth = aValue;
- if (aField == this.monthField) {
- this._displayedDate.setMonth(aValue);
- } else {
- expectedMonth = this._displayedDate.getMonth();
- this._displayedDate.setFullYear(aValue);
- }
-
- if (expectedMonth != -1 && expectedMonth != 12 &&
- expectedMonth != this._displayedDate.getMonth()) {
- // If the month isn't what was expected, then the month overflowed.
- // Setting the date to 0 will go back to the last day of the right month.
- this._displayedDate.setDate(0);
- }
-
- date = new Date(this._displayedDate);
- currentMonth = this._displayedDate.getMonth();
- } else {
- var samemonth = (this._displayedDate &&
- this._displayedDate.getMonth() == this.month &&
- this._displayedDate.getFullYear() == this.year);
- if (samemonth) {
- var items = this.dateField.getElementsByAttribute("value", this.date);
- if (items.length)
- this.selectedItem = items[0];
- return;
- }
-
- date = this.dateValue;
- this._displayedDate = new Date(date);
- currentMonth = this.month;
- }
-
- if (this._todayItem) {
- this._todayItem.removeAttribute("today");
- this._todayItem = null;
- }
-
- if (this._selectedItem) {
- this._selectedItem.removeAttribute("selected");
- this._selectedItem = null;
- }
-
- // Update the month and year title
- this.monthField.selectedIndex = currentMonth;
- this.yearField.setAttribute("value", date.getFullYear());
-
- date.setDate(1);
- var firstWeekday = (7 + date.getDay() - this._weekStart) % 7;
- date.setDate(date.getDate() - firstWeekday);
-
- var today = new Date();
- var datebox = this.dateField;
- for (var k = 1; k < datebox.childNodes.length; k++) {
- var row = datebox.childNodes[k];
- for (var i = 0; i < 7; i++) {
- var item = row.childNodes[i];
-
- if (currentMonth == date.getMonth()) {
- item.value = date.getDate();
-
- // highlight today
- if (this._isSameDay(today, date)) {
- this._todayItem = item;
- item.setAttribute("today", "true");
- }
-
- // highlight the selected date
- if (this._isSameDay(this._dateValue, date)) {
- this._selectedItem = item;
- item.setAttribute("selected", "true");
- }
- } else {
- item.value = "";
- }
-
- date.setDate(date.getDate() + 1);
- }
- }
-
- this._fireEvent("monthchange", this);
- ]]>
- </body>
- </method>
- <method name="_increaseOrDecreaseDateFromEvent">
- <parameter name="aEvent"/>
- <parameter name="aDiff"/>
- <body>
- <![CDATA[
- if (aEvent.originalTarget == this && !this.disabled && !this.readOnly) {
- var newdate = this.dateValue;
- newdate.setDate(newdate.getDate() + aDiff);
- this.dateValue = newdate;
- this._fireEvent("change", this);
- }
- aEvent.stopPropagation();
- aEvent.preventDefault();
- ]]>
- </body>
- </method>
- <method name="_increaseOrDecreaseMonth">
- <parameter name="aDir"/>
- <body>
- <![CDATA[
- if (!this.disabled) {
- var month = this._displayedDate ? this._displayedDate.getMonth() :
- this.month;
- this._updateUI(this.monthField, month + aDir, true);
- }
- ]]>
- </body>
- </method>
- <method name="_isSameDay">
- <parameter name="aDate1"/>
- <parameter name="aDate2"/>
- <body>
- <![CDATA[
- return (aDate1 && aDate2 &&
- aDate1.getDate() == aDate2.getDate() &&
- aDate1.getMonth() == aDate2.getMonth() &&
- aDate1.getFullYear() == aDate2.getFullYear());
- ]]>
- </body>
- </method>
-
- </implementation>
-
- <handlers>
- <handler event="click">
- <![CDATA[
- if (event.button != 0 || this.disabled || this.readOnly)
- return;
-
- var target = event.originalTarget;
- if (target.classList.contains("datepicker-gridlabel") &&
- target != this.selectedItem) {
- this.selectedItem = target;
- this._dateValue = new Date(this._displayedDate);
- if (this.attachedControl)
- this.attachedControl._setValueNoSync(this._dateValue);
- this._fireEvent("change", this);
-
- if (this.attachedControl && "open" in this.attachedControl)
- this.attachedControl.open = false; // close the popup
- }
- ]]>
- </handler>
- <handler event="MozMousePixelScroll" preventdefault="true"/>
- <handler event="DOMMouseScroll" preventdefault="true">
- <![CDATA[
- this._increaseOrDecreaseMonth(event.detail < 0 ? -1 : 1);
- ]]>
- </handler>
- <handler event="keypress" keycode="VK_LEFT"
- action="this._increaseOrDecreaseDateFromEvent(event, -1);"/>
- <handler event="keypress" keycode="VK_RIGHT"
- action="this._increaseOrDecreaseDateFromEvent(event, 1);"/>
- <handler event="keypress" keycode="VK_UP"
- action="this._increaseOrDecreaseDateFromEvent(event, -7);"/>
- <handler event="keypress" keycode="VK_DOWN"
- action="this._increaseOrDecreaseDateFromEvent(event, 7);"/>
- <handler event="keypress" keycode="VK_PAGE_UP" preventdefault="true"
- action="this._increaseOrDecreaseMonth(-1);"/>
- <handler event="keypress" keycode="VK_PAGE_DOWN" preventdefault="true"
- action="this._increaseOrDecreaseMonth(1);"/>
- </handlers>
- </binding>
-
- <binding id="datepicker-popup" display="xul:menu"
- extends="chrome://global/content/bindings/datetimepicker.xml#datepicker">
- <content align="center">
- <xul:hbox class="textbox-input-box datetimepicker-input-box" align="center"
- allowevents="true" xbl:inherits="context,disabled,readonly">
- <xul:hbox class="datetimepicker-input-subbox" align="baseline">
- <html:input class="datetimepicker-input textbox-input" anonid="input-one"
- size="2" maxlength="2"
- xbl:inherits="disabled,readonly"/>
- </xul:hbox>
- <xul:label anonid="sep-first" class="datetimepicker-separator" value=":"/>
- <xul:hbox class="datetimepicker-input-subbox" align="baseline">
- <html:input class="datetimepicker-input textbox-input" anonid="input-two"
- size="2" maxlength="2"
- xbl:inherits="disabled,readonly"/>
- </xul:hbox>
- <xul:label anonid="sep-second" class="datetimepicker-separator" value=":"/>
- <xul:hbox class="datetimepicker-input-subbox" align="center">
- <html:input class="datetimepicker-input textbox-input" anonid="input-three"
- size="2" maxlength="2"
- xbl:inherits="disabled,readonly"/>
- </xul:hbox>
- <xul:hbox class="datetimepicker-input-subbox" align="center">
- <html:input class="datetimepicker-input textbox-input" anonid="input-ampm"
- size="2" maxlength="2"
- xbl:inherits="disabled,readonly"/>
- </xul:hbox>
- </xul:hbox>
- <xul:spinbuttons anonid="buttons" xbl:inherits="disabled" allowevents="true"
- onup="this.parentNode._increaseOrDecrease(1);"
- ondown="this.parentNode._increaseOrDecrease(-1);"/>
- <xul:dropmarker class="datepicker-dropmarker" xbl:inherits="disabled"/>
- <xul:panel onpopupshown="this.firstChild.focus();" level="top">
- <xul:datepicker anonid="grid" type="grid" class="datepicker-popupgrid"
- xbl:inherits="disabled,readonly,firstdayofweek"/>
- </xul:panel>
- </content>
- <implementation>
- <constructor>
- var grid = document.getAnonymousElementByAttribute(this, "anonid", "grid");
- this.attachedControl = grid;
- grid.attachedControl = this;
- grid._setValueNoSync(this._dateValue);
- </constructor>
- <property name="open" onget="return this.hasAttribute('open');">
- <setter>
- <![CDATA[
- if (this.boxObject instanceof MenuBoxObject)
- this.boxObject.openMenu(val);
- return val;
- ]]>
- </setter>
- </property>
- <property name="displayedMonth">
- <getter>
- return document.getAnonymousElementByAttribute(this, "anonid", "grid").displayedMonth;
- </getter>
- <setter>
- document.getAnonymousElementByAttribute(this, "anonid", "grid").displayedMonth = val;
- return val;
- </setter>
- </property>
- <property name="displayedYear">
- <getter>
- return document.getAnonymousElementByAttribute(this, "anonid", "grid").displayedYear;
- </getter>
- <setter>
- document.getAnonymousElementByAttribute(this, "anonid", "grid").displayedYear = val;
- return val;
- </setter>
- </property>
- </implementation>
- </binding>
-
-</bindings>
--- a/toolkit/content/xul.css
+++ b/toolkit/content/xul.css
@@ -1026,34 +1026,16 @@ richlistbox {
richlistitem {
-moz-binding: url('chrome://global/content/bindings/richlistbox.xml#richlistitem');
}
richlistbox > listheader {
-moz-box-ordinal-group: 1;
}
-/********** datepicker and timepicker ********/
-
-datepicker {
- -moz-binding: url('chrome://global/content/bindings/datetimepicker.xml#datepicker');
-}
-
-datepicker[type="popup"] {
- -moz-binding: url('chrome://global/content/bindings/datetimepicker.xml#datepicker-popup');
-}
-
-datepicker[type="grid"] {
- -moz-binding: url('chrome://global/content/bindings/datetimepicker.xml#datepicker-grid');
-}
-
-timepicker {
- -moz-binding: url('chrome://global/content/bindings/datetimepicker.xml#timepicker');
-}
-
/*********** findbar ************/
findbar {
-moz-binding: url('chrome://global/content/bindings/findbar.xml#findbar');
overflow-x: hidden;
}
.findbar-textbox {
deleted file mode 100644
--- a/toolkit/locales/en-US/chrome/global/datetimepicker.dtd
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!-- first day of week to display in datepicker, a value from 0 to 6,
- 0 = Sunday, 1 = Monday, etc. -->
-<!ENTITY firstdayofweek.default "0">
--- a/toolkit/locales/jar.mn
+++ b/toolkit/locales/jar.mn
@@ -34,17 +34,16 @@
locale/@AB_CD@/global/config.dtd (%chrome/global/config.dtd)
locale/@AB_CD@/global/config.properties (%chrome/global/config.properties)
locale/@AB_CD@/global/contentAreaCommands.properties (%chrome/global/contentAreaCommands.properties)
#ifndef MOZ_FENNEC
locale/@AB_CD@/global/customizeToolbar.dtd (%chrome/global/customizeToolbar.dtd)
locale/@AB_CD@/global/customizeToolbar.properties (%chrome/global/customizeToolbar.properties)
#endif
locale/@AB_CD@/global/datetimebox.dtd (%chrome/global/datetimebox.dtd)
- locale/@AB_CD@/global/datetimepicker.dtd (%chrome/global/datetimepicker.dtd)
locale/@AB_CD@/global/dialogOverlay.dtd (%chrome/global/dialogOverlay.dtd)
#ifndef MOZ_FENNEC
locale/@AB_CD@/global/editMenuOverlay.dtd (%chrome/global/editMenuOverlay.dtd)
#endif
locale/@AB_CD@/global/extensions.properties (%chrome/global/extensions.properties)
locale/@AB_CD@/global/fallbackMenubar.properties (%chrome/global/fallbackMenubar.properties)
locale/@AB_CD@/global/filefield.properties (%chrome/global/filefield.properties)
#ifdef MOZ_GTK
deleted file mode 100644
index 3367bde3123df49622ac6e93bb3af8db110fe0e5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index c5c362d89b19dadd509869efa700a2dedcbffa3e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 5010921adc6cdd64d5d2a489ac8f989e5127d40c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/toolkit/themes/osx/global/datetimepicker.css
+++ /dev/null
@@ -1,126 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
-@namespace html url("http://www.w3.org/1999/xhtml");
-
-datepicker, timepicker {
- padding: 0 0 1px;
- margin: 4px;
- border: none;
-}
-
-.datetimepicker-input-box {
- -moz-appearance: textfield;
- cursor: text;
- margin-right: 4px;
- margin-bottom: 2px;
- border: 3px solid;
- -moz-border-top-colors: transparent #888888 #000000;
- -moz-border-right-colors: transparent #FFFFFF #000000;
- -moz-border-bottom-colors: transparent #FFFFFF #000000;
- -moz-border-left-colors: transparent #888888 #000000;
- border-top-right-radius: 2px;
- border-bottom-left-radius: 2px;
- padding: 0px;
- background-color: -moz-Field;
- color: -moz-FieldText;
-}
-
-.datetimepicker-input-subbox {
- width: 1.6em;
-}
-
-html|*.datetimepicker-input {
- text-align: end;
-}
-
-.datetimepicker-separator {
- margin: 0 !important;
-}
-
-.datetimepicker-year {
- width: 3.2em;
-}
-
-.datepicker-dropmarker {
- margin-bottom: 2px;
-}
-
-datepicker[readonly="true"],
-timepicker[readonly="true"] {
- background-color: -moz-Dialog;
- color: -moz-DialogText;
-}
-
-datepicker[disabled="true"],
-timepicker[disabled="true"] {
- cursor: default;
- -moz-border-top-colors: transparent ThreeDShadow -moz-Dialog;
- -moz-border-right-colors: transparent ThreeDShadow -moz-Dialog;
- -moz-border-bottom-colors: transparent ThreeDShadow -moz-Dialog;
- -moz-border-left-colors: transparent ThreeDShadow -moz-Dialog;
- background-color: -moz-Dialog;
- color: GrayText;
-}
-
-.datepicker-mainbox {
- margin: 2px 4px;
- border: 2px solid;
- -moz-border-top-colors: ThreeDShadow ThreeDDarkShadow;
- -moz-border-right-colors: ThreeDHighlight ThreeDLightShadow;
- -moz-border-bottom-colors: ThreeDHighlight ThreeDLightShadow;
- -moz-border-left-colors: ThreeDShadow ThreeDDarkShadow;
- background-color: #EEEEEE;
- color: -moz-DialogText;
-}
-
-.datepicker-popupgrid > .datepicker-mainbox {
- margin: 0;
- border: none;
-}
-
-.datepicker-gridlabel, .datepicker-weeklabel {
- text-align: center;
-}
-
-.datepicker-gridlabel[today="true"] {
- background-color: darkgrey;
- color: white;
-}
-
-.datepicker-gridlabel[selected="true"] {
- background-color: Highlight;
- color: HighlightText;
-}
-
-.datepicker-button {
- -moz-appearance: none;
- min-width: 8px;
- padding: 0px;
-}
-
-.datepicker-previous {
- list-style-image: url("chrome://global/skin/arrow/arrow-lft.gif");
-}
-
-.datepicker-next {
- list-style-image: url("chrome://global/skin/arrow/arrow-rit.gif");
-}
-
-.datepicker-previous:hover {
- list-style-image: url("chrome://global/skin/arrow/arrow-lft-hov.gif");
-}
-
-.datepicker-next:hover {
- list-style-image: url("chrome://global/skin/arrow/arrow-rit-hov.gif");
-}
-
-.datepicker-previous[disabled="true"] {
- list-style-image: url("chrome://global/skin/arrow/arrow-lft-dis.gif");
-}
-
-.datepicker-next[disabled="true"] {
- list-style-image: url("chrome://global/skin/arrow/arrow-rit-dis.gif");
-}
--- a/toolkit/themes/osx/global/jar.mn
+++ b/toolkit/themes/osx/global/jar.mn
@@ -31,33 +31,29 @@ toolkit.jar:
skin/classic/global/richlistbox.css
skin/classic/global/scrollbars.css (nativescrollbars.css)
skin/classic/global/scrollbox.css
skin/classic/global/spinbuttons.css
skin/classic/global/splitter.css
skin/classic/global/tabprompts.css
skin/classic/global/tabbox.css
skin/classic/global/textbox.css
- skin/classic/global/datetimepicker.css
skin/classic/global/toolbar.css
skin/classic/global/toolbarbutton.css
* skin/classic/global/tree.css
skin/classic/global/wizard.css
* skin/classic/global/alerts/alert.css (alerts/alert.css)
skin/classic/global/arrow/arrow-dn-dis.gif (arrow/arrow-dn-dis.gif)
skin/classic/global/arrow/arrow-dn-dis.png (arrow/arrow-dn-dis.png)
skin/classic/global/arrow/arrow-dn-sharp.gif (arrow/arrow-dn-sharp.gif)
skin/classic/global/arrow/arrow-dn.gif (arrow/arrow-dn.gif)
skin/classic/global/arrow/arrow-dn.png (arrow/arrow-dn.png)
skin/classic/global/arrow/arrow-lft-dis.gif (arrow/arrow-lft-dis.gif)
- skin/classic/global/arrow/arrow-lft-hov.gif (arrow/arrow-lft-hov.gif)
skin/classic/global/arrow/arrow-lft-sharp.gif (arrow/arrow-lft-sharp.gif)
- skin/classic/global/arrow/arrow-lft.gif (arrow/arrow-lft.gif)
skin/classic/global/arrow/arrow-rit-dis.gif (arrow/arrow-rit-dis.gif)
- skin/classic/global/arrow/arrow-rit-hov.gif (arrow/arrow-rit-hov.gif)
skin/classic/global/arrow/arrow-rit-sharp.gif (arrow/arrow-rit-sharp.gif)
skin/classic/global/arrow/arrow-rit.gif (arrow/arrow-rit.gif)
skin/classic/global/arrow/arrow-up-dis.gif (arrow/arrow-up-dis.gif)
skin/classic/global/arrow/arrow-up-sharp.gif (arrow/arrow-up-sharp.gif)
skin/classic/global/arrow/arrow-up.gif (arrow/arrow-up.gif)
skin/classic/global/arrow/panelarrow-horizontal.svg (arrow/panelarrow-horizontal.svg)
skin/classic/global/arrow/panelarrow-vertical.svg (arrow/panelarrow-vertical.svg)
skin/classic/global/checkbox/cbox-check.gif (checkbox/cbox-check.gif)
--- a/toolkit/themes/shared/non-mac.jar.inc.mn
+++ b/toolkit/themes/shared/non-mac.jar.inc.mn
@@ -6,33 +6,28 @@
# by the shared jar manifest, which in turn is included by the os-specific
# manifests.
# As a result, the source file paths are relative to the location of the
# actual manifests.
#include jar.inc.mn
skin/classic/global/customizeToolbar.css (../../windows/global/customizeToolbar.css)
- skin/classic/global/datetimepicker.css (../../windows/global/datetimepicker.css)
skin/classic/global/dialog.css (../../windows/global/dialog.css)
skin/classic/global/filefield.css (../../windows/global/filefield.css)
skin/classic/global/progressmeter.css (../../windows/global/progressmeter.css)
skin/classic/global/resizer.css (../../windows/global/resizer.css)
skin/classic/global/richlistbox.css (../../windows/global/richlistbox.css)
skin/classic/global/scrollbars.css (../../windows/global/xulscrollbars.css)
skin/classic/global/spinbuttons.css (../../windows/global/spinbuttons.css)
skin/classic/global/tabprompts.css (../../windows/global/tabprompts.css)
skin/classic/global/wizard.css (../../windows/global/wizard.css)
skin/classic/global/arrow/arrow-dn.gif (../../windows/global/arrow/arrow-dn.gif)
skin/classic/global/arrow/arrow-dn-dis.gif (../../windows/global/arrow/arrow-dn-dis.gif)
- skin/classic/global/arrow/arrow-lft.gif (../../windows/global/arrow/arrow-lft.gif)
- skin/classic/global/arrow/arrow-lft-dis.gif (../../windows/global/arrow/arrow-lft-dis.gif)
- skin/classic/global/arrow/arrow-rit.gif (../../windows/global/arrow/arrow-rit.gif)
- skin/classic/global/arrow/arrow-rit-dis.gif (../../windows/global/arrow/arrow-rit-dis.gif)
skin/classic/global/arrow/arrow-up.gif (../../windows/global/arrow/arrow-up.gif)
skin/classic/global/arrow/arrow-up-dis.gif (../../windows/global/arrow/arrow-up-dis.gif)
skin/classic/global/arrow/panelarrow-horizontal.svg (../../windows/global/arrow/panelarrow-horizontal.svg)
skin/classic/global/arrow/panelarrow-vertical.svg (../../windows/global/arrow/panelarrow-vertical.svg)
* skin/classic/global/dirListing/dirListing.css (../../windows/global/dirListing/dirListing.css)
skin/classic/global/icons/error-16.png (../../windows/global/icons/error-16.png)
skin/classic/global/icons/question-16.png (../../windows/global/icons/question-16.png)
@@ -67,11 +62,9 @@
skin/classic/mozapps/update/downloadButtons.png (../../windows/mozapps/update/downloadButtons.png)
* skin/classic/mozapps/xpinstall/xpinstallConfirm.css (../../windows/mozapps/extensions/xpinstallConfirm.css)
#if MOZ_BUILD_APP == browser
[browser/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}] chrome.jar:
#elif MOZ_SEPARATE_MANIFEST_FOR_THEME_OVERRIDES
[extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}] chrome.jar:
#endif
-% override chrome://global/skin/arrow/arrow-lft-hov.gif chrome://global/skin/arrow/arrow-lft.gif
-% override chrome://global/skin/arrow/arrow-rit-hov.gif chrome://global/skin/arrow/arrow-rit.gif
% override chrome://mozapps/skin/xpinstall/xpinstallItemGeneric.png chrome://mozapps/skin/extensions/extensionGeneric.svg
deleted file mode 100644
--- a/toolkit/themes/windows/global/datetimepicker.css
+++ /dev/null
@@ -1,147 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/* ===== datetimepicker.css =============================================
- == Styles used by the XUL datepicker and timepicker elements.
- ======================================================================= */
-
-@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
-@namespace html url("http://www.w3.org/1999/xhtml");
-
-datepicker, timepicker {
- margin: 2px 4px;
- padding: 0;
- border: none;
- background: none;
- cursor: default;
-}
-
-.datetimepicker-input-box {
- -moz-appearance: textfield;
- cursor: text;
- margin-inline-end: 2px;
- border: 2px solid;
- -moz-border-top-colors: ThreeDShadow ThreeDDarkShadow;
- -moz-border-right-colors: ThreeDHighlight ThreeDLightShadow;
- -moz-border-bottom-colors: ThreeDHighlight ThreeDLightShadow;
- -moz-border-left-colors: ThreeDShadow ThreeDDarkShadow;
- padding: 2px 0 3px 0;
- padding-inline-start: 4px;
- padding-inline-end: 2px;
- background-color: -moz-Field;
- color: -moz-FieldText;
-}
-
-.datetimepicker-input-subbox {
- width: 1.6em;
-}
-
-html|*.datetimepicker-input {
- text-align: end;
-}
-
-.datetimepicker-separator {
- margin: 0 !important;
-}
-
-.datetimepicker-year {
- width: 3.2em;
-}
-
-datepicker[readonly="true"],
-timepicker[readonly="true"] {
- background-color: -moz-Dialog;
- color: -moz-DialogText;
-}
-
-datepicker[disabled="true"],
-timepicker[disabled="true"] {
- cursor: default;
- background-color: -moz-Dialog;
- color: GrayText;
-}
-
-.datepicker-mainbox {
- margin: 2px 4px;
- border: 2px solid;
- -moz-border-top-colors: ThreeDShadow ThreeDDarkShadow;
- -moz-border-right-colors: ThreeDHighlight ThreeDLightShadow;
- -moz-border-bottom-colors: ThreeDHighlight ThreeDLightShadow;
- -moz-border-left-colors: ThreeDShadow ThreeDDarkShadow;
- background-color: -moz-Field;
- color: -moz-FieldText;
-}
-
-.datepicker-popupgrid > .datepicker-mainbox {
- margin: 0;
- border: none;
-}
-
-.datepicker-gridlabel, .datepicker-weeklabel {
- text-align: center;
-}
-
-.datepicker-gridlabel[today="true"] {
- background-color: darkgrey;
- color: white;
-}
-
-.datepicker-gridlabel[selected="true"] {
- background-color: Highlight;
- color: HighlightText;
-}
-
-.datepicker-button {
- -moz-appearance: none;
- min-width: 8px;
- padding: 0px;
-}
-
-.datepicker-previous {
- list-style-image: url("chrome://global/skin/arrow/arrow-lft.gif");
-}
-
-.datepicker-next {
- list-style-image: url("chrome://global/skin/arrow/arrow-rit.gif");
-}
-
-.datepicker-previous:hover {
- list-style-image: url("chrome://global/skin/arrow/arrow-lft-hov.gif");
-}
-
-.datepicker-next:hover {
- list-style-image: url("chrome://global/skin/arrow/arrow-rit-hov.gif");
-}
-
-.datepicker-previous[disabled="true"] {
- list-style-image: url("chrome://global/skin/arrow/arrow-lft-dis.gif");
-}
-
-.datepicker-next[disabled="true"] {
- list-style-image: url("chrome://global/skin/arrow/arrow-rit-dis.gif");
-}
-
-.datepicker-previous:-moz-locale-dir(rtl) {
- list-style-image: url("chrome://global/skin/arrow/arrow-rit.gif");
-}
-
-.datepicker-next:-moz-locale-dir(rtl) {
- list-style-image: url("chrome://global/skin/arrow/arrow-lft.gif");
-}
-
-.datepicker-previous:-moz-locale-dir(rtl) {
- list-style-image: url("chrome://global/skin/arrow/arrow-rit-hov.gif");
-}
-
-.datepicker-next:-moz-locale-dir(rtl):hover {
- list-style-image: url("chrome://global/skin/arrow/arrow-lft-hov.gif");
-}
-
-.datepicker-previous[disabled="true"]:-moz-locale-dir(rtl) {
- list-style-image: url("chrome://global/skin/arrow/arrow-rit-dis.gif");
-}
-
-.datepicker-next[disabled="true"]:-moz-locale-dir(rtl) {
- list-style-image: url("chrome://global/skin/arrow/arrow-lft-dis.gif");
-}
--- a/toolkit/themes/windows/global/jar.mn
+++ b/toolkit/themes/windows/global/jar.mn
@@ -27,16 +27,20 @@ toolkit.jar:
skin/classic/global/printPageSetup.css
skin/classic/global/printPreview.css
skin/classic/global/scrollbox.css
skin/classic/global/splitter.css
skin/classic/global/toolbar.css
skin/classic/global/toolbarbutton.css
* skin/classic/global/tree.css
* skin/classic/global/alerts/alert.css (alerts/alert.css)
+ skin/classic/global/arrow/arrow-lft.gif (arrow/arrow-lft.gif)
+ skin/classic/global/arrow/arrow-lft-dis.gif (arrow/arrow-lft-dis.gif)
+ skin/classic/global/arrow/arrow-rit.gif (arrow/arrow-rit.gif)
+ skin/classic/global/arrow/arrow-rit-dis.gif (arrow/arrow-rit-dis.gif)
skin/classic/global/dirListing/folder.png (dirListing/folder.png)
skin/classic/global/dirListing/up.png (dirListing/up.png)
skin/classic/global/icons/blacklist_favicon.png (icons/blacklist_favicon.png)
skin/classic/global/icons/blacklist_large.png (icons/blacklist_large.png)
skin/classic/global/icons/Error.png (icons/Error.png)
skin/classic/global/icons/collapse.png (icons/collapse.png)
skin/classic/global/icons/expand.png (icons/expand.png)
skin/classic/global/icons/folder-item.png (icons/folder-item.png)
@@ -49,18 +53,18 @@ toolkit.jar:
skin/classic/global/icons/resizer.png (icons/resizer.png)
skin/classic/global/icons/sslWarning.png (icons/sslWarning.png)
skin/classic/global/icons/Warning.png (icons/Warning.png)
skin/classic/global/icons/warning-large.png (icons/warning-large.png)
skin/classic/global/icons/windowControls.png (icons/windowControls.png)
* skin/classic/global/in-content/common.css (in-content/common.css)
* skin/classic/global/in-content/info-pages.css (in-content/info-pages.css)
skin/classic/global/toolbar/spring.png (toolbar/spring.png)
- skin/classic/global/tree/twisty.svg (tree/twisty.svg)
- skin/classic/global/tree/twisty-preWin10.svg (tree/twisty-preWin10.svg)
+ skin/classic/global/tree/twisty.svg (tree/twisty.svg)
+ skin/classic/global/tree/twisty-preWin10.svg (tree/twisty-preWin10.svg)
#if MOZ_BUILD_APP == browser
[browser/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}] chrome.jar:
#elif MOZ_SEPARATE_MANIFEST_FOR_THEME_OVERRIDES
[extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}] chrome.jar:
#endif
% override chrome://global/skin/tree/twisty.svg#clsd chrome://global/skin/tree/twisty-preWin10.svg#clsd osversion<=6.3