@chat21/chat21-web-widget 5.0.83 → 5.0.84-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. package/CHANGELOG.md +3 -0
  2. package/package.json +1 -1
  3. package/src/app/app.module.ts +5 -2
  4. package/src/app/component/conversation-detail/conversation-audio-recorder/conversation-audio-recorder.component.html +29 -0
  5. package/src/app/component/conversation-detail/conversation-audio-recorder/conversation-audio-recorder.component.scss +103 -0
  6. package/src/app/component/conversation-detail/conversation-audio-recorder/conversation-audio-recorder.component.spec.ts +23 -0
  7. package/src/app/component/conversation-detail/conversation-audio-recorder/conversation-audio-recorder.component.ts +96 -0
  8. package/src/app/component/conversation-detail/conversation-footer/conversation-footer.component.html +14 -3
  9. package/src/app/component/conversation-detail/conversation-footer/conversation-footer.component.scss +26 -10
  10. package/src/app/component/conversation-detail/conversation-footer/conversation-footer.component.ts +131 -49
  11. package/src/app/component/message/audio-track/audio-track.component.html +32 -0
  12. package/src/app/component/message/audio-track/audio-track.component.scss +107 -0
  13. package/src/app/component/message/{audio/audio.component.spec.ts → audio-track/audio-track.component.spec.ts} +6 -6
  14. package/src/app/component/message/audio-track/audio-track.component.ts +147 -0
  15. package/src/app/component/message/bubble-message/bubble-message.component.html +31 -15
  16. package/src/app/component/message/bubble-message/bubble-message.component.scss +7 -0
  17. package/src/app/component/message/bubble-message/bubble-message.component.ts +1 -0
  18. package/src/app/utils/globals.ts +1 -1
  19. package/src/assets/twp/chatbot-panel.html +1 -1
  20. package/src/assets/twp/index-dev.html +5 -5
  21. package/src/assets/twp/index.html +3 -3
  22. package/src/app/component/message/audio/audio.component.html +0 -20
  23. package/src/app/component/message/audio/audio.component.scss +0 -122
  24. package/src/app/component/message/audio/audio.component.ts +0 -122
