summaryrefslogtreecommitdiffstats
path: root/comm/calendar/base/content/calendar-day-label.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/calendar/base/content/calendar-day-label.js')
-rw-r--r--comm/calendar/base/content/calendar-day-label.js128
1 files changed, 128 insertions, 0 deletions
diff --git a/comm/calendar/base/content/calendar-day-label.js b/comm/calendar/base/content/calendar-day-label.js
new file mode 100644
index 0000000000..e0d205bc5d
--- /dev/null
+++ b/comm/calendar/base/content/calendar-day-label.js
@@ -0,0 +1,128 @@
+/* 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/. */
+
+/* global MozXULElement, getSummarizedStyleValues */
+
+// Wrap in a block to prevent leaking to window scope.
+{
+ const { cal } = ChromeUtils.import("resource:///modules/calendar/calUtils.jsm");
+
+ class MozCalendarDayLabel extends MozXULElement {
+ static get observedAttributes() {
+ return ["selected", "relation"];
+ }
+
+ connectedCallback() {
+ if (this.delayConnectedCallback()) {
+ return;
+ }
+ this.textContent = "";
+ this.setAttribute("flex", "1");
+ this.setAttribute("pack", "center");
+
+ this.longWeekdayName = document.createXULElement("label");
+ this.longWeekdayName.classList.add("calendar-day-label-name");
+
+ this.shortWeekdayName = document.createXULElement("label");
+ this.shortWeekdayName.classList.add("calendar-day-label-name");
+ this.shortWeekdayName.setAttribute("hidden", "true");
+
+ this.appendChild(this.longWeekdayName);
+ this.appendChild(this.shortWeekdayName);
+
+ this.mWeekday = -1;
+
+ this.longWeekdayPixels = 0;
+
+ this.mDate = null;
+
+ this._updateAttributes();
+ }
+
+ attributeChangedCallback() {
+ this._updateAttributes();
+ }
+
+ _updateAttributes() {
+ if (!this.longWeekdayName || !this.shortWeekdayName) {
+ return;
+ }
+
+ if (this.hasAttribute("selected")) {
+ this.longWeekdayName.setAttribute("selected", this.getAttribute("selected"));
+ this.shortWeekdayName.setAttribute("selected", this.getAttribute("selected"));
+ } else {
+ this.longWeekdayName.removeAttribute("selected");
+ this.shortWeekdayName.removeAttribute("selected");
+ }
+
+ if (this.hasAttribute("relation")) {
+ this.longWeekdayName.setAttribute("relation", this.getAttribute("relation"));
+ this.shortWeekdayName.setAttribute("relation", this.getAttribute("relation"));
+ } else {
+ this.longWeekdayName.removeAttribute("relation");
+ this.shortWeekdayName.removeAttribute("relation");
+ }
+ }
+
+ set weekDay(val) {
+ this.mWeekday = val % 7;
+ this.longWeekdayName.value = cal.dtz.formatter.dayName(val);
+ this.shortWeekdayName.value = cal.dtz.formatter.shortDayName(val);
+ }
+
+ get weekDay() {
+ return this.mWeekday;
+ }
+
+ set date(val) {
+ this.mDate = val;
+ let dateFormatter = cal.dtz.formatter;
+ let label = cal.l10n.getCalString("dayHeaderLabel", [
+ dateFormatter.shortDayName(val.weekday),
+ dateFormatter.formatDateWithoutYear(val),
+ ]);
+ this.shortWeekdayName.setAttribute("value", label);
+ label = cal.l10n.getCalString("dayHeaderLabel", [
+ dateFormatter.dayName(val.weekday),
+ dateFormatter.formatDateWithoutYear(val),
+ ]);
+ this.longWeekdayName.setAttribute("value", label);
+ }
+
+ get date() {
+ return this.mDate;
+ }
+
+ set shortWeekNames(val) {
+ // cache before change, in case we are switching to short
+ this.getLongWeekdayPixels();
+ this.longWeekdayName.hidden = val;
+ this.shortWeekdayName.hidden = !val;
+ }
+
+ getLongWeekdayPixels() {
+ // Only do this if the long weekdays are visible and we haven't already cached.
+ let longNameWidth = this.longWeekdayName.getBoundingClientRect().width;
+
+ if (longNameWidth == 0) {
+ // weekdaypixels have not yet been laid out
+ return 0;
+ }
+
+ this.longWeekdayPixels =
+ longNameWidth +
+ getSummarizedStyleValues(this.longWeekdayName, ["margin-left", "margin-right"]);
+ this.longWeekdayPixels += getSummarizedStyleValues(this, [
+ "border-left-width",
+ "padding-left",
+ "padding-right",
+ ]);
+
+ return this.longWeekdayPixels;
+ }
+ }
+
+ customElements.define("calendar-day-label", MozCalendarDayLabel);
+}