diff --git a/.eslintrc.js b/.eslintrc.js index eb23d3872c..7c640ab03f 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -3,16 +3,31 @@ module.exports = { "browser": true, "es6": true }, - "extends": "eslint:recommended", + "extends": [ + "eslint:recommended", + // "plugin:@typescript-eslint/recommended", + // "plugin:@typescript-eslint/recommended-requiring-type-checking" + ], + "parser": "@typescript-eslint/parser", + "plugins": ["@typescript-eslint"], "parserOptions": { "ecmaVersion": 2020, - "sourceType": "module" + "sourceType": "module", + "project": "./tsconfig.json" }, "rules": { + "semi": "error", + "quotes": "error", "no-console": "off", "no-empty": "off", "no-prototype-builtins": "off", - "no-unused-vars": "warn" + "no-unused-vars": "warn", + "quote-props": ["warn", "consistent"], + "no-multi-spaces": ["warn", { "ignoreEOLComments": true }], + "@typescript-eslint/no-unused-vars": "warn" + // "@typescript-eslint/no-misused-promises": "error", + // "@typescript-eslint/no-floating-promises": 2, + // "@typescript-eslint/explicit-function-return-type": "error" }, "globals": { "DEFINE_VERSION": "readonly", diff --git a/.ts-eslintrc.js b/.ts-eslintrc.js deleted file mode 100644 index ae7233ed83..0000000000 --- a/.ts-eslintrc.js +++ /dev/null @@ -1,29 +0,0 @@ -module.exports = { - root: true, - env: { - "browser": true, - "es6": true - }, - extends: [ - // "plugin:@typescript-eslint/recommended", - // "plugin:@typescript-eslint/recommended-requiring-type-checking", - ], - parser: '@typescript-eslint/parser', - parserOptions: { - "ecmaVersion": 2020, - "sourceType": "module", - "project": "./tsconfig.json" - }, - plugins: [ - '@typescript-eslint', - ], - rules: { - "@typescript-eslint/no-floating-promises": 2, - "@typescript-eslint/no-misused-promises": 2, - "no-unused-vars": "off", - "@typescript-eslint/no-unused-vars": ["warn"], - "no-undef": "off", - "semi": ["error", "always"], - "@typescript-eslint/explicit-function-return-type": ["error"] - } -}; diff --git a/src/domain/SessionLoadViewModel.js b/src/domain/SessionLoadViewModel.js index 6a63145f4a..d9c8af22bc 100644 --- a/src/domain/SessionLoadViewModel.js +++ b/src/domain/SessionLoadViewModel.js @@ -123,21 +123,21 @@ export class SessionLoadViewModel extends ViewModel { if (client) { switch (client.loadStatus.get()) { case LoadStatus.QueryAccount: - return `Querying account encryption setup…`; + return "Querying account encryption setup…"; case LoadStatus.AccountSetup: return ""; // we'll show a header ing AccountSetupView case LoadStatus.SessionSetup: - return `Setting up your encryption keys…`; + return "Setting up your encryption keys…"; case LoadStatus.Loading: - return `Loading your conversations…`; + return "Loading your conversations…"; case LoadStatus.FirstSync: - return `Getting your conversations from the server…`; + return "Getting your conversations from the server…"; default: return this._client.loadStatus.get(); } } - return `Preparing…`; + return "Preparing…"; } _getError() { diff --git a/src/domain/SessionPickerViewModel.js b/src/domain/SessionPickerViewModel.js index 97b29f393e..d33e788252 100644 --- a/src/domain/SessionPickerViewModel.js +++ b/src/domain/SessionPickerViewModel.js @@ -42,7 +42,7 @@ class SessionItemViewModel extends ViewModel { } get label() { - const {userId, comment} = this._sessionInfo; + const {userId, comment} = this._sessionInfo; if (comment) { return `${userId} (${comment})`; } else { diff --git a/src/domain/session/CreateRoomViewModel.js b/src/domain/session/CreateRoomViewModel.js index 12b4fbd50c..de079d3559 100644 --- a/src/domain/session/CreateRoomViewModel.js +++ b/src/domain/session/CreateRoomViewModel.js @@ -86,7 +86,7 @@ export class CreateRoomViewModel extends ViewModel { info: this._avatarInfo, name: this._avatarFileName, blob: this._avatarScaledBlob - } + }; } const roomBeingCreated = this._session.createRoom({ type: this.isPublic ? RoomType.Public : RoomType.Private, diff --git a/src/domain/session/leftpanel/InviteTileViewModel.js b/src/domain/session/leftpanel/InviteTileViewModel.js index 26c8ec76d7..e890cd2ff7 100644 --- a/src/domain/session/leftpanel/InviteTileViewModel.js +++ b/src/domain/session/leftpanel/InviteTileViewModel.js @@ -53,12 +53,12 @@ export class InviteTileViewModel extends BaseTileViewModel { export function tests() { return { "test compare with timestamp": assert => { - const urlRouter = {openRoomActionUrl() { return "";}} + const urlRouter = {openRoomActionUrl() { return "";}}; const vm1 = new InviteTileViewModel({invite: {timestamp: 500, id: "1"}, urlRouter}); const vm2 = new InviteTileViewModel({invite: {timestamp: 250, id: "2"}, urlRouter}); assert(vm1.compare(vm2) < 0); assert(vm2.compare(vm1) > 0); assert.equal(vm1.compare(vm1), 0); }, - } + }; } diff --git a/src/domain/session/leftpanel/RoomBeingCreatedTileViewModel.js b/src/domain/session/leftpanel/RoomBeingCreatedTileViewModel.js index b6c8c976ca..f4d7bb72ea 100644 --- a/src/domain/session/leftpanel/RoomBeingCreatedTileViewModel.js +++ b/src/domain/session/leftpanel/RoomBeingCreatedTileViewModel.js @@ -59,12 +59,12 @@ export class RoomBeingCreatedTileViewModel extends BaseTileViewModel { export function tests() { return { "test compare with names": assert => { - const urlRouter = {openRoomActionUrl() { return "";}} + const urlRouter = {openRoomActionUrl() { return "";}}; const vm1 = new RoomBeingCreatedTileViewModel({roomBeingCreated: {name: "A", id: "1"}, urlRouter}); const vm2 = new RoomBeingCreatedTileViewModel({roomBeingCreated: {name: "B", id: "2"}, urlRouter}); assert(vm1.compare(vm2) < 0); assert(vm2.compare(vm1) > 0); assert.equal(vm1.compare(vm1), 0); }, - } + }; } diff --git a/src/domain/session/rightpanel/MemberDetailsViewModel.js b/src/domain/session/rightpanel/MemberDetailsViewModel.js index b3c8278c96..d14c6170be 100644 --- a/src/domain/session/rightpanel/MemberDetailsViewModel.js +++ b/src/domain/session/rightpanel/MemberDetailsViewModel.js @@ -59,7 +59,7 @@ export class MemberDetailsViewModel extends ViewModel { } get avatarColorNumber() { - return getIdentifierColorNumber(this.userId) + return getIdentifierColorNumber(this.userId); } avatarUrl(size) { diff --git a/src/domain/session/rightpanel/MemberTileViewModel.js b/src/domain/session/rightpanel/MemberTileViewModel.js index 9f9a5483fe..1b28e009ab 100644 --- a/src/domain/session/rightpanel/MemberTileViewModel.js +++ b/src/domain/session/rightpanel/MemberTileViewModel.js @@ -21,7 +21,7 @@ export class MemberTileViewModel extends ViewModel { constructor(options) { super(options); this._member = this._options.member; - this._mediaRepository = options.mediaRepository + this._mediaRepository = options.mediaRepository; this._previousName = null; this._nameChanged = true; } @@ -76,7 +76,7 @@ export class MemberTileViewModel extends ViewModel { } get avatarColorNumber() { - return getIdentifierColorNumber(this.userId) + return getIdentifierColorNumber(this.userId); } avatarUrl(size) { diff --git a/src/domain/session/rightpanel/RoomDetailsViewModel.js b/src/domain/session/rightpanel/RoomDetailsViewModel.js index 4e2735b1ef..4b5a9df709 100644 --- a/src/domain/session/rightpanel/RoomDetailsViewModel.js +++ b/src/domain/session/rightpanel/RoomDetailsViewModel.js @@ -62,7 +62,7 @@ export class RoomDetailsViewModel extends ViewModel { } get avatarColorNumber() { - return getIdentifierColorNumber(this._room.avatarColorId) + return getIdentifierColorNumber(this._room.avatarColorId); } avatarUrl(size) { diff --git a/src/domain/session/rightpanel/members/disambiguator.js b/src/domain/session/rightpanel/members/disambiguator.js index e998a432bb..b771475231 100644 --- a/src/domain/session/rightpanel/members/disambiguator.js +++ b/src/domain/session/rightpanel/members/disambiguator.js @@ -52,7 +52,7 @@ export class Disambiguator { value.push(vm); return value; } else if(vm.userId !== value.userId) { - const array = [value, vm] + const array = [value, vm]; this._map.set(name, array); return array; } diff --git a/src/domain/session/room/InviteViewModel.js b/src/domain/session/room/InviteViewModel.js index 7a6c2a6a68..c83724c257 100644 --- a/src/domain/session/room/InviteViewModel.js +++ b/src/domain/session/room/InviteViewModel.js @@ -56,7 +56,7 @@ export class InviteViewModel extends ViewModel { } get avatarColorNumber() { - return getIdentifierColorNumber(this._invite.avatarColorId) + return getIdentifierColorNumber(this._invite.avatarColorId); } avatarUrl(size) { @@ -74,7 +74,7 @@ export class InviteViewModel extends ViewModel { if (this._invite.canonicalAlias) { parts.push(this._invite.canonicalAlias); } - return parts.join(" • ") + return parts.join(" • "); } get roomDescription() { diff --git a/src/domain/session/room/LightboxViewModel.js b/src/domain/session/room/LightboxViewModel.js index a14eef8978..30f2f7d800 100644 --- a/src/domain/session/room/LightboxViewModel.js +++ b/src/domain/session/room/LightboxViewModel.js @@ -79,7 +79,7 @@ export class LightboxViewModel extends ViewModel { } get date() { - return this._date && this._date.toLocaleDateString({}, { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }); + return this._date && this._date.toLocaleDateString({}, { weekday: "long", year: "numeric", month: "long", day: "numeric" }); } get time() { diff --git a/src/domain/session/room/RoomViewModel.js b/src/domain/session/room/RoomViewModel.js index 31608a62e7..743fd9d8ab 100644 --- a/src/domain/session/room/RoomViewModel.js +++ b/src/domain/session/room/RoomViewModel.js @@ -16,8 +16,8 @@ limitations under the License. */ import {TimelineViewModel} from "./timeline/TimelineViewModel.js"; -import {ComposerViewModel} from "./ComposerViewModel.js" -import {CallViewModel} from "./CallViewModel" +import {ComposerViewModel} from "./ComposerViewModel.js"; +import {CallViewModel} from "./CallViewModel"; import {PickMapObservableValue} from "../../../observable/value"; import {avatarInitials, getIdentifierColorNumber, getAvatarHttpUrl} from "../../avatar"; import {ErrorReportViewModel} from "../../ErrorReportViewModel"; @@ -107,7 +107,7 @@ export class RoomViewModel extends ErrorReportViewModel { else { this._composerVM = this.track(new LowerPowerLevelViewModel(this.childOptions())); } - this.emitChange("powerLevelObservable") + this.emitChange("powerLevelObservable"); }; this.track(powerLevelObservable.subscribe(() => { const newCanSendMessage = canSendMessage(); @@ -175,7 +175,7 @@ export class RoomViewModel extends ErrorReportViewModel { } get avatarColorNumber() { - return getIdentifierColorNumber(this._room.avatarColorId) + return getIdentifierColorNumber(this._room.avatarColorId); } avatarUrl(size) { diff --git a/src/domain/session/room/timeline/ReactionsViewModel.js b/src/domain/session/room/timeline/ReactionsViewModel.js index 0355889c7a..496a7af0c2 100644 --- a/src/domain/session/room/timeline/ReactionsViewModel.js +++ b/src/domain/session/room/timeline/ReactionsViewModel.js @@ -88,7 +88,7 @@ class ReactionViewModel { _tryUpdate(annotation) { const oneSetAndOtherNot = !!this._annotation !== !!annotation; const bothSet = this._annotation && annotation; - const areDifferent = bothSet && ( + const areDifferent = bothSet && ( annotation.me !== this._annotation.me || annotation.count !== this._annotation.count || annotation.firstTimestamp !== this._annotation.firstTimestamp @@ -369,5 +369,5 @@ export function tests() { redactionIndex = index; } }, - } + }; } diff --git a/src/domain/session/room/timeline/TilesCollection.js b/src/domain/session/room/timeline/TilesCollection.js index c5bddc2c3b..08bbe06c75 100644 --- a/src/domain/session/room/timeline/TilesCollection.js +++ b/src/domain/session/room/timeline/TilesCollection.js @@ -500,5 +500,5 @@ export function tests() { assert.equal(tilesArray.length, 2); assert.equal(removals, 2); } - } + }; } diff --git a/src/domain/session/room/timeline/deserialize.js b/src/domain/session/room/timeline/deserialize.js index 2e2a30f2b4..4b8a4906ed 100644 --- a/src/domain/session/room/timeline/deserialize.js +++ b/src/domain/session/room/timeline/deserialize.js @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { MessageBody, HeaderBlock, TableBlock, ListBlock, CodeBlock, PillPart, FormatPart, NewLinePart, RulePart, TextPart, LinkPart, ImagePart } from "./MessageBody.js" +import { MessageBody, HeaderBlock, TableBlock, ListBlock, CodeBlock, PillPart, FormatPart, NewLinePart, RulePart, TextPart, LinkPart, ImagePart } from "./MessageBody.js"; import {linkify} from "./linkify/linkify"; /* At the time of writing (Jul 1 2021), Matrix Spec recommends @@ -30,7 +30,7 @@ import {linkify} from "./linkify/linkify"; const basicInline = ["EM", "STRONG", "CODE", "DEL", "SPAN" ]; const basicBlock = ["DIV", "BLOCKQUOTE"]; const safeSchemas = ["https", "http", "ftp", "mailto", "magnet"].map(name => `${name}://`); -const baseUrl = 'https://matrix.to'; +const baseUrl = "https://matrix.to"; const linkPrefix = `${baseUrl}/#/`; class Deserializer { @@ -44,7 +44,7 @@ class Deserializer { return null; } const contents = link.substring(linkPrefix.length); - if (contents[0] === '@') { + if (contents[0] === "@") { return contents; } return null; @@ -99,10 +99,10 @@ class Deserializer { if (!this._ensureElement(codeNode, "CODE")) { return new CodeBlock(language, this.result.getNodeText(node)); } - const cl = result.getAttributeValue(codeNode, "class") || "" + const cl = result.getAttributeValue(codeNode, "class") || ""; for (const clname of cl.split(" ")) { if (clname.startsWith("language-") && !clname.startsWith("language-_")) { - language = clname.substring(9) // "language-".length + language = clname.substring(9); // "language-".length break; } } @@ -231,7 +231,7 @@ class Deserializer { case "H5": case "H6": { const inlines = this.parseInlineNodes(children); - return new HeaderBlock(parseInt(tag[1]), inlines) + return new HeaderBlock(parseInt(tag[1]), inlines); } case "UL": case "OL": @@ -432,7 +432,7 @@ export async function tests() { test(assert, input, output); }, "Text with ordered list starting at 3": assert => { - const input = '
hello
world
'; + const input = "hello
world
"; const output = [ new FormatPart("p", [new TextPart("hello")]), new FormatPart("p", [new TextPart("world")]) @@ -460,14 +460,14 @@ export async function tests() { test(assert, input, output); }, "Block elements ignored inside inline elements": assert => { - const input = 'Hello
Hello
Hello
';
+ const input = "Hello
";
const output = [
new FormatPart("span", [
new FormatPart("code", [new TextPart("Hello")]),
@@ -477,14 +477,14 @@ export async function tests() {
test(assert, input, output);
},
"Unknown and invalid attributes are stripped": assert => {
- const input = 'Hello';
+ const input = "Hello";
const output = [
new FormatPart("em", [new TextPart("Hello")])
];
test(assert, input, output);
},
"Text with code block but no tag": assert => {
- const code = 'main :: IO ()\nmain = putStrLn "Hello"'
+ const code = "main :: IO ()\nmain = putStrLn \"Hello\"";
const input = `${code}
`;
const output = [
new CodeBlock(null, code)
@@ -492,7 +492,7 @@ export async function tests() {
test(assert, input, output);
},
"Text with code block and 'unsupported' tag": assert => {
- const code = 'Hello, world'
+ const code = "Hello, world";
const input = `${code}
`;
const output = [
new CodeBlock(null, code)
@@ -500,11 +500,11 @@ export async function tests() {
test(assert, input, output);
},
"Reply fallback is always stripped": assert => {
- const input = 'Hello, World !';
+ const input = "Hello, World !";
const output = [
- new TextPart('Hello, '),
+ new TextPart("Hello, "),
new FormatPart("em", []),
- new TextPart('!'),
+ new TextPart("!"),
];
assert.deepEqual(parseHTMLBody(platform, null, input), new MessageBody(input, output));
}
diff --git a/src/domain/session/room/timeline/tiles/BaseMediaTile.js b/src/domain/session/room/timeline/tiles/BaseMediaTile.js
index aa53661c53..d62329c6c8 100644
--- a/src/domain/session/room/timeline/tiles/BaseMediaTile.js
+++ b/src/domain/session/room/timeline/tiles/BaseMediaTile.js
@@ -77,7 +77,7 @@ export class BaseMediaTile extends BaseMessageTile {
return this.i18n`Error: ${pendingEvent.error.message}`;
default:
if (this._downloadError) {
- return `Download failed`;
+ return "Download failed";
}
if (this._downloading) {
return this.i18n`Downloading…`;
diff --git a/src/domain/session/room/timeline/tiles/BaseTextTile.js b/src/domain/session/room/timeline/tiles/BaseTextTile.js
index 8e78c95f74..3839c06c40 100644
--- a/src/domain/session/room/timeline/tiles/BaseTextTile.js
+++ b/src/domain/session/room/timeline/tiles/BaseTextTile.js
@@ -24,7 +24,7 @@ export class BaseTextTile extends BaseMessageTile {
constructor(entry, options) {
super(entry, options);
this._messageBody = null;
- this._format = null
+ this._format = null;
}
get shape() {
diff --git a/src/domain/session/room/timeline/tiles/CallTile.js b/src/domain/session/room/timeline/tiles/CallTile.js
index 05762bc0bc..848ddabb13 100644
--- a/src/domain/session/room/timeline/tiles/CallTile.js
+++ b/src/domain/session/room/timeline/tiles/CallTile.js
@@ -110,21 +110,21 @@ export class CallTile extends SimpleTile {
}
} else {
if (this.type === CallType.Video) {
- return `Video call ended`;
+ return "Video call ended";
} else {
- return `Voice call ended`;
+ return "Voice call ended";
}
}
}
get typeLabel() {
if (this._call && this._call.usesFoci) {
- return `This call uses a stream-forwarding unit, which isn't supported yet, so you can't join this call.`;
+ return "This call uses a stream-forwarding unit, which isn't supported yet, so you can't join this call.";
}
if (this.type === CallType.Video) {
- return `Video call`;
+ return "Video call";
} else {
- return `Voice call`;
+ return "Voice call";
}
}
diff --git a/src/domain/session/room/timeline/tiles/EncryptedEventTile.js b/src/domain/session/room/timeline/tiles/EncryptedEventTile.js
index b96e2d85bd..ca17622bfc 100644
--- a/src/domain/session/room/timeline/tiles/EncryptedEventTile.js
+++ b/src/domain/session/room/timeline/tiles/EncryptedEventTile.js
@@ -30,7 +30,7 @@ export class EncryptedEventTile extends BaseTextTile {
}
get shape() {
- return "message-status"
+ return "message-status";
}
_getBody() {
diff --git a/src/domain/session/room/timeline/tiles/EncryptionEnabledTile.js b/src/domain/session/room/timeline/tiles/EncryptionEnabledTile.js
index 00bc67377b..4c3e23fbc2 100644
--- a/src/domain/session/room/timeline/tiles/EncryptionEnabledTile.js
+++ b/src/domain/session/room/timeline/tiles/EncryptionEnabledTile.js
@@ -22,7 +22,7 @@ export class EncryptionEnabledTile extends SimpleTile {
}
get announcement() {
- const senderName = this._entry.displayName || this._entry.sender;
+ const senderName = this._entry.displayName || this._entry.sender;
return this.i18n`${senderName} has enabled end-to-end encryption`;
}
}
diff --git a/src/domain/session/room/timeline/tiles/GapTile.js b/src/domain/session/room/timeline/tiles/GapTile.js
index 66e831473d..6f3b50e7d0 100644
--- a/src/domain/session/room/timeline/tiles/GapTile.js
+++ b/src/domain/session/room/timeline/tiles/GapTile.js
@@ -169,5 +169,5 @@ export function tests() {
await tile.fill();
assert.equal(currentToken, 8);
}
- }
+ };
}
diff --git a/src/domain/session/room/timeline/tiles/MissingAttachmentTile.js b/src/domain/session/room/timeline/tiles/MissingAttachmentTile.js
index 847901acf2..9916839ad8 100644
--- a/src/domain/session/room/timeline/tiles/MissingAttachmentTile.js
+++ b/src/domain/session/room/timeline/tiles/MissingAttachmentTile.js
@@ -18,7 +18,7 @@ import {BaseMessageTile} from "./BaseMessageTile.js";
export class MissingAttachmentTile extends BaseMessageTile {
get shape() {
- return "missing-attachment"
+ return "missing-attachment";
}
get label() {
diff --git a/src/domain/session/room/timeline/tiles/RoomMemberTile.js b/src/domain/session/room/timeline/tiles/RoomMemberTile.js
index ca9cd9b7ed..f63383c27b 100644
--- a/src/domain/session/room/timeline/tiles/RoomMemberTile.js
+++ b/src/domain/session/room/timeline/tiles/RoomMemberTile.js
@@ -24,7 +24,7 @@ export class RoomMemberTile extends SimpleTile {
get announcement() {
const {sender, content, prevContent, stateKey} = this._entry;
- const senderName = this._entry.displayName || sender;
+ const senderName = this._entry.displayName || sender;
const targetName = sender === stateKey ? senderName : (this._entry.content?.displayname || stateKey);
const membership = content && content.membership;
const prevMembership = prevContent && prevContent.membership;
diff --git a/src/domain/session/room/timeline/tiles/RoomNameTile.js b/src/domain/session/room/timeline/tiles/RoomNameTile.js
index d5694a6242..7c69ba552c 100644
--- a/src/domain/session/room/timeline/tiles/RoomNameTile.js
+++ b/src/domain/session/room/timeline/tiles/RoomNameTile.js
@@ -24,6 +24,6 @@ export class RoomNameTile extends SimpleTile {
get announcement() {
const content = this._entry.content;
- return `${this._entry.displayName || this._entry.sender} named the room "${content?.name}"`
+ return `${this._entry.displayName || this._entry.sender} named the room "${content?.name}"`;
}
}
diff --git a/src/domain/session/room/timeline/tiles/SimpleTile.js b/src/domain/session/room/timeline/tiles/SimpleTile.js
index 59ddf15b4c..89cb2d8f6a 100644
--- a/src/domain/session/room/timeline/tiles/SimpleTile.js
+++ b/src/domain/session/room/timeline/tiles/SimpleTile.js
@@ -256,5 +256,5 @@ export function tests() {
fridayTile.updatePreviousSibling(undefined);
assert.equal(fridayTile.needsDateSeparator, true);
},
- }
+ };
}
diff --git a/src/matrix/Session.js b/src/matrix/Session.js
index 35f713f658..2c80c8646a 100644
--- a/src/matrix/Session.js
+++ b/src/matrix/Session.js
@@ -72,7 +72,7 @@ export class Session {
if (rbc.isCancelled) {
this._roomsBeingCreated.remove(rbc.id);
} else {
- this._roomsBeingCreated.update(rbc.id, params)
+ this._roomsBeingCreated.update(rbc.id, params);
}
};
this._roomsBeingCreated = new ObservableMap();
@@ -228,7 +228,7 @@ export class Session {
encryptionParams,
notifyMissingMegolmSession: () => {
if (!this._keyBackup.get()) {
- this.needsKeyBackup.set(true)
+ this.needsKeyBackup.set(true);
}
},
clock: this._platform.clock
@@ -795,7 +795,7 @@ export class Session {
if (roomBeingCreated.roomId === roomId) {
const observableStatus = this._observedRoomStatus.get(roomBeingCreated.id);
if (observableStatus) {
- log.log(`replacing room being created`)
+ log.log("replacing room being created")
.set("localId", roomBeingCreated.id)
.set("roomId", roomBeingCreated.roomId);
observableStatus.set(observableStatus.get() | RoomStatus.Replaced);
@@ -1107,5 +1107,5 @@ export function tests() {
assert.equal(session.syncToken, "b");
assert.equal(session.syncFilterId, 6);
}
- }
+ };
}
diff --git a/src/matrix/Sync.js b/src/matrix/Sync.js
index d335336d29..5e47a956ba 100644
--- a/src/matrix/Sync.js
+++ b/src/matrix/Sync.js
@@ -259,7 +259,7 @@ export class Sync {
await rs.room.load(null, prepareTxn, log);
}
return rs.room.prepareSync(
- rs.roomResponse, rs.membership, newKeys, prepareTxn, log)
+ rs.roomResponse, rs.membership, newKeys, prepareTxn, log);
}, log.level.Detail);
}));
diff --git a/src/matrix/common.js b/src/matrix/common.js
index 7cd72ae1ac..61b9a32613 100644
--- a/src/matrix/common.js
+++ b/src/matrix/common.js
@@ -54,5 +54,5 @@ export function tests() {
"isTxnId fails on event id": assert => {
assert(!isTxnId("$yS_n5n3cIO2aTtek0_2ZSlv-7g4YYR2zKrk2mFCW_rm"));
},
- }
+ };
}
diff --git a/src/matrix/e2ee/DeviceTracker.js b/src/matrix/e2ee/DeviceTracker.js
index b669629ea5..a49f35a9d1 100644
--- a/src/matrix/e2ee/DeviceTracker.js
+++ b/src/matrix/e2ee/DeviceTracker.js
@@ -246,7 +246,7 @@ export class DeviceTracker {
}, {log}).response();
const masterKeys = log.wrap("master keys", log => this._filterValidMasterKeys(deviceKeyResponse, log));
- const selfSigningKeys = log.wrap("self-signing keys", log => this._filterVerifiedCrossSigningKeys(deviceKeyResponse["self_signing_keys"], "self_signing", masterKeys, log))
+ const selfSigningKeys = log.wrap("self-signing keys", log => this._filterVerifiedCrossSigningKeys(deviceKeyResponse["self_signing_keys"], "self_signing", masterKeys, log));
const verifiedKeysPerUser = log.wrap("verify", log => this._filterVerifiedDeviceKeys(deviceKeyResponse["device_keys"], log));
const txn = await this._storage.readWriteTxn([
this._storage.storeNames.userIdentities,
@@ -319,7 +319,7 @@ export class DeviceTracker {
return allDeviceIdentities;
}
- _filterValidMasterKeys(keyQueryResponse, log) {
+ _filterValidMasterKeys(keyQueryResponse) {
const masterKeys = new Map();
const masterKeysResponse = keyQueryResponse["master_keys"];
if (!masterKeysResponse) {
@@ -620,7 +620,7 @@ export function tests() {
map.set(member.userId, member);
return map;
}, new Map());
- return {members: memberMap, release() {}}
+ return {members: memberMap, release() {}};
},
writeIsTrackingMembers(isTrackingMembers) {
if (this.isTrackingMembers !== isTrackingMembers) {
@@ -633,7 +633,7 @@ export function tests() {
this.isTrackingMembers = isTrackingMembers;
}
},
- }
+ };
}
function createQueryKeysHSApiMock(createKey = (algorithm, userId, deviceId) => `${algorithm}:${userId}:${deviceId}:key`) {
@@ -965,5 +965,5 @@ export function tests() {
const txn1 = await storage.readTxn([storage.storeNames.userIdentities]);
assert.deepEqual((await txn1.userIdentities.get("@bob:hs.tld")).roomIds, []);
}
- }
+ };
}
diff --git a/src/matrix/e2ee/RoomEncryption.js b/src/matrix/e2ee/RoomEncryption.js
index b74dc710f1..7626bc3c17 100644
--- a/src/matrix/e2ee/RoomEncryption.js
+++ b/src/matrix/e2ee/RoomEncryption.js
@@ -605,7 +605,7 @@ export function tests() {
};
const olmMock = {
async encrypt() { return []; }
- }
+ };
let isRoomTracked = false;
let isDevicesRequested = false;
const deviceTracker = {
@@ -625,7 +625,7 @@ export function tests() {
async devicesForRoomMembers() {
return [];
}
- }
+ };
const writeTxn = await storage.readWriteTxn([storage.storeNames.roomState]);
writeTxn.roomState.set(roomId, {state_key: "", type: ROOM_HISTORY_VISIBILITY_TYPE, content: {
history_visibility: "invited"
@@ -655,7 +655,7 @@ export function tests() {
};
const olmMock = {
async encrypt() { return []; }
- }
+ };
let isRoomTracked = false;
let isDevicesRequested = false;
const deviceTracker = {
@@ -675,7 +675,7 @@ export function tests() {
async devicesForRoomMembers() {
return [];
}
- }
+ };
const writeTxn = await storage.readWriteTxn([storage.storeNames.roomState]);
writeTxn.roomState.set(roomId, {state_key: "", type: ROOM_HISTORY_VISIBILITY_TYPE, content: {
history_visibility: "invited"
@@ -709,7 +709,7 @@ export function tests() {
async devicesForRoomMembers() {
return [];
}
- }
+ };
const writeTxn = await storage.readWriteTxn([storage.storeNames.roomState]);
writeTxn.roomState.set(roomId, {state_key: "", type: ROOM_HISTORY_VISIBILITY_TYPE, content: {
history_visibility: "invited"
@@ -725,5 +725,5 @@ export function tests() {
await roomEncryption.writeSync(roomResponse, memberChanges, txn, NullLoggerInstance.item);
assert(isMemberChangesCalled);
},
- }
+ };
}
diff --git a/src/matrix/e2ee/attachment.js b/src/matrix/e2ee/attachment.js
index 647cced871..7ea168cb0c 100644
--- a/src/matrix/e2ee/attachment.js
+++ b/src/matrix/e2ee/attachment.js
@@ -66,7 +66,7 @@ export async function encryptAttachment(platform, blob) {
const ciphertext = await crypto.aes.encryptCTR({jwkKey: key, iv, data: buffer});
const digest = await crypto.digest("SHA-256", ciphertext);
return {
- blob: platform.createBlob(ciphertext, 'application/octet-stream'),
+ blob: platform.createBlob(ciphertext, "application/octet-stream"),
info: {
v: "v2",
key,
diff --git a/src/matrix/e2ee/common.js b/src/matrix/e2ee/common.js
index cc3bfff5f9..f37d8c7576 100644
--- a/src/matrix/e2ee/common.js
+++ b/src/matrix/e2ee/common.js
@@ -67,7 +67,7 @@ export function createRoomEncryptionEvent() {
"rotation_period_ms": 604800000,
"rotation_period_msgs": 100
}
- }
+ };
}
diff --git a/src/matrix/e2ee/megolm/Encryption.js b/src/matrix/e2ee/megolm/Encryption.js
index eb5f68d304..d6350a842a 100644
--- a/src/matrix/e2ee/megolm/Encryption.js
+++ b/src/matrix/e2ee/megolm/Encryption.js
@@ -191,7 +191,7 @@ export class Encryption {
// chain_index is ignored by element-web if not all clients
// but let's send it anyway, as element-web does so
chain_index: session.message_index()
- }
+ };
}
}
diff --git a/src/matrix/room/ArchivedRoom.js b/src/matrix/room/ArchivedRoom.js
index 865951637c..d02c944e7e 100644
--- a/src/matrix/room/ArchivedRoom.js
+++ b/src/matrix/room/ArchivedRoom.js
@@ -230,5 +230,5 @@ export function tests() {
const kickDetails = findKickDetails({state: {events: [leaveEvent]}}, bob);
assert.equal(kickDetails, null);
}
- }
+ };
}
diff --git a/src/matrix/room/BaseRoom.js b/src/matrix/room/BaseRoom.js
index 4ea2538923..4feceec689 100644
--- a/src/matrix/room/BaseRoom.js
+++ b/src/matrix/room/BaseRoom.js
@@ -20,7 +20,7 @@ import {GapWriter} from "./timeline/persistence/GapWriter.js";
import {RelationWriter} from "./timeline/persistence/RelationWriter.js";
import {Timeline} from "./timeline/Timeline.js";
import {FragmentIdComparer} from "./timeline/FragmentIdComparer.js";
-import {WrappedError} from "../error.js"
+import {WrappedError} from "../error.js";
import {fetchOrLoadMembers, fetchOrLoadMember} from "./members/load.js";
import {MemberList} from "./members/MemberList.js";
import {Heroes} from "./members/Heroes.js";
@@ -379,7 +379,7 @@ export class BaseRoom extends EventEmitter {
allow sub classes to integrate in the gap fill lifecycle.
JoinedRoom uses this update remote echos.
*/
- // eslint-disable-next-line no-unused-vars
+ // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars
async _writeGapFill(chunk, txn, log) {}
_applyGapFill() {}
@@ -428,7 +428,7 @@ export class BaseRoom extends EventEmitter {
get isLowPriority() {
const tags = this._summary.data.tags;
- return !!(tags && tags['m.lowpriority']);
+ return !!(tags && tags["m.lowpriority"]);
}
get isEncrypted() {
diff --git a/src/matrix/room/Invite.js b/src/matrix/room/Invite.js
index 6c5ef121a4..acc3e73161 100644
--- a/src/matrix/room/Invite.js
+++ b/src/matrix/room/Invite.js
@@ -263,7 +263,7 @@ export function tests() {
invitesMap.delete(roomId);
}
}
- }
+ };
}
const roomId = "!123:hs.tld";
@@ -352,5 +352,5 @@ export function tests() {
assert.equal(invite.rejected, false);
assert.equal(invite.accepted, true);
}
- }
+ };
}
diff --git a/src/matrix/room/PowerLevels.js b/src/matrix/room/PowerLevels.js
index 76e062ef37..29869aed88 100644
--- a/src/matrix/room/PowerLevels.js
+++ b/src/matrix/room/PowerLevels.js
@@ -156,5 +156,5 @@ export function tests() {
assert.equal(pl.canRedactFromSender(alice), false);
assert.equal(pl.canSendType("m.room.message"), false);
},
- }
+ };
}
diff --git a/src/matrix/room/Room.js b/src/matrix/room/Room.js
index b87d7a88cd..cfe5885727 100644
--- a/src/matrix/room/Room.js
+++ b/src/matrix/room/Room.js
@@ -19,7 +19,7 @@ import {SyncWriter} from "./timeline/persistence/SyncWriter.js";
import {MemberWriter} from "./timeline/persistence/MemberWriter.js";
import {RelationWriter} from "./timeline/persistence/RelationWriter.js";
import {SendQueue} from "./sending/SendQueue.js";
-import {WrappedError} from "../error.js"
+import {WrappedError} from "../error.js";
import {Heroes} from "./members/Heroes.js";
import {AttachmentUpload} from "./AttachmentUpload.js";
import {DecryptionSource} from "../e2ee/common.js";
diff --git a/src/matrix/room/RoomSummary.js b/src/matrix/room/RoomSummary.js
index 6260868332..1a5369b671 100644
--- a/src/matrix/room/RoomSummary.js
+++ b/src/matrix/room/RoomSummary.js
@@ -189,7 +189,7 @@ export class SummaryData {
changedKeys(other) {
const props = Object.getOwnPropertyNames(this);
return props.filter(prop => {
- return prop !== "cloned" && this[prop] !== other[prop]
+ return prop !== "cloned" && this[prop] !== other[prop];
});
}
@@ -317,5 +317,5 @@ export function tests() {
const nullCount = Object.values(serialized).reduce((count, value) => count + value === null ? 1 : 0, 0);
assert.strictEqual(nullCount, 0);
}
- }
+ };
}
diff --git a/src/matrix/room/members/Heroes.js b/src/matrix/room/members/Heroes.js
index 97630edd8f..3fa579c304 100644
--- a/src/matrix/room/members/Heroes.js
+++ b/src/matrix/room/members/Heroes.js
@@ -117,7 +117,7 @@ export class Heroes {
get roomAvatarColorId() {
if (this._members.size === 1) {
for (const member of this._members.keys()) {
- return member
+ return member;
}
}
return null;
diff --git a/src/matrix/room/sending/SendQueue.js b/src/matrix/room/sending/SendQueue.js
index f9950c0142..9c6204b6a8 100644
--- a/src/matrix/room/sending/SendQueue.js
+++ b/src/matrix/room/sending/SendQueue.js
@@ -446,5 +446,5 @@ export function tests() {
assert.equal(queue.pendingEvents.length, 2);
},
- }
+ };
}
diff --git a/src/matrix/room/timeline/FragmentIdComparer.js b/src/matrix/room/timeline/FragmentIdComparer.js
index fcd27edf2b..8f9d687862 100644
--- a/src/matrix/room/timeline/FragmentIdComparer.js
+++ b/src/matrix/room/timeline/FragmentIdComparer.js
@@ -314,5 +314,5 @@ export function tests() {
index.prepend(1, 2);
assert(index.compare(1, 2) < 0);
}
- }
+ };
}
diff --git a/src/matrix/room/timeline/Timeline.js b/src/matrix/room/timeline/Timeline.js
index a721092e43..7dfead7c3f 100644
--- a/src/matrix/room/timeline/Timeline.js
+++ b/src/matrix/room/timeline/Timeline.js
@@ -228,7 +228,7 @@ export class Timeline {
for (const entry of entries) {
try {
this._remoteEntries.getAndUpdate(entry, Timeline._entryUpdater);
- const oldEntry = this._contextEntriesNotInTimeline.get(entry.id)
+ const oldEntry = this._contextEntriesNotInTimeline.get(entry.id);
if (oldEntry) {
Timeline._entryUpdater(oldEntry, entry);
this._contextEntriesNotInTimeline.set(entry.id, entry);
diff --git a/src/matrix/room/timeline/common.js b/src/matrix/room/timeline/common.js
index 7958f75438..5318b0436e 100644
--- a/src/matrix/room/timeline/common.js
+++ b/src/matrix/room/timeline/common.js
@@ -29,22 +29,22 @@ export function isValidFragmentId(id) {
* - We keep user_id for backwards-compat with v1
*/
const _REDACT_KEEP_KEY_MAP = [
- 'event_id', 'type', 'room_id', 'user_id', 'sender', 'state_key', 'prev_state',
- 'content', 'unsigned', 'origin_server_ts',
+ "event_id", "type", "room_id", "user_id", "sender", "state_key", "prev_state",
+ "content", "unsigned", "origin_server_ts",
].reduce(function(ret, val) {
ret[val] = 1; return ret;
}, {});
// a map from event type to the .content keys we keep when an event is redacted
const _REDACT_KEEP_CONTENT_MAP = {
- 'm.room.member': {'membership': 1},
- 'm.room.create': {'creator': 1},
- 'm.room.join_rules': {'join_rule': 1},
- 'm.room.power_levels': {'ban': 1, 'events': 1, 'events_default': 1,
- 'kick': 1, 'redact': 1, 'state_default': 1,
- 'users': 1, 'users_default': 1,
+ "m.room.member": {"membership": 1},
+ "m.room.create": {"creator": 1},
+ "m.room.join_rules": {"join_rule": 1},
+ "m.room.power_levels": {"ban": 1, "events": 1, "events_default": 1,
+ "kick": 1, "redact": 1, "state_default": 1,
+ "users": 1, "users_default": 1,
},
- 'm.room.aliases': {'aliases': 1},
+ "m.room.aliases": {"aliases": 1},
};
// end of matrix-js-sdk code
diff --git a/src/matrix/room/timeline/entries/BaseEventEntry.js b/src/matrix/room/timeline/entries/BaseEventEntry.js
index 3969855772..765adf39bf 100644
--- a/src/matrix/room/timeline/entries/BaseEventEntry.js
+++ b/src/matrix/room/timeline/entries/BaseEventEntry.js
@@ -18,7 +18,7 @@ import {BaseEntry} from "./BaseEntry";
import {REDACTION_TYPE} from "../../common";
import {createAnnotation, ANNOTATION_RELATION_TYPE, getRelationFromContent} from "../relations.js";
import {PendingAnnotation} from "../PendingAnnotation.js";
-import {createReplyContent} from "./reply.js"
+import {createReplyContent} from "./reply.js";
/** Deals mainly with local echo for relations and redactions,
* so it is shared between PendingEventEntry and EventEntry */
diff --git a/src/matrix/room/timeline/entries/EventEntry.js b/src/matrix/room/timeline/entries/EventEntry.js
index cf56cbf954..b5ce4fe1c8 100644
--- a/src/matrix/room/timeline/entries/EventEntry.js
+++ b/src/matrix/room/timeline/entries/EventEntry.js
@@ -240,5 +240,5 @@ export function tests() {
"🚀");
assert.equal(false, e8.haveAnnotation("🚀"));
}
- }
+ };
}
diff --git a/src/matrix/room/timeline/entries/reply.js b/src/matrix/room/timeline/entries/reply.js
index 2e180c1124..52337e40e4 100644
--- a/src/matrix/room/timeline/entries/reply.js
+++ b/src/matrix/room/timeline/entries/reply.js
@@ -65,10 +65,10 @@ export function createReplyContent(entry, msgtype, body) {
const plainBody = nonTextual || entry.content.body || "";
const bodyLines = plainBody.split("\n");
- bodyLines[0] = `> ${prefix}<${sender}> ${bodyLines[0]}`
+ bodyLines[0] = `> ${prefix}<${sender}> ${bodyLines[0]}`;
const plainFallback = bodyLines.join("\n> ");
- const newBody = plainFallback + '\n\n' + body;
+ const newBody = plainFallback + "\n\n" + body;
const newFormattedBody = formattedFallback + htmlEscape(body);
return _createReplyContent(entry.id, msgtype, newBody, newFormattedBody);
}
diff --git a/src/matrix/room/timeline/persistence/GapWriter.js b/src/matrix/room/timeline/persistence/GapWriter.js
index d9ad547622..6125fdf5a3 100644
--- a/src/matrix/room/timeline/persistence/GapWriter.js
+++ b/src/matrix/room/timeline/persistence/GapWriter.js
@@ -315,7 +315,7 @@ export function tests() {
const firstFragment = await fetchFragment(mocks, firstFragmentEntry.fragmentId);
const secondFragment = await fetchFragment(mocks, secondFragmentEntry.fragmentId);
- assertFilledLink(assert, firstFragment, secondFragment)
+ assertFilledLink(assert, firstFragment, secondFragment);
const firstEvents = await allFragmentEvents(mocks, firstFragmentEntry.fragmentId);
assert.deepEqual(firstEvents.map(e => e.event_id), eventIds(0, 10));
const secondEvents = await allFragmentEvents(mocks, secondFragmentEntry.fragmentId);
@@ -333,7 +333,7 @@ export function tests() {
const firstFragment = await fetchFragment(mocks, firstFragmentEntry.fragmentId);
const secondFragment = await fetchFragment(mocks, secondFragmentEntry.fragmentId);
- assertGapLink(assert, firstFragment, secondFragment)
+ assertGapLink(assert, firstFragment, secondFragment);
const firstEvents = await allFragmentEvents(mocks, firstFragmentEntry.fragmentId);
assert.deepEqual(firstEvents.map(e => e.event_id), eventIds(0, 10));
const secondEvents = await allFragmentEvents(mocks, secondFragmentEntry.fragmentId);
@@ -371,8 +371,8 @@ export function tests() {
assert.deepEqual(secondEvents.map(e => e.event_id), [...eventIds(21,26), ...eventIds(10, 21)]);
const firstFragment = await fetchFragment(mocks, firstFragmentEntry.fragmentId);
const secondFragment = await fetchFragment(mocks, secondFragmentEntry.fragmentId);
- assertFilledLink(assert, firstFragment, secondFragment)
+ assertFilledLink(assert, firstFragment, secondFragment);
await mocks.txn.complete();
}
- }
+ };
}
diff --git a/src/matrix/room/timeline/persistence/MemberWriter.js b/src/matrix/room/timeline/persistence/MemberWriter.js
index 9345324efc..eb4097864c 100644
--- a/src/matrix/room/timeline/persistence/MemberWriter.js
+++ b/src/matrix/room/timeline/persistence/MemberWriter.js
@@ -192,15 +192,15 @@ export function tests() {
function createMemberEvent(membership, userId, displayName, avatarUrl) {
idCounter += 1;
return {
- content: {
+ "content": {
membership,
"displayname": displayName,
"avatar_url": avatarUrl
},
- event_id: `$${idCounter}`,
- sender: userId,
+ "event_id": `$${idCounter}`,
+ "sender": userId,
"state_key": userId,
- type: "m.room.member"
+ "type": "m.room.member"
};
}
@@ -219,7 +219,7 @@ export function tests() {
members.set(member.userId, member);
}
}
- }
+ };
}
function member(...args) {
diff --git a/src/matrix/room/timeline/persistence/RelationWriter.js b/src/matrix/room/timeline/persistence/RelationWriter.js
index ae078bfcfe..3f664fe746 100644
--- a/src/matrix/room/timeline/persistence/RelationWriter.js
+++ b/src/matrix/room/timeline/persistence/RelationWriter.js
@@ -341,5 +341,5 @@ export function tests() {
assert.equal(storedMessage.annotations["🐶"].count, 1);
},
- }
+ };
}
diff --git a/src/matrix/room/timeline/persistence/SyncWriter.js b/src/matrix/room/timeline/persistence/SyncWriter.js
index 76c7bec725..a80c3027e5 100644
--- a/src/matrix/room/timeline/persistence/SyncWriter.js
+++ b/src/matrix/room/timeline/persistence/SyncWriter.js
@@ -285,5 +285,5 @@ export function tests() {
// fake-indexeddb still aborts the transaction when preventDefault is called by tryInsert, so don't await as it will abort
// await txn.complete();
},
- }
+ };
}
diff --git a/src/matrix/room/timeline/relations.js b/src/matrix/room/timeline/relations.js
index 2183a6c517..aa0804a40c 100644
--- a/src/matrix/room/timeline/relations.js
+++ b/src/matrix/room/timeline/relations.js
@@ -30,7 +30,7 @@ export function createAnnotation(targetId, key) {
}
export function getRelationTarget(relation) {
- return relation.event_id || relation["m.in_reply_to"]?.event_id
+ return relation.event_id || relation["m.in_reply_to"]?.event_id;
}
export function setRelationTarget(relation, target) {
diff --git a/src/mocks/Clock.js b/src/mocks/Clock.js
index e060c24ec5..84c053c6f9 100644
--- a/src/mocks/Clock.js
+++ b/src/mocks/Clock.js
@@ -131,5 +131,5 @@ export function tests() {
assert.strictEqual(counter, 3);
interval.dispose();
}
- }
+ };
}
diff --git a/src/mocks/HomeServer.js b/src/mocks/HomeServer.js
index 072344efe7..5fd5d0a060 100644
--- a/src/mocks/HomeServer.js
+++ b/src/mocks/HomeServer.js
@@ -35,7 +35,7 @@ class Target {
}
function handleMethod(target, name, ...args) {
- let requests = target.requests[name]
+ let requests = target.requests[name];
if (!requests) {
target.requests[name] = requests = [];
}
diff --git a/src/platform/web/Platform.js b/src/platform/web/Platform.js
index be8c997078..f3b25726b8 100644
--- a/src/platform/web/Platform.js
+++ b/src/platform/web/Platform.js
@@ -99,12 +99,12 @@ function adaptUIOnVisualViewportResize(container) {
return;
}
const handler = () => {
- const sessionView = container.querySelector('.SessionView');
+ const sessionView = container.querySelector(".SessionView");
if (!sessionView) {
return;
}
- const scrollable = container.querySelector('.bottom-aligned-scroll');
+ const scrollable = container.querySelector(".bottom-aligned-scroll");
let scrollTopBefore, heightBefore, heightAfter;
if (scrollable) {
@@ -116,17 +116,17 @@ function adaptUIOnVisualViewportResize(container) {
// behind (last tested on iOS 14.4 simulator) so we have to compute the offset manually
const offsetTop = sessionView.offsetTop + sessionView.offsetHeight - window.visualViewport.height;
- container.style.setProperty('--ios-viewport-height', window.visualViewport.height.toString() + 'px');
- container.style.setProperty('--ios-viewport-top', offsetTop.toString() + 'px');
+ container.style.setProperty("--ios-viewport-height", window.visualViewport.height.toString() + "px");
+ container.style.setProperty("--ios-viewport-top", offsetTop.toString() + "px");
if (scrollable) {
heightAfter = scrollable.offsetHeight;
scrollable.scrollTop = scrollTopBefore + heightBefore - heightAfter;
}
};
- window.visualViewport.addEventListener('resize', handler);
+ window.visualViewport.addEventListener("resize", handler);
return () => {
- window.visualViewport.removeEventListener('resize', handler);
+ window.visualViewport.removeEventListener("resize", handler);
};
}
@@ -165,7 +165,7 @@ export class Platform {
const isIE11 = !!window.MSInputMethodContext && !!document.documentMode;
this.isIE11 = isIE11;
// From https://stackoverflow.com/questions/9038625/detect-if-device-is-ios/9039885
- const isIOS = /iPad|iPhone|iPod/.test(navigator.platform) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1) && !window.MSStream;
+ const isIOS = /iPad|iPhone|iPod/.test(navigator.platform) || (navigator.platform === "MacIntel" && navigator.maxTouchPoints > 1) && !window.MSStream;
this.isIOS = isIOS;
this._disposables = new Disposables();
this._olmPromise = undefined;
@@ -304,7 +304,7 @@ export class Platform {
} else {
resolve();
}
- }
+ };
input.addEventListener("change", checkFile, true);
});
// IE11 needs the input to be attached to the document
@@ -402,7 +402,7 @@ export function tests() {
const logger = { _now() {return 5;} };
const logItem = new LogItem("test", 1, logger);
logItem.error = new Error();
- logItem.error.stack = "main http://localhost:3000/src/main.js:55\n http://localhost:3000/?loginToken=secret:26"
+ logItem.error.stack = "main http://localhost:3000/src/main.js:55\n http://localhost:3000/?loginToken=secret:26";
logPersister.reportItem(logItem, null, false);
const item = logPersister._queuedItems.pop();
assert.strictEqual(item.json.search("secret"), -1);
diff --git a/src/platform/web/dom/BlobHandle.js b/src/platform/web/dom/BlobHandle.js
index 32dd94c0e2..34a0cf12a2 100644
--- a/src/platform/web/dom/BlobHandle.js
+++ b/src/platform/web/dom/BlobHandle.js
@@ -48,30 +48,30 @@ limitations under the License.
// text/html, text/xhtml, image/svg, image/svg+xml, image/pdf, and similar.
const ALLOWED_BLOB_MIMETYPES = {
- 'image/jpeg': true,
- 'image/gif': true,
- 'image/png': true,
-
- 'video/mp4': true,
- 'video/webm': true,
- 'video/ogg': true,
- 'video/quicktime': true,
- 'video/VP8': true,
-
- 'audio/mp4': true,
- 'audio/webm': true,
- 'audio/aac': true,
- 'audio/mpeg': true,
- 'audio/ogg': true,
- 'audio/wave': true,
- 'audio/wav': true,
- 'audio/x-wav': true,
- 'audio/x-pn-wav': true,
- 'audio/flac': true,
- 'audio/x-flac': true,
+ "image/jpeg": true,
+ "image/gif": true,
+ "image/png": true,
+
+ "video/mp4": true,
+ "video/webm": true,
+ "video/ogg": true,
+ "video/quicktime": true,
+ "video/VP8": true,
+
+ "audio/mp4": true,
+ "audio/webm": true,
+ "audio/aac": true,
+ "audio/mpeg": true,
+ "audio/ogg": true,
+ "audio/wave": true,
+ "audio/wav": true,
+ "audio/x-wav": true,
+ "audio/x-pn-wav": true,
+ "audio/flac": true,
+ "audio/x-flac": true,
};
-const DEFAULT_MIMETYPE = 'application/octet-stream';
+const DEFAULT_MIMETYPE = "application/octet-stream";
export class BlobHandle {
constructor(blob, buffer = null) {
@@ -81,7 +81,7 @@ export class BlobHandle {
}
static fromBuffer(buffer, mimetype) {
- mimetype = mimetype ? mimetype.split(";")[0].trim() : '';
+ mimetype = mimetype ? mimetype.split(";")[0].trim() : "";
if (!ALLOWED_BLOB_MIMETYPES[mimetype]) {
mimetype = DEFAULT_MIMETYPE;
}
diff --git a/src/platform/web/dom/Crypto.js b/src/platform/web/dom/Crypto.js
index 441daf31b5..db5a1e0cb0 100644
--- a/src/platform/web/dom/Crypto.js
+++ b/src/platform/web/dom/Crypto.js
@@ -42,15 +42,15 @@ class HMACCrypto {
*/
async verify(key, mac, data, hash) {
const opts = {
- name: 'HMAC',
+ name: "HMAC",
hash: {name: hashName(hash)},
};
const hmacKey = await subtleCryptoResult(this._subtleCrypto.importKey(
- 'raw',
+ "raw",
key,
opts,
false,
- ['verify'],
+ ["verify"],
), "importKey");
const isVerified = await subtleCryptoResult(this._subtleCrypto.verify(
opts,
@@ -63,15 +63,15 @@ class HMACCrypto {
async compute(key, data, hash) {
const opts = {
- name: 'HMAC',
+ name: "HMAC",
hash: {name: hashName(hash)},
};
const hmacKey = await subtleCryptoResult(this._subtleCrypto.importKey(
- 'raw',
+ "raw",
key,
opts,
false,
- ['sign'],
+ ["sign"],
), "importKey");
const buffer = await subtleCryptoResult(this._subtleCrypto.sign(
opts,
@@ -102,15 +102,15 @@ class DeriveCrypto {
throw new Error("PBKDF2 is not supported");
}
const key = await subtleCryptoResult(this._subtleCrypto.importKey(
- 'raw',
+ "raw",
password,
- {name: 'PBKDF2'},
+ {name: "PBKDF2"},
false,
- ['deriveBits'],
+ ["deriveBits"],
), "importKey");
const keybits = await subtleCryptoResult(this._subtleCrypto.deriveBits(
{
- name: 'PBKDF2',
+ name: "PBKDF2",
salt,
iterations,
hash: hashName(hash),
@@ -135,7 +135,7 @@ class DeriveCrypto {
return this._cryptoExtras.hkdf(this._crypto, key, salt, info, hash, length);
}
const hkdfkey = await subtleCryptoResult(this._subtleCrypto.importKey(
- 'raw',
+ "raw",
key,
{name: "HKDF"},
false,
@@ -183,7 +183,7 @@ class AESCrypto {
selectedKey,
opts,
false,
- ['decrypt'],
+ ["decrypt"],
), "importKey");
} catch (err) {
throw new Error(`Could not import key for AES-CTR decryption: ${err.message}`);
@@ -216,7 +216,7 @@ class AESCrypto {
selectedKey,
opts,
false,
- ['encrypt'],
+ ["encrypt"],
), "importKey");
} catch (err) {
throw new Error(`Could not import key for AES-CTR encryption: ${err.message}`);
@@ -265,7 +265,7 @@ function jwkKeyToRaw(jwkKey) {
throw new Error(`Unknown algorithm: ${jwkKey.alg}`);
}
if (!jwkKey.key_ops.includes("decrypt")) {
- throw new Error(`decrypt missing from key_ops`);
+ throw new Error("decrypt missing from key_ops");
}
if (jwkKey.kty !== "oct") {
throw new Error(`Invalid key type, "oct" expected: ${jwkKey.kty}`);
diff --git a/src/platform/web/dom/History.js b/src/platform/web/dom/History.js
index 81ddc7395d..66b794b916 100644
--- a/src/platform/web/dom/History.js
+++ b/src/platform/web/dom/History.js
@@ -72,11 +72,11 @@ export class History extends BaseObservableValue {
onSubscribeFirst() {
this._lastSessionHash = window.localStorage?.getItem("hydrogen_last_url_hash");
- window.addEventListener('hashchange', this);
+ window.addEventListener("hashchange", this);
}
onUnsubscribeLast() {
- window.removeEventListener('hashchange', this);
+ window.removeEventListener("hashchange", this);
}
_storeHash(hash) {
diff --git a/src/platform/web/dom/ImageHandle.js b/src/platform/web/dom/ImageHandle.js
index 4ac3a6cd2e..4d111b9d98 100644
--- a/src/platform/web/dom/ImageHandle.js
+++ b/src/platform/web/dom/ImageHandle.js
@@ -97,7 +97,7 @@ export function hasReadPixelPermission() {
Math.round(Math.random() * 255),
Math.round(Math.random() * 255),
Math.round(Math.random() * 255),
- ]
+ ];
ctx.fillStyle = `rgb(${rgb[0]}, ${rgb[1]}, ${rgb[2]})`;
ctx.fillRect(0, 0, 1, 1);
const data = ctx.getImageData(0, 0, 1, 1).data;
diff --git a/src/platform/web/dom/OnlineStatus.js b/src/platform/web/dom/OnlineStatus.js
index 4c316de68f..19288a2fb6 100644
--- a/src/platform/web/dom/OnlineStatus.js
+++ b/src/platform/web/dom/OnlineStatus.js
@@ -36,12 +36,12 @@ export class OnlineStatus extends BaseObservableValue {
}
onSubscribeFirst() {
- window.addEventListener('offline', this._onOffline);
- window.addEventListener('online', this._onOnline);
+ window.addEventListener("offline", this._onOffline);
+ window.addEventListener("online", this._onOnline);
}
onUnsubscribeLast() {
- window.removeEventListener('offline', this._onOffline);
- window.removeEventListener('online', this._onOnline);
+ window.removeEventListener("offline", this._onOffline);
+ window.removeEventListener("online", this._onOnline);
}
}
diff --git a/src/platform/web/dom/download.js b/src/platform/web/dom/download.js
index 2476d3dfed..19bfc7daea 100644
--- a/src/platform/web/dom/download.js
+++ b/src/platform/web/dom/download.js
@@ -27,7 +27,7 @@ export async function downloadInIframe(container, iframeSrc, blobHandle, filenam
detach = () => {
iframe.removeEventListener("load", resolve);
iframe.removeEventListener("error", reject);
- }
+ };
iframe.addEventListener("load", resolve);
iframe.addEventListener("error", reject);
});
diff --git a/src/platform/web/dom/request/common.js b/src/platform/web/dom/request/common.js
index d6ed5074bc..a045e589f4 100644
--- a/src/platform/web/dom/request/common.js
+++ b/src/platform/web/dom/request/common.js
@@ -48,5 +48,5 @@ export function tests() {
assert.equal(addCacheBuster("http://foo", random), "http://foo?_cacheBuster=4503599627370496");
assert.equal(addCacheBuster("http://foo?bar=baz", random), "http://foo?bar=baz&_cacheBuster=4503599627370496");
}
- }
+ };
}
diff --git a/src/platform/web/dom/request/fetch.js b/src/platform/web/dom/request/fetch.js
index c2e2d4b7a9..2a49df618e 100644
--- a/src/platform/web/dom/request/fetch.js
+++ b/src/platform/web/dom/request/fetch.js
@@ -149,5 +149,5 @@ export function createFetchRequest(createTimeout, serviceWorkerHandler) {
}
return result;
- }
+ };
}
diff --git a/src/platform/web/parsehtml.js b/src/platform/web/parsehtml.js
index e80ec9958c..bab8b29a0c 100644
--- a/src/platform/web/parsehtml.js
+++ b/src/platform/web/parsehtml.js
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-import DOMPurify from "dompurify"
+import DOMPurify from "dompurify";
class HTMLParseResult {
constructor(bodyNode) {
@@ -56,9 +56,9 @@ class HTMLParseResult {
const sanitizeConfig = {
ALLOWED_URI_REGEXP: /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp|xxx|mxc):|[^a-z]|[a-z+.-]+(?:[^a-z+.-:]|$))/i,
- FORBID_TAGS: ['mx-reply'],
+ FORBID_TAGS: ["mx-reply"],
KEEP_CONTENT: false,
-}
+};
export function parseHTML(html) {
// If DOMPurify uses DOMParser, can't we just get the built tree from it
diff --git a/src/platform/web/sw.js b/src/platform/web/sw.js
index 088bc05975..69bbe5b657 100644
--- a/src/platform/web/sw.js
+++ b/src/platform/web/sw.js
@@ -22,10 +22,10 @@ const HASHED_PRECACHED_ASSETS = DEFINE_HASHED_PRECACHED_ASSETS;
const HASHED_CACHED_ON_REQUEST_ASSETS = DEFINE_HASHED_CACHED_ON_REQUEST_ASSETS;
const unhashedCacheName = `hydrogen-assets-${DEFINE_GLOBAL_HASH}`;
-const hashedCacheName = `hydrogen-assets`;
-const mediaThumbnailCacheName = `hydrogen-media-thumbnails-v2`;
+const hashedCacheName = "hydrogen-assets";
+const mediaThumbnailCacheName = "hydrogen-media-thumbnails-v2";
-self.addEventListener('install', function(e) {
+self.addEventListener("install", function(e) {
e.waitUntil((async () => {
const unhashedCache = await caches.open(unhashedCacheName);
await unhashedCache.addAll(UNHASHED_PRECACHED_ASSETS);
@@ -38,7 +38,7 @@ self.addEventListener('install', function(e) {
})());
});
-self.addEventListener('activate', (event) => {
+self.addEventListener("activate", (event) => {
// on a first page load/sw install,
// start using the service worker on all pages straight away
self.clients.claim();
@@ -68,7 +68,7 @@ async function purgeOldCaches() {
}
}
-self.addEventListener('fetch', (event) => {
+self.addEventListener("fetch", (event) => {
/*
service worker shouldn't handle xhr uploads because otherwise
the progress events won't fire.
@@ -198,7 +198,7 @@ async function readCache(request) {
return response;
}
-self.addEventListener('message', (event) => {
+self.addEventListener("message", (event) => {
const reply = payload => event.source.postMessage({replyTo: event.data.id, payload});
const {replyTo} = event.data;
if (replyTo) {
@@ -245,7 +245,7 @@ async function openClientFromNotif(event) {
console.log("notificationclick: client has session open, showing room there");
// use a message rather than clientWithSession.navigate here as this refreshes the page on chrome
clientWithSession.postMessage({type: "openRoom", payload: {roomId}});
- if ('focus' in clientWithSession) {
+ if ("focus" in clientWithSession) {
try {
await clientWithSession.focus();
} catch (err) { console.error(err); } // I've had this throw on me on Android
@@ -257,7 +257,7 @@ async function openClientFromNotif(event) {
}
}
-self.addEventListener('notificationclick', event => {
+self.addEventListener("notificationclick", event => {
event.notification.close();
event.waitUntil(openClientFromNotif(event));
});
@@ -315,7 +315,7 @@ async function handlePushNotification(n) {
// when no client is visible, see https://goo.gl/yqv4Q4
}
-self.addEventListener('push', event => {
+self.addEventListener("push", event => {
event.waitUntil(handlePushNotification(event.data.json()));
});
diff --git a/src/platform/web/ui/RootView.js b/src/platform/web/ui/RootView.js
index 1db5c334b6..f33f882235 100644
--- a/src/platform/web/ui/RootView.js
+++ b/src/platform/web/ui/RootView.js
@@ -32,7 +32,7 @@ export class RootView extends TemplateView {
return t.div({className: "StatusView"}, [
t.h1("Something went wrong"),
t.p(vm.errorText),
- ])
+ ]);
});
case "session":
return new SessionView(vm.sessionViewModel);
diff --git a/src/platform/web/ui/avatar.js b/src/platform/web/ui/avatar.js
index ce2dfdabd8..8f37b10d7f 100644
--- a/src/platform/web/ui/avatar.js
+++ b/src/platform/web/ui/avatar.js
@@ -32,8 +32,8 @@ export function renderStaticAvatar(vm, size, extraClasses = undefined) {
}
const avatarContent = hasAvatar ? renderImg(vm, size) : text(vm.avatarLetter);
const avatar = tag.div({
- className: avatarClasses,
- title: vm.avatarTitle,
+ "className": avatarClasses,
+ "title": vm.avatarTitle,
"data-testid": "avatar",
}, [avatarContent]);
if (hasAvatar) {
diff --git a/src/platform/web/ui/login/SessionLoadView.js b/src/platform/web/ui/login/SessionLoadView.js
index 4f546b70f8..56e14b67cf 100644
--- a/src/platform/web/ui/login/SessionLoadView.js
+++ b/src/platform/web/ui/login/SessionLoadView.js
@@ -24,7 +24,7 @@ export class SessionLoadView extends TemplateView {
t.div({className: "SessionLoadView"}, [
t.view(new SessionLoadStatusView(vm))
]),
- t.div({className: {"button-row": true, hidden: vm => vm.loading}},
+ t.div({className: {"button-row": true, "hidden": vm => vm.loading}},
t.a({className: "button-action primary", href: vm.backUrl}, vm.i18n`Go back`))
]);
}
diff --git a/src/platform/web/ui/session/CreateRoomView.js b/src/platform/web/ui/session/CreateRoomView.js
index 9d6c6bbc2b..156e5b1f11 100644
--- a/src/platform/web/ui/session/CreateRoomView.js
+++ b/src/platform/web/ui/session/CreateRoomView.js
@@ -33,7 +33,7 @@ export class CreateRoomView extends TemplateView {
return new AvatarView(vm, 64);
} else {
return new StaticView(undefined, t => {
- return t.div({className: "CreateRoomView_selectAvatarPlaceholder"})
+ return t.div({className: "CreateRoomView_selectAvatarPlaceholder"});
});
}
})
@@ -65,11 +65,11 @@ export class CreateRoomView extends TemplateView {
t.label({for: "isPublic"}, vm.i18n`Public room, anyone can join`)
]),
]),
- t.div({className: {"form-row check": true, hidden: vm => vm.isPublic}}, [
+ t.div({className: {"form-row check": true, "hidden": vm => vm.isPublic}}, [
t.input({type: "checkbox", name: "isEncrypted", id: "isEncrypted", checked: vm.isEncrypted}),
t.label({for: "isEncrypted"}, vm.i18n`Enable end-to-end encryption`)
]),
- t.div({className: {"form-row text": true, hidden: vm => !vm.isPublic}}, [
+ t.div({className: {"form-row text": true, "hidden": vm => !vm.isPublic}}, [
t.label({for: "roomAlias"}, vm.i18n`Room alias`),
t.input({
onInput: evt => vm.setRoomAlias(evt.target.value),
@@ -79,7 +79,7 @@ export class CreateRoomView extends TemplateView {
t.div({className: "form-group"}, [
t.div(t.button({className: "link", type: "button", onClick: () => vm.toggleAdvancedShown()},
vm => vm.isAdvancedShown ? vm.i18n`Hide advanced settings` : vm.i18n`Show advanced settings`)),
- t.div({className: {"form-row check": true, hidden: vm => !vm.isAdvancedShown}}, [
+ t.div({className: {"form-row check": true, "hidden": vm => !vm.isAdvancedShown}}, [
t.input({type: "checkbox", name: "isFederationDisabled", id: "isFederationDisabled", checked: vm.isFederationDisabled}),
t.label({for: "isFederationDisabled"}, [
vm.i18n`Disable federation`,
diff --git a/src/platform/web/ui/session/leftpanel/LeftPanelView.js b/src/platform/web/ui/session/leftpanel/LeftPanelView.js
index fb2feb5711..9a3e7f2500 100644
--- a/src/platform/web/ui/session/leftpanel/LeftPanelView.js
+++ b/src/platform/web/ui/session/leftpanel/LeftPanelView.js
@@ -29,23 +29,23 @@ class FilterField extends TemplateView {
options.clear();
};
const filterInput = t.input({
- type: "text",
- placeholder: options?.label,
+ "type": "text",
+ "placeholder": options?.label,
"aria-label": options?.label,
- autocomplete: options?.autocomplete,
- enterkeyhint: 'search',
- name: options?.name,
- onInput: event => options.set(event.target.value),
- onKeydown: event => {
+ "autocomplete": options?.autocomplete,
+ "enterkeyhint": "search",
+ "name": options?.name,
+ "onInput": event => options.set(event.target.value),
+ "onKeydown": event => {
if (event.key === "Escape" || event.key === "Esc") {
clear();
}
},
- onFocus: () => filterInput.select()
+ "onFocus": () => filterInput.select()
});
const clearButton = t.button({
- onClick: clear,
- title: options.i18n`Clear`,
+ "onClick": clear,
+ "title": options.i18n`Clear`,
"aria-label": options.i18n`Clear`
});
return t.div({className: "FilterField"}, [filterInput, clearButton]);
@@ -72,7 +72,7 @@ export class LeftPanelView extends TemplateView {
tileVM => new RoomTileView(tileVM)
));
const utilitiesRow = t.div({className: "utilities"}, [
- t.a({className: "button-utility close-session", href: vm.closeUrl, "aria-label": vm.i18n`Back to account list`, title: vm.i18n`Back to account list`}),
+ t.a({"className": "button-utility close-session", "href": vm.closeUrl, "aria-label": vm.i18n`Back to account list`, "title": vm.i18n`Back to account list`}),
t.view(new FilterField({
i18n: vm.i18n,
label: vm.i18n`Filter rooms…`,
@@ -87,20 +87,20 @@ export class LeftPanelView extends TemplateView {
clear: () => vm.clearFilter()
})),
t.button({
- onClick: () => vm.toggleGrid(),
- className: {
+ "onClick": () => vm.toggleGrid(),
+ "className": {
"button-utility": true,
- grid: true,
- on: vm => vm.gridEnabled
+ "grid": true,
+ "on": vm => vm.gridEnabled
},
- title: gridButtonLabel,
+ "title": gridButtonLabel,
"aria-label": gridButtonLabel
}),
- t.a({className: "button-utility settings", href: vm.settingsUrl, "aria-label": vm.i18n`Settings`, title: vm.i18n`Settings`}),
+ t.a({"className": "button-utility settings", "href": vm.settingsUrl, "aria-label": vm.i18n`Settings`, "title": vm.i18n`Settings`}),
t.button({
- className: "button-utility create",
+ "className": "button-utility create",
"aria-label": vm.i18n`Create room`,
- onClick: evt => this._toggleCreateMenu(evt)
+ "onClick": evt => this._toggleCreateMenu(evt)
}),
]);
diff --git a/src/platform/web/ui/session/leftpanel/RoomTileView.js b/src/platform/web/ui/session/leftpanel/RoomTileView.js
index 4875c16746..038753a589 100644
--- a/src/platform/web/ui/session/leftpanel/RoomTileView.js
+++ b/src/platform/web/ui/session/leftpanel/RoomTileView.js
@@ -29,7 +29,7 @@ export class RoomTileView extends TemplateView {
t.a({href: vm.url}, [
t.view(new AvatarView(vm, 32), {parentProvidesUpdates: true}),
t.div({className: "description"}, [
- t.div({className: {"name": true, unread: vm => vm.isUnread}}, vm => vm.name),
+ t.div({className: {"name": true, "unread": vm => vm.isUnread}}, vm => vm.name),
t.map(vm => vm.busy, busy => {
if (busy) {
return spinner(t);
diff --git a/src/platform/web/ui/session/rightpanel/MemberDetailsView.js b/src/platform/web/ui/session/rightpanel/MemberDetailsView.js
index 5d2f9387e3..5e7d7b3bff 100644
--- a/src/platform/web/ui/session/rightpanel/MemberDetailsView.js
+++ b/src/platform/web/ui/session/rightpanel/MemberDetailsView.js
@@ -20,7 +20,7 @@ import {TemplateView} from "../../general/TemplateView";
export class MemberDetailsView extends TemplateView {
render(t, vm) {
return t.div({className: "MemberDetailsView"},
- [ t.view(new AvatarView(vm, 128)),
+ [ t.view(new AvatarView(vm, 128)),
t.div({className: "MemberDetailsView_name"}, t.h2(vm => vm.name)),
t.div({className: "MemberDetailsView_id"}, vm.userId),
this._createSection(t, vm.i18n`Role`, vm => vm.role),
diff --git a/src/platform/web/ui/session/room/InviteView.js b/src/platform/web/ui/session/room/InviteView.js
index 993453609e..1f80dcfd7e 100644
--- a/src/platform/web/ui/session/room/InviteView.js
+++ b/src/platform/web/ui/session/room/InviteView.js
@@ -30,7 +30,7 @@ export class InviteView extends TemplateView {
} else if (vm.inviter) {
inviterNodes = [renderStaticAvatar(vm.inviter, 24), t.strong(vm.inviter.name), ` (${vm.inviter.id}) invited you.`];
} else {
- inviterNodes = `You were invited to join.`;
+ inviterNodes = "You were invited to join.";
}
inviteNodes.push(t.p({className: "InviteView_inviter"}, inviterNodes));
if (!vm.isDirectMessage) {
diff --git a/src/platform/web/ui/session/room/LightboxView.js b/src/platform/web/ui/session/room/LightboxView.js
index 9fbf392a30..0c464fdef0 100644
--- a/src/platform/web/ui/session/room/LightboxView.js
+++ b/src/platform/web/ui/session/room/LightboxView.js
@@ -21,14 +21,14 @@ export class LightboxView extends TemplateView {
render(t, vm) {
const close = t.a({href: vm.closeUrl, title: vm.i18n`Close`, className: "close"});
const image = t.div({
- role: "img",
+ "role": "img",
"aria-label": vm => vm.name,
- title: vm => vm.name,
- className: {
+ "title": vm => vm.name,
+ "className": {
picture: true,
hidden: vm => !vm.imageUrl,
},
- style: vm => `background-image: url('${vm.imageUrl}'); max-width: ${vm.imageWidth}px; max-height: ${vm.imageHeight}px;`
+ "style": vm => `background-image: url('${vm.imageUrl}'); max-width: ${vm.imageWidth}px; max-height: ${vm.imageHeight}px;`
});
const loading = t.div({
className: {
@@ -91,6 +91,6 @@ function trapFocus(t, element) {
}
function focusables(element) {
- return element.querySelectorAll('a[href], button, textarea, input, select');
+ return element.querySelectorAll("a[href], button, textarea, input, select");
}
diff --git a/src/platform/web/ui/session/room/RoomView.js b/src/platform/web/ui/session/room/RoomView.js
index 727fb44ddd..5367b77b36 100644
--- a/src/platform/web/ui/session/room/RoomView.js
+++ b/src/platform/web/ui/session/room/RoomView.js
@@ -42,9 +42,9 @@ export class RoomView extends TemplateView {
t.h2(vm => vm.name),
]),
t.button({
- className: "button-utility room-options",
+ "className": "button-utility room-options",
"aria-label":vm.i18n`Room options`,
- onClick: evt => this._toggleOptionsMenu(evt)
+ "onClick": evt => this._toggleOptionsMenu(evt)
})
]),
t.div({className: "RoomView_body"}, [
diff --git a/src/platform/web/ui/session/room/timeline/AnnouncementView.js b/src/platform/web/ui/session/room/timeline/AnnouncementView.js
index 8b68d33bd5..6161d9d108 100644
--- a/src/platform/web/ui/session/room/timeline/AnnouncementView.js
+++ b/src/platform/web/ui/session/room/timeline/AnnouncementView.js
@@ -24,8 +24,8 @@ export class AnnouncementView extends TemplateView {
render(t, vm) {
return t.li({
- className: "AnnouncementView",
- 'data-event-id': vm.eventId
+ "className": "AnnouncementView",
+ "data-event-id": vm.eventId
}, t.div(vm => vm.announcement));
}
diff --git a/src/platform/web/ui/session/room/timeline/BaseMediaView.js b/src/platform/web/ui/session/room/timeline/BaseMediaView.js
index bc49b3f661..69e25b887b 100644
--- a/src/platform/web/ui/session/room/timeline/BaseMediaView.js
+++ b/src/platform/web/ui/session/room/timeline/BaseMediaView.js
@@ -53,7 +53,7 @@ export class BaseMediaView extends BaseMessageView {
children.push(progress);
}
return t.div({className: "Timeline_messageBody"}, [
- t.div({className: "media", style: `max-width: ${vm.width}px`, "data-testid": "media"}, children),
+ t.div({"className": "media", "style": `max-width: ${vm.width}px`, "data-testid": "media"}, children),
t.if(vm => vm.error, t => t.p({className: "error"}, vm.error))
]);
}
diff --git a/src/platform/web/ui/session/room/timeline/BaseMessageView.js b/src/platform/web/ui/session/room/timeline/BaseMessageView.js
index d998e8269b..6fe26f10c7 100644
--- a/src/platform/web/ui/session/room/timeline/BaseMessageView.js
+++ b/src/platform/web/ui/session/room/timeline/BaseMessageView.js
@@ -42,15 +42,15 @@ export class BaseMessageView extends TemplateView {
children.push(t.button({className: "Timeline_messageOptions"}, "⋯"));
}
const li = t.el(this._tagName, {
- className: {
+ "className": {
"Timeline_message": true,
- own: vm.isOwn,
- unsent: vm.isUnsent,
- unverified: vm => vm.isUnverified,
- disabled: !this._interactive,
- continuation: vm => vm.isContinuation,
+ "own": vm.isOwn,
+ "unsent": vm.isUnsent,
+ "unverified": vm => vm.isUnverified,
+ "disabled": !this._interactive,
+ "continuation": vm => vm.isContinuation,
},
- 'data-event-id': vm.eventId
+ "data-event-id": vm.eventId
}, children);
// given that there can be many tiles, we don't add
// unneeded DOM nodes in case of a continuation, and we add it
diff --git a/src/platform/web/ui/session/room/timeline/ReactionsView.js b/src/platform/web/ui/session/room/timeline/ReactionsView.js
index 5e4c97bcbf..52c0af2bea 100644
--- a/src/platform/web/ui/session/room/timeline/ReactionsView.js
+++ b/src/platform/web/ui/session/room/timeline/ReactionsView.js
@@ -24,7 +24,7 @@ export class ReactionsView extends ListView {
tagName: "div",
list: reactionsViewModel.reactions,
onItemClick: reactionView => reactionView.onClick(),
- }
+ };
super(options, reactionVM => new ReactionView(reactionVM));
}
}
diff --git a/src/platform/web/ui/session/room/timeline/ReplyPreviewView.js b/src/platform/web/ui/session/room/timeline/ReplyPreviewView.js
index 219e435775..a07b76dbe6 100644
--- a/src/platform/web/ui/session/room/timeline/ReplyPreviewView.js
+++ b/src/platform/web/ui/session/room/timeline/ReplyPreviewView.js
@@ -25,7 +25,7 @@ export class ReplyPreviewView extends TemplateView {
render(t, vm) {
const TileView = this._viewClassForTile(vm);
if (!TileView) {
- throw new Error(`Shape ${vm.shape} is unrecognized.`)
+ throw new Error(`Shape ${vm.shape} is unrecognized.`);
}
const view = new TileView(vm, this._viewClassForTile, { reply: true, interactive: false });
return t.div(
diff --git a/src/platform/web/ui/session/room/timeline/TextMessageView.js b/src/platform/web/ui/session/room/timeline/TextMessageView.js
index a6741de7db..e1bdf7a701 100644
--- a/src/platform/web/ui/session/room/timeline/TextMessageView.js
+++ b/src/platform/web/ui/session/room/timeline/TextMessageView.js
@@ -24,7 +24,7 @@ export class TextMessageView extends BaseMessageView {
const container = t.div({
className: {
"Timeline_messageBody": true,
- statusMessage: vm => vm.shape === "message-status",
+ "statusMessage": vm => vm.shape === "message-status",
}
}, t.mapView(vm => vm.replyTile, replyTile => {
if (this._isReplyPreview) {
@@ -71,10 +71,10 @@ function renderList(listBlock) {
function renderImage(imagePart) {
const attributes = { src: imagePart.src };
- if (imagePart.width) { attributes.width = imagePart.width }
- if (imagePart.height) { attributes.height = imagePart.height }
- if (imagePart.alt) { attributes.alt = imagePart.alt }
- if (imagePart.title) { attributes.title = imagePart.title }
+ if (imagePart.width) { attributes.width = imagePart.width; }
+ if (imagePart.height) { attributes.height = imagePart.height; }
+ if (imagePart.alt) { attributes.alt = imagePart.alt; }
+ if (imagePart.title) { attributes.title = imagePart.title; }
return tag.img(attributes);
}
@@ -94,7 +94,7 @@ function renderTable(tablePart) {
if (tablePart.head) {
const headers = tablePart.head
.map(cell => tag.th(renderParts(cell)));
- children.push(tag.thead(tag.tr(headers)))
+ children.push(tag.thead(tag.tr(headers)));
}
const rows = [];
for (const row of tablePart.body) {
diff --git a/src/platform/web/ui/session/settings/KeyBackupSettingsView.js b/src/platform/web/ui/session/settings/KeyBackupSettingsView.js
index a68a80b3ed..ee960e65bc 100644
--- a/src/platform/web/ui/session/settings/KeyBackupSettingsView.js
+++ b/src/platform/web/ui/session/settings/KeyBackupSettingsView.js
@@ -37,7 +37,7 @@ export class KeyBackupSettingsView extends TemplateView {
max: 100,
value: vm => vm.backupPercentage,
});
- return t.div([`Backup in progress `, progress, " ", vm => vm.backupInProgressLabel]);
+ return t.div(["Backup in progress ", progress, " ", vm => vm.backupInProgressLabel]);
}
case "Stopped": {
let label;
@@ -45,27 +45,26 @@ export class KeyBackupSettingsView extends TemplateView {
if (error) {
label = `Backup has stopped because of an error: ${vm.backupError}`;
} else {
- label = `Backup has stopped`;
+ label = "Backup has stopped";
}
- return t.p(label, " ", t.button({onClick: () => vm.startBackup()}, `Backup now`));
+ return t.p(label, " ", t.button({onClick: () => vm.startBackup()}, "Backup now"));
}
case "Done":
- return t.p(`All keys are backed up.`);
+ return t.p("All keys are backed up.");
default:
return null;
}
}),
t.if(vm => vm.isMasterKeyTrusted, t => {
- return t.p("Cross-signing master key found and trusted.")
+ return t.p("Cross-signing master key found and trusted.");
}),
t.if(vm => vm.canSignOwnDevice, t => {
return t.button({
- onClick: disableTargetCallback(async evt => {
+ onClick: disableTargetCallback(async () => {
await vm.signOwnDevice();
})
}, "Sign own device");
}),
-
]);
}
}
@@ -125,7 +124,7 @@ function renderEnableFieldRow(t, vm, label, callback) {
t.label({for: setupDehydrationCheck.id}, [vm.i18n`Back up my device as well (`, moreInfo, ")"])
]));
}
- return t.div({className: `row`}, [
+ return t.div({className: "row"}, [
t.div({className: "label"}, label),
t.div({className: "content"}, children),
]);
@@ -136,7 +135,7 @@ function renderError(t) {
return t.div([
t.p({className: "error"}, vm => vm.i18n`Could not enable key backup: ${vm.error}.`),
t.p(vm.i18n`Try double checking that you did not mix up your security key, security phrase and login password as explained above.`)
- ])
+ ]);
});
}
diff --git a/src/platform/web/ui/session/settings/SettingsView.js b/src/platform/web/ui/session/settings/SettingsView.js
index aea1108af0..0bbf40a1b1 100644
--- a/src/platform/web/ui/session/settings/SettingsView.js
+++ b/src/platform/web/ui/session/settings/SettingsView.js
@@ -16,8 +16,8 @@ limitations under the License.
import {TemplateView} from "../../general/TemplateView";
import {disableTargetCallback} from "../../general/utils";
-import {KeyBackupSettingsView} from "./KeyBackupSettingsView.js"
-import {FeaturesView} from "./FeaturesView"
+import {KeyBackupSettingsView} from "./KeyBackupSettingsView.js";
+import {FeaturesView} from "./FeaturesView";
export class SettingsView extends TemplateView {
render(t, vm) {