@@ -0,0 +1,147 @@
1
+ import { Component, ElementRef, AfterViewInit, Input, ViewChild } from '@angular/core';
2
+ import { DomSanitizer, SafeUrl } from '@angular/platform-browser';
3
+ import { convertColorToRGBA } from 'src/chat21-core/utils/utils';
4
+
5
+ @Component({
6
+ selector: 'chat-audio-track',
7
+ templateUrl: './audio-track.component.html',
8
+ styleUrls: ['./audio-track.component.scss']
9
+ })
10
+ export class AudioTrackComponent implements AfterViewInit {
11
+
12
+ @ViewChild('audioElement', { static: true }) audioElement!: ElementRef<HTMLAudioElement>;
13
+ @ViewChild('canvasElement', { static: true }) waveformCanvas!: ElementRef<HTMLCanvasElement>;
14
+
15
+ @Input() audioBlob: Blob | null = null;
16
+ @Input() metadata: any | null = null;
17
+ @Input() color: string;
18
+ @Input() fontSize: string;
19
+ @Input() stylesMap: Map<string, string>;
20
+
21
+ audioUrl: SafeUrl | null = null;
22
+ rawAudioUrl: string | null = null;
23
+ audioContext!: AudioContext;
24
+ audioBuffer!: AudioBuffer;
25
+ audioDuration: number | null = null;
26
+ currentTime: number = 0;
27
+ isPlaying: boolean = false;
28
+
29
+ constructor(private sanitizer: DomSanitizer) {}
30
+
31
+ ngAfterViewInit() {
32
+ console.log('stylesssss', this.stylesMap)
33
+ if (this.audioBlob) {
34
+ this.rawAudioUrl = URL.createObjectURL(this.audioBlob);
35
+ this.audioUrl = this.sanitizer.bypassSecurityTrustUrl(this.rawAudioUrl);
36
+ this.setupAudioContext();
37
+ } else {
38
+ this.rawAudioUrl = this.metadata.src;
39
+ this.audioUrl = this.sanitizer.bypassSecurityTrustUrl(this.rawAudioUrl);
40
+ this.setupAudioContext();
41
+ }
42
+ }
43
+
44
+ async setupAudioContext() {
45
+ this.audioContext = new AudioContext();
46
+ if (this.rawAudioUrl) {
47
+ const response = await fetch(this.rawAudioUrl);
48
+ const audioData = await response.arrayBuffer();
49
+ this.audioBuffer = await this.audioContext.decodeAudioData(audioData);
50
+ this.getAudioDuration();
51
+ this.drawWaveform(this.audioBuffer);
52
+ }
53
+ }
54
+
55
+ drawWaveform(audioBuffer: AudioBuffer) {
56
+ const canvas = this.waveformCanvas.nativeElement;
57
+ const canvasCtx = canvas.getContext('2d');
58
+ if (!canvasCtx) return;
59
+ const width = canvas.width;
60
+ const height = canvas.height;
61
+ const rawData = audioBuffer.getChannelData(0);
62
+
63
+ const samples = 60;
64
+ const blockSize = Math.floor(rawData.length / samples);
65
+ const waveform = new Float32Array(samples);
66
+
67
+ for (let i = 0; i < samples; i++) {
68
+ let sum = 0;
69
+ for (let j = 0; j < blockSize; j++) {
70
+ sum += Math.abs(rawData[i * blockSize + j]);
71
+ }
72
+ waveform[i] = sum / blockSize;
73
+ }
74
+
75
+ canvasCtx.clearRect(0, 0, width, height);
76
+ const padding = 1;
77
+ const barWidth = (width / samples) - padding * 2;
78
+ const audio = this.audioElement.nativeElement;
79
+ const playedPercent = audio.currentTime / this.audioDuration;
80
+ // console.log('playedPercent: ', audio.currentTime, this.audioDuration);
81
+
82
+ for (let i = 0; i < samples; i++) {
83
+ var barHeight = waveform[i] * height * 4;
84
+ if (barHeight < 4) barHeight = 4;
85
+ const x = i * (barWidth + padding * 2) + padding;
86
+
87
+ if (i / samples < playedPercent) {
88
+ canvasCtx.fillStyle = this.color;
89
+ } else {
90
+ canvasCtx.fillStyle = convertColorToRGBA(this.color, 50);;
91
+ }
92
+ canvasCtx.fillRect(x, height / 2 - barHeight, barWidth, barHeight);
93
+ canvasCtx.fillRect(x, height / 2, barWidth, barHeight);
94
+ }
95
+ }
96
+
97
+ playPauseAudio() {
98
+ const audio = this.audioElement.nativeElement;
99
+ if (audio.paused) {
100
+ this.isPlaying = true;
101
+ this.updateWaveform();
102
+ audio.play();
103
+ this.audioContext.resume();
104
+ } else {
105
+ audio.pause();
106
+ this.isPlaying = false;
107
+ }
108
+ audio.ontimeupdate = () => {
109
+ this.currentTime = audio.currentTime;
110
+ this.updateWaveform();
111
+ };
112
+ audio.onended = () => {
113
+ this.isPlaying = false;
114
+ };
115
+ }
116
+
117
+
118
+ updateWaveform() {
119
+ this.drawWaveform(this.audioBuffer);
120
+ if (this.isPlaying) {
121
+ requestAnimationFrame(() => this.updateWaveform());
122
+ }
123
+ }
124
+
125
+ formatTime(seconds: number): string {
126
+ const minutes = Math.floor(seconds / 60);
127
+ const sec = Math.floor(seconds % 60);
128
+ return `${minutes}:${sec < 10 ? '0' + sec : sec}`;
129
+ }
130
+
131
+ getAudioDuration() {
132
+ const audio = new Audio();
133
+ audio.src = this.rawAudioUrl!;
134
+ audio.addEventListener('loadedmetadata', () => {
135
+ if (audio.duration === Infinity) {
136
+ audio.currentTime = Number.MAX_SAFE_INTEGER;
137
+ audio.ontimeupdate = () => {
138
+ audio.ontimeupdate = null;
139
+ audio.currentTime = 0;
140
+ this.audioDuration = audio.duration;
141
+ };
142
+ } else {
143
+ this.audioDuration = audio.duration;
144
+ }
145
+ });
146
+ }
147
+ }
@@ -1,9 +1,26 @@
1
1
  <!-- [ngClass]="{'button-in-msg' : message.metadata && message.metadata.button}" -->
2
2
  <!-- ngStyle]="{'padding': (isImage(message) || isFrame(message))?'1px':'0 8px'}" -->
3
3
  <!-- 'width': (isImage(message) || isFrame(message))? sizeImage?.width + 'px': null -->
