minor fixes
This commit is contained in:
parent
9f695bc863
commit
2fa80a1adf
@ -10,6 +10,7 @@ import apiManager from '../lib/mtproto/apiManager';
|
||||
import CryptoWorker from '../lib/crypto/cryptoworker';
|
||||
import LazyLoadQueue from "./lazyLoadQueue";
|
||||
import { MTDocument, wrapSticker } from "./wrappers";
|
||||
import appWebpManager from "../lib/appManagers/appWebpManager";
|
||||
|
||||
export const EMOTICONSSTICKERGROUP = 'emoticons-dropdown';
|
||||
|
||||
@ -310,7 +311,7 @@ const initEmoticonsDropdown = (pageEl: HTMLDivElement,
|
||||
let thumb = stickerSet.set.thumb;
|
||||
|
||||
appStickersManager.getStickerSetThumb(stickerSet.set).then(async(blob) => {
|
||||
if(thumb.w == 1 && thumb.h == 1) {
|
||||
if(thumb.w == 1 && thumb.h == 1) { // means animated
|
||||
const reader = new FileReader();
|
||||
|
||||
reader.addEventListener('loadend', async(e) => {
|
||||
@ -329,7 +330,8 @@ const initEmoticonsDropdown = (pageEl: HTMLDivElement,
|
||||
reader.readAsArrayBuffer(blob);
|
||||
} else {
|
||||
let image = new Image();
|
||||
image.src = URL.createObjectURL(blob);
|
||||
//image.src = URL.createObjectURL(blob);
|
||||
appWebpManager.polyfillImage(image, blob);
|
||||
|
||||
li.append(image);
|
||||
}
|
||||
|
@ -215,7 +215,7 @@ export class AppDialogsManager {
|
||||
if(inUpper.length < hiddenLength) {
|
||||
inUpper.push(dom.listEl);
|
||||
} else if(inViewportIndex <= inViewportLength - 1) {
|
||||
this.chatList.append(dom.listEl);
|
||||
chatList.append(dom.listEl);
|
||||
++inViewportIndex;
|
||||
//this.chatList.insertBefore(dom.listEl, this.chatList.children[inViewportIndex++]);
|
||||
} else {
|
||||
@ -368,10 +368,6 @@ export class AppDialogsManager {
|
||||
public setUnreadMessages(dialog: any) {
|
||||
let dom = this.getDialogDom(dialog.peerID);
|
||||
|
||||
if(dialog.peerID == 228260936) {
|
||||
console.log('dialog setUnreadMessages', dialog);
|
||||
}
|
||||
|
||||
dom.statusSpan.innerHTML = '';
|
||||
let lastMessage = appMessagesManager.getMessage(dialog.top_message);
|
||||
if(lastMessage._ != 'messageEmpty' &&
|
||||
@ -380,7 +376,7 @@ export class AppDialogsManager {
|
||||
let outgoing = (lastMessage.pFlags && lastMessage.pFlags.unread)
|
||||
/* && dialog.read_outbox_max_id != 0 */; // maybe uncomment, 31.01.2020
|
||||
|
||||
console.log('outgoing', outgoing, lastMessage);
|
||||
//console.log('outgoing', outgoing, lastMessage);
|
||||
|
||||
if(outgoing) {
|
||||
dom.statusSpan.classList.remove('tgico-checks');
|
||||
|
@ -1,5 +1,5 @@
|
||||
import apiManager from '../mtproto/apiManager';
|
||||
import { $rootScope, isElementInViewport, numberWithCommas, findUpClassName, formatNumber, placeCaretAtEnd, calcImageInBox, findUpTag } from "../utils";
|
||||
import { $rootScope, isElementInViewport, numberWithCommas, findUpClassName, formatNumber, placeCaretAtEnd, calcImageInBox, findUpTag, getRichValue, getRichValueWithCaret, getSelectedText } from "../utils";
|
||||
import appUsersManager from "./appUsersManager";
|
||||
import appMessagesManager from "./appMessagesManager";
|
||||
import appPeersManager from "./appPeersManager";
|
||||
@ -140,7 +140,7 @@ class ChatInput {
|
||||
|
||||
this.messageInput.addEventListener('keydown', (e: KeyboardEvent) => {
|
||||
if(e.key == 'Enter') {
|
||||
if(e.shiftKey) {
|
||||
if(e.shiftKey || e.ctrlKey) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -201,29 +201,36 @@ class ChatInput {
|
||||
}
|
||||
});
|
||||
|
||||
this.messageInput.addEventListener('copy', (e) => {
|
||||
const selection = document.getSelection();
|
||||
|
||||
let range = selection.getRangeAt(0);
|
||||
let ancestorContainer = range.commonAncestorContainer;
|
||||
if(!RichTextProcessor.emojiSupported) {
|
||||
this.messageInput.addEventListener('copy', (e) => {
|
||||
const selection = document.getSelection();
|
||||
|
||||
let range = selection.getRangeAt(0);
|
||||
let ancestorContainer = range.commonAncestorContainer;
|
||||
|
||||
let str = '';
|
||||
|
||||
let selectedNodes = Array.from(ancestorContainer.childNodes).slice(range.startOffset, range.endOffset);
|
||||
if(selectedNodes.length) {
|
||||
str = this.serializeNodes(selectedNodes);
|
||||
} else {
|
||||
str = selection.toString();
|
||||
}
|
||||
|
||||
//console.log('messageInput copy', str, ancestorContainer.childNodes, range);
|
||||
|
||||
let str = '';
|
||||
|
||||
let selectedNodes = Array.from(ancestorContainer.childNodes).slice(range.startOffset, range.endOffset);
|
||||
if(selectedNodes.length) {
|
||||
str = this.serializeNodes(selectedNodes);
|
||||
} else {
|
||||
str = selection.toString();
|
||||
}
|
||||
|
||||
console.log('messageInput copy', str, ancestorContainer.childNodes, range);
|
||||
|
||||
// @ts-ignore
|
||||
event.clipboardData.setData('text/plain', str);
|
||||
event.preventDefault();
|
||||
});
|
||||
//let str = getRichValueWithCaret(this.messageInput);
|
||||
//console.log('messageInput childNode copy:', str);
|
||||
|
||||
// @ts-ignore
|
||||
event.clipboardData.setData('text/plain', str);
|
||||
event.preventDefault();
|
||||
});
|
||||
}
|
||||
|
||||
this.messageInput.addEventListener('paste', (e) => {
|
||||
//console.log('messageInput paste');
|
||||
|
||||
e.preventDefault();
|
||||
// @ts-ignore
|
||||
let text = (e.originalEvent || e).clipboardData.getData('text/plain');
|
||||
@ -321,11 +328,14 @@ class ChatInput {
|
||||
return;
|
||||
}
|
||||
|
||||
//console.log('document paste');
|
||||
|
||||
// @ts-ignore
|
||||
var items = (event.clipboardData || event.originalEvent.clipboardData).items;
|
||||
//console.log('item', event.clipboardData.getData());
|
||||
for(let i = 0; i < items.length; ++i) {
|
||||
if(items[i].kind == 'file') {
|
||||
event.preventDefault()
|
||||
event.cancelBubble = true;
|
||||
event.stopPropagation();
|
||||
|
||||
@ -398,16 +408,19 @@ class ChatInput {
|
||||
|
||||
if(typeof(child) === 'object' && child.textContent) return str += child.textContent;
|
||||
if(child.innerText) return str += child.innerText;
|
||||
if(child.tagName == 'IMG' && child.classList && child.classList.contains('emoji')) return str += child.getAttribute('emoji');
|
||||
if(child.tagName == 'IMG' && child.classList && child.classList.contains('emoji')) return str += child.getAttribute('alt');
|
||||
|
||||
return str;
|
||||
}, '');
|
||||
};
|
||||
|
||||
public sendMessage() {
|
||||
let str = this.serializeNodes(Array.from(this.messageInput.childNodes));
|
||||
//let str = this.serializeNodes(Array.from(this.messageInput.childNodes));
|
||||
let str = getRichValue(this.messageInput);
|
||||
|
||||
//console.log('childnode str after:', str);
|
||||
//console.log('childnode str after:', str/* , getRichValue(this.messageInput) */);
|
||||
|
||||
//return;
|
||||
this.lastUrl = '';
|
||||
appMessagesManager.sendText(appImManager.peerID, str, {
|
||||
replyToMsgID: appImManager.replyToMsgID == 0 ? undefined : appImManager.replyToMsgID,
|
||||
@ -770,6 +783,12 @@ export class AppImManager {
|
||||
return;
|
||||
}
|
||||
|
||||
if(e.key == 'Meta' || e.key == 'Control') {
|
||||
return;
|
||||
} else if(e.key == 'c' && (e.ctrlKey || e.metaKey) && target.tagName != 'INPUT') {
|
||||
return;
|
||||
}
|
||||
|
||||
if(e.target != this.chatInputC.messageInput && target.tagName != 'INPUT') {
|
||||
this.chatInputC.messageInput.focus();
|
||||
placeCaretAtEnd(this.chatInputC.messageInput);
|
||||
@ -1465,6 +1484,7 @@ export class AppImManager {
|
||||
}
|
||||
|
||||
public renderMessage(message: any, reverse = false, multipleRender?: boolean, bubble: HTMLDivElement = null) {
|
||||
this.log('message to render:', message);
|
||||
if(message.deleted) return;
|
||||
|
||||
let peerID = this.peerID;
|
||||
@ -1473,8 +1493,6 @@ export class AppImManager {
|
||||
let messageDiv = document.createElement('div');
|
||||
messageDiv.classList.add('message');
|
||||
|
||||
this.log('message to render:', message);
|
||||
|
||||
//messageDiv.innerText = message.message;
|
||||
|
||||
// bubble
|
||||
@ -1824,7 +1842,7 @@ export class AppImManager {
|
||||
let originalMessage = appMessagesManager.getMessage(message.reply_to_mid);
|
||||
let originalPeerTitle = appPeersManager.getPeerTitle(originalMessage.fromID) || '';
|
||||
|
||||
this.log('message to render reply', originalMessage, originalPeerTitle, bubble);
|
||||
this.log('message to render reply', originalMessage, originalPeerTitle, bubble, message);
|
||||
|
||||
let originalText = '';
|
||||
if(originalMessage.message) {
|
||||
|
@ -62,7 +62,7 @@ export class AppMessagesManager {
|
||||
public maxSeenID = 0;
|
||||
|
||||
public allDialogsLoaded: {[folder_id: number]: boolean} = {};
|
||||
public dialogsOffsetDate = 0;
|
||||
public dialogsOffsetDate: {[folder_id: number]: number} = {};
|
||||
public pinnedIndex = 0;
|
||||
public dialogsNum = 0;
|
||||
|
||||
@ -73,8 +73,8 @@ export class AppMessagesManager {
|
||||
public newMessagesToHandle: any = {};
|
||||
public newDialogsHandlePromise = 0;
|
||||
public newDialogsToHandle: any = {};
|
||||
public notificationsHandlePromise = 0;
|
||||
public notificationsToHandle: any = {};
|
||||
//public notificationsHandlePromise = 0;
|
||||
//public notificationsToHandle: any = {};
|
||||
public newUpdatesAfterReloadToHandle: any = {};
|
||||
|
||||
public fwdMessagesPluralize = _('conversation_forwarded_X_messages');
|
||||
@ -802,9 +802,9 @@ export class AppMessagesManager {
|
||||
var offsetIndex = 0;
|
||||
var flags = 0;
|
||||
|
||||
if(this.dialogsOffsetDate) {
|
||||
offsetDate = this.dialogsOffsetDate + serverTimeManager.serverTimeOffset;
|
||||
offsetIndex = this.dialogsOffsetDate * 0x10000;
|
||||
if(this.dialogsOffsetDate[folderID]) {
|
||||
offsetDate = this.dialogsOffsetDate[folderID] + serverTimeManager.serverTimeOffset;
|
||||
offsetIndex = this.dialogsOffsetDate[folderID] * 0x10000;
|
||||
flags |= 1;
|
||||
}
|
||||
|
||||
@ -898,7 +898,7 @@ export class AppMessagesManager {
|
||||
return (date * 0x10000) + ((++this.dialogsNum) & 0xFFFF);
|
||||
}
|
||||
|
||||
public pushDialogToStorage(dialog: any, offsetDate?: any) {
|
||||
public pushDialogToStorage(dialog: any, offsetDate?: number) {
|
||||
var dialogs = this.dialogsStorage.dialogs;
|
||||
var pos = this.getDialogByPeerID(dialog.peerID)[1];
|
||||
if(pos !== undefined) {
|
||||
@ -907,12 +907,12 @@ export class AppMessagesManager {
|
||||
|
||||
if(offsetDate &&
|
||||
!dialog.pFlags.pinned &&
|
||||
(!this.dialogsOffsetDate || offsetDate < this.dialogsOffsetDate)) {
|
||||
(!this.dialogsOffsetDate[dialog.folder_id] || offsetDate < this.dialogsOffsetDate[dialog.folder_id])) {
|
||||
if(pos !== undefined) {
|
||||
// So the dialog jumped to the last position
|
||||
return false;
|
||||
}
|
||||
this.dialogsOffsetDate = offsetDate;
|
||||
this.dialogsOffsetDate[dialog.folder_id] = offsetDate;
|
||||
}
|
||||
|
||||
var index = dialog.index;
|
||||
@ -1092,7 +1092,7 @@ export class AppMessagesManager {
|
||||
if(apiMessage.action) {
|
||||
var migrateFrom;
|
||||
var migrateTo;
|
||||
switch (apiMessage.action._) {
|
||||
switch(apiMessage.action._) {
|
||||
case 'messageActionChatEditPhoto':
|
||||
appPhotosManager.savePhoto(apiMessage.action.photo, mediaContext);
|
||||
if(isBroadcast) {
|
||||
@ -1332,9 +1332,7 @@ export class AppMessagesManager {
|
||||
dialog.top_message = mid;
|
||||
dialog.read_inbox_max_id = appMessagesIDsManager.getFullMessageID(dialog.read_inbox_max_id, channelID);
|
||||
|
||||
//peerID == 228260936 && console.log('we get drunk', dialog, dialog.read_outbox_max_id);
|
||||
dialog.read_outbox_max_id = appMessagesIDsManager.getFullMessageID(dialog.read_outbox_max_id, channelID);
|
||||
//peerID == 228260936 && console.log('we get high', dialog, dialog.read_outbox_max_id);
|
||||
|
||||
var topDate = message.date;
|
||||
if(channelID) {
|
||||
@ -1398,11 +1396,11 @@ export class AppMessagesManager {
|
||||
}*/ // WARNING
|
||||
}
|
||||
|
||||
public handleNotifications() {
|
||||
/*public handleNotifications() {
|
||||
clearTimeout(this.notificationsHandlePromise);
|
||||
this.notificationsHandlePromise = 0;
|
||||
|
||||
var timeout = $rootScope.idle.isIDLE /* && StatusManager.isOtherDeviceActive() */ ? 30000 : 1000;
|
||||
var timeout = $rootScope.idle.isIDLE /* && StatusManager.isOtherDeviceActive() * ? 30000 : 1000;
|
||||
Object.keys(this.notificationsToHandle).forEach((key: any) => {
|
||||
let notifyPeerToHandle = this.notificationsToHandle[key];
|
||||
notifyPeerToHandle.isMutedPromise.then((muted: boolean) => {
|
||||
@ -1423,9 +1421,9 @@ export class AppMessagesManager {
|
||||
});
|
||||
|
||||
this.notificationsToHandle = {};
|
||||
}
|
||||
}*/
|
||||
|
||||
public notifyAboutMessage(message: any, options: any = {}) {
|
||||
/*public notifyAboutMessage(message: any, options: any = {}) {
|
||||
var peerID = this.getMessagePeer(message);
|
||||
var peerString: string;
|
||||
var notification: any = {};
|
||||
@ -1623,7 +1621,7 @@ export class AppMessagesManager {
|
||||
notification.silent = message.pFlags.silent || false
|
||||
|
||||
if(notificationPhoto.location && !notificationPhoto.location.empty) {
|
||||
apiFileManager.downloadSmallFile(notificationPhoto.location/* , notificationPhoto.size */)
|
||||
apiFileManager.downloadSmallFile(notificationPhoto.location/* , notificationPhoto.size *)
|
||||
.then((blob) => {
|
||||
if(message.pFlags.unread) {
|
||||
notification.image = blob
|
||||
@ -1633,7 +1631,7 @@ export class AppMessagesManager {
|
||||
} else {
|
||||
// NotificationsManager.notify(notification) // warning
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
public mergeReplyKeyboard(historyStorage: any, message: any) {
|
||||
// console.log('merge', message.mid, message.reply_markup, historyStorage.reply_markup)
|
||||
@ -2249,13 +2247,13 @@ export class AppMessagesManager {
|
||||
this.newDialogsHandlePromise = window.setTimeout(this.handleNewDialogs.bind(this), 0);
|
||||
}
|
||||
|
||||
if(inboxUnread &&
|
||||
/*if(inboxUnread &&
|
||||
($rootScope.selectedPeerID != peerID || $rootScope.idle.isIDLE)) {
|
||||
var notifyPeer = message.flags & 16 ? message.from_id : peerID;
|
||||
var notifyPeerToHandle = this.notificationsToHandle[notifyPeer];
|
||||
if(notifyPeerToHandle === undefined) {
|
||||
notifyPeerToHandle = this.notificationsToHandle[notifyPeer] = {
|
||||
isMutedPromise: Promise.resolve()/* NotificationsManager.getPeerMuted(notifyPeer) */, // WARNING
|
||||
isMutedPromise: Promise.resolve()/* NotificationsManager.getPeerMuted(notifyPeer), // WARNING
|
||||
fwd_count: 0,
|
||||
from_id: 0
|
||||
};
|
||||
@ -2274,7 +2272,7 @@ export class AppMessagesManager {
|
||||
if(!this.notificationsHandlePromise) {
|
||||
this.notificationsHandlePromise = window.setTimeout(this.handleNotifications.bind(this), 1000);
|
||||
}
|
||||
}
|
||||
} */
|
||||
break;
|
||||
}
|
||||
|
||||
@ -3137,6 +3135,8 @@ export class AppMessagesManager {
|
||||
timeout: 300,
|
||||
noErrorBox: true
|
||||
}).then((historyResult: any) => {
|
||||
console.log('requestHistory result:', historyResult);
|
||||
|
||||
appUsersManager.saveApiUsers(historyResult.users);
|
||||
appChatsManager.saveApiChats(historyResult.chats);
|
||||
this.saveMessages(historyResult.messages);
|
||||
|
@ -107,7 +107,12 @@ class AppSidebarLeft {
|
||||
this.savedBtn.addEventListener('click', (e) => {
|
||||
this.log('savedbtn click');
|
||||
setTimeout(() => { // menu doesn't close if no timeout (lol)
|
||||
appImManager.setPeer(appImManager.myID);
|
||||
let dom = appDialogsManager.getDialogDom(appImManager.myID);
|
||||
if(dom) {
|
||||
dom.listEl.click();
|
||||
} else {
|
||||
appImManager.setPeer(appImManager.myID);
|
||||
}
|
||||
}, 0);
|
||||
});
|
||||
|
||||
|
@ -146,6 +146,10 @@ class appStickersManager {
|
||||
|
||||
return await promise;
|
||||
}
|
||||
|
||||
public async cleanup() { // if logout
|
||||
await AppStorage.remove('stickerSets');
|
||||
}
|
||||
}
|
||||
|
||||
export default new appStickersManager();
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { $rootScope, safeReplaceObject, templateUrl, calcImageInBox, encodeEntities, copy } from "../utils";
|
||||
import { $rootScope, safeReplaceObject, calcImageInBox, encodeEntities, copy } from "../utils";
|
||||
import appPhotosManager from "./appPhotosManager";
|
||||
import appDocsManager from "./appDocsManager";
|
||||
import { RichTextProcessor } from "../richtextprocessor";
|
||||
|
@ -75,12 +75,12 @@ export class ApiManager {
|
||||
}
|
||||
|
||||
return Promise.all(logoutPromises).then(() => {
|
||||
AppStorage.remove('dc', 'user_auth');
|
||||
AppStorage.remove('dc', 'user_auth', 'stickerSets');
|
||||
this.baseDcID = 0;
|
||||
this.telegramMeNotify(false);
|
||||
return this.mtpClearStorage();
|
||||
}, (error) => {
|
||||
storageKeys.push('dc', 'user_auth');
|
||||
storageKeys.push('dc', 'user_auth', 'stickerSets');
|
||||
AppStorage.remove(storageKeys);
|
||||
this.baseDcID = 0;
|
||||
error.handled = true;
|
||||
|
@ -514,9 +514,9 @@ function wrapRichText (text, options = {}) {
|
||||
*///html.push(`<span class="emoji-outer emoji-sizer" contenteditable="false">${emojiSupported ? encodeEntities(entityText) : inner}\u200B</span>`);
|
||||
//}
|
||||
|
||||
inner = `<img src="assets/img/blank.gif" alt="" class="emoji" style="background: url(${emojiData.sheetUrl}${entity.coords.sheetNo}.png);
|
||||
inner = `<img src="assets/img/blank.gif" alt="${encodeEntities(entityText)}" class="emoji" style="background: url(${emojiData.sheetUrl}${entity.coords.sheetNo}.png);
|
||||
background-position:${entity.coords.column}% ${entity.coords.row}%;
|
||||
background-size:${emojiData.sizeX}% ${emojiData.sizeY}%" emoji="${encodeEntities(entityText)}">`;
|
||||
background-size:${emojiData.sizeX}% ${emojiData.sizeY}%">`;
|
||||
|
||||
//html.push(`<span class="emoji-outer emoji-sizer" contenteditable="false">${emojiSupported ? encodeEntities(entityText) : inner}\u200B</span>`);
|
||||
|
||||
@ -784,7 +784,8 @@ let RichTextProcessor = {
|
||||
parseMarkdown: parseMarkdown,
|
||||
parseEmojis: parseEmojis,
|
||||
mergeEntities: mergeEntities,
|
||||
getEmojiSpritesheetCoords: getEmojiSpritesheetCoords
|
||||
getEmojiSpritesheetCoords: getEmojiSpritesheetCoords,
|
||||
emojiSupported: emojiSupported
|
||||
};
|
||||
|
||||
window.RichTextProcessor = RichTextProcessor;
|
||||
|
@ -172,12 +172,12 @@ export function getRichValueWithCaret (field) {
|
||||
var selOffset
|
||||
if (sel && sel.rangeCount) {
|
||||
var range = sel.getRangeAt(0)
|
||||
if (range.startContainer &&
|
||||
/* if (range.startContainer &&
|
||||
range.startContainer == range.endContainer &&
|
||||
range.startOffset == range.endOffset) {
|
||||
range.startOffset == range.endOffset) { */
|
||||
selNode = range.startContainer
|
||||
selOffset = range.startOffset
|
||||
}
|
||||
//}
|
||||
}
|
||||
|
||||
getRichElementValue(field, lines, line, selNode, selOffset)
|
||||
@ -312,7 +312,35 @@ export const $rootScope = {
|
||||
}
|
||||
};
|
||||
|
||||
export const _ = (str/* : string */) => str;
|
||||
export const langPack = {
|
||||
"messageActionChatCreate": "created the group",
|
||||
"messageActionChatEditTitle": "changed group name",
|
||||
"messageActionChatEditPhoto": "changed group photo",
|
||||
"messageActionChatDeletePhoto": "removed group photo",
|
||||
"messageActionChatReturn": "returned to group",
|
||||
"messageActionChatJoined": "joined the group",
|
||||
"messageActionChatAddUser": "invited {user}",
|
||||
"messageActionChatAddUsers": "invited {} users",
|
||||
"messageActionChatLeave": "left group",
|
||||
"messageActionChatDeleteUser": "removed user",
|
||||
"messageActionChatJoinedByLink": "joined the group",
|
||||
"messageActionChannelCreate": "Channel created",
|
||||
"messageActionChannelEditTitle": "Channel renamed",
|
||||
"messageActionChannelEditPhoto": "Channel photo updated",
|
||||
"messageActionChannelDeletePhoto": "Channel photo removed",
|
||||
"messageActionPinMessage": "pinned message",
|
||||
|
||||
"messageActionPhoneCall.in_ok": "Incoming Call",
|
||||
"messageActionPhoneCall.out_ok": "Outgoing Call",
|
||||
"messageActionPhoneCall.in_missed": "Missed Call",
|
||||
"messageActionPhoneCall.out_missed": "Cancelled Call",
|
||||
};
|
||||
|
||||
export const _ = (str/* : string */) => {
|
||||
str = str.replace('_raw', '');
|
||||
|
||||
return langPack[str] ? langPack[str] : str;
|
||||
};
|
||||
|
||||
export function isObject(object) {
|
||||
return typeof(object) === 'object' && object !== null;
|
||||
@ -540,33 +568,6 @@ export function listUniqSorted (list) {
|
||||
return resultList
|
||||
}
|
||||
|
||||
export function templateUrl (tplName) {
|
||||
var forceLayout = {
|
||||
confirm_modal: 'desktop',
|
||||
error_modal: 'desktop',
|
||||
media_modal_layout: 'desktop',
|
||||
slider: 'desktop',
|
||||
reply_message: 'desktop',
|
||||
full_round: 'desktop',
|
||||
message_body: 'desktop',
|
||||
message_media: 'desktop',
|
||||
message_attach_game: 'desktop',
|
||||
forwarded_messages: 'desktop',
|
||||
chat_invite_link_modal: 'desktop',
|
||||
reply_markup: 'desktop',
|
||||
short_message: 'desktop',
|
||||
pinned_message: 'desktop',
|
||||
channel_edit_modal: 'desktop',
|
||||
megagroup_edit_modal: 'desktop',
|
||||
inline_results: 'desktop',
|
||||
composer_dropdown: 'desktop',
|
||||
peer_pinned_message_bar: 'desktop',
|
||||
report_msgs_modal: 'desktop'
|
||||
}
|
||||
var layout = forceLayout[tplName] || (Config.Mobile ? 'mobile' : 'desktop')
|
||||
return 'partials/' + layout + '/' + tplName + '.html'
|
||||
}
|
||||
|
||||
export function encodeEntities (value) {
|
||||
return value.replace(/&/g, '&').replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, function (value) {
|
||||
var hi = value.charCodeAt(0)
|
||||
|
Loading…
x
Reference in New Issue
Block a user