| OLD | NEW |
| 1 "use strict"; | 1 "use strict"; |
| 2 /* | 2 /* |
| 3 * Copyright (C) 2012 Google Inc. All rights reserved. | 3 * Copyright (C) 2012 Google Inc. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions are | 6 * modification, are permitted provided that the following conditions are |
| 7 * met: | 7 * met: |
| 8 * | 8 * |
| 9 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 742 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 753 }; | 753 }; |
| 754 | 754 |
| 755 CalendarPicker.prototype.handleClear = function() { | 755 CalendarPicker.prototype.handleClear = function() { |
| 756 this.recordAction(CalendarPicker.Action.ClickedClearButton); | 756 this.recordAction(CalendarPicker.Action.ClickedClearButton); |
| 757 this.submitValue(""); | 757 this.submitValue(""); |
| 758 }; | 758 }; |
| 759 | 759 |
| 760 CalendarPicker.prototype.fixWindowSize = function() { | 760 CalendarPicker.prototype.fixWindowSize = function() { |
| 761 var yearMonthRightElement = this._element.getElementsByClassName(ClassNames.
YearMonthButtonRight)[0]; | 761 var yearMonthRightElement = this._element.getElementsByClassName(ClassNames.
YearMonthButtonRight)[0]; |
| 762 var daysAreaElement = this._element.getElementsByClassName(ClassNames.DaysAr
ea)[0]; | 762 var daysAreaElement = this._element.getElementsByClassName(ClassNames.DaysAr
ea)[0]; |
| 763 var clearButton = this._element.getElementsByClassName(ClassNames.ClearButto
n)[0]; |
| 763 var headers = daysAreaElement.getElementsByClassName(ClassNames.DayLabel); | 764 var headers = daysAreaElement.getElementsByClassName(ClassNames.DayLabel); |
| 764 var maxCellWidth = 0; | 765 var maxCellWidth = 0; |
| 765 for (var i = 1; i < headers.length; ++i) { | 766 for (var i = 1; i < headers.length; ++i) { |
| 766 if (maxCellWidth < headers[i].offsetWidth) | 767 if (maxCellWidth < headers[i].offsetWidth) |
| 767 maxCellWidth = headers[i].offsetWidth; | 768 maxCellWidth = headers[i].offsetWidth; |
| 768 } | 769 } |
| 769 var weekColumnWidth = headers[0].offsetWidth; | 770 var weekColumnWidth = headers[0].offsetWidth; |
| 770 if (maxCellWidth > weekColumnWidth) | 771 if (maxCellWidth > weekColumnWidth) |
| 771 weekColumnWidth = maxCellWidth; | 772 weekColumnWidth = maxCellWidth; |
| 772 headers[0].style.width = weekColumnWidth + "px"; | 773 headers[0].style.width = weekColumnWidth + "px"; |
| 773 var DaysAreaContainerBorder = 1; | 774 var DaysAreaContainerBorder = 1; |
| 774 var yearMonthEnd; | 775 var yearMonthEnd; |
| 775 var daysAreaEnd; | 776 var daysAreaEnd; |
| 777 var todayClearAreaEnd; |
| 776 if (global.params.isLocaleRTL) { | 778 if (global.params.isLocaleRTL) { |
| 777 var startOffset = this._element.offsetLeft + this._element.offsetWidth; | 779 var startOffset = this._element.offsetLeft + this._element.offsetWidth; |
| 778 yearMonthEnd = startOffset - yearMonthRightElement.offsetLeft; | 780 yearMonthEnd = startOffset - yearMonthRightElement.offsetLeft; |
| 779 daysAreaEnd = startOffset - (daysAreaElement.offsetLeft + daysAreaElemen
t.offsetWidth) + weekColumnWidth + maxCellWidth * 7 + DaysAreaContainerBorder; | 781 daysAreaEnd = startOffset - (daysAreaElement.offsetLeft + daysAreaElemen
t.offsetWidth) + weekColumnWidth + maxCellWidth * 7 + DaysAreaContainerBorder; |
| 782 todayClearAreaEnd = startOffset - clearButton.offsetLeft; |
| 780 } else { | 783 } else { |
| 781 yearMonthEnd = yearMonthRightElement.offsetLeft + yearMonthRightElement.
offsetWidth; | 784 yearMonthEnd = yearMonthRightElement.offsetLeft + yearMonthRightElement.
offsetWidth; |
| 782 daysAreaEnd = daysAreaElement.offsetLeft + weekColumnWidth + maxCellWidt
h * 7 + DaysAreaContainerBorder; | 785 daysAreaEnd = daysAreaElement.offsetLeft + weekColumnWidth + maxCellWidt
h * 7 + DaysAreaContainerBorder; |
| 786 todayClearAreaEnd = clearButton.offsetLeft + clearButton.offsetWidth; |
| 783 } | 787 } |
| 784 var maxEnd = Math.max(yearMonthEnd, daysAreaEnd); | 788 var maxEnd = Math.max(yearMonthEnd, daysAreaEnd, todayClearAreaEnd); |
| 785 var MainPadding = 6; // FIXME: Fix name. | 789 var MainPadding = 10; // FIXME: Fix name. |
| 786 var MainBorder = 1; | 790 var MainBorder = 1; |
| 787 var desiredBodyWidth = maxEnd + MainPadding + MainBorder; | 791 var desiredBodyWidth = maxEnd + MainPadding + MainBorder * 2; |
| 788 | 792 |
| 789 var elementHeight = this._element.offsetHeight; | 793 var elementHeight = this._element.offsetHeight; |
| 790 this._element.style.width = "auto"; | 794 this._element.style.width = "auto"; |
| 791 daysAreaElement.style.width = "100%"; | 795 daysAreaElement.style.width = "100%"; |
| 792 daysAreaElement.style.tableLayout = "fixed"; | 796 daysAreaElement.style.tableLayout = "fixed"; |
| 793 this._element.getElementsByClassName(ClassNames.YearMonthUpper)[0].style.dis
play = "-webkit-box"; | 797 this._element.getElementsByClassName(ClassNames.YearMonthUpper)[0].style.dis
play = "-webkit-box"; |
| 794 this._element.getElementsByClassName(ClassNames.MonthSelectorBox)[0].style.d
isplay = "block"; | 798 this._element.getElementsByClassName(ClassNames.MonthSelectorBox)[0].style.d
isplay = "block"; |
| 795 resizeWindow(desiredBodyWidth, elementHeight); | 799 resizeWindow(desiredBodyWidth, elementHeight); |
| 796 }; | 800 }; |
| 797 | 801 |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 874 this._monthPopup = createElement("div", ClassNames.MonthSelectorPopup); | 878 this._monthPopup = createElement("div", ClassNames.MonthSelectorPopup); |
| 875 this._monthPopup.addEventListener("click", this._handleYearMonthChange.bind(
this), false); | 879 this._monthPopup.addEventListener("click", this._handleYearMonthChange.bind(
this), false); |
| 876 this._monthPopup.addEventListener("keydown", this._handleMonthPopupKey.bind(
this), false); | 880 this._monthPopup.addEventListener("keydown", this._handleMonthPopupKey.bind(
this), false); |
| 877 this._monthPopup.addEventListener("mousemove", this._handleMouseMove.bind(th
is), false); | 881 this._monthPopup.addEventListener("mousemove", this._handleMouseMove.bind(th
is), false); |
| 878 this._updateSelectionOnMouseMove = true; | 882 this._updateSelectionOnMouseMove = true; |
| 879 this._monthPopup.tabIndex = 0; | 883 this._monthPopup.tabIndex = 0; |
| 880 this._monthPopupContents = createElement("div", ClassNames.MonthSelectorPopu
pContents); | 884 this._monthPopupContents = createElement("div", ClassNames.MonthSelectorPopu
pContents); |
| 881 this._monthPopup.appendChild(this._monthPopupContents); | 885 this._monthPopup.appendChild(this._monthPopupContents); |
| 882 box.appendChild(this._monthPopup); | 886 box.appendChild(this._monthPopup); |
| 883 this._month = createElement("div", ClassNames.MonthSelector); | 887 this._month = createElement("div", ClassNames.MonthSelector); |
| 888 this._monthLabel = createElement("span"); |
| 889 this._month.appendChild(this._monthLabel); |
| 890 var disclosureTriangle = createElement("span"); |
| 891 disclosureTriangle.innerHTML = "<svg width='7' height='5'><polygon points='0
,1 7,1 3.5,5' style='fill:#000000;' /></svg>"; |
| 892 this._month.appendChild(disclosureTriangle); |
| 884 this._month.addEventListener("click", this._showPopup.bind(this), false); | 893 this._month.addEventListener("click", this._showPopup.bind(this), false); |
| 885 box.appendChild(this._month); | 894 box.appendChild(this._month); |
| 886 | 895 |
| 887 this._attachRightButtonsTo(innerContainer); | 896 this._attachRightButtonsTo(innerContainer); |
| 888 element.appendChild(outerContainer); | 897 element.appendChild(outerContainer); |
| 889 | 898 |
| 890 this._wall = createElement("div", ClassNames.MonthSelectorWall); | 899 this._wall = createElement("div", ClassNames.MonthSelectorWall); |
| 891 this._wall.addEventListener("click", this._closePopup.bind(this), false); | 900 this._wall.addEventListener("click", this._closePopup.bind(this), false); |
| 892 element.appendChild(this._wall); | 901 element.appendChild(this._wall); |
| 893 | 902 |
| 894 var month = this.picker.maximumMonth; | 903 var month = this.picker.maximumMonth; |
| 895 var maxWidth = 0; | 904 var maxWidth = 0; |
| 896 for (var m = 0; m < 12; ++m) { | 905 for (var m = 0; m < 12; ++m) { |
| 897 this._month.textContent = month.toLocaleString(); | 906 this._monthLabel.textContent = month.toLocaleString(); |
| 898 maxWidth = Math.max(maxWidth, this._month.offsetWidth); | 907 maxWidth = Math.max(maxWidth, this._month.offsetWidth); |
| 899 month = month.previous(); | 908 month = month.previous(); |
| 900 } | 909 } |
| 901 if (getLanguage() == "ja" && ImperialEraLimit < this.picker.maximumMonth.yea
r) { | 910 if (getLanguage() == "ja" && ImperialEraLimit < this.picker.maximumMonth.yea
r) { |
| 902 for (var m = 0; m < 12; ++m) { | 911 for (var m = 0; m < 12; ++m) { |
| 903 this._month.textContent = new Month(ImperialEraLimit, m).toLocaleStr
ing(); | 912 this._monthLabel.textContent = new Month(ImperialEraLimit, m).toLoca
leString(); |
| 904 maxWidth = Math.max(maxWidth, this._month.offsetWidth); | 913 maxWidth = Math.max(maxWidth, this._month.offsetWidth); |
| 905 } | 914 } |
| 906 } | 915 } |
| 907 this._month.style.minWidth = maxWidth + 'px'; | 916 this._month.style.minWidth = maxWidth + 'px'; |
| 908 | 917 |
| 909 this.picker.firstFocusableControl = this._left2; // FIXME: Should it be this
.month? | 918 this.picker.firstFocusableControl = this._left2; // FIXME: Should it be this
.month? |
| 910 }; | 919 }; |
| 911 | 920 |
| 912 YearMonthController.addTenYearsButtons = false; | 921 YearMonthController.addTenYearsButtons = false; |
| 913 | 922 |
| 914 /** | 923 /** |
| 915 * @param {!Element} parent | 924 * @param {!Element} parent |
| 916 */ | 925 */ |
| 917 YearMonthController.prototype._attachLeftButtonsTo = function(parent) { | 926 YearMonthController.prototype._attachLeftButtonsTo = function(parent) { |
| 918 var container = createElement("div", ClassNames.YearMonthButtonLeft); | 927 var container = createElement("div", ClassNames.YearMonthButtonLeft); |
| 919 parent.appendChild(container); | 928 parent.appendChild(container); |
| 920 | 929 |
| 921 if (YearMonthController.addTenYearsButtons) { | 930 if (YearMonthController.addTenYearsButtons) { |
| 922 this._left3 = createElement("input", ClassNames.YearMonthButton); | 931 this._left3 = createElement("button", ClassNames.YearMonthButton); |
| 923 this._left3.type = "button"; | 932 this._left3.textContent = "<<<"; |
| 924 this._left3.value = "<<<"; | |
| 925 this._left3.addEventListener("click", this._handleButtonClick.bind(this)
, false); | 933 this._left3.addEventListener("click", this._handleButtonClick.bind(this)
, false); |
| 926 container.appendChild(this._left3); | 934 container.appendChild(this._left3); |
| 927 } | 935 } |
| 928 | 936 |
| 929 this._left2 = createElement("input", ClassNames.YearMonthButton); | 937 this._left2 = createElement("button", ClassNames.YearMonthButton); |
| 930 this._left2.type = "button"; | 938 this._left2.innerHTML = "<svg width='9' height='7'><polygon points='0,3.5 4,
7 4,0' style='fill:#6e6e6e;' /><polygon points='5,3.5 9,7 9,0' style='fill:#6e6e
6e;' /></svg>"; |
| 931 this._left2.value = "<<"; | |
| 932 this._left2.addEventListener("click", this._handleButtonClick.bind(this), fa
lse); | 939 this._left2.addEventListener("click", this._handleButtonClick.bind(this), fa
lse); |
| 933 container.appendChild(this._left2); | 940 container.appendChild(this._left2); |
| 934 | 941 |
| 935 this._left1 = createElement("input", ClassNames.YearMonthButton); | 942 this._left1 = createElement("button", ClassNames.YearMonthButton); |
| 936 this._left1.type = "button"; | 943 this._left1.innerHTML = "<svg width='4' height='7'><polygon points='0,3.5 4,
7 4,0' style='fill:#6e6e6e;' /></svg>"; |
| 937 this._left1.value = "<"; | |
| 938 this._left1.addEventListener("click", this._handleButtonClick.bind(this), fa
lse); | 944 this._left1.addEventListener("click", this._handleButtonClick.bind(this), fa
lse); |
| 939 container.appendChild(this._left1); | 945 container.appendChild(this._left1); |
| 940 }; | 946 }; |
| 941 | 947 |
| 942 /** | 948 /** |
| 943 * @param {!Element} parent | 949 * @param {!Element} parent |
| 944 */ | 950 */ |
| 945 YearMonthController.prototype._attachRightButtonsTo = function(parent) { | 951 YearMonthController.prototype._attachRightButtonsTo = function(parent) { |
| 946 var container = createElement("div", ClassNames.YearMonthButtonRight); | 952 var container = createElement("div", ClassNames.YearMonthButtonRight); |
| 947 parent.appendChild(container); | 953 parent.appendChild(container); |
| 948 this._right1 = createElement("input", ClassNames.YearMonthButton); | 954 this._right1 = createElement("button", ClassNames.YearMonthButton); |
| 949 this._right1.type = "button"; | 955 this._right1.innerHTML = "<svg width='4' height='7'><polygon points='0,7 0,0
, 4,3.5' style='fill:#6e6e6e;' /></svg>"; |
| 950 this._right1.value = ">"; | |
| 951 this._right1.addEventListener("click", this._handleButtonClick.bind(this), f
alse); | 956 this._right1.addEventListener("click", this._handleButtonClick.bind(this), f
alse); |
| 952 container.appendChild(this._right1); | 957 container.appendChild(this._right1); |
| 953 | 958 |
| 954 this._right2 = createElement("input", ClassNames.YearMonthButton); | 959 this._right2 = createElement("button", ClassNames.YearMonthButton); |
| 955 this._right2.type = "button"; | 960 this._right2.innerHTML = "<svg width='9' height='7'><polygon points='4,3.5 0
,7 0,0' style='fill:#6e6e6e;' /><polygon points='9,3.5 5,7 5,0' style='fill:#6e6
e6e;' /></svg>"; |
| 956 this._right2.value = ">>"; | |
| 957 this._right2.addEventListener("click", this._handleButtonClick.bind(this), f
alse); | 961 this._right2.addEventListener("click", this._handleButtonClick.bind(this), f
alse); |
| 958 container.appendChild(this._right2); | 962 container.appendChild(this._right2); |
| 959 | 963 |
| 960 if (YearMonthController.addTenYearsButtons) { | 964 if (YearMonthController.addTenYearsButtons) { |
| 961 this._right3 = createElement("input", ClassNames.YearMonthButton); | 965 this._right3 = createElement("button", ClassNames.YearMonthButton); |
| 962 this._right3.type = "button"; | 966 this._right3.textContent = ">>>"; |
| 963 this._right3.value = ">>>"; | |
| 964 this._right3.addEventListener("click", this._handleButtonClick.bind(this
), false); | 967 this._right3.addEventListener("click", this._handleButtonClick.bind(this
), false); |
| 965 container.appendChild(this._right3); | 968 container.appendChild(this._right3); |
| 966 } | 969 } |
| 967 }; | 970 }; |
| 968 | 971 |
| 969 /** | 972 /** |
| 970 * @param {!Month} month | 973 * @param {!Month} month |
| 971 */ | 974 */ |
| 972 YearMonthController.prototype.setMonth = function(month) { | 975 YearMonthController.prototype.setMonth = function(month) { |
| 973 var monthValue = month.valueOf(); | 976 var monthValue = month.valueOf(); |
| 974 if (this._left3) | 977 if (this._left3) |
| 975 this._left3.disabled = !this.picker.shouldShowMonth(new Month(monthValue
- 13)); | 978 this._left3.disabled = !this.picker.shouldShowMonth(new Month(monthValue
- 13)); |
| 976 this._left2.disabled = !this.picker.shouldShowMonth(new Month(monthValue - 2
)); | 979 this._left2.disabled = !this.picker.shouldShowMonth(new Month(monthValue - 2
)); |
| 977 this._left1.disabled = !this.picker.shouldShowMonth(new Month(monthValue - 1
)); | 980 this._left1.disabled = !this.picker.shouldShowMonth(new Month(monthValue - 1
)); |
| 978 this._right1.disabled = !this.picker.shouldShowMonth(new Month(monthValue +
1)); | 981 this._right1.disabled = !this.picker.shouldShowMonth(new Month(monthValue +
1)); |
| 979 this._right2.disabled = !this.picker.shouldShowMonth(new Month(monthValue +
2)); | 982 this._right2.disabled = !this.picker.shouldShowMonth(new Month(monthValue +
2)); |
| 980 if (this._right3) | 983 if (this._right3) |
| 981 this._left3.disabled = !this.picker.shouldShowMonth(new Month(monthValue
+ 13)); | 984 this._left3.disabled = !this.picker.shouldShowMonth(new Month(monthValue
+ 13)); |
| 982 this._month.innerText = month.toLocaleString(); | 985 this._monthLabel.innerText = month.toLocaleString(); |
| 983 while (this._monthPopupContents.hasChildNodes()) | 986 while (this._monthPopupContents.hasChildNodes()) |
| 984 this._monthPopupContents.removeChild(this._monthPopupContents.firstChild
); | 987 this._monthPopupContents.removeChild(this._monthPopupContents.firstChild
); |
| 985 | 988 |
| 986 for (var m = monthValue - 6; m <= monthValue + 6; m++) { | 989 for (var m = monthValue - 6; m <= monthValue + 6; m++) { |
| 987 var month = new Month(m); | 990 var month = new Month(m); |
| 988 if (!this.picker.shouldShowMonth(month)) | 991 if (!this.picker.shouldShowMonth(month)) |
| 989 continue; | 992 continue; |
| 990 var option = createElement("div", ClassNames.MonthSelectorPopupEntry, mo
nth.toLocaleString()); | 993 var option = createElement("div", ClassNames.MonthSelectorPopupEntry, mo
nth.toLocaleString()); |
| 991 option.dataset.value = month.toString(); | 994 option.dataset.value = month.toString(); |
| 992 this._monthPopupContents.appendChild(option); | 995 this._monthPopupContents.appendChild(option); |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1142 /** | 1145 /** |
| 1143 * @const | 1146 * @const |
| 1144 * @type {number} | 1147 * @type {number} |
| 1145 */ | 1148 */ |
| 1146 YearMonthController.NextTenYears = 120; | 1149 YearMonthController.NextTenYears = 120; |
| 1147 | 1150 |
| 1148 /** | 1151 /** |
| 1149 * @param {Event} event | 1152 * @param {Event} event |
| 1150 */ | 1153 */ |
| 1151 YearMonthController.prototype._handleButtonClick = function(event) { | 1154 YearMonthController.prototype._handleButtonClick = function(event) { |
| 1152 if (event.target == this._left3) | 1155 var button = enclosingNodeOrSelfWithClass(event.target, ClassNames.YearMonth
Button); |
| 1156 if (button == this._left3) |
| 1153 this.moveRelatively(YearMonthController.PreviousTenYears); | 1157 this.moveRelatively(YearMonthController.PreviousTenYears); |
| 1154 else if (event.target == this._left2) { | 1158 else if (button == this._left2) { |
| 1155 this.picker.recordAction(CalendarPicker.Action.ClickedBackwardYearButton
); | 1159 this.picker.recordAction(CalendarPicker.Action.ClickedBackwardYearButton
); |
| 1156 this.moveRelatively(YearMonthController.PreviousYear); | 1160 this.moveRelatively(YearMonthController.PreviousYear); |
| 1157 } else if (event.target == this._left1) { | 1161 } else if (button == this._left1) { |
| 1158 this.picker.recordAction(CalendarPicker.Action.ClickedBackwardMonthButto
n); | 1162 this.picker.recordAction(CalendarPicker.Action.ClickedBackwardMonthButto
n); |
| 1159 this.moveRelatively(YearMonthController.PreviousMonth); | 1163 this.moveRelatively(YearMonthController.PreviousMonth); |
| 1160 } else if (event.target == this._right1) { | 1164 } else if (button == this._right1) { |
| 1161 this.picker.recordAction(CalendarPicker.Action.ClickedForwardMonthButton
); | 1165 this.picker.recordAction(CalendarPicker.Action.ClickedForwardMonthButton
); |
| 1162 this.moveRelatively(YearMonthController.NextMonth) | 1166 this.moveRelatively(YearMonthController.NextMonth) |
| 1163 } else if (event.target == this._right2) { | 1167 } else if (button == this._right2) { |
| 1164 this.picker.recordAction(CalendarPicker.Action.ClickedForwardYearButton)
; | 1168 this.picker.recordAction(CalendarPicker.Action.ClickedForwardYearButton)
; |
| 1165 this.moveRelatively(YearMonthController.NextYear); | 1169 this.moveRelatively(YearMonthController.NextYear); |
| 1166 } else if (event.target == this._right3) | 1170 } else if (button == this._right3) |
| 1167 this.moveRelatively(YearMonthController.NextTenYears); | 1171 this.moveRelatively(YearMonthController.NextTenYears); |
| 1168 else | 1172 else |
| 1169 return; | 1173 return; |
| 1170 }; | 1174 }; |
| 1171 | 1175 |
| 1172 /** | 1176 /** |
| 1173 * @param {!number} amount | 1177 * @param {!number} amount |
| 1174 */ | 1178 */ |
| 1175 YearMonthController.prototype.moveRelatively = function(amount) { | 1179 YearMonthController.prototype.moveRelatively = function(amount) { |
| 1176 var current = this.picker.currentMonth().valueOf(); | 1180 var current = this.picker.currentMonth().valueOf(); |
| (...skipping 673 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1850 this._hadKeyEvent = true; | 1854 this._hadKeyEvent = true; |
| 1851 this._element.classList.remove(ClassNames.NoFocusRing); | 1855 this._element.classList.remove(ClassNames.NoFocusRing); |
| 1852 } | 1856 } |
| 1853 | 1857 |
| 1854 if (window.dialogArguments) { | 1858 if (window.dialogArguments) { |
| 1855 initialize(dialogArguments); | 1859 initialize(dialogArguments); |
| 1856 } else { | 1860 } else { |
| 1857 window.addEventListener("message", handleMessage, false); | 1861 window.addEventListener("message", handleMessage, false); |
| 1858 window.setTimeout(handleArgumentsTimeout, 1000); | 1862 window.setTimeout(handleArgumentsTimeout, 1000); |
| 1859 } | 1863 } |
| OLD | NEW |