4
- <div id="bubble-message" [ngStyle]="{'padding': (isImage(message) || isFrame(message))?'0 0px':'0 8px'}" class="messages primary-color">
5
-
4
+
5
+
6
6
 
7
+ <!-- <div id="bubble-message" *ngIf="isAudio(message)" [ngStyle]="{'padding': '0'}" class="messages primary-color">
8
+ <div>
9
+ <chat-audio-track *ngIf="isAudio(message)"
10
+ [metadata]="message.metadata"
11
+ ></chat-audio-track>
12
+ </div>
13
+ </div>
14
+
15
+
16
+ [ngStyle]="{'padding': (isImage(message) || isFrame(message) || isAudio(message))?'0 0px':'0 8px'}"
17
+ -->
18
+
19
+
20
+
21
+
22
+
23
+ <div id="bubble-message" class="messages primary-color">
7
24
  <div>
8
25
 
9
26
  <div *ngIf="messageType(MESSAGE_TYPE_OTHERS, message) && !isSameSender"
@@ -36,10 +53,18 @@
36
53
  (onElementRendered)="onElementRenderedFN($event)">
37
54
  </chat-frame>
38
55
 
39
- <chat-audio *ngIf="isAudio(message)"
56
+ <!-- <chat-audio *ngIf="isAudio(message)"
40
57
  [metadata]="message.metadata"
41
58
  (onElementRendered)="onElementRenderedFN($event)">
42
- </chat-audio>
59
+ </chat-audio> -->
60
+
61
+ <chat-audio-track *ngIf="isAudio(message)"
62
+ [metadata]="message.metadata"
63
+ [color]="fontColor"
64
+ [fontSize]="fontSize"
65
+ [stylesMap]="stylesMap">
66
+ </chat-audio-track>
67
+
43
68
 
44
69
  <!-- <chat-frame *ngIf="message.metadata && message.metadata.type && message.metadata.type.includes('video')"
45
70
  [metadata]="message.metadata"
@@ -51,7 +76,7 @@
51
76
  <!-- <div *ngIf="message.type == 'text'"> -->
52
77
 
53
78
  <!-- tooltip="{{message.timestamp | dateAgo}} ({{message.timestamp | date:'shortDate'}} {{message.timestamp | date:'HH:mm:ss'}})" placement="bottom" -->
54
- <div *ngIf="message?.text" >
79
+ <div *ngIf="message?.text && !isAudio(message)" >
55
80
 
56
81
  <!-- [htmlEnabled]="(message?.type==='html')? true : false" -->
57
82
  <chat-text *ngIf="message?.type !=='html'"
@@ -69,16 +94,7 @@
69
94
  [themeColor]="stylesMap.get('themeColor')"
70
95
  [foregroundColor]="stylesMap.get('foregroundColor')">
71
96
  </chat-html>
72
- <!-- <p #messageEl class="message_innerhtml marked" [innerHTML]="printMessage(message, messageEl, this) | marked"></p> -->
73
- <!-- <div *ngIf="isPopupUrl(message.text); then contentPopup else contentNewTab">here
74
- is ignored</div>
75
- <ng-template #contentPopup>
76
- <p style="text-decoration: underline; padding:8px; cursor: pointer;"
77
- (click)="popupUrl(g.windowContext, message.text,'windowName')">{{strip_tags(message.text)}}</p>
78
- </ng-template>
79
- <ng-template #contentNewTab>
80
- <p #messageEl [innerHTML]="printMessage(message, messageEl, this) | linky"></p>
81
- </ng-template> -->
97
+
82
98
  </div>
83
99
 
84
100
  </div>
@@ -5,6 +5,9 @@
5
5
  border-radius: var(--border-radius-bubble-message);
6
6
  padding: 0;
7
7
  word-wrap: break-word;
8
+
9
+ background: transparent;
10
+
8
11
  // padding: 14px;
9
12
  // padding: 6px 6px 6px 6px;
10
13
  // box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
@@ -26,4 +29,8 @@
26
29
  height: auto;
27
30
  object-fit: cover;
28
31
  }
32
+
33
+ chat-audio-track {
34
+ display: flex;
35
+ }
29
36
  }
@@ -42,6 +42,7 @@ export class BubbleMessageComponent implements OnInit {
42
42
  constructor(public sanitizer: DomSanitizer) { }
43
43
 
44
44
  ngOnInit() {
45
+ // console.log("---- > MSG:", this.message);
45
46
  }
46
47
 
47
48
  ngOnChanges() {
@@ -388,7 +388,7 @@ export class Globals {
388
388
  /**enable user to set a facebook messanger page to chat with */
389
389
  this.telegramUsername = ''
390
390
  /**enable user to set a telegram number to chat with */
391
- this.fileUploadAccept = "image/*,.pdf,.txt"
391
+ this.fileUploadAccept = "image/*,.pdf,.txt,.mp3"
392
392
  /**enable auto disconnect from messaging after a defined amount of time (s)*/
393
393
  this.disconnetTime = 0
394
394
 
@@ -592,7 +592,7 @@
592
592
  }
593
593
 
594
594
  window.onload = function() {
595
- document.getElementById("tiledesk_widgetTitle").innerHTML = tiledesk_widgetTitle;
595
+ document.getElementById("tiledesk_widgetTitle").value = tiledesk_widgetTitle;
596
596
  }
597
597
 
598
598
 
@@ -504,8 +504,8 @@
504
504
  document.getElementById('events').scrollTop = document.getElementById('events').scrollHeight
505
505
  }
506
506
 
507
- document.getElementById("project_id").innerHTML = '"' + tiledesk_projectid + '"';
508
- document.getElementById("project_name").innerHTML = project_name;
507
+ document.getElementById("project_id").value = '"' + tiledesk_projectid + '"';
508
+ document.getElementById("project_name").value = project_name;
509
509
  });
510
510
 
511
511
  window.Tiledesk('onBeforeInit', function(event_data) {
@@ -518,7 +518,7 @@
518
518
 
519
519
  var enbedJs = event_data.detail.appConfigs.enbedJs? event_data.detail.appConfigs.enbedJs : false;
520
520
  document.getElementById("enbed").style.display = enbedJs? "inline-block": "none";
521
- document.getElementById("base_url").innerHTML = enbedJs ? window.tiledesk.getBaseLocation() + '/launch.js': null;
521
+ document.getElementById("base_url").value = enbedJs ? window.tiledesk.getBaseLocation() + '/launch.js': null;
522
522
 
523
523
  baseUrlConsole = event_data.detail.appConfigs.dashboardUrl? event_data.detail.appConfigs.dashboardUrl : baseUrlConsole;
524
524
  }
@@ -1444,8 +1444,8 @@
1444
1444
  // console.log('project_name: ', project_name);
1445
1445
 
1446
1446
  // window.onload = function() {
1447
- // document.getElementById("project_id").innerHTML = '"' + tiledesk_projectid + '"';
1448
- // document.getElementById("project_name").innerHTML = project_name;
1447
+ // document.getElementById("project_id").value = '"' + tiledesk_projectid + '"';
1448
+ // document.getElementById("project_name").value = project_name;
1449
1449
  // }
1450
1450
 
1451
1451
 
@@ -297,7 +297,7 @@
297
297
 
298
298
  var enbedJs = event_data.detail.appConfigs.enbedJs? event_data.detail.appConfigs.enbedJs : false;
299
299
  document.getElementById("enbed").style.display = enbedJs? "inline-block": "none";
300
- document.getElementById("base_url").innerHTML = enbedJs ? window.tiledesk.getBaseLocation() + '/launch.js': null;
300
+ document.getElementById("base_url").value = enbedJs ? window.tiledesk.getBaseLocation() + '/launch.js': null;
301
301
 
302
302
  baseUrlConsole = event_data.detail.appConfigs.dashboardUrl? event_data.detail.appConfigs.dashboardUrl : baseUrlConsole;
303
303
  }
@@ -436,8 +436,8 @@
436
436
  // console.log('project_name: ', project_name);
437
437
 
