diff --git a/src/components/appSearch.ts b/src/components/appSearch.ts
index 34c3ee15..b0030244 100644
--- a/src/components/appSearch.ts
+++ b/src/components/appSearch.ts
@@ -251,7 +251,7 @@ export default class AppSearch {
const {count, history, next_rate} = res;
- if(history[0].mid == this.minMsgId) {
+ if(history.length && history[0].mid == this.minMsgId) {
history.shift();
}
@@ -269,7 +269,7 @@ export default class AppSearch {
searchGroup.toggle();
- this.minMsgId = history[history.length - 1].mid;
+ this.minMsgId = history.length && history[history.length - 1].mid;
this.offsetRate = next_rate;
if(this.loadedCount == -1) {
diff --git a/src/components/audio.ts b/src/components/audio.ts
index ef140bed..b0d3b84c 100644
--- a/src/components/audio.ts
+++ b/src/components/audio.ts
@@ -259,16 +259,17 @@ function wrapAudio(audioEl: AudioElement) {
let subtitle = doc.audioPerformer ? RichTextProcessor.wrapPlainText(doc.audioPerformer) : '';
if(withTime) {
- subtitle += (subtitle ? ' · ' : '') + formatDate(doc.date);
+ subtitle += (subtitle ? ' • ' : '') + formatDate(doc.date);
} else if(!subtitle) {
subtitle = 'Unknown Artist';
}
+ subtitle = ' • ' + subtitle;
+
const html = `
@@ -346,15 +347,15 @@ export default class AudioElement extends HTMLElement {
const downloadDiv = document.createElement('div');
downloadDiv.classList.add('audio-download');
- if(!uploading && doc.type != 'audio') {
+ if(!uploading && isVoice) {
downloadDiv.innerHTML = '
';
}
- if(doc.type != 'audio' || uploading) {
+ if(isVoice || uploading) {
this.append(downloadDiv);
}
- const onTypeLoad = doc.type == 'voice' ? wrapVoiceMessage(this) : wrapAudio(this);
+ const onTypeLoad = isVoice ? wrapVoiceMessage(this) : wrapAudio(this);
const audioTimeDiv = this.querySelector('.audio-time') as HTMLDivElement;
audioTimeDiv.innerHTML = durationStr;
@@ -366,8 +367,10 @@ export default class AudioElement extends HTMLElement {
const toggle = this.querySelector('.audio-toggle') as HTMLDivElement;
+ const getTimeStr = () => String(audio.currentTime | 0).toHHMMSS() + (isVoice ? (' / ' + durationStr) : '');
+
const onPlaying = () => {
- audioTimeDiv.innerText = String(audio.currentTime | 0).toHHMMSS(true) + ' / ' + durationStr;
+ audioTimeDiv.innerText = getTimeStr();
if(!audio.paused) {
//toggle.classList.remove('tgico-largeplay');
toggle.classList.add('tgico-largepause');
@@ -376,7 +379,6 @@ export default class AudioElement extends HTMLElement {
if(!audio.paused || (audio.currentTime > 0 && audio.currentTime != audio.duration)) {
onPlaying();
- audioTimeDiv.innerText = String(audio.currentTime | 0).toHHMMSS(true) + ' / ' + durationStr;
}
attachClickEvent(toggle, (e) => {
@@ -392,7 +394,7 @@ export default class AudioElement extends HTMLElement {
this.addAudioListener('timeupdate', () => {
if(appMediaPlaybackController.isSafariBuffering(audio)) return;
- audioTimeDiv.innerText = String(audio.currentTime | 0).toHHMMSS(true) + ' / ' + durationStr;
+ audioTimeDiv.innerText = getTimeStr();
});
this.addAudioListener('pause', () => {
@@ -406,7 +408,7 @@ export default class AudioElement extends HTMLElement {
if(!uploading) {
let preloader: ProgressivePreloader = this.preloader;
- if(doc.type == 'voice') {
+ if(isVoice) {
let download: Download;
const onClick = (e: Event) => {
diff --git a/src/components/chat/bubbles.ts b/src/components/chat/bubbles.ts
index 223561a3..1d9bad4c 100644
--- a/src/components/chat/bubbles.ts
+++ b/src/components/chat/bubbles.ts
@@ -1143,7 +1143,7 @@ export default class ChatBubbles {
this.log('setPeer peerId:', this.peerId, historyStorage, lastMsgId, topMessage);
// add last message, bc in getHistory will load < max_id
- const additionMsgId = isJump || this.chat.type !== 'chat' ? 0 : topMessage;
+ const additionMsgId = isJump || (this.chat.type !== 'chat' && this.chat.type !== 'discussion') ? 0 : topMessage;
/* this.setPeerPromise = null;
this.preloader.detach();
@@ -2041,7 +2041,7 @@ export default class ChatBubbles {
nameContainer = newNameContainer;
}
- const lastContainer = messageDiv.lastElementChild.querySelector('.document-size');
+ const lastContainer = messageDiv.lastElementChild.querySelector('.document-size, .audio');
lastContainer && lastContainer.append(timeSpan.cloneNode(true));
bubble.classList.remove('is-message-empty');
diff --git a/src/components/chat/chat.ts b/src/components/chat/chat.ts
index f56d5aa2..317d1d7c 100644
--- a/src/components/chat/chat.ts
+++ b/src/components/chat/chat.ts
@@ -138,7 +138,7 @@ export default class Chat extends EventListenerBase<{
if(this.type === 'discussion' && !this.threadId) {
this.threadId = lastMsgId;
- lastMsgId = 0;
+ lastMsgId = undefined;
}
//console.time('appImManager setPeer');
diff --git a/src/components/chat/messageRender.ts b/src/components/chat/messageRender.ts
index 1ba5ff02..b3297aa6 100644
--- a/src/components/chat/messageRender.ts
+++ b/src/components/chat/messageRender.ts
@@ -1,6 +1,7 @@
import { getFullDate } from "../../helpers/date";
import { formatNumber } from "../../helpers/number";
import { MessageReplies } from "../../layer";
+import appMessagesManager from "../../lib/appManagers/appMessagesManager";
import appPeersManager from "../../lib/appManagers/appPeersManager";
import RichTextProcessor from "../../lib/richtextprocessor";
import { ripple } from "../ripple";
@@ -100,7 +101,8 @@ export namespace MessageRender {
}
if(replies) {
- if(replies.read_max_id < replies.max_id) {
+ const historyStorage = appMessagesManager.getHistoryStorage(-replies.channel_id);
+ if(replies.read_max_id < replies.max_id && (!historyStorage.readMaxId || historyStorage.readMaxId < replies.max_id)) {
container.classList.add('is-unread');
}
}
diff --git a/src/components/popups/datePicker.ts b/src/components/popups/datePicker.ts
index 978ebd39..45635261 100644
--- a/src/components/popups/datePicker.ts
+++ b/src/components/popups/datePicker.ts
@@ -1,5 +1,6 @@
import PopupElement, { PopupOptions } from ".";
import { getFullDate, months } from "../../helpers/date";
+import mediaSizes from "../../helpers/mediaSizes";
import InputField from "../inputField";
export default class PopupDatePicker extends PopupElement {
@@ -272,7 +273,8 @@ export default class PopupDatePicker extends PopupElement {
}
public setMonth() {
- this.monthTitle.innerText = months[this.selectedMonth.getMonth()] + ' ' + this.selectedMonth.getFullYear();
+ const monthName = months[this.selectedMonth.getMonth()];
+ this.monthTitle.innerText = (this.timeDiv && mediaSizes.isMobile ? monthName.slice(0, 3) : monthName) + ' ' + this.selectedMonth.getFullYear();
if(this.month) {
this.month.remove();
diff --git a/src/components/sidebarRight/tabs/sharedMedia.ts b/src/components/sidebarRight/tabs/sharedMedia.ts
index 2cd19ece..592c37cd 100644
--- a/src/components/sidebarRight/tabs/sharedMedia.ts
+++ b/src/components/sidebarRight/tabs/sharedMedia.ts
@@ -533,6 +533,9 @@ export default class AppSharedMediaTab implements SliderTab {
withTime: true,
fontWeight: 400
});
+ if(message.media.document.type === 'audio') {
+ div.classList.add('audio-48');
+ }
div.dataset.mid = '' + message.mid;
elemsToAppend.push(div);
}
diff --git a/src/lib/appManagers/appChatsManager.ts b/src/lib/appManagers/appChatsManager.ts
index b15f119b..d25d4a55 100644
--- a/src/lib/appManagers/appChatsManager.ts
+++ b/src/lib/appManagers/appChatsManager.ts
@@ -212,7 +212,7 @@ export class AppChatsManager {
public getChat(id: number) {
if(id < 0) id = -id;
- return this.chats[id] || {_: 'chatEmpty', id: id, deleted: true, access_hash: ''/* this.channelAccess[id] */};
+ return this.chats[id] || {_: 'chatEmpty', id, deleted: true, access_hash: '', pFlags: {}/* this.channelAccess[id] */};
}
public hasRights(id: number, action: ChatRights, flag?: keyof ChatBannedRights['pFlags']) {
@@ -222,7 +222,7 @@ export class AppChatsManager {
if(chat._ == 'chatForbidden' ||
chat._ == 'channelForbidden' ||
chat.pFlags.kicked ||
- chat.pFlags.left) {
+ (chat.pFlags.left && !chat.pFlags.megagroup)) {
return false;
}
@@ -387,7 +387,7 @@ export class AppChatsManager {
const chat = this.getChat(id);
const isChannel = this.isBroadcast(id);
- const participants_count = chat.participants_count || chat.participants?.participants.length || 0;
+ const participants_count = chat.participants_count || chat.participants?.participants.length || 1;
return numberWithCommas(participants_count) + ' ' + (isChannel ? 'followers' : 'members');
}
diff --git a/src/lib/appManagers/appDocsManager.ts b/src/lib/appManagers/appDocsManager.ts
index ae589c2d..ea1ffa5e 100644
--- a/src/lib/appManagers/appDocsManager.ts
+++ b/src/lib/appManagers/appDocsManager.ts
@@ -157,7 +157,8 @@ export class AppDocsManager {
}
// for testing purposes
- //doc.supportsStreaming = false;
+ // doc.supportsStreaming = false;
+ // doc.url = '';
if(!doc.file_name) {
doc.file_name = '';
@@ -304,7 +305,7 @@ export class AppDocsManager {
download = originalPromise.then(async(blob) => {
let reader = new FileReader();
- await new Promise((resolve, reject) => {
+ await new Promise
((resolve, reject) => {
reader.onloadend = (e) => {
let uint8 = new Uint8Array(e.target.result as ArrayBuffer);
//console.log('sending uint8 to decoder:', uint8);
diff --git a/src/lib/appManagers/appDownloadManager.ts b/src/lib/appManagers/appDownloadManager.ts
index 8a2ff845..bc615340 100644
--- a/src/lib/appManagers/appDownloadManager.ts
+++ b/src/lib/appManagers/appDownloadManager.ts
@@ -102,6 +102,8 @@ export class AppDownloadManager {
};
const tryDownload = (): Promise => {
+ //return Promise.resolve();
+
if(!apiManager.worker) {
return this.cacheStorage.getFile(fileName).then((blob) => {
if(blob.size < options.size) throw 'wrong size';
diff --git a/src/lib/appManagers/appImManager.ts b/src/lib/appManagers/appImManager.ts
index bd5ac2cf..4d46afa2 100644
--- a/src/lib/appManagers/appImManager.ts
+++ b/src/lib/appManagers/appImManager.ts
@@ -577,14 +577,13 @@ export class AppImManager {
if(peerId < 0) { // not human
const chat = appPeersManager.getPeer(peerId);
- const isChannel = appPeersManager.isChannel(peerId) && !appPeersManager.isMegagroup(peerId);
const chatInfo = await appProfileManager.getChatFull(chat.id) as any;
this.chat.log('chatInfo res:', chatInfo);
- const participants_count = chatInfo.participants_count || (chatInfo.participants && chatInfo.participants.participants && chatInfo.participants.participants.length);
- if(participants_count) {
- subtitle = numberWithCommas(participants_count) + ' ' + (isChannel ? 'followers' : 'members');
+ const participants_count = chatInfo.participants_count || (chatInfo.participants && chatInfo.participants.participants && chatInfo.participants.participants.length) || 1;
+ //if(participants_count) {
+ subtitle = appChatsManager.getChatMembersString(-peerId);
if(participants_count < 2) return subtitle;
const onlines = await appChatsManager.getOnlines(chat.id);
@@ -593,7 +592,7 @@ export class AppImManager {
}
return subtitle;
- }
+ //}
} else if(!appUsersManager.isBot(peerId)) { // user
const user = appUsersManager.getUser(peerId);
diff --git a/src/lib/appManagers/appMessagesManager.ts b/src/lib/appManagers/appMessagesManager.ts
index 90e2c530..b5fbb7e0 100644
--- a/src/lib/appManagers/appMessagesManager.ts
+++ b/src/lib/appManagers/appMessagesManager.ts
@@ -228,6 +228,7 @@ export class AppMessagesManager {
}); */
function timedChunk(items: any[], process: (...args: any[]) => any, context: any, callback: (...args: any[]) => void) {
+ if(!items.length) return callback(items);
const todo = items.slice();
const f = () => {
@@ -322,6 +323,10 @@ export class AppMessagesManager {
this.saveMessages(messages);
}
+
+ if(!state.dialogs || !Object.keys(state.dialogs).length) {
+ state.allDialogsLoaded = {};
+ }
if(state.allDialogsLoaded) {
this.dialogsStorage.allDialogsLoaded = state.allDialogsLoaded;
@@ -1315,7 +1320,7 @@ export class AppMessagesManager {
if(peerId < 0 && (appPeersManager.isBroadcast(peerId) || appPeersManager.getPeer(peerId).admin_rights?.pFlags?.anonymous)) {
return undefined;
} else {
- return appPeersManager.getOutputPeer(peerId);
+ return appPeersManager.getOutputPeer(appUsersManager.getSelf().id);
}
}
@@ -1343,8 +1348,7 @@ export class AppMessagesManager {
}
}
- public setDialogTopMessage(message: MyMessage) {
- const dialog = this.getDialogByPeerId(message.peerId)[0];
+ public setDialogTopMessage(message: MyMessage, dialog: MTDialog.dialog = this.getDialogByPeerId(message.peerId)[0]) {
if(dialog) {
dialog.top_message = message.mid;
@@ -1479,7 +1483,13 @@ export class AppMessagesManager {
public isHistoryUnread(peerId: number, threadId?: number) {
const historyStorage = this.getHistoryStorage(peerId, threadId);
- return (peerId > 0 ? Math.max(historyStorage.readMaxId, historyStorage.readOutboxMaxId) : historyStorage.readMaxId) < historyStorage.maxId;
+ if(threadId) {
+ const chatHistoryStorage = this.getHistoryStorage(peerId);
+ const readMaxId = Math.max(chatHistoryStorage.readMaxId, historyStorage.readMaxId);
+ return readMaxId < historyStorage.maxId;
+ } else {
+ return (peerId > 0 ? Math.max(historyStorage.readMaxId, historyStorage.readOutboxMaxId) : historyStorage.readMaxId) < historyStorage.maxId;
+ }
}
public getTopMessages(limit: number, folderId: number): Promise {
@@ -1931,7 +1941,7 @@ export class AppMessagesManager {
isScheduled: true,
isOutgoing: true
}> = {}) {
- let groups: Map;
+ let groups: Set;
messages.forEach((message) => {
if(message.pFlags === undefined) {
message.pFlags = {};
@@ -2163,10 +2173,10 @@ export class AppMessagesManager {
if(message.grouped_id) {
if(!groups) {
- groups = new Map();
+ groups = new Set();
}
- groups.set(peerId, message.grouped_id);
+ groups.add(message.grouped_id);
} else {
message.rReply = this.getRichReplyText(message);
}
@@ -2181,10 +2191,10 @@ export class AppMessagesManager {
});
if(groups) {
- for(const [peerId, groupId] of groups) {
+ for(const groupId of groups) {
const mids = this.groupedMessagesStorage[groupId];
for(const mid in mids) {
- const message = (options.storage || this.getMessagesStorage(peerId))[mid];
+ const message = this.groupedMessagesStorage[groupId][mid];
message.rReply = this.getRichReplyText(message);
}
}
@@ -3016,9 +3026,9 @@ export class AppMessagesManager {
const message = result.messages[0] as MyMessage;
const historyStorage = this.getHistoryStorage(message.peerId, message.mid);
- historyStorage.maxId = this.generateMessageId(result.max_id) || 0;
- historyStorage.readMaxId = this.generateMessageId(result.read_inbox_max_id) || 0;
- historyStorage.readOutboxMaxId = this.generateMessageId(result.read_outbox_max_id) || 0;
+ result.max_id = historyStorage.maxId = this.generateMessageId(result.max_id) || 0;
+ result.read_inbox_max_id = historyStorage.readMaxId = this.generateMessageId(result.read_inbox_max_id) || 0;
+ result.read_outbox_max_id = historyStorage.readOutboxMaxId = this.generateMessageId(result.read_outbox_max_id) || 0;
return result;
});
@@ -3069,14 +3079,14 @@ export class AppMessagesManager {
public deleteMessages(peerId: number, mids: number[], revoke?: true) {
let promise: Promise;
- mids = mids.map(mid => this.getLocalMessageId(mid));
+ const localMessageIds = mids.map(mid => this.getLocalMessageId(mid));
if(peerId < 0 && appPeersManager.isChannel(peerId)) {
const channelId = -peerId;
const channel = appChatsManager.getChat(channelId);
if(!channel.pFlags.creator && !(channel.pFlags.editor && channel.pFlags.megagroup)) {
const goodMsgIds: number[] = [];
- if (channel.pFlags.editor || channel.pFlags.megagroup) {
+ if(channel.pFlags.editor || channel.pFlags.megagroup) {
mids.forEach((msgId, i) => {
const message = this.getMessageByPeer(peerId, mids[i]);
if(message.pFlags.out) {
@@ -3094,7 +3104,7 @@ export class AppMessagesManager {
promise = apiManager.invokeApi('channels.deleteMessages', {
channel: appChatsManager.getChannelInput(channelId),
- id: mids
+ id: localMessageIds
}).then((affectedMessages) => {
apiUpdatesManager.processUpdateMessage({
_: 'updateShort',
@@ -3110,7 +3120,7 @@ export class AppMessagesManager {
} else {
promise = apiManager.invokeApi('messages.deleteMessages', {
revoke,
- id: mids
+ id: localMessageIds
}).then((affectedMessages) => {
apiUpdatesManager.processUpdateMessage({
_: 'updateShort',
@@ -3128,6 +3138,7 @@ export class AppMessagesManager {
}
public readHistory(peerId: number, maxId = 0) {
+ return Promise.resolve(true);
// console.trace('start read')
if(!this.isHistoryUnread(peerId)) return Promise.resolve(true);
@@ -3233,7 +3244,7 @@ export class AppMessagesManager {
public getHistoryStorage(peerId: number, threadId?: number) {
if(threadId) {
- threadId = this.getLocalMessageId(threadId);
+ //threadId = this.getLocalMessageId(threadId);
if(!this.threadsStorage[peerId]) this.threadsStorage[peerId] = {};
return this.threadsStorage[peerId][threadId] ?? (this.threadsStorage[peerId][threadId] = {count: null, history: [], pending: []});
}
@@ -3276,7 +3287,7 @@ export class AppMessagesManager {
const storage = this.getMessagesStorage(peerId);
const foundDialog = this.getDialogByPeerId(peerId);
- if(!foundDialog.length) {
+ if(!foundDialog.length && (peerId > 0 || !appChatsManager.getChat(-peerId).pFlags.left)) {
this.newDialogsToHandle[peerId] = {reload: true};
this.scheduleHandleNewDialogs();
if(this.newUpdatesAfterReloadToHandle[peerId] === undefined) {
@@ -3286,17 +3297,16 @@ export class AppMessagesManager {
break;
}
- if(update._ == 'updateNewChannelMessage') {
+ /* if(update._ == 'updateNewChannelMessage') {
const chat = appChatsManager.getChat(-peerId);
if(chat.pFlags && (chat.pFlags.left || chat.pFlags.kicked)) {
break;
}
- }
+ } */
this.saveMessages([message], {storage});
// this.log.warn(dT(), 'message unread', message.mid, message.pFlags.unread)
- const dialog = foundDialog[0];
const pendingMessage = this.checkPendingMessage(message);
const historyStorage = this.getHistoryStorage(peerId);
@@ -3335,11 +3345,14 @@ export class AppMessagesManager {
this.newMessagesHandlePromise = window.setTimeout(this.handleNewMessages, 0);
}
}
-
- const inboxUnread = !message.pFlags.out && message.pFlags.unread;
- this.setDialogTopMessage(message);
- if(inboxUnread) {
- dialog.unread_count++;
+
+ const dialog = foundDialog[0];
+ if(dialog) {
+ const inboxUnread = !message.pFlags.out && message.pFlags.unread;
+ this.setDialogTopMessage(message, dialog);
+ if(inboxUnread) {
+ dialog.unread_count++;
+ }
}
break;
@@ -3830,7 +3843,7 @@ export class AppMessagesManager {
break;
} */
- const messages = update.messages;
+ const messages = update.messages.map(id => this.generateMessageId(id));
const storage = this.getMessagesStorage(peerId);
const missingMessages = messages.filter(mid => !storage[mid]);
@@ -4141,10 +4154,6 @@ export class AppMessagesManager {
}
public getHistory(peerId: number, maxId = 0, limit: number, backLimit?: number, threadId?: number) {
- if(threadId) {
- threadId = this.getLocalMessageId(threadId);
- }
-
if(this.migratedFromTo[peerId]) {
peerId = this.migratedFromTo[peerId];
}
@@ -4343,7 +4352,7 @@ export class AppMessagesManager {
const options = {
peer: appPeersManager.getInputPeerById(peerId),
- msg_id: threadId,
+ msg_id: this.getLocalMessageId(threadId) || 0,
offset_id: this.getLocalMessageId(maxId) || 0,
offset_date: offsetDate,
add_offset: offset,
diff --git a/src/lib/logger.ts b/src/lib/logger.ts
index 298abdae..7f4cd77a 100644
--- a/src/lib/logger.ts
+++ b/src/lib/logger.ts
@@ -13,7 +13,7 @@ function dT() {
}
export function logger(prefix: string, level = LogLevels.log | LogLevels.warn | LogLevels.error) {
- if(process.env.NODE_ENV != 'development' || true) {
+ if(process.env.NODE_ENV != 'development'/* || true */) {
level = LogLevels.error;
}
diff --git a/src/lib/storage.ts b/src/lib/storage.ts
index 394ebc20..93a4d776 100644
--- a/src/lib/storage.ts
+++ b/src/lib/storage.ts
@@ -86,7 +86,7 @@ class AppStorage {
if(this.useCS) {
try {
//console.log('setItem: will set', key/* , value */);
- await this.cacheStorage.delete(key); // * try to prevent memory leak in Chrome leading to 'Unexpected internal error.'
+ //await this.cacheStorage.delete(key); // * try to prevent memory leak in Chrome leading to 'Unexpected internal error.'
await this.cacheStorage.save(key, new Response(value, {headers: {'Content-Type': 'application/json'}}));
//console.log('setItem: have set', key/* , value */);
} catch(e) {
diff --git a/src/scss/partials/_audio.scss b/src/scss/partials/_audio.scss
index 52af76b8..aa51c333 100644
--- a/src/scss/partials/_audio.scss
+++ b/src/scss/partials/_audio.scss
@@ -1,9 +1,9 @@
.audio {
position: relative;
padding-left: 67px;
- min-height: 58px;
- max-width: 258px;
overflow: visible!important;
+ height: 54px;
+ user-select: none;
@include respond-to(handhelds) {
padding-left: 45px;
@@ -341,6 +341,7 @@
&-waveform {
height: 23px;
+ margin-top: -4px;
//overflow: visible!important;
@@ -354,57 +355,113 @@
}
}
+ //&.audio-54 {
+ &-details {
+ margin-top: 4px;
+ margin-bottom: 2px;
+ }
+ //}
+
+ &.audio-48 {
+ .audio-details {
+ margin-top: 3px;
+ margin-bottom: 0;
+ }
+
+ .audio-title {
+ margin-bottom: -2px;
+ }
+ }
+
&-title {
font-size: 1rem;
color: #000;
- user-select: none;
}
&-time, &-subtitle {
font-size: 14px;
color: $color-gray;
- margin-top: 3px;
- margin-left: -1px;
- user-select: none;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ display: flex;
@include respond-to(handhelds) {
- margin-top: 1px;
font-size: 12px;
}
}
+ // * for audio
+ &-subtitle {
+ align-items: center;
+
+ .audio-time {
+ flex: 0 0 auto;
+ margin-right: 4px;
+ }
+ }
+
+ // * for audio
+ &-title, &-subtitle {
+ margin-left: -1px;
+ }
+
+ // * for audio
&-title, &:not(.audio-show-progress) &-subtitle {
white-space: nowrap;
overflow: hidden;
max-width: 100%;
text-overflow: ellipsis;
}
-
-
- @include respond-to(handhelds) {
- &-download {
- //background: transparent;
- margin-left: 6px;
- margin-top: 6px;
+
+ &.is-voice {
+ .audio-time {
+ line-height: 1;
+ margin-left: -1px;
+ margin-top: 2px;
}
- &.is-voice {
- .audio-download {
- margin: 0;
+ &.is-unread {
+ .audio-time {
+ &:after {
+ content: " ";
+ width: .5rem;
+ height: .5rem;
+ background-color: $color-blue;
+ border-radius: 50%;
+ margin-left: .375rem;
+ display: inline;
+ margin-top: 2px;
+ }
}
}
}
- &.is-voice.is-unread {
- .audio-time {
- &:after {
- content: " ";
- width: .5rem;
- height: .5rem;
- background-color: $color-blue;
- border-radius: 50%;
- margin-left: .375rem;
- display: inline-block;
+ // * for audio
+ .progress-line {
+ flex: 1 1 auto;
+ margin-left: 5px;
+ margin-top: -1px;
+
+ &__filled {
+ background-color: #0089ff;
+ transform-origin: left;
+ height: 2px;
+ }
+
+ &__loaded {
+ background-color: #cacaca;
+ }
+
+ &__seek {
+ height: 2px;
+ //background-color: #e6ecf0;
+ background: rgba(193, 207, 220, 0.39);
+
+ &::-webkit-slider-thumb {
+ height: 12px;
+ width: 12px;
+ border: none;
}
}
}
diff --git a/src/scss/partials/_chat.scss b/src/scss/partials/_chat.scss
index d0f3ad6f..cd0b56ee 100644
--- a/src/scss/partials/_chat.scss
+++ b/src/scss/partials/_chat.scss
@@ -789,6 +789,10 @@ $chat-helper-size: 39px;
@include respond-to(handhelds) {
padding: 0 .5rem;
+
+ &.tgico-send2 {
+ padding: 0 2px;
+ }
}
@media only screen and (max-width: 380px) {
diff --git a/src/scss/partials/_chatBubble.scss b/src/scss/partials/_chatBubble.scss
index 4bce313e..48b590e0 100644
--- a/src/scss/partials/_chatBubble.scss
+++ b/src/scss/partials/_chatBubble.scss
@@ -895,110 +895,48 @@ $bubble-margin: .25rem;
}
}
- .audio:not(.is-voice) {
- justify-content: unset;
- max-width: none;
- width: 258px;
-
+ .audio {
+ padding-right: 2px;
+
$parent: ".audio";
-
#{$parent} {
- &-time {
- padding-bottom: 7px;
- }
-
- &-time, &-subtitle {
- color: #4fae4e;
- line-height: 1.45;
- margin-top: 0;
- }
-
&-title {
font-weight: 500;
- margin-left: -1px;
- }
-
- &-details {
- margin-top: 8px;
-
- @include respond-to(handhelds) {
- margin-top: -1px;
- }
}
-
+
&-ico {
font-size: 0;
-
- @include respond-to(handhelds) {
- margin-top: 1px;
- margin-left: 2px;
- }
}
}
@include respond-to(handhelds) {
- height: 59px;
+ height: 42px;
padding-left: 47px;
- }
-
- // .preloader-container {
- // @include respond-to(handhelds) {
- // width: 30px;
- // height: 30px;
- // // left: 2px;
- // }
- // }
-
- .progress-line {
- /* width: calc(100% + 50px); */
- width: 191px;
- margin: 9px 0 9px;
-
- @include respond-to(handhelds) {
- width: unset;
- }
- &__filled {
- background-color: #47aa41;
- transform-origin: left;
- height: 2px;
+ .audio-details {
+ margin-top: 2px;
+ margin-bottom: 0;
}
- &__seek {
- height: 2px;
- overflow: visible !important;
- background: rgba(124, 195, 107, .52);
-
- &::-webkit-slider-thumb {
- height: 12px;
- width: 12px;
- background: #47aa41;
- border: none;
- }
+ .audio-subtitle {
+ margin-top: -1px;
}
}
}
// all for audio (not voice)
.message.audio-message {
- //&.audio-message {
- min-width: 275px;
- //max-width: 380px !important;
- max-width: 275px !important;
- padding-top: 8px !important;
- padding-left: 8px !important;
-
- /* .audio-details * {
- overflow: visible;
- } */
- //}
+ min-width: 335px;
+ max-width: 335px !important;
- /* @include respond-to(handhelds) {
- .preloader-container .you-spin-me-round {
- margin-top: 1px;
- margin-left: 2px;
- }
- } */
+ @include respond-to(handhelds) {
+ min-width: 280px;
+ max-width: 300px !important;
+ }
+ }
+
+ .message.audio-message, .message.voice-message {
+ padding: 8px !important;
}
.message.contact-message {
@@ -1706,27 +1644,6 @@ $bubble-margin: .25rem;
color: #707579 !important;
}
- .audio:not(.is-voice) {
- .progress-line {
- &__seek {
- background: rgba(193, 207, 220, .39);
- }
-
- &__filled {
- background-color: #0089ff;
- }
-
- &__loaded {
- background-color: #cacaca;
- }
-
- input::-webkit-slider-thumb {
- background: #63a2e3;
- border: none;
- }
- }
- }
-
/* .poll {
&-answer-selected {
&:before {
@@ -1969,9 +1886,23 @@ $bubble-margin: .25rem;
pointer-events: none;
}
- .progress-line {
- &__loaded {
- background-color: #90e18d !important;
+ .audio:not(.is-voice) {
+ .progress-line {
+ &__loaded {
+ background-color: #90e18d !important;
+ }
+
+ &__filled {
+ background-color: #47aa41;
+ }
+
+ &__seek {
+ background: rgba(124, 195, 107, .52);
+
+ &::-webkit-slider-thumb {
+ background: #47aa41;
+ }
+ }
}
}
diff --git a/src/scss/partials/_ckin.scss b/src/scss/partials/_ckin.scss
index 7724595d..1b477b3d 100644
--- a/src/scss/partials/_ckin.scss
+++ b/src/scss/partials/_ckin.scss
@@ -284,7 +284,7 @@ video::-webkit-media-controls-enclosure {
position: relative;
cursor: pointer;
- input[type=range] {
+ &__seek {
-webkit-appearance: none;
-moz-appearance: none;
background: transparent;
diff --git a/src/scss/partials/_document.scss b/src/scss/partials/_document.scss
index 70b5d864..d59bc6e9 100644
--- a/src/scss/partials/_document.scss
+++ b/src/scss/partials/_document.scss
@@ -140,7 +140,6 @@
@include respond-to(handhelds) {
margin-top: -1px;
- margin-right: -1px;
font-size: 20px;
}
}
diff --git a/src/scss/partials/_rightSidebar.scss b/src/scss/partials/_rightSidebar.scss
index 500ea729..85c593e4 100644
--- a/src/scss/partials/_rightSidebar.scss
+++ b/src/scss/partials/_rightSidebar.scss
@@ -460,15 +460,12 @@
}
.audio {
- padding-bottom: 26px;
padding-left: 61px;
/* min-height: 58px; */
max-width: 368px;
justify-content: unset;
-
- &-details {
- height: 66px;
- }
+ height: 48px;
+ margin-bottom: 1.5rem;
&.audio-show-progress .audio-subtitle {
overflow: visible;
@@ -478,22 +475,11 @@
padding-bottom: 16px;
} */
- &-ico {
+ &-ico, &-download {
width: 48px;
height: 48px;
}
- &-download {
- border-radius: 50%;
- background-color: #50a2e9;
- align-items: center;
-
- @include respond-to(not-handhelds) {
- width: 48px;
- height: 48px;
- }
- }
-
.part {
height: 112px;
width: 112px;
@@ -505,58 +491,6 @@
height: 100px;
}
}
-
- &-title {
- font-size: 1rem;
- color: #000;
- line-height: 1.2;
- padding-top: 5px;
- margin-top: 0;
- margin-left: -1px;
- }
-
- &-subtitle {
- font-size: 14px;
- line-height: 1.25;
- color: #707579;
- margin-left: -1px;
- margin-top: 3px;
- }
-
- &-time {
- margin-top: 1px;
- }
-
- &-title, &-subtitle {
- overflow: hidden;
- text-overflow: ellipsis;
- }
- }
-
- .progress-line {
- margin: 11px 0 8px;
-
- &__filled {
- background-color: #0089ff;
- transform-origin: left;
- height: 2px;
- }
-
- &__loaded {
- background-color: #cacaca;
- }
-
- &__seek {
- height: 2px;
- //background-color: #e6ecf0;
- background: rgba(193, 207, 220, 0.39);
-
- &::-webkit-slider-thumb {
- height: 12px;
- width: 12px;
- border: none;
- }
- }
}
}
}
diff --git a/src/scss/partials/popups/_datePicker.scss b/src/scss/partials/popups/_datePicker.scss
index 205fb867..bb79865d 100644
--- a/src/scss/partials/popups/_datePicker.scss
+++ b/src/scss/partials/popups/_datePicker.scss
@@ -119,6 +119,10 @@
margin-bottom: 17px;
margin-left: 0;
+ @include respond-to(handhelds) {
+ margin-left: 3px;
+ }
+
.btn-icon {
font-size: 22px;
}
@@ -132,6 +136,12 @@
min-width: 420px;
width: 420px;
padding: 4px 16px 16px 16px;
+
+ @include respond-to(handhelds) {
+ min-width: 312px;
+ width: 312px;
+ padding: 4px 14px 14px 14px;
+ }
}
.date-picker {
@@ -140,10 +150,19 @@
margin-left: 2px;
width: unset;
+ @include respond-to(handhelds) {
+ margin-left: 0;
+ margin-right: -6px;
+ }
+
&-title {
font-weight: 500;
font-size: 20px;
margin-left: -5rem;
+
+ @include respond-to(handhelds) {
+ margin-left: -2rem;
+ }
}
.btn-icon {
@@ -168,6 +187,10 @@
&-months {
margin-bottom: 14px;
+
+ @include respond-to(handhelds) {
+ margin-bottom: 13px;
+ }
}
&-time {
@@ -175,6 +198,10 @@
justify-content: center;
margin-bottom: 1.5rem;
+ @include respond-to(handhelds) {
+ margin-bottom: 22px;
+ }
+
.input-field {
width: 80px;
@@ -202,5 +229,11 @@
.btn-primary {
font-weight: normal;
+
+ @include respond-to(handhelds) {
+ height: 50px;
+ widtH: 280px;
+ margin-left: 2px;
+ }
}
}
\ No newline at end of file