Fix navigation stuck after hashchange
Fix iOS video upload Fix some translations
This commit is contained in:
parent
39ca6bfdd0
commit
a43a0357bc
@ -265,5 +265,5 @@ class AppMediaPlaybackController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const appMediaPlaybackController = new AppMediaPlaybackController();
|
const appMediaPlaybackController = new AppMediaPlaybackController();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.appMediaPlaybackController = appMediaPlaybackController);
|
MOUNT_CLASS_TO.appMediaPlaybackController = appMediaPlaybackController;
|
||||||
export default appMediaPlaybackController;
|
export default appMediaPlaybackController;
|
||||||
|
@ -17,14 +17,23 @@ export class AppNavigationController {
|
|||||||
private manual = false;
|
private manual = false;
|
||||||
private log = logger('NC');
|
private log = logger('NC');
|
||||||
private debug = true;
|
private debug = true;
|
||||||
|
private currentHash = window.location.hash;
|
||||||
|
public onHashChange: () => void;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
let isPossibleSwipe = false;
|
let isPossibleSwipe = false;
|
||||||
window.addEventListener('popstate', (e) => {
|
window.addEventListener('popstate', (e) => {
|
||||||
this.debug && this.log('popstate', e, isPossibleSwipe);
|
this.debug && this.log('popstate', e, isPossibleSwipe);
|
||||||
|
|
||||||
|
if(window.location.hash !== this.currentHash) {
|
||||||
|
this.onHashChange && this.onHashChange();
|
||||||
|
this.replaceState();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.currentHash = window.location.hash;
|
||||||
|
|
||||||
const id: number = e.state;
|
const id: number = e.state;
|
||||||
if(id !== this.id) {
|
if(id !== this.id/* && !this.navigations.length */) {
|
||||||
this.pushState();
|
this.pushState();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -148,7 +157,7 @@ export class AppNavigationController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public replaceState() {
|
public replaceState() {
|
||||||
history.replaceState(this.id, '');
|
history.replaceState(this.id, '', location.origin + location.pathname);
|
||||||
}
|
}
|
||||||
|
|
||||||
public removeItem(item: NavigationItem) {
|
public removeItem(item: NavigationItem) {
|
||||||
@ -170,5 +179,5 @@ export class AppNavigationController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const appNavigationController = new AppNavigationController();
|
const appNavigationController = new AppNavigationController();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.appNavigationController = appNavigationController);
|
MOUNT_CLASS_TO.appNavigationController = appNavigationController;
|
||||||
export default appNavigationController;
|
export default appNavigationController;
|
||||||
|
@ -101,7 +101,7 @@ export default class AppSelectPeers {
|
|||||||
if(this.placeholder) {
|
if(this.placeholder) {
|
||||||
_i18n(this.input, this.placeholder, undefined, 'placeholder');
|
_i18n(this.input, this.placeholder, undefined, 'placeholder');
|
||||||
} else {
|
} else {
|
||||||
_i18n(this.input, !this.peerType.includes('dialogs') ? 'SendMessageTo' : 'SelectChat', undefined, 'placeholder');
|
_i18n(this.input, 'SendMessageTo', undefined, 'placeholder');
|
||||||
}
|
}
|
||||||
|
|
||||||
this.input.type = 'text';
|
this.input.type = 'text';
|
||||||
|
@ -2356,7 +2356,7 @@ export default class ChatBubbles {
|
|||||||
|
|
||||||
default:
|
default:
|
||||||
bubble.classList.remove('is-message-empty');
|
bubble.classList.remove('is-message-empty');
|
||||||
messageDiv.innerHTML = 'unrecognized media type: ' + message.media._;
|
messageDiv.innerHTML = '<i class="media-not-supported">This message is currently not supported on Telegram Web. Try <a href="https://desktop.telegram.org/" target="_blank">desktop.telegram.org</a></i>';
|
||||||
messageDiv.append(timeSpan);
|
messageDiv.append(timeSpan);
|
||||||
this.log.warn('unrecognized media type:', message.media._, message);
|
this.log.warn('unrecognized media type:', message.media._, message);
|
||||||
break;
|
break;
|
||||||
|
@ -424,5 +424,5 @@ export class EmoticonsDropdown {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const emoticonsDropdown = new EmoticonsDropdown();
|
const emoticonsDropdown = new EmoticonsDropdown();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.emoticonsDropdown = emoticonsDropdown);
|
MOUNT_CLASS_TO.emoticonsDropdown = emoticonsDropdown;
|
||||||
export default emoticonsDropdown;
|
export default emoticonsDropdown;
|
||||||
|
@ -77,7 +77,7 @@ export function putPreloader(elem: Element, returnDiv = false): HTMLElement {
|
|||||||
return elem.lastElementChild as HTMLElement;
|
return elem.lastElementChild as HTMLElement;
|
||||||
}
|
}
|
||||||
|
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.putPreloader = putPreloader);
|
MOUNT_CLASS_TO.putPreloader = putPreloader;
|
||||||
|
|
||||||
export function setButtonLoader(elem: HTMLButtonElement, icon = 'check') {
|
export function setButtonLoader(elem: HTMLButtonElement, icon = 'check') {
|
||||||
elem.classList.remove('tgico-' + icon);
|
elem.classList.remove('tgico-' + icon);
|
||||||
|
@ -11,7 +11,7 @@ export type PeerTitleOptions = {
|
|||||||
|
|
||||||
const weakMap: WeakMap<HTMLElement, PeerTitle> = new WeakMap();
|
const weakMap: WeakMap<HTMLElement, PeerTitle> = new WeakMap();
|
||||||
|
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.peerTitleWeakMap = weakMap);
|
MOUNT_CLASS_TO.peerTitleWeakMap = weakMap;
|
||||||
|
|
||||||
rootScope.on('peer_title_edit', (peerId) => {
|
rootScope.on('peer_title_edit', (peerId) => {
|
||||||
const elements = Array.from(document.querySelectorAll(`.peer-title[data-peer-id="${peerId}"]`)) as HTMLElement[];
|
const elements = Array.from(document.querySelectorAll(`.peer-title[data-peer-id="${peerId}"]`)) as HTMLElement[];
|
||||||
|
@ -238,11 +238,15 @@ export default class PopupNewMedia extends PopupElement {
|
|||||||
const video = document.createElement('video');
|
const video = document.createElement('video');
|
||||||
const source = document.createElement('source');
|
const source = document.createElement('source');
|
||||||
source.src = params.objectURL = URL.createObjectURL(file);
|
source.src = params.objectURL = URL.createObjectURL(file);
|
||||||
video.autoplay = false;
|
video.autoplay = true;
|
||||||
video.controls = false;
|
video.controls = false;
|
||||||
video.muted = true;
|
video.muted = true;
|
||||||
video.setAttribute('playsinline', 'true');
|
video.setAttribute('playsinline', 'true');
|
||||||
|
|
||||||
|
video.addEventListener('timeupdate', () => {
|
||||||
|
video.pause();
|
||||||
|
}, {once: true});
|
||||||
|
|
||||||
onVideoLoad(video).then(() => {
|
onVideoLoad(video).then(() => {
|
||||||
params.width = video.videoWidth;
|
params.width = video.videoWidth;
|
||||||
params.height = video.videoHeight;
|
params.height = video.videoHeight;
|
||||||
|
@ -499,5 +499,5 @@ export const generateSection = (appendTo: Scrollable, name?: LangPackKey, captio
|
|||||||
};
|
};
|
||||||
|
|
||||||
const appSidebarLeft = new AppSidebarLeft();
|
const appSidebarLeft = new AppSidebarLeft();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.appSidebarLeft = appSidebarLeft);
|
MOUNT_CLASS_TO.appSidebarLeft = appSidebarLeft;
|
||||||
export default appSidebarLeft;
|
export default appSidebarLeft;
|
||||||
|
@ -125,5 +125,5 @@ export class AppSidebarRight extends SidebarSlider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const appSidebarRight = new AppSidebarRight();
|
const appSidebarRight = new AppSidebarRight();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.appSidebarRight = appSidebarRight);
|
MOUNT_CLASS_TO.appSidebarRight = appSidebarRight;
|
||||||
export default appSidebarRight;
|
export default appSidebarRight;
|
||||||
|
@ -303,7 +303,7 @@ export function wrapVideo({doc, container, message, boxWidth, boxHeight, withTai
|
|||||||
} else if(doc.supportsStreaming) {
|
} else if(doc.supportsStreaming) {
|
||||||
if(noAutoDownload) {
|
if(noAutoDownload) {
|
||||||
loadPromise = Promise.reject();
|
loadPromise = Promise.reject();
|
||||||
} else {
|
} else if(!doc.downloaded) { // * check for uploading video
|
||||||
preloader.attach(container, false, null);
|
preloader.attach(container, false, null);
|
||||||
video.addEventListener(isSafari ? 'timeupdate' : 'canplay', () => {
|
video.addEventListener(isSafari ? 'timeupdate' : 'canplay', () => {
|
||||||
preloader.detach();
|
preloader.detach();
|
||||||
|
@ -1,9 +1,24 @@
|
|||||||
import Modes from "./modes";
|
import Modes from "./modes";
|
||||||
|
|
||||||
export const DEBUG = process.env.NODE_ENV !== 'production' || Modes.debug;
|
export const DEBUG = process.env.NODE_ENV !== 'production' || Modes.debug;
|
||||||
export const MOUNT_CLASS_TO: any = DEBUG ? (typeof(window) !== 'undefined' ? window : self) : null;
|
const ctx: any = typeof(window) !== 'undefined' ? window : self;
|
||||||
|
export const MOUNT_CLASS_TO: any = DEBUG/* && false */ ? ctx : {};
|
||||||
export default DEBUG;
|
export default DEBUG;
|
||||||
|
|
||||||
|
//let m = DEBUG;
|
||||||
|
if(!DEBUG/* || true */) {
|
||||||
|
ctx.sandpitTurtle = () => {
|
||||||
|
//if(!m) {
|
||||||
|
for(let i in MOUNT_CLASS_TO) {
|
||||||
|
ctx[i] = MOUNT_CLASS_TO[i];
|
||||||
|
}
|
||||||
|
//m = true;
|
||||||
|
//}
|
||||||
|
|
||||||
|
//DEBUG = !DEBUG;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
/* export const superDebug = (object: any, key: string) => {
|
/* export const superDebug = (object: any, key: string) => {
|
||||||
var d = object[key];
|
var d = object[key];
|
||||||
var beforeStr = '', afterStr = '';
|
var beforeStr = '', afterStr = '';
|
||||||
@ -32,4 +47,4 @@ export default DEBUG;
|
|||||||
dada(key + '_' + 'after', afterStr);
|
dada(key + '_' + 'after', afterStr);
|
||||||
}
|
}
|
||||||
|
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.superDebug = superDebug); */
|
MOUNT_CLASS_TO.superDebug = superDebug; */
|
||||||
|
@ -39,7 +39,7 @@ arr.forEach((el, idx) => {
|
|||||||
});
|
});
|
||||||
*/
|
*/
|
||||||
|
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.Countries = Countries);
|
MOUNT_CLASS_TO.Countries = Countries;
|
||||||
|
|
||||||
export default Countries;
|
export default Countries;
|
||||||
export {PhoneCodesMain};
|
export {PhoneCodesMain};
|
@ -454,4 +454,4 @@ function getDayOfWeek(q: string) {
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.fillTipDates = fillTipDates);
|
MOUNT_CLASS_TO.fillTipDates = fillTipDates;
|
||||||
|
@ -134,7 +134,7 @@ export function getRichValue(field: HTMLElement, entities?: MessageEntity[]) {
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.getRichValue = getRichValue);
|
MOUNT_CLASS_TO.getRichValue = getRichValue;
|
||||||
|
|
||||||
export type MarkdownType = 'bold' | 'italic' | 'underline' | 'strikethrough' | 'monospace' | 'link';
|
export type MarkdownType = 'bold' | 'italic' | 'underline' | 'strikethrough' | 'monospace' | 'link';
|
||||||
export type MarkdownTag = {
|
export type MarkdownTag = {
|
||||||
@ -336,7 +336,7 @@ export function generatePathData(x: number, y: number, width: number, height: nu
|
|||||||
return data.join(' ');
|
return data.join(' ');
|
||||||
};
|
};
|
||||||
|
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.generatePathData = generatePathData);
|
MOUNT_CLASS_TO.generatePathData = generatePathData;
|
||||||
|
|
||||||
//export function findUpClassName<T>(el: any, className: string): T;
|
//export function findUpClassName<T>(el: any, className: string): T;
|
||||||
export function findUpClassName(el: any, className: string): HTMLElement {
|
export function findUpClassName(el: any, className: string): HTMLElement {
|
||||||
@ -442,7 +442,7 @@ export function calcImageInBox(imageW: number, imageH: number, boxW: number, box
|
|||||||
return {w: boxedImageW, h: boxedImageH};
|
return {w: boxedImageW, h: boxedImageH};
|
||||||
}
|
}
|
||||||
|
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.calcImageInBox = calcImageInBox);
|
MOUNT_CLASS_TO.calcImageInBox = calcImageInBox;
|
||||||
|
|
||||||
export function positionElementByIndex(element: HTMLElement, container: HTMLElement, pos: number) {
|
export function positionElementByIndex(element: HTMLElement, container: HTMLElement, pos: number) {
|
||||||
const prevPos = element.parentElement === container ? whichChild(element) : -1;
|
const prevPos = element.parentElement === container ? whichChild(element) : -1;
|
||||||
@ -651,7 +651,7 @@ export const getElementByPoint = (container: HTMLElement, verticalSide: 'top' |
|
|||||||
return document.elementFromPoint(x, y) as any;
|
return document.elementFromPoint(x, y) as any;
|
||||||
};
|
};
|
||||||
|
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.getElementByPoint = getElementByPoint);
|
MOUNT_CLASS_TO.getElementByPoint = getElementByPoint;
|
||||||
|
|
||||||
export async function getFilesFromEvent(e: ClipboardEvent | DragEvent, onlyTypes = false): Promise<any[]> {
|
export async function getFilesFromEvent(e: ClipboardEvent | DragEvent, onlyTypes = false): Promise<any[]> {
|
||||||
const files: any[] = [];
|
const files: any[] = [];
|
||||||
|
@ -41,7 +41,7 @@ import type { ArgumentTypes, SuperReturnType } from "../types";
|
|||||||
// console.log = () => {};
|
// console.log = () => {};
|
||||||
|
|
||||||
// const e = new EventSystem();
|
// const e = new EventSystem();
|
||||||
// MOUNT_CLASS_TO && (MOUNT_CLASS_TO.e = e);
|
// MOUNT_CLASS_TO.e = e;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Better not to remove listeners during setting
|
* Better not to remove listeners during setting
|
||||||
|
@ -126,5 +126,5 @@ class MediaSizes extends EventListenerBase<{
|
|||||||
}
|
}
|
||||||
|
|
||||||
const mediaSizes = new MediaSizes();
|
const mediaSizes = new MediaSizes();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.mediaSizes = mediaSizes);
|
MOUNT_CLASS_TO.mediaSizes = mediaSizes;
|
||||||
export default mediaSizes;
|
export default mediaSizes;
|
||||||
|
@ -83,13 +83,17 @@ const lang = {
|
|||||||
"ActionInviteUser": "un1 joined the group via invite link",
|
"ActionInviteUser": "un1 joined the group via invite link",
|
||||||
"ActionPinnedNoText": "un1 pinned a message",
|
"ActionPinnedNoText": "un1 pinned a message",
|
||||||
"ActionMigrateFromGroup": "This group was upgraded to a supergroup",
|
"ActionMigrateFromGroup": "This group was upgraded to a supergroup",
|
||||||
|
"ActionYouScored": "You scored %1$s",
|
||||||
|
"ActionUserScored": "un1 scored %1$s",
|
||||||
|
"ActionYouScoredInGame": "You scored %1$s in un2",
|
||||||
|
"ActionUserScoredInGame": "un1 scored %1$s in un2",
|
||||||
"AttachPhoto": "Photo",
|
"AttachPhoto": "Photo",
|
||||||
"AttachVideo": "Video",
|
"AttachVideo": "Video",
|
||||||
"AttachGif": "GIF",
|
"AttachGif": "GIF",
|
||||||
"AttachLocation": "Location",
|
"AttachLocation": "Location",
|
||||||
"AttachLiveLocation": "Live Location",
|
"AttachLiveLocation": "Live Location",
|
||||||
"AttachContact": "Contact",
|
"AttachContact": "Contact",
|
||||||
"AttachDocument": "File",
|
//"AttachDocument": "File",
|
||||||
"AttachSticker": "Sticker",
|
"AttachSticker": "Sticker",
|
||||||
"AttachAudio": "Voice message",
|
"AttachAudio": "Voice message",
|
||||||
"AttachRound": "Video message",
|
"AttachRound": "Video message",
|
||||||
@ -216,7 +220,7 @@ const lang = {
|
|||||||
"LinkCopiedPrivateInfo": "This link will only work for members of this chat.",
|
"LinkCopiedPrivateInfo": "This link will only work for members of this chat.",
|
||||||
"GroupAddMembers": "Add Members",
|
"GroupAddMembers": "Add Members",
|
||||||
"SendMessageTo": "Add people...",
|
"SendMessageTo": "Add people...",
|
||||||
"SelectChat": "Select Chat",
|
//"SelectChat": "Select Chat",
|
||||||
"JumpToDate": "Jump to Date",
|
"JumpToDate": "Jump to Date",
|
||||||
"Caption": "Caption",
|
"Caption": "Caption",
|
||||||
"Message": "Message",
|
"Message": "Message",
|
||||||
|
@ -632,5 +632,5 @@ export class ApiUpdatesManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const apiUpdatesManager = new ApiUpdatesManager();
|
const apiUpdatesManager = new ApiUpdatesManager();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.apiUpdatesManager = apiUpdatesManager);
|
MOUNT_CLASS_TO.apiUpdatesManager = apiUpdatesManager;
|
||||||
export default apiUpdatesManager
|
export default apiUpdatesManager
|
||||||
|
@ -718,5 +718,5 @@ export class AppChatsManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const appChatsManager = new AppChatsManager();
|
const appChatsManager = new AppChatsManager();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.appChatsManager = appChatsManager);
|
MOUNT_CLASS_TO.appChatsManager = appChatsManager;
|
||||||
export default appChatsManager;
|
export default appChatsManager;
|
||||||
|
@ -1397,5 +1397,5 @@ export class AppDialogsManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const appDialogsManager = new AppDialogsManager();
|
const appDialogsManager = new AppDialogsManager();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.appDialogsManager = appDialogsManager);
|
MOUNT_CLASS_TO.appDialogsManager = appDialogsManager;
|
||||||
export default appDialogsManager;
|
export default appDialogsManager;
|
||||||
|
@ -395,5 +395,5 @@ export class AppDocsManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const appDocsManager = new AppDocsManager();
|
const appDocsManager = new AppDocsManager();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.appDocsManager = appDocsManager);
|
MOUNT_CLASS_TO.appDocsManager = appDocsManager;
|
||||||
export default appDocsManager;
|
export default appDocsManager;
|
||||||
|
@ -221,5 +221,5 @@ export class AppDraftsManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const appDraftsManager = new AppDraftsManager();
|
const appDraftsManager = new AppDraftsManager();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.appDraftsManager = appDraftsManager);
|
MOUNT_CLASS_TO.appDraftsManager = appDraftsManager;
|
||||||
export default appDraftsManager;
|
export default appDraftsManager;
|
||||||
|
@ -118,47 +118,8 @@ export class AppImManager {
|
|||||||
this.createNewChat();
|
this.createNewChat();
|
||||||
this.chatsSelectTab(this.chat.container);
|
this.chatsSelectTab(this.chat.container);
|
||||||
|
|
||||||
window.addEventListener('hashchange', (e) => {
|
appNavigationController.onHashChange = this.onHashChange;
|
||||||
const hash = location.hash;
|
//window.addEventListener('hashchange', this.onHashChange);
|
||||||
const splitted = hash.split('?');
|
|
||||||
|
|
||||||
if(!splitted[1]) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const params: any = {};
|
|
||||||
splitted[1].split('&').forEach(item => {
|
|
||||||
params[item.split('=')[0]] = decodeURIComponent(item.split('=')[1]);
|
|
||||||
});
|
|
||||||
|
|
||||||
this.log('hashchange', hash, splitted[0], params);
|
|
||||||
|
|
||||||
switch(splitted[0]) {
|
|
||||||
case '#/im': {
|
|
||||||
const p = params.p;
|
|
||||||
let postId = params.post !== undefined ? appMessagesManager.generateMessageId(+params.post) : undefined;
|
|
||||||
|
|
||||||
switch(p[0]) {
|
|
||||||
case '@': {
|
|
||||||
appUsersManager.resolveUsername(p).then(peer => {
|
|
||||||
const isUser = peer._ === 'user';
|
|
||||||
const peerId = isUser ? peer.id : -peer.id;
|
|
||||||
|
|
||||||
this.setInnerPeer(peerId, postId);
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
default: { // peerId
|
|
||||||
this.setInnerPeer(postId ? -+p : +p, postId);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
location.hash = '';
|
|
||||||
});
|
|
||||||
|
|
||||||
this.setSettings();
|
this.setSettings();
|
||||||
rootScope.on('settings_updated', this.setSettings);
|
rootScope.on('settings_updated', this.setSettings);
|
||||||
@ -205,6 +166,49 @@ export class AppImManager {
|
|||||||
}); */
|
}); */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private onHashChange = () => {
|
||||||
|
const hash = location.hash;
|
||||||
|
const splitted = hash.split('?');
|
||||||
|
|
||||||
|
if(!splitted[1]) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const params: any = {};
|
||||||
|
splitted[1].split('&').forEach(item => {
|
||||||
|
params[item.split('=')[0]] = decodeURIComponent(item.split('=')[1]);
|
||||||
|
});
|
||||||
|
|
||||||
|
this.log('hashchange', hash, splitted[0], params);
|
||||||
|
|
||||||
|
switch(splitted[0]) {
|
||||||
|
case '#/im': {
|
||||||
|
const p = params.p;
|
||||||
|
let postId = params.post !== undefined ? appMessagesManager.generateMessageId(+params.post) : undefined;
|
||||||
|
|
||||||
|
switch(p[0]) {
|
||||||
|
case '@': {
|
||||||
|
appUsersManager.resolveUsername(p).then(peer => {
|
||||||
|
const isUser = peer._ === 'user';
|
||||||
|
const peerId = isUser ? peer.id : -peer.id;
|
||||||
|
|
||||||
|
this.setInnerPeer(peerId, postId);
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default: { // peerId
|
||||||
|
this.setInnerPeer(postId ? -+p : +p, postId);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//appNavigationController.replaceState();
|
||||||
|
//location.hash = '';
|
||||||
|
};
|
||||||
|
|
||||||
public setBackground(url: string, broadcastEvent = true): Promise<void> {
|
public setBackground(url: string, broadcastEvent = true): Promise<void> {
|
||||||
const promises = this.chats.map(chat => chat.setBackground(url));
|
const promises = this.chats.map(chat => chat.setBackground(url));
|
||||||
return promises[promises.length - 1].then(() => {
|
return promises[promises.length - 1].then(() => {
|
||||||
@ -594,14 +598,20 @@ export class AppImManager {
|
|||||||
this.chats.push(chat);
|
this.chats.push(chat);
|
||||||
}
|
}
|
||||||
|
|
||||||
private spliceChats(fromIndex: number, justReturn = true, animate?: boolean) {
|
private spliceChats(fromIndex: number, justReturn = true, animate?: boolean, spliced?: Chat[]) {
|
||||||
if(fromIndex >= this.chats.length) return;
|
if(fromIndex >= this.chats.length) return;
|
||||||
|
|
||||||
if(this.chats.length > 1 && justReturn) {
|
if(this.chats.length > 1 && justReturn) {
|
||||||
rootScope.broadcast('peer_changing', this.chat);
|
rootScope.broadcast('peer_changing', this.chat);
|
||||||
}
|
}
|
||||||
|
|
||||||
const spliced = this.chats.splice(fromIndex, this.chats.length - fromIndex);
|
if(!spliced) {
|
||||||
|
spliced = this.chats.splice(fromIndex, this.chats.length - fromIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(let i = 0; i < spliced.length; ++i) {
|
||||||
|
appNavigationController.removeByType('chat', true);
|
||||||
|
}
|
||||||
|
|
||||||
// * fix middle chat z-index on animation
|
// * fix middle chat z-index on animation
|
||||||
if(spliced.length > 1) {
|
if(spliced.length > 1) {
|
||||||
@ -655,8 +665,20 @@ export class AppImManager {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else if(chatIndex > 0 && chat.peerId && chat.peerId !== peerId) {
|
} else if(chatIndex > 0 && chat.peerId && chat.peerId !== peerId) {
|
||||||
this.spliceChats(1, false, animate);
|
// const firstChat = this.chats[0];
|
||||||
return this.setPeer(peerId, lastMsgId);
|
// if(firstChat.peerId !== chat.peerId) {
|
||||||
|
/* // * slice idx > 0, set background and slice first, so new one will be the first
|
||||||
|
const spliced = this.chats.splice(1, this.chats.length - 1);
|
||||||
|
this.createNewChat();
|
||||||
|
this.chats.splice(0, 1); */
|
||||||
|
const spliced = this.chats.splice(1, this.chats.length - 1);
|
||||||
|
const ret = this.setPeer(peerId, lastMsgId);
|
||||||
|
this.spliceChats(0, false, false, spliced);
|
||||||
|
// } else {
|
||||||
|
// this.spliceChats(1, false, animate);
|
||||||
|
// }
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
// * don't reset peer if returning
|
// * don't reset peer if returning
|
||||||
|
@ -2375,9 +2375,6 @@ export class AppMessagesManager {
|
|||||||
case 'messageMediaInvoice':
|
case 'messageMediaInvoice':
|
||||||
message.media = {_: 'messageMediaUnsupportedWeb'};
|
message.media = {_: 'messageMediaUnsupportedWeb'};
|
||||||
break;
|
break;
|
||||||
case 'messageMediaGeoLive':
|
|
||||||
message.media._ = 'messageMediaGeo';
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2504,7 +2501,11 @@ export class AppMessagesManager {
|
|||||||
public wrapMessageForReply(message: any, text: string = message.message, usingMids?: number[], plain?: boolean, highlightWord?: string): DocumentFragment | string {
|
public wrapMessageForReply(message: any, text: string = message.message, usingMids?: number[], plain?: boolean, highlightWord?: string): DocumentFragment | string {
|
||||||
const parts: (HTMLElement | string)[] = [];
|
const parts: (HTMLElement | string)[] = [];
|
||||||
|
|
||||||
const addPart = (part: string | HTMLElement, text?: string) => {
|
const addPart = (langKey: LangPackKey, part?: string | HTMLElement, text?: string) => {
|
||||||
|
if(langKey) {
|
||||||
|
part = plain ? I18n.format(langKey, true) : i18n(langKey);
|
||||||
|
}
|
||||||
|
|
||||||
if(plain) {
|
if(plain) {
|
||||||
parts.push(part);
|
parts.push(part);
|
||||||
} else {
|
} else {
|
||||||
@ -2538,7 +2539,7 @@ export class AppMessagesManager {
|
|||||||
|
|
||||||
if(usingFullAlbum) {
|
if(usingFullAlbum) {
|
||||||
text = this.getAlbumText(message.grouped_id).message;
|
text = this.getAlbumText(message.grouped_id).message;
|
||||||
addPart(i18n('AttachAlbum'), text);
|
addPart('AttachAlbum', undefined, text);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
usingFullAlbum = false;
|
usingFullAlbum = false;
|
||||||
@ -2548,36 +2549,50 @@ export class AppMessagesManager {
|
|||||||
const media = message.media;
|
const media = message.media;
|
||||||
switch(media._) {
|
switch(media._) {
|
||||||
case 'messageMediaPhoto':
|
case 'messageMediaPhoto':
|
||||||
addPart(i18n('AttachPhoto'), message.message);
|
addPart('AttachPhoto', undefined, message.message);
|
||||||
break;
|
break;
|
||||||
case 'messageMediaDice':
|
case 'messageMediaDice':
|
||||||
addPart(plain ? media.emoticon : RichTextProcessor.wrapEmojiText(media.emoticon));
|
addPart(undefined, plain ? media.emoticon : RichTextProcessor.wrapEmojiText(media.emoticon));
|
||||||
break;
|
break;
|
||||||
|
case 'messageMediaVenue': {
|
||||||
|
const text = plain ? media.title : RichTextProcessor.wrapEmojiText(media.title);
|
||||||
|
addPart('AttachLocation', undefined, text);
|
||||||
|
parts.push(htmlToDocumentFragment(text) as any);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case 'messageMediaGeo':
|
case 'messageMediaGeo':
|
||||||
addPart(i18n('AttachLiveLocation'));
|
addPart('AttachLocation');
|
||||||
|
break;
|
||||||
|
case 'messageMediaGeoLive':
|
||||||
|
addPart('AttachLiveLocation');
|
||||||
break;
|
break;
|
||||||
case 'messageMediaPoll':
|
case 'messageMediaPoll':
|
||||||
addPart(plain ? '📊' + ' ' + (media.poll.question || 'poll') : media.poll.rReply);
|
addPart(undefined, plain ? '📊' + ' ' + (media.poll.question || 'poll') : media.poll.rReply);
|
||||||
break;
|
break;
|
||||||
case 'messageMediaContact':
|
case 'messageMediaContact':
|
||||||
addPart(i18n('AttachContact'));
|
addPart('AttachContact');
|
||||||
break;
|
break;
|
||||||
|
case 'messageMediaGame': {
|
||||||
|
const prefix = '🎮' + ' ';
|
||||||
|
addPart(undefined, plain ? prefix + media.game.title : RichTextProcessor.wrapEmojiText(prefix + media.game.title));
|
||||||
|
break;
|
||||||
|
}
|
||||||
case 'messageMediaDocument':
|
case 'messageMediaDocument':
|
||||||
let document = media.document;
|
let document = media.document;
|
||||||
|
|
||||||
if(document.type === 'video') {
|
if(document.type === 'video') {
|
||||||
addPart(i18n('AttachVideo'), message.message);
|
addPart('AttachVideo', undefined, message.message);
|
||||||
} else if(document.type === 'voice') {
|
} else if(document.type === 'voice') {
|
||||||
addPart(i18n('AttachAudio'), message.message);
|
addPart('AttachAudio', undefined, message.message);
|
||||||
} else if(document.type === 'gif') {
|
} else if(document.type === 'gif') {
|
||||||
addPart(i18n('AttachGif'), message.message);
|
addPart('AttachGif', undefined, message.message);
|
||||||
} else if(document.type === 'round') {
|
} else if(document.type === 'round') {
|
||||||
addPart(i18n('AttachRound'), message.message);
|
addPart('AttachRound', undefined, message.message);
|
||||||
} else if(document.type === 'sticker') {
|
} else if(document.type === 'sticker') {
|
||||||
addPart(((plain ? document.stickerEmojiRaw : document.stickerEmoji) || '') + 'Sticker');
|
addPart(undefined, ((plain ? document.stickerEmojiRaw : document.stickerEmoji) || '') + 'Sticker');
|
||||||
text = '';
|
text = '';
|
||||||
} else {
|
} else {
|
||||||
addPart(document.file_name, message.message);
|
addPart(document.file_name, undefined, message.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@ -2593,7 +2608,7 @@ export class AppMessagesManager {
|
|||||||
if(message.action) {
|
if(message.action) {
|
||||||
const actionWrapped = this.wrapMessageActionTextNew(message, plain);
|
const actionWrapped = this.wrapMessageActionTextNew(message, plain);
|
||||||
if(actionWrapped) {
|
if(actionWrapped) {
|
||||||
addPart(actionWrapped);
|
addPart(undefined, actionWrapped);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2699,6 +2714,7 @@ export class AppMessagesManager {
|
|||||||
|
|
||||||
case 'messageActionPinMessage':
|
case 'messageActionPinMessage':
|
||||||
case 'messageActionContactSignUp':
|
case 'messageActionContactSignUp':
|
||||||
|
case 'messageActionChatReturn':
|
||||||
case 'messageActionChatLeave':
|
case 'messageActionChatLeave':
|
||||||
case 'messageActionChatJoined':
|
case 'messageActionChatJoined':
|
||||||
case 'messageActionChatCreate':
|
case 'messageActionChatCreate':
|
||||||
@ -4305,16 +4321,16 @@ export class AppMessagesManager {
|
|||||||
case 'updateChannelReadMessagesContents':
|
case 'updateChannelReadMessagesContents':
|
||||||
case 'updateReadMessagesContents': {
|
case 'updateReadMessagesContents': {
|
||||||
const channelId = (update as Update.updateChannelReadMessagesContents).channel_id;
|
const channelId = (update as Update.updateChannelReadMessagesContents).channel_id;
|
||||||
const peerId = channelId ? -channelId : this.getMessageById(update.messages[0]).peerId;
|
const mids = (update as Update.updateReadMessagesContents).messages.map(id => this.generateMessageId(id));
|
||||||
const messages: number[] = update.messages;
|
const peerId = channelId ? -channelId : this.getMessageById(mids[0]).peerId;
|
||||||
for(const messageId of messages) {
|
for(const mid of mids) {
|
||||||
const message = this.getMessageByPeer(peerId, messageId);
|
const message = this.getMessageByPeer(peerId, mid);
|
||||||
if(!message.deleted) {
|
if(!message.deleted) {
|
||||||
delete message.pFlags.media_unread;
|
delete message.pFlags.media_unread;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rootScope.broadcast('messages_media_read', {peerId, mids: messages.map(id => this.generateMessageId(id))});
|
rootScope.broadcast('messages_media_read', {peerId, mids});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5289,5 +5305,5 @@ export class AppMessagesManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const appMessagesManager = new AppMessagesManager();
|
const appMessagesManager = new AppMessagesManager();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.appMessagesManager = appMessagesManager);
|
MOUNT_CLASS_TO.appMessagesManager = appMessagesManager;
|
||||||
export default appMessagesManager;
|
export default appMessagesManager;
|
||||||
|
@ -717,5 +717,5 @@ export class AppNotificationsManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const appNotificationsManager = new AppNotificationsManager();
|
const appNotificationsManager = new AppNotificationsManager();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.appNotificationsManager = appNotificationsManager);
|
MOUNT_CLASS_TO.appNotificationsManager = appNotificationsManager;
|
||||||
export default appNotificationsManager;
|
export default appNotificationsManager;
|
||||||
|
@ -288,5 +288,5 @@ export class AppPeersManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const appPeersManager = new AppPeersManager();
|
const appPeersManager = new AppPeersManager();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.appPeersManager = appPeersManager);
|
MOUNT_CLASS_TO.appPeersManager = appPeersManager;
|
||||||
export default appPeersManager;
|
export default appPeersManager;
|
||||||
|
@ -397,5 +397,5 @@ export class AppPhotosManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const appPhotosManager = new AppPhotosManager();
|
const appPhotosManager = new AppPhotosManager();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.appPhotosManager = appPhotosManager);
|
MOUNT_CLASS_TO.appPhotosManager = appPhotosManager;
|
||||||
export default appPhotosManager;
|
export default appPhotosManager;
|
||||||
|
@ -239,5 +239,5 @@ export class AppPollsManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const appPollsManager = new AppPollsManager();
|
const appPollsManager = new AppPollsManager();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.appPollsManager = appPollsManager);
|
MOUNT_CLASS_TO.appPollsManager = appPollsManager;
|
||||||
export default appPollsManager;
|
export default appPollsManager;
|
||||||
|
@ -124,5 +124,5 @@ export class AppPrivacyManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const appPrivacyManager = new AppPrivacyManager();
|
const appPrivacyManager = new AppPrivacyManager();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.appPrivacyManager = appPrivacyManager);
|
MOUNT_CLASS_TO.appPrivacyManager = appPrivacyManager;
|
||||||
export default appPrivacyManager;
|
export default appPrivacyManager;
|
||||||
|
@ -281,5 +281,5 @@ export class AppStateManager extends EventListenerBase<{
|
|||||||
//console.trace('appStateManager include');
|
//console.trace('appStateManager include');
|
||||||
|
|
||||||
const appStateManager = new AppStateManager();
|
const appStateManager = new AppStateManager();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.appStateManager = appStateManager);
|
MOUNT_CLASS_TO.appStateManager = appStateManager;
|
||||||
export default appStateManager;
|
export default appStateManager;
|
@ -280,5 +280,5 @@ export class AppStickersManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const appStickersManager = new AppStickersManager();
|
const appStickersManager = new AppStickersManager();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.appStickersManager = appStickersManager);
|
MOUNT_CLASS_TO.appStickersManager = appStickersManager;
|
||||||
export default appStickersManager;
|
export default appStickersManager;
|
||||||
|
@ -794,5 +794,5 @@ export class AppUsersManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const appUsersManager = new AppUsersManager();
|
const appUsersManager = new AppUsersManager();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.appUsersManager = appUsersManager);
|
MOUNT_CLASS_TO.appUsersManager = appUsersManager;
|
||||||
export default appUsersManager
|
export default appUsersManager
|
||||||
|
@ -117,5 +117,5 @@ export default class CacheStorageController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//const cacheStorage = new CacheStorageController();
|
//const cacheStorage = new CacheStorageController();
|
||||||
//MOUNT_CLASS_TO && (MOUNT_CLASS_TO.cacheStorage = cacheStorage);
|
//MOUNT_CLASS_TO.cacheStorage = cacheStorage;
|
||||||
//export default cacheStorage;
|
//export default cacheStorage;
|
||||||
|
@ -20,5 +20,5 @@ const Config = {
|
|||||||
TLD,
|
TLD,
|
||||||
MediaSizes: mediaSizes
|
MediaSizes: mediaSizes
|
||||||
};
|
};
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.Config = Config);
|
MOUNT_CLASS_TO.Config = Config;
|
||||||
export default Config;
|
export default Config;
|
@ -125,5 +125,5 @@ class CryptoWorker extends CryptoWorkerMethods {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const cryptoWorker = new CryptoWorker();
|
const cryptoWorker = new CryptoWorker();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.CryptoWorker = cryptoWorker);
|
MOUNT_CLASS_TO.CryptoWorker = cryptoWorker;
|
||||||
export default cryptoWorker;
|
export default cryptoWorker;
|
||||||
|
@ -330,4 +330,4 @@ export function join(elements: HTMLElement[], useLast = true) {
|
|||||||
return arr;
|
return arr;
|
||||||
}
|
}
|
||||||
|
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.I18n = I18n);
|
MOUNT_CLASS_TO.I18n = I18n;
|
||||||
|
@ -748,5 +748,5 @@ class LottieLoader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const lottieLoader = new LottieLoader();
|
const lottieLoader = new LottieLoader();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.lottieLoader = lottieLoader);
|
MOUNT_CLASS_TO.lottieLoader = lottieLoader;
|
||||||
export default lottieLoader;
|
export default lottieLoader;
|
||||||
|
@ -574,5 +574,5 @@ export class ApiFileManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const apiFileManager = new ApiFileManager();
|
const apiFileManager = new ApiFileManager();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.apiFileManager = apiFileManager);
|
MOUNT_CLASS_TO.apiFileManager = apiFileManager;
|
||||||
export default apiFileManager;
|
export default apiFileManager;
|
||||||
|
@ -12,7 +12,7 @@ import type { MethodDeclMap } from '../../layer';
|
|||||||
import { CancellablePromise, deferredPromise } from '../../helpers/cancellablePromise';
|
import { CancellablePromise, deferredPromise } from '../../helpers/cancellablePromise';
|
||||||
import { bytesFromHex, bytesToHex } from '../../helpers/bytes';
|
import { bytesFromHex, bytesToHex } from '../../helpers/bytes';
|
||||||
//import { clamp } from '../../helpers/number';
|
//import { clamp } from '../../helpers/number';
|
||||||
import { isSafari } from '../../helpers/userAgent';
|
import { ctx, isSafari } from '../../helpers/userAgent';
|
||||||
import App from '../../config/app';
|
import App from '../../config/app';
|
||||||
import { MOUNT_CLASS_TO } from '../../config/debug';
|
import { MOUNT_CLASS_TO } from '../../config/debug';
|
||||||
|
|
||||||
@ -275,7 +275,7 @@ export class ApiManager {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const startTime = Date.now();
|
const startTime = Date.now();
|
||||||
const interval = MOUNT_CLASS_TO.setInterval(() => {
|
const interval = ctx.setInterval(() => {
|
||||||
this.log.error('Request is still processing:', method, params, options, 'time:', (Date.now() - startTime) / 1000);
|
this.log.error('Request is still processing:', method, params, options, 'time:', (Date.now() - startTime) / 1000);
|
||||||
//this.cachedUploadNetworkers[2].requestMessageStatus();
|
//this.cachedUploadNetworkers[2].requestMessageStatus();
|
||||||
}, 5e3);
|
}, 5e3);
|
||||||
@ -426,5 +426,5 @@ export class ApiManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const apiManager = new ApiManager();
|
const apiManager = new ApiManager();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.apiManager = apiManager);
|
MOUNT_CLASS_TO.apiManager = apiManager;
|
||||||
export default apiManager;
|
export default apiManager;
|
||||||
|
@ -239,4 +239,4 @@ function alignLimit(limit: number) {
|
|||||||
|
|
||||||
//export default () => {};
|
//export default () => {};
|
||||||
|
|
||||||
//MOUNT_CLASS_TO && (MOUNT_CLASS_TO.onFetch = onFetch);
|
//MOUNT_CLASS_TO.onFetch = onFetch;
|
||||||
|
@ -475,5 +475,5 @@ export class ApiManagerProxy extends CryptoWorkerMethods {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const apiManagerProxy = new ApiManagerProxy();
|
const apiManagerProxy = new ApiManagerProxy();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.apiManagerProxy = apiManagerProxy);
|
MOUNT_CLASS_TO.apiManagerProxy = apiManagerProxy;
|
||||||
export default apiManagerProxy;
|
export default apiManagerProxy;
|
||||||
|
@ -104,5 +104,5 @@ export class PasswordManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const passwordManager = new PasswordManager();
|
const passwordManager = new PasswordManager();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.passwordManager = passwordManager);
|
MOUNT_CLASS_TO.passwordManager = passwordManager;
|
||||||
export default passwordManager;
|
export default passwordManager;
|
||||||
|
@ -115,5 +115,5 @@ class ReferenceDatabase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const referenceDatabase = new ReferenceDatabase();
|
const referenceDatabase = new ReferenceDatabase();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.referenceDatabase = referenceDatabase);
|
MOUNT_CLASS_TO.referenceDatabase = referenceDatabase;
|
||||||
export default referenceDatabase;
|
export default referenceDatabase;
|
@ -66,5 +66,5 @@ export class TimeManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const timeManager = new TimeManager();
|
const timeManager = new TimeManager();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.timeManager = timeManager);
|
MOUNT_CLASS_TO.timeManager = timeManager;
|
||||||
export default timeManager;
|
export default timeManager;
|
||||||
|
@ -811,6 +811,6 @@ class TLDeserialization {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.TLDeserialization = TLDeserialization);
|
MOUNT_CLASS_TO.TLDeserialization = TLDeserialization;
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.TLSerialization = TLSerialization);
|
MOUNT_CLASS_TO.TLSerialization = TLSerialization;
|
||||||
export { TLDeserialization, TLSerialization };
|
export { TLDeserialization, TLSerialization };
|
||||||
|
@ -173,5 +173,5 @@ export class OpusDecodeController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const opusDecodeController = new OpusDecodeController();
|
const opusDecodeController = new OpusDecodeController();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.opusDecodeController = opusDecodeController);
|
MOUNT_CLASS_TO.opusDecodeController = opusDecodeController;
|
||||||
export default opusDecodeController;
|
export default opusDecodeController;
|
@ -747,7 +747,7 @@ namespace RichTextProcessor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.RichTextProcessor = RichTextProcessor);
|
MOUNT_CLASS_TO.RichTextProcessor = RichTextProcessor;
|
||||||
|
|
||||||
export {RichTextProcessor};
|
export {RichTextProcessor};
|
||||||
export default RichTextProcessor;
|
export default RichTextProcessor;
|
||||||
|
@ -159,5 +159,5 @@ class RootScope extends EventListenerBase<any> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const rootScope = new RootScope();
|
const rootScope = new RootScope();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.rootScope = rootScope);
|
MOUNT_CLASS_TO.rootScope = rootScope;
|
||||||
export default rootScope;
|
export default rootScope;
|
||||||
|
@ -24,5 +24,5 @@ const sessionStorage = new AppStorage<{
|
|||||||
} & State>({
|
} & State>({
|
||||||
storeName: 'session'
|
storeName: 'session'
|
||||||
});
|
});
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.appStorage = sessionStorage);
|
MOUNT_CLASS_TO.appStorage = sessionStorage;
|
||||||
export default sessionStorage;
|
export default sessionStorage;
|
||||||
|
@ -66,5 +66,5 @@ export class WebpWorkerController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const webpWorkerController = new WebpWorkerController();
|
const webpWorkerController = new WebpWorkerController();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.webpWorkerController = webpWorkerController);
|
MOUNT_CLASS_TO.webpWorkerController = webpWorkerController;
|
||||||
export default webpWorkerController;
|
export default webpWorkerController;
|
@ -46,5 +46,5 @@ class PagesManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const pagesManager = new PagesManager();
|
const pagesManager = new PagesManager();
|
||||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.pagesManager = pagesManager);
|
MOUNT_CLASS_TO.pagesManager = pagesManager;
|
||||||
export default pagesManager;
|
export default pagesManager;
|
||||||
|
@ -1065,7 +1065,13 @@ $chat-helper-size: 39px;
|
|||||||
}
|
}
|
||||||
|
|
||||||
@include respond-to(handhelds) {
|
@include respond-to(handhelds) {
|
||||||
padding: 0 .75rem 0 .5rem;
|
padding: 0 .5rem;
|
||||||
|
|
||||||
|
.is-out {
|
||||||
|
.bubble-content-wrapper {
|
||||||
|
margin-right: .25rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
html.is-mac & {
|
html.is-mac & {
|
||||||
-webkit-user-select: none;
|
-webkit-user-select: none;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user