438
438
  window.onload = function() {
439
- document.getElementById("project_id").innerHTML = '"' + tiledesk_projectid + '"';
440
- document.getElementById("project_name").innerHTML = project_name;
439
+ document.getElementById("project_id").value = '"' + tiledesk_projectid + '"';
440
+ document.getElementById("project_name").value = project_name;
441
441
 
442
442
  if(role !== 'agent'){
443
443
  document.getElementById("testPageButton").style.display = 'block'
@@ -1,20 +0,0 @@
1
-
2
-
3
- <div id="audio_container" #audio_container>
4
-
5
- <audio aria-label="traccia audio" #audio_msg controls controlsList="nodownload" id="audio_msg" (pause)="pauseAudioMsg($event)" (play)="playAudioMsg($event)" (timeupdate)="updateTimeAudioMsg($event)">
6
- <source [src]="metadata?.src" [type]="metadata?.type">
7
- <!-- {{metadata?.src}} -->
8
- <!-- controlsList="nodownload" -->
9
- </audio>
10
-
11
- <!-- <button id="play-icon" (click)="onPlayPause('play')" *ngIf="status === 'play'">
12
- <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M10 8.64L15.27 12 10 15.36V8.64M8 5v14l11-7L8 5z"/></svg>
13
- </button>
14
- <button id="pause-icon" (click)="onPlayPause('pause')" *ngIf="status === 'pause'">
15
- <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M6 19h4V5H6v14zm8-14v14h4V5h-4z"/></svg>
16
- </button>
17
- <div id="duration" #duration>0:00</div>
18
- <input type="range" id="seek-slider" max="100" value="0"> -->
19
- </div>
20
-
@@ -1,122 +0,0 @@
1
- #audio_container{
2
- display: flex;
3
- }
4
-
5
- #play-icon,
6
- #pause-icon {
7
- margin: 20px 2.5% 10px 2.5%;
8
- }
9
-
10
- .time {
11
- display: inline-block;
12
- width: 37px;
13
- text-align: center;
14
- font-size: 20px;
15
- margin: 28.5px 0 18.5px 0;
16
- float: left;
17
- }
18
- output {
19
- display: inline-block;
20
- width: 32px;
21
- text-align: center;
22
- font-size: 20px;
23
- margin: 10px 2.5% 0 5%;
24
- float: left;
25
- clear: left;
26
- }
27
-
28
- input[type="range"] {
29
- position: relative;
30
- -webkit-appearance: none;
31
- width: 48%;
32
- margin: 0;
33
- padding: 0;
34
- height: 19px;
35
- margin: 30px 2.5% 20px 2.5%;
36
- float: left;
37
- outline: none;
38
- }
39
- input[type="range"]::-webkit-slider-runnable-track {
40
- width: 100%;
41
- height: 3px;
42
- cursor: pointer;
43
- background: linear-gradient(to right, rgba(0, 125, 181, 0.6) var(--buffered-width), rgba(0, 125, 181, 0.2) var(--buffered-width));
44
- }
45
- input[type="range"]::before {
46
- position: absolute;
47
- content: "";
48
- top: 8px;
49
- left: 0;
50
- width: var(--seek-before-width);
51
- height: 3px;
52
- background-color: #007db5;
53
- cursor: pointer;
54
- }
55
- input[type="range"]::-webkit-slider-thumb {
56
- position: relative;
57
- -webkit-appearance: none;
58
- box-sizing: content-box;
59
- border: 1px solid #007db5;
60
- height: 15px;
61
- width: 15px;
62
- border-radius: 50%;
63
- background-color: #fff;
64
- cursor: pointer;
65
- margin: -7px 0 0 0;
66
- }
67
- input[type="range"]:active::-webkit-slider-thumb {
68
- transform: scale(1.2);
69
- background: #007db5;
70
- }
71
- input[type="range"]::-moz-range-track {
72
- width: 100%;
73
- height: 3px;
74
- cursor: pointer;
75
- background: linear-gradient(to right, rgba(0, 125, 181, 0.6) var(--buffered-width), rgba(0, 125, 181, 0.2) var(--buffered-width));
76
- }
77
- input[type="range"]::-moz-range-progress {
78
- background-color: #007db5;
79
- }
80
- input[type="range"]::-moz-focus-outer {
81
- border: 0;
82
- }
83
- input[type="range"]::-moz-range-thumb {
84
- box-sizing: content-box;
85
- border: 1px solid #007db5;
86
- height: 15px;
87
- width: 15px;
88
- border-radius: 50%;
89
- background-color: #fff;
90
- cursor: pointer;
91
- }
92
- input[type="range"]:active::-moz-range-thumb {
93
- transform: scale(1.2);
94
- background: #007db5;
95
- }
96
- input[type="range"]::-ms-track {
97
- width: 100%;
98
- height: 3px;
99
- cursor: pointer;
100
- background: transparent;
101
- border: solid transparent;
102
- color: transparent;
103
- }
104
- input[type="range"]::-ms-fill-lower {
105
- background-color: #007db5;
106
- }
107
- input[type="range"]::-ms-fill-upper {
108
- background: linear-gradient(to right, rgba(0, 125, 181, 0.6) var(--buffered-width), rgba(0, 125, 181, 0.2) var(--buffered-width));
109
- }
110
- input[type="range"]::-ms-thumb {
111
- box-sizing: content-box;
112
- border: 1px solid #007db5;
113
- height: 15px;
114
- width: 15px;
115
- border-radius: 50%;
116
- background-color: #fff;
117
- cursor: pointer;
118
- }
119
- input[type="range"]:active::-ms-thumb {
120
- transform: scale(1.2);
121
- background: #007db5;
122
- }
@@ -1,122 +0,0 @@
1
- import { Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';
2
- // import lottieWeb from 'https://cdn.skypack.dev/lottie-web';
3
-
4
- @Component({
5
- selector: 'chat-audio',
6
- templateUrl: './audio.component.html',
7
- styleUrls: ['./audio.component.scss']
8
- })
9
- export class AudioComponent implements OnInit {
10
-
11
- @Input() metadata: any;
12
- @Output() onElementRendered = new EventEmitter<{element: string, status: boolean}>();
13
-
14
- uidAudioPlayng: string = ''
15
- divPlay: HTMLAudioElement
16
- playState: HTMLElement
17
- status: 'play' | 'pause' = 'play'
18
-
19
- constructor(private elementRef: ElementRef) { }
20
-
21
- ngOnInit() {
22
- // this.divPlay = this.elementRef.nativeElement.querySelector('#audio_container').querySelector('#audio_msg')
23
- // this.playState= this.elementRef.nativeElement.querySelector('#audio_container').querySelector('#duration')
24
- }
25
-
26
- onPlayPause(status: string){
27
- // const divPlay = (<HTMLAudioElement>document.getElementById('audio_msg'));
28
- if(status === 'play') {
29
- this.divPlay.play();
30
- this.status = 'pause'
31
- } else {
32
- this.divPlay.pause();
33
- this.status = 'play'
34
- }
35
- }
36
-
37
- pauseAudioMsg(e) {
38
- try {
39
- // stop all audio
40
- if (this.uidAudioPlayng) {
41
- const divPlay = (<HTMLAudioElement>document.getElementById(this.uidAudioPlayng));
42
- divPlay.pause();
43
- // console.log('> pausa: ', divPlay);
44
- }
45
- } catch (error) {
46
- console.log('> Error is: ', error);
47
- }
48
-
49
- try {
50
- // console.log(e.target.id);
51
- if (this.uidAudioPlayng) {
52
- this.uidAudioPlayng = '';
53
- }
54
- } catch (error) {
55
- console.log('> Error is: ', error);
56
- }
57
- }
58
-
59
- playAudioMsg(e) {
60
- // stop all audio
61
- if (this.uidAudioPlayng) {
62
- const divPlay = (<HTMLAudioElement>document.getElementById(this.uidAudioPlayng));
63
- divPlay.pause();
64
- // console.log('> pausa: ', divPlay);
65
- }
66
- try {
67
- // console.log(e.target.id);
68
- // set uid audio playng
69
- this.uidAudioPlayng = e.target.id;
70
- } catch (error) {
71
- console.log('> Error is: ', error);
72
- }
73
- }
74
-
75
- updateTimeAudioMsg(ev){
76
- var currTime = Math.floor(ev.target.currentTime);
77
- var duration = Math.floor(ev.target.duration);
78
-
79
- let minutes = 0;
80
- if(currTime > 60){
81
- minutes = Math.floor(currTime / 60);
82
- }
83
- const seconds = currTime - minutes * 60
84
- // console.log('timeeee', minutes + ':' + seconds )
85
- // this.playState.innerHTML = minutes + ':' + seconds
86
- }
87
-
88
-
89
-
90
- /**
91
- *
92
- * @param uid
93
- */
94
- playPausaAudioMsg(uid: string) {
95
- // console.log('playPausaAudioMsg: ', uid);
96
- const that = this;
97
- try {
98
- const divPause = (<HTMLAudioElement>document.getElementById(that.uidAudioPlayng));
99
- const divPlay = (<HTMLAudioElement>document.getElementById(uid));
100
- if (divPause) {
101
- divPause.pause();
102
- }
103
-
104
- if (that.uidAudioPlayng === uid) {
105
- that.uidAudioPlayng = '';
106
- } else {
107
- if (divPlay) {
108
- setTimeout(function() {
109
- // if (that.g.autoplay_activated) {
110
- // divPlay.play();
111
- // }
112
- this.uidAudioPlayng = uid;
113
- }, 300);
114
- }
115
- }
116
-
117
- } catch (error) {
118
- console.log('> Error is: ', error);
119
- }
120
- }
121
-
122
- }