Merge branch 'develop' into fix/space-shortcut-local/17776
This commit is contained in:
commit
43695fbc58
55 changed files with 465 additions and 1049 deletions
|
@ -25,17 +25,16 @@ window.React = React;
|
|||
|
||||
import * as sdk from 'matrix-react-sdk';
|
||||
import PlatformPeg from 'matrix-react-sdk/src/PlatformPeg';
|
||||
import {_td, newTranslatableError} from 'matrix-react-sdk/src/languageHandler';
|
||||
import { _td, newTranslatableError } from 'matrix-react-sdk/src/languageHandler';
|
||||
import AutoDiscoveryUtils from 'matrix-react-sdk/src/utils/AutoDiscoveryUtils';
|
||||
import {AutoDiscovery} from "matrix-js-sdk/src/autodiscovery";
|
||||
import { AutoDiscovery } from "matrix-js-sdk/src/autodiscovery";
|
||||
import * as Lifecycle from "matrix-react-sdk/src/Lifecycle";
|
||||
import type MatrixChatType from "matrix-react-sdk/src/components/structures/MatrixChat";
|
||||
import {MatrixClientPeg} from 'matrix-react-sdk/src/MatrixClientPeg';
|
||||
import SdkConfig from "matrix-react-sdk/src/SdkConfig";
|
||||
|
||||
import {parseQs, parseQsFromFragment} from './url_utils';
|
||||
import { parseQs, parseQsFromFragment } from './url_utils';
|
||||
import VectorBasePlatform from "./platform/VectorBasePlatform";
|
||||
import {createClient} from "matrix-js-sdk/src/matrix";
|
||||
import { createClient } from "matrix-js-sdk/src/matrix";
|
||||
|
||||
let lastLocationHashSet: string = null;
|
||||
|
||||
|
@ -129,18 +128,6 @@ function onTokenLoginCompleted() {
|
|||
}
|
||||
|
||||
export async function loadApp(fragParams: {}) {
|
||||
// XXX: the way we pass the path to the worker script from webpack via html in body's dataset is a hack
|
||||
// but alternatives seem to require changing the interface to passing Workers to js-sdk
|
||||
const vectorIndexeddbWorkerScript = document.body.dataset.vectorIndexeddbWorkerScript;
|
||||
if (!vectorIndexeddbWorkerScript) {
|
||||
// If this is missing, something has probably gone wrong with
|
||||
// the bundling. The js-sdk will just fall back to accessing
|
||||
// indexeddb directly with no worker script, but we want to
|
||||
// make sure the indexeddb script is present, so fail hard.
|
||||
throw newTranslatableError(_td("Missing indexeddb worker script!"));
|
||||
}
|
||||
MatrixClientPeg.setIndexedDbWorkerScript(vectorIndexeddbWorkerScript);
|
||||
|
||||
window.addEventListener('hashchange', onHashChange);
|
||||
|
||||
const platform = PlatformPeg.get();
|
||||
|
@ -257,12 +244,12 @@ async function verifyServerConfig() {
|
|||
|
||||
validatedConfig = AutoDiscoveryUtils.buildValidatedConfigFromDiscovery(serverName, discoveryResult, true);
|
||||
} catch (e) {
|
||||
const {hsUrl, isUrl, userId} = await Lifecycle.getStoredSessionVars();
|
||||
const { hsUrl, isUrl, userId } = await Lifecycle.getStoredSessionVars();
|
||||
if (hsUrl && userId) {
|
||||
console.error(e);
|
||||
console.warn("A session was found - suppressing config error and using the session's homeserver");
|
||||
|
||||
console.log("Using pre-existing hsUrl and isUrl: ", {hsUrl, isUrl});
|
||||
console.log("Using pre-existing hsUrl and isUrl: ", { hsUrl, isUrl });
|
||||
validatedConfig = await AutoDiscoveryUtils.validateServerConfigWithStaticUrls(hsUrl, isUrl, true);
|
||||
} else {
|
||||
// the user is not logged in, so scream
|
||||
|
@ -277,7 +264,7 @@ async function verifyServerConfig() {
|
|||
|
||||
// Add the newly built config to the actual config for use by the app
|
||||
console.log("Updating SdkConfig with validated discovery information");
|
||||
SdkConfig.add({"validated_server_config": validatedConfig});
|
||||
SdkConfig.add({ "validated_server_config": validatedConfig });
|
||||
|
||||
return SdkConfig.get();
|
||||
}
|
||||
|
|
|
@ -55,7 +55,7 @@ function getConfig(configJsonFilename: string): Promise<{}> {
|
|||
resolve({});
|
||||
}
|
||||
}
|
||||
reject({err: err, response: response});
|
||||
reject({ err: err, response: response });
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -65,7 +65,7 @@ function getConfig(configJsonFilename: string): Promise<{}> {
|
|||
// loading from the filesystem (see above).
|
||||
resolve(JSON.parse(body));
|
||||
} catch (e) {
|
||||
reject({err: e});
|
||||
reject({ err: e });
|
||||
}
|
||||
},
|
||||
);
|
||||
|
|
|
@ -35,7 +35,6 @@
|
|||
worker-src 'self';
|
||||
frame-src * blob: data:;
|
||||
form-action 'self';
|
||||
object-src 'self';
|
||||
manifest-src 'self';
|
||||
">
|
||||
<% for (var i=0; i < htmlWebpackPlugin.files.css.length; i++) {
|
||||
|
@ -61,11 +60,10 @@
|
|||
</head>
|
||||
<body
|
||||
style="height: 100%; margin: 0;"
|
||||
data-vector-indexeddb-worker-script="<%= htmlWebpackPlugin.files.js.find(entry => entry.includes("indexeddb-worker.js")) %>"
|
||||
data-vector-recorder-worklet-script="<%= htmlWebpackPlugin.files.js.find(entry => entry.includes("recorder-worklet.js")) %>"
|
||||
>
|
||||
<noscript>Sorry, Element requires JavaScript to be enabled.</noscript> <!-- TODO: Translate this? -->
|
||||
<section id="matrixchat" style="height: 100%; overflow: auto;" class="notranslate"></section>
|
||||
<section id="matrixchat" style="height: 100%;" class="notranslate"></section>
|
||||
<script src="<%= htmlWebpackPlugin.files.js.find(entry => entry.includes("bundle.js")) %>"></script>
|
||||
|
||||
<!-- Legacy supporting Prefetch images -->
|
||||
|
|
|
@ -26,7 +26,7 @@ require('highlight.js/styles/github.css');
|
|||
require('katex/dist/katex.css');
|
||||
|
||||
// These are things that can run before the skin loads - be careful not to reference the react-sdk though.
|
||||
import {parseQsFromFragment} from "./url_utils";
|
||||
import { parseQsFromFragment } from "./url_utils";
|
||||
import './modernizr';
|
||||
|
||||
async function settled(...promises: Array<Promise<any>>) {
|
||||
|
|
|
@ -14,8 +14,8 @@ See the License for the specific language governing permissions and
|
|||
limitations under the License.
|
||||
*/
|
||||
|
||||
import {IndexedDBStoreWorker} from 'matrix-js-sdk/src/indexeddb-worker.js';
|
||||
import { IndexedDBStoreWorker } from 'matrix-js-sdk/src/indexeddb-worker';
|
||||
|
||||
const remoteWorker = new IndexedDBStoreWorker(postMessage);
|
||||
const remoteWorker = new IndexedDBStoreWorker(postMessage as InstanceType<typeof Worker>["postMessage"]);
|
||||
|
||||
global.onmessage = remoteWorker.onMessage;
|
|
@ -31,10 +31,9 @@ import PWAPlatform from "./platform/PWAPlatform";
|
|||
import WebPlatform from "./platform/WebPlatform";
|
||||
import PlatformPeg from "matrix-react-sdk/src/PlatformPeg";
|
||||
import SdkConfig from "matrix-react-sdk/src/SdkConfig";
|
||||
import {setTheme} from "matrix-react-sdk/src/theme";
|
||||
|
||||
import {initRageshake, initRageshakeStore} from "./rageshakesetup";
|
||||
import { setTheme } from "matrix-react-sdk/src/theme";
|
||||
|
||||
import { initRageshake, initRageshakeStore } from "./rageshakesetup";
|
||||
|
||||
export const rageshakePromise = initRageshake();
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ limitations under the License.
|
|||
require("./index.scss");
|
||||
|
||||
import * as qs from 'querystring';
|
||||
import {KJUR} from 'jsrsasign';
|
||||
import { KJUR } from 'jsrsasign';
|
||||
import {
|
||||
IOpenIDCredentials,
|
||||
IWidgetApiRequest,
|
||||
|
@ -138,7 +138,7 @@ let meetApi: any; // JitsiMeetExternalAPI
|
|||
});
|
||||
widgetApi.transport.reply(ev.detail, {}); // ack
|
||||
} else {
|
||||
widgetApi.transport.reply(ev.detail, {error: {message: "Conference not joined"}});
|
||||
widgetApi.transport.reply(ev.detail, { error: { message: "Conference not joined" } });
|
||||
}
|
||||
},
|
||||
);
|
||||
|
@ -168,7 +168,7 @@ function switchVisibleContainers() {
|
|||
*/
|
||||
function createJWTToken() {
|
||||
// Header
|
||||
const header = {alg: 'HS256', typ: 'JWT'};
|
||||
const header = { alg: 'HS256', typ: 'JWT' };
|
||||
// Payload
|
||||
const payload = {
|
||||
// As per Jitsi token auth, `iss` needs to be set to something agreed between
|
||||
|
|
|
@ -326,7 +326,7 @@ body {
|
|||
<a class="mx_Button" id="configure_element_button" href="#">Configure</a>
|
||||
<p class="mx_Subtext mx_SubtextTop">Tap the button above, or manually enable <em>Use custom server</em> and enter:</p>
|
||||
<p class="mx_Subtext">Homeserver: <em id="hs_url"></em></p>
|
||||
<p class="mx_Subtext" id="custom_is">Identity Server: <em id="is_url"></em></p>
|
||||
<p class="mx_Subtext" id="custom_is">Identity server: <em id="is_url"></em></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,19 +1,21 @@
|
|||
import {getVectorConfig} from '../getconfig';
|
||||
import { getVectorConfig } from '../getconfig';
|
||||
|
||||
function onBackToElementClick() {
|
||||
function onBackToElementClick(): void {
|
||||
// Cookie should expire in 4 hours
|
||||
document.cookie = 'element_mobile_redirect_to_guide=false;path=/;max-age=14400';
|
||||
window.location.href = '../';
|
||||
}
|
||||
|
||||
// NEVER pass user-controlled content to this function! Hardcoded strings only please.
|
||||
function renderConfigError(message) {
|
||||
function renderConfigError(message: string): void {
|
||||
const contactMsg = "If this is unexpected, please contact your system administrator " +
|
||||
"or technical support representative.";
|
||||
message = `<h2>Error loading Element</h2><p>${message}</p><p>${contactMsg}</p>`;
|
||||
|
||||
const toHide = document.getElementsByClassName("mx_HomePage_container");
|
||||
const errorContainers = document.getElementsByClassName("mx_HomePage_errorContainer");
|
||||
const errorContainers = document.getElementsByClassName(
|
||||
"mx_HomePage_errorContainer",
|
||||
) as HTMLCollectionOf<HTMLDialogElement>;
|
||||
|
||||
for (const e of toHide) {
|
||||
// We have to clear the content because .style.display='none'; doesn't work
|
||||
|
@ -26,7 +28,7 @@ function renderConfigError(message) {
|
|||
}
|
||||
}
|
||||
|
||||
async function initPage() {
|
||||
async function initPage(): Promise<void> {
|
||||
document.getElementById('back_to_element_button').onclick = onBackToElementClick;
|
||||
|
||||
const config = await getVectorConfig('..');
|
||||
|
@ -92,7 +94,7 @@ async function initPage() {
|
|||
if (isUrl && !isUrl.endsWith('/')) isUrl += '/';
|
||||
|
||||
if (hsUrl !== 'https://matrix.org/') {
|
||||
document.getElementById('configure_element_button').href =
|
||||
(document.getElementById('configure_element_button') as HTMLAnchorElement).href =
|
||||
"https://mobile.element.io?hs_url=" + encodeURIComponent(hsUrl) +
|
||||
"&is_url=" + encodeURIComponent(isUrl);
|
||||
document.getElementById('step1_heading').innerHTML= '1: Install the app';
|
File diff suppressed because one or more lines are too long
|
@ -22,10 +22,7 @@ import BaseEventIndexManager, {
|
|||
ICrawlerCheckpoint,
|
||||
IEventAndProfile,
|
||||
IIndexStats,
|
||||
IMatrixEvent,
|
||||
IMatrixProfile,
|
||||
ISearchArgs,
|
||||
ISearchResult,
|
||||
} from 'matrix-react-sdk/src/indexing/BaseEventIndexManager';
|
||||
import dis from 'matrix-react-sdk/src/dispatcher/dispatcher';
|
||||
import { _t, _td } from 'matrix-react-sdk/src/languageHandler';
|
||||
|
@ -48,12 +45,13 @@ import React from "react";
|
|||
import { randomString } from "matrix-js-sdk/src/randomstring";
|
||||
import { Action } from "matrix-react-sdk/src/dispatcher/actions";
|
||||
import { ActionPayload } from "matrix-react-sdk/src/dispatcher/payloads";
|
||||
import { SwitchSpacePayload} from "matrix-react-sdk/src/dispatcher/payloads/SwitchSpacePayload";
|
||||
import { SwitchSpacePayload } from "matrix-react-sdk/src/dispatcher/payloads/SwitchSpacePayload";
|
||||
import { showToast as showUpdateToast } from "matrix-react-sdk/src/toasts/UpdateToast";
|
||||
import { CheckUpdatesPayload } from "matrix-react-sdk/src/dispatcher/payloads/CheckUpdatesPayload";
|
||||
import ToastStore from "matrix-react-sdk/src/stores/ToastStore";
|
||||
import GenericExpiringToast from "matrix-react-sdk/src/components/views/toasts/GenericExpiringToast";
|
||||
import SettingsStore from 'matrix-react-sdk/src/settings/SettingsStore';
|
||||
import { IMatrixProfile, IEventWithRoomId as IMatrixEvent, IResultRoomEvents } from "matrix-js-sdk/src/@types/search";
|
||||
|
||||
import VectorBasePlatform from './VectorBasePlatform';
|
||||
|
||||
|
@ -119,8 +117,8 @@ class SeshatIndexManager extends BaseEventIndexManager {
|
|||
// TODO this should be moved into the preload.js file.
|
||||
const ipcCallId = ++this.nextIpcCallId;
|
||||
return new Promise((resolve, reject) => {
|
||||
this.pendingIpcCalls[ipcCallId] = {resolve, reject};
|
||||
window.electron.send('seshat', {id: ipcCallId, name, args});
|
||||
this.pendingIpcCalls[ipcCallId] = { resolve, reject };
|
||||
window.electron.send('seshat', { id: ipcCallId, name, args });
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -172,7 +170,7 @@ class SeshatIndexManager extends BaseEventIndexManager {
|
|||
return this._ipcCall('commitLiveEvents');
|
||||
}
|
||||
|
||||
async searchEventIndex(searchConfig: ISearchArgs): Promise<ISearchResult> {
|
||||
async searchEventIndex(searchConfig: ISearchArgs): Promise<IResultRoomEvents> {
|
||||
return this._ipcCall('searchEventIndex', searchConfig);
|
||||
}
|
||||
|
||||
|
@ -258,9 +256,9 @@ export default class ElectronPlatform extends VectorBasePlatform {
|
|||
dis.fire(Action.ViewUserSettings);
|
||||
});
|
||||
|
||||
electron.on('userDownloadCompleted', (ev, {path, name}) => {
|
||||
electron.on('userDownloadCompleted', (ev, { path, name }) => {
|
||||
const onAccept = () => {
|
||||
electron.send('userDownloadOpen', {path});
|
||||
electron.send('userDownloadOpen', { path });
|
||||
};
|
||||
|
||||
ToastStore.sharedInstance().addOrReplaceToast({
|
||||
|
@ -326,7 +324,7 @@ export default class ElectronPlatform extends VectorBasePlatform {
|
|||
return this._ipcCall('getConfig');
|
||||
}
|
||||
|
||||
onUpdateDownloaded = async (ev, {releaseNotes, releaseName}) => {
|
||||
onUpdateDownloaded = async (ev, { releaseNotes, releaseName }) => {
|
||||
dis.dispatch<CheckUpdatesPayload>({
|
||||
action: Action.CheckUpdates,
|
||||
status: UpdateCheckStatus.Ready,
|
||||
|
@ -497,8 +495,8 @@ export default class ElectronPlatform extends VectorBasePlatform {
|
|||
async _ipcCall(name: string, ...args: any[]): Promise<any> {
|
||||
const ipcCallId = ++this.nextIpcCallId;
|
||||
return new Promise((resolve, reject) => {
|
||||
this.pendingIpcCalls[ipcCallId] = {resolve, reject};
|
||||
window.electron.send('ipcCall', {id: ipcCallId, name, args});
|
||||
this.pendingIpcCalls[ipcCallId] = { resolve, reject };
|
||||
window.electron.send('ipcCall', { id: ipcCallId, name, args });
|
||||
// Maybe add a timeout to these? Probably not necessary.
|
||||
});
|
||||
}
|
||||
|
@ -593,8 +591,9 @@ export default class ElectronPlatform extends VectorBasePlatform {
|
|||
break;
|
||||
}
|
||||
|
||||
if (
|
||||
!handled &&
|
||||
if (!handled &&
|
||||
// ideally we would use SpaceStore.spacesEnabled here but importing SpaceStore in this platform
|
||||
// breaks skinning as the platform is instantiated prior to the skin being loaded
|
||||
SettingsStore.getValue("feature_spaces") &&
|
||||
ev.code.startsWith("Digit") &&
|
||||
isOnlyCtrlOrCmdKeyEvent(ev)
|
||||
|
|
|
@ -18,8 +18,8 @@ limitations under the License.
|
|||
*/
|
||||
|
||||
import BasePlatform from 'matrix-react-sdk/src/BasePlatform';
|
||||
import {_t} from 'matrix-react-sdk/src/languageHandler';
|
||||
import {getVectorConfig} from "../getconfig";
|
||||
import { _t } from 'matrix-react-sdk/src/languageHandler';
|
||||
import { getVectorConfig } from "../getconfig";
|
||||
|
||||
import Favicon from "../../favicon";
|
||||
|
||||
|
|
|
@ -17,13 +17,13 @@ limitations under the License.
|
|||
*/
|
||||
|
||||
import VectorBasePlatform from './VectorBasePlatform';
|
||||
import {UpdateCheckStatus} from "matrix-react-sdk/src/BasePlatform";
|
||||
import { UpdateCheckStatus } from "matrix-react-sdk/src/BasePlatform";
|
||||
import request from 'browser-request';
|
||||
import dis from 'matrix-react-sdk/src/dispatcher/dispatcher';
|
||||
import {_t} from 'matrix-react-sdk/src/languageHandler';
|
||||
import {Room} from "matrix-js-sdk/src/models/room";
|
||||
import {hideToast as hideUpdateToast, showToast as showUpdateToast} from "matrix-react-sdk/src/toasts/UpdateToast";
|
||||
import {Action} from "matrix-react-sdk/src/dispatcher/actions";
|
||||
import { _t } from 'matrix-react-sdk/src/languageHandler';
|
||||
import { Room } from "matrix-js-sdk/src/models/room";
|
||||
import { hideToast as hideUpdateToast, showToast as showUpdateToast } from "matrix-react-sdk/src/toasts/UpdateToast";
|
||||
import { Action } from "matrix-react-sdk/src/dispatcher/actions";
|
||||
import { CheckUpdatesPayload } from 'matrix-react-sdk/src/dispatcher/payloads/CheckUpdatesPayload';
|
||||
|
||||
import UAParser from 'ua-parser-js';
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue