Skip to content

Commit

Permalink
add date localization parsing #103
Browse files Browse the repository at this point in the history
  • Loading branch information
jeevatkm committed May 3, 2024
1 parent f60e5e1 commit 490c4ef
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 31 deletions.
72 changes: 59 additions & 13 deletions modules/compose.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -139,12 +139,12 @@ class ReplyWithHeader {
div.classList.add(targetNodeClassName);

var headers = {
'from': this._extractHeader('from', true, true),
'to': this._extractHeader('to', true, true),
'cc': this._extractHeader('cc', true, true),
'date': this._extractHeader('date', false, true),
'reply-to': this._extractHeader('reply-to', true, true),
'subject': this._extractHeader('subject', false, true),
'from': await this._extractHeader('from', true, true),
'to': await this._extractHeader('to', true, true),
'cc': await this._extractHeader('cc', true, true),
'date': await this._extractHeader('date', false, true),
'reply-to': await this._extractHeader('reply-to', true, true),
'subject': await this._extractHeader('subject', false, true),
}
console.log(headers);

Expand Down Expand Up @@ -178,12 +178,12 @@ class ReplyWithHeader {

async _processPlainText() {
var headers = {
'from': this._extractHeader('from', true, false),
'to': this._extractHeader('to', true, false),
'cc': this._extractHeader('cc', true, false),
'date': this._extractHeader('date', false, false),
'reply-to': this._extractHeader('reply-to', true, false),
'subject': this._extractHeader('subject', false, false),
'from': await this._extractHeader('from', true, false),
'to': await this._extractHeader('to', true, false),
'cc': await this._extractHeader('cc', true, false),
'date': await this._extractHeader('date', false, false),
'reply-to': await this._extractHeader('reply-to', true, false),
'subject': await this._extractHeader('subject', false, false),
}
console.log(headers);

Expand Down Expand Up @@ -302,12 +302,58 @@ class ReplyWithHeader {
return rwhHeaders;
}

_extractHeader(key, clean, escape) {
async _parseDate(d) {
let fallback = (' ' + d).slice(1);
let locale = await rwhSettings.getHeaderLocale();
let dateFormat = await rwhSettings.getHeaderDateFormat();
let timeFormat = await rwhSettings.getHeaderTimeFormat();
let includeTimezone = await rwhSettings.isHeaderTimeZone();

console.debug('Date format: ' + (dateFormat == 1 ? 'UTC' : 'Locale (' + locale + ')')
+ ', Time format: ' + (timeFormat == 1 ? '24-hour' : '12-hour')
+ (includeTimezone ? ', Include short timezone info' : ''))

let epoch = null;
try {
epoch = Date.parse(d);
} catch (e) {
console.error(error);
return fallback;
}

let pd = new Date(epoch);
let options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric', hour: 'numeric', minute: 'numeric' };

if (dateFormat == 1) { // Locale date format
options.timeZone = 'UTC';
options.timeZoneName = 'short';
}

if (timeFormat == 1) {
options.hour12 = false;
} else {
options.hour12 = true;
}

if (includeTimezone) {
options.timeZoneName = 'short';
}

let ds = new Intl.DateTimeFormat(locale, options).format(pd);
ds = ds.replace(/GMT/, 'UTC');
return ds;
}

async _extractHeader(key, clean, escape) {
let values = this.#fullMessage.headers[key];
if (!values) {
return null;
}

if (key === 'date') {
return this._escapeHtml(await this._parseDate(values[0]));
}

let pv = [];
for (let v of values) {
pv.push((clean ? this._cleanEmail(v) : v));
Expand Down
32 changes: 16 additions & 16 deletions modules/settings.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,9 @@ export const headerLabelSeqStyleSettings = {
}

let keyHeaderLabelSeqStyle = 'header.label.seq.style';
// let keyHeaderDateFormat = 'header.date.format';
// let keyHeaderTimeFormat = 'header.time.format';
let keyHeaderDateFormat = 'header.date.format';
let keyHeaderTimeFormat = 'header.time.format';
let keyHeaderTimeZone = 'header.date.timezone';
let keyHeaderLocale = 'header.locale';
let keyHeaderPlainPrefixText = 'header.plain.prefix.text';
let keyHeaderHtmlPrefixLine = 'header.html.prefix.line';
Expand All @@ -44,20 +45,15 @@ let rwhDefaultSettings = {
// Date & Time
// 0 - Locale date format
// 1 - International date format - UTC
// [keyHeaderDateFormat]: 0,

// Date style
// Full - ddd, MMM d, yyyy
// ISO - yyyy-MM-dd
// "header.date.style": 0,
[keyHeaderDateFormat]: 0,

// Time style
// 0 - 12 hours AM/PM
// 1 - 24 hours
// [keyHeaderTimeFormat]: 0,
[keyHeaderTimeFormat]: 0,

// Date header include timezone info
// "header.date.timezone": false,
[keyHeaderTimeZone]: true,

[keyCleanBlockQuoteColor]: true,
[keyCleanQuoteCharGreaterThan]: true,
Expand Down Expand Up @@ -97,13 +93,17 @@ export async function getHeaderLabelSeqStyle() {
return await getInt(keyHeaderLabelSeqStyle);
}

// export async function getHeaderDateFormat() {
// return await getInt(keyHeaderDateFormat);
// }
export async function getHeaderDateFormat() {
return await getInt(keyHeaderDateFormat);
}

// export async function getHeaderTimeFormat() {
// return await getInt(keyHeaderTimeFormat);
// }
export async function getHeaderTimeFormat() {
return await getInt(keyHeaderTimeFormat);
}

export async function isHeaderTimeZone() {
return await get(keyHeaderTimeZone, rwhDefaultSettings[keyHeaderTimeZone]);
}

export async function getHeaderLocale() {
return await get(keyHeaderLocale, rwhDefaultSettings[keyHeaderLocale]);
Expand Down
4 changes: 2 additions & 2 deletions options/options.html
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
Date, Subject)</label>
</div>
</fieldset>
<!-- <fieldset>
<fieldset>
<legend id="lblHdrDate">Header date format</legend>
<div class="hbox" data-type="radiogroup" data-preference="header.date.format">
<label><input type="radio" name="quotDateAttributionStyle" value="0" />Locale timezone</label>
Expand All @@ -64,7 +64,7 @@
Include short timezone info
</label>
</div>
</fieldset> -->
</fieldset>
<fieldset>
<legend id="lblHeaderFormat">Subject prefix</legend>
<div class="hbox">
Expand Down

0 comments on commit 490c4ef

Please sign in to comment.