- commit
- 29613db30294494e44d30d9158482dab0c4b2455
- parent
- e66fa0f216944054559eb73271b815cfdfbf4cf8
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2023-09-04 18:04
convert to js modules
Diffstat
| M | .gitignore | 2 | +- |
| M | Makefile | 10 | ++++------ |
| R | src/js/actions.js -> content/js/actions.js | 42 | +++++++++++++++++++++--------------------- |
| R | src/js/body.js -> content/js/body.js | 4 | ++-- |
| R | src/js/main.js -> content/js/main.js | 4 | ++-- |
| R | src/js/message.js -> content/js/message.js | 10 | +++++----- |
| R | src/js/util.js -> content/js/util.js | 27 | ++++++++------------------- |
| M | content/main.html | 2 | +- |
8 files changed, 44 insertions, 57 deletions
diff --git a/.gitignore b/.gitignore
@@ -1,3 +1,3 @@ 1 1 /_* 2 2 node_modules3 -1 content/main.js-1 3 content/js/mustache.mjs
diff --git a/Makefile b/Makefile
@@ -1,10 +1,8 @@1 -1 all: content/main.js content/material-icons.svg-1 1 all: content/js/mustache.mjs content/material-icons.svg 2 23 -1 content/main.js: src/js/main.js src/js/*.js node_modules4 -1 npx browserify $< -o $@-1 3 content/js/mustache.mjs: -1 4 npm install mustache -1 5 cp node_modules/mustache/mustache.mjs $@ 5 6 6 7 content/material-icons.svg: scripts/get-material-icons.sh 7 8 $< > $@8 -19 -1 node_modules:10 -1 npm install mustache
diff --git a/src/js/actions.js b/content/js/actions.js
@@ -1,14 +1,14 @@ 1 1 /* global browser */ 2 23 -1 var viewSource = function(msg) {-1 3 export var viewSource = function(msg) { 4 4 browser.xi.viewSource(msg.id); 5 5 }; 6 67 -1 var markAsRead = function(msg, read) {-1 7 export var markAsRead = function(msg, read) { 8 8 browser.messages.update(msg.id, {read: read}); 9 9 }; 10 1011 -1 var toggleFlagged = function(msg, star) {-1 11 export var toggleFlagged = function(msg, star) { 12 12 msg.flagged = !msg.flagged; 13 13 browser.messages.update(msg.id, {flagged: msg.flagged}).then(() => { 14 14 star.classList.toggle('is-active', msg.flagged); @@ -26,22 +26,22 @@ var reply = function(msg, replyType) { 26 26 }); 27 27 }; 28 2829 -1 module.exports = {30 -1 replyToSender: msg => reply(msg, 'replyToSender'),31 -1 replyAll: msg => reply(msg, 'replyToAll'),32 -1 replyToList: msg => reply(msg, 'replyToList'),33 -1 editAsNew: msg => {34 -1 getIdentity(msg).then(identity => {35 -1 browser.compose.beginNew(msg.id, {'identityId': identity.id});36 -1 });37 -1 },38 -1 forward: msg => {39 -1 getIdentity(msg).then(identity => {40 -1 browser.compose.beginForward(msg.id, null, {'identityId': identity.id});41 -1 });42 -1 },43 -1 viewClassic: msg => browser.messageDisplay.open({messageId: msg.id}),44 -1 viewSource: viewSource,45 -1 markAsRead: markAsRead,46 -1 toggleFlagged: toggleFlagged,-1 29 export var replyToSender = msg => reply(msg, 'replyToSender'); -1 30 export var replyAll = msg => reply(msg, 'replyToAll'); -1 31 export var replyToList = msg => reply(msg, 'replyToList'); -1 32 -1 33 export var editAsNew = function(msg) { -1 34 getIdentity(msg).then(identity => { -1 35 browser.compose.beginNew(msg.id, {'identityId': identity.id}); -1 36 }); -1 37 }; -1 38 -1 39 export var forward = function(msg) { -1 40 getIdentity(msg).then(identity => { -1 41 browser.compose.beginForward(msg.id, null, {'identityId': identity.id}); -1 42 }); -1 43 }; -1 44 -1 45 export var viewClassic = function(msg) { -1 46 return browser.messageDisplay.open({messageId: msg.id}); 47 47 };
diff --git a/src/js/body.js b/content/js/body.js
@@ -1,6 +1,6 @@ 1 1 /* global browser */ 2 23 -1 var util = require('./util.js');-1 3 import * as util from './util.js'; 4 4 5 5 var RE_LINK = /(https?:\/\/[^\s<>]*[^\s\])}<>.,:;?!"'])/g; 6 6 @@ -74,7 +74,7 @@ var renderBody = function(parent, text) { 74 74 } 75 75 }; 76 7677 -1 module.exports = function(msg) {-1 77 export default function(msg) { 78 78 var wrapper = document.createElement('div'); 79 79 var pre = document.createElement('pre'); 80 80 pre.className = 'message__body';
diff --git a/src/js/main.js b/content/js/main.js
@@ -1,7 +1,7 @@ 1 1 /* global browser */ 2 23 -1 var createMessageElement = require('./message');4 -1 var util = require('./util.js');-1 3 import createMessageElement from './message.js'; -1 4 import * as util from './util.js'; 5 5 6 6 var initialIDs = (util.getParams().ids || '').split(','); 7 7
diff --git a/src/js/message.js b/content/js/message.js
@@ -1,8 +1,8 @@1 -1 var Mustache = require('mustache');-1 1 import Mustache from './mustache.mjs'; 2 23 -1 var actions = require('./actions.js');4 -1 var createBody = require('./body.js');5 -1 var util = require('./util.js');-1 3 import createBody from './body.js'; -1 4 import * as actions from './actions.js'; -1 5 import * as util from './util.js'; 6 6 7 7 var autoMarkAsRead = function(e, msg) { 8 8 var topWasInView = false; @@ -67,7 +67,7 @@ var stringFilter = function() { 67 67 }; 68 68 }; 69 6970 -1 module.exports = function(msg, expanded) {-1 70 export default function(msg, expanded) { 71 71 var tpl = document.getElementById('message-template').innerHTML; 72 72 var html = Mustache.render(tpl, { 73 73 icon: iconFilter,
diff --git a/src/js/util.js b/content/js/util.js
@@ -7,7 +7,7 @@ var normalizeName = function(s) {
7 7 return s.split(', ').reverse().join(' ');
8 8 }
9 9
10 -1 var getParams = function() {
-1 10 export var getParams = function() {
11 11 const params = {};
12 12 for (let part of location.search.substr(1).split('&')) {
13 13 let [key, raw] = part.split('=');
@@ -16,7 +16,7 @@ var getParams = function() {
16 16 return params;
17 17 };
18 18
19 -1 var getBody = function(msgPart) {
-1 19 export var getBody = function(msgPart) {
20 20 if (msgPart.body && msgPart.contentType.startsWith('text/plain')) {
21 21 return [msgPart.body, msgPart.isEncrypted];
22 22 } else if (msgPart.parts) {
@@ -38,7 +38,7 @@ var getBody = function(msgPart) {
38 38 }
39 39 };
40 40
41 -1 var html2element = function(html) {
-1 41 export var html2element = function(html) {
42 42 // thunderbird 60 will remove some elements when directly assigning to
43 43 // innerHTML
44 44 var parser = new DOMParser();
@@ -46,7 +46,7 @@ var html2element = function(html) {
46 46 return doc.body.children[0];
47 47 };
48 48
49 -1 var createIcon = function(key) {
-1 49 export var createIcon = function(key) {
50 50 var html;
51 51 if (key.substring(0, 2) === 'x-') {
52 52 html = '<svg class="icon" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><use xlink:href="/content/material-icons.svg#' + key.substring(2) + '"></use></svg>';
@@ -57,7 +57,7 @@ var createIcon = function(key) {
57 57 return html2element(html);
58 58 };
59 59
60 -1 var createDate = function(date) {
-1 60 export var createDate = function(date) {
61 61 var now = new Date();
62 62 var e = document.createElement('time');
63 63 e.className = 'date';
@@ -70,7 +70,7 @@ var createDate = function(date) {
70 70 return e;
71 71 };
72 72
73 -1 var createAlert = function(text, icon, level) {
-1 73 export var createAlert = function(text, icon, level) {
74 74 var e = document.createElement('div');
75 75 e.className = 'alert alert--' + level;
76 76 e.textContent = text;
@@ -78,7 +78,7 @@ var createAlert = function(text, icon, level) {
78 78 return e;
79 79 };
80 80
81 -1 var pseudoRandomColor = function(s) {
-1 81 export var pseudoRandomColor = function(s) {
82 82 let hash = 0;
83 83 for (let i = 0; i < s.length; i++) {
84 84 const chr = s.charCodeAt(i);
@@ -97,7 +97,7 @@ var pseudoRandomColor = function(s) {
97 97 return 'hsl(' + hue + ', 70%, ' + Math.floor(lightness) + '%)';
98 98 };
99 99
100 -1 var parseContacts = function(raw) {
-1 100 export var parseContacts = function(raw) {
101 101 var contacts = [];
102 102 for (var r of raw) {
103 103 var match = /(.*) <(.*)>/.exec(r);
@@ -115,14 +115,3 @@ var parseContacts = function(raw) {
115 115 }
116 116 return contacts;
117 117 };
118 -1
119 -1 module.exports = {
120 -1 getParams: getParams,
121 -1 getBody: getBody,
122 -1 html2element: html2element,
123 -1 createIcon: createIcon,
124 -1 createDate: createDate,
125 -1 createAlert: createAlert,
126 -1 pseudoRandomColor: pseudoRandomColor,
127 -1 parseContacts: parseContacts,
128 -1 };
diff --git a/content/main.html b/content/main.html
@@ -75,6 +75,6 @@ 75 75 <h1 class="conversation__subject">Loading…</h1> 76 76 </header> 77 77 <main class="conversation__main"></main>78 -1 <script src="main.js"></script>-1 78 <script src="js/main.js" type="module"></script> 79 79 </body> 80 80 </html>