mirror of
https://github.com/schlagmichdoch/PairDrop.git
synced 2025-04-20 15:06:15 -04:00
Animate progress circle and show complete status in blue for 10s
This commit is contained in:
parent
1d62a9ff49
commit
c33d49702e
2 changed files with 60 additions and 26 deletions
|
@ -422,6 +422,10 @@ class PeerUI {
|
||||||
this._connectionHash = "";
|
this._connectionHash = "";
|
||||||
this._connected = false;
|
this._connected = false;
|
||||||
|
|
||||||
|
this._currentProgress = 0;
|
||||||
|
this._currentStatus = null
|
||||||
|
this._oldStatus = null;
|
||||||
|
|
||||||
this._roomIds = {}
|
this._roomIds = {}
|
||||||
this._roomIds[roomType] = roomId;
|
this._roomIds[roomType] = roomId;
|
||||||
|
|
||||||
|
@ -445,6 +449,7 @@ class PeerUI {
|
||||||
this.$label = this.$el.querySelector('label');
|
this.$label = this.$el.querySelector('label');
|
||||||
this.$input = this.$el.querySelector('input');
|
this.$input = this.$el.querySelector('input');
|
||||||
this.$displayName = this.$el.querySelector('.name');
|
this.$displayName = this.$el.querySelector('.name');
|
||||||
|
this.$progress = this.$el.querySelector('.progress');
|
||||||
|
|
||||||
this.updateTypesClassList();
|
this.updateTypesClassList();
|
||||||
|
|
||||||
|
@ -599,17 +604,17 @@ class PeerUI {
|
||||||
this._connected = true;
|
this._connected = true;
|
||||||
|
|
||||||
// on reconnect
|
// on reconnect
|
||||||
this.setStatus(this.oldStatus);
|
this.setStatus(this._oldStatus);
|
||||||
this.oldStatus = null;
|
this._oldStatus = null;
|
||||||
|
|
||||||
this._connectionHash = connectionHash;
|
this._connectionHash = connectionHash;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
this._connected = false;
|
this._connected = false;
|
||||||
|
|
||||||
if (!this.oldStatus && this.currentStatus !== "connect") {
|
if (!this._oldStatus && this._currentStatus !== "connect") {
|
||||||
// save old status when reconnecting
|
// save old status when reconnecting
|
||||||
this.oldStatus = this.currentStatus;
|
this._oldStatus = this._currentStatus;
|
||||||
}
|
}
|
||||||
this.setStatus("connect");
|
this.setStatus("connect");
|
||||||
|
|
||||||
|
@ -678,36 +683,50 @@ class PeerUI {
|
||||||
}
|
}
|
||||||
|
|
||||||
setProgress(progress, status) {
|
setProgress(progress, status) {
|
||||||
const $progress = this.$el.querySelector('.progress');
|
clearTimeout(this.resetProgressTimeout);
|
||||||
|
|
||||||
if (0.5 < progress && progress < 1) {
|
|
||||||
$progress.classList.add('over50');
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$progress.classList.remove('over50');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (progress === 1) {
|
|
||||||
progress = 0;
|
|
||||||
status = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.setStatus(status);
|
this.setStatus(status);
|
||||||
|
|
||||||
|
const progressSpillsOverHalf = this._currentProgress < 0.5 && 0.5 <= progress;
|
||||||
|
|
||||||
|
if (progress === 0 || progressSpillsOverHalf) {
|
||||||
|
this.$progress.classList.remove('animate');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.$progress.classList.add('animate');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (0.5 <= progress && progress < 1) {
|
||||||
|
this.$progress.classList.add('over50');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.$progress.classList.remove('over50');
|
||||||
|
}
|
||||||
|
|
||||||
const degrees = `rotate(${360 * progress}deg)`;
|
const degrees = `rotate(${360 * progress}deg)`;
|
||||||
$progress.style.setProperty('--progress', degrees);
|
this.$progress.style.setProperty('--progress', degrees);
|
||||||
|
|
||||||
|
this._currentProgress = progress
|
||||||
|
|
||||||
|
if (progress === 1) {
|
||||||
|
this.resetProgressTimeout = setTimeout(() => this.setProgress(0, null), 200);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setStatus(status) {
|
setStatus(status) {
|
||||||
|
if (status === this._currentStatus) return;
|
||||||
|
|
||||||
|
clearTimeout(this.statusTimeout);
|
||||||
|
|
||||||
if (!status) {
|
if (!status) {
|
||||||
this.$el.removeAttribute('status');
|
this.$el.removeAttribute('status');
|
||||||
this.$el.querySelector('.status').innerHTML = '';
|
this.$el.querySelector('.status').innerHTML = '';
|
||||||
this.currentStatus = null;
|
this._currentStatus = null;
|
||||||
NoSleepUI.disableIfPeersIdle();
|
NoSleepUI.disableIfPeersIdle();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status === this.currentStatus) return;
|
this.$el.classList.add('blink');
|
||||||
|
|
||||||
let statusName = {
|
let statusName = {
|
||||||
"connect": Localization.getTranslation("peer-ui.connecting"),
|
"connect": Localization.getTranslation("peer-ui.connecting"),
|
||||||
|
@ -719,9 +738,17 @@ class PeerUI {
|
||||||
"complete": Localization.getTranslation("peer-ui.complete")
|
"complete": Localization.getTranslation("peer-ui.complete")
|
||||||
}[status];
|
}[status];
|
||||||
|
|
||||||
|
if (status === "complete") {
|
||||||
|
this.$el.classList.remove('blink');
|
||||||
|
|
||||||
|
this.statusTimeout = setTimeout(() => {
|
||||||
|
this.setProgress(0, null);
|
||||||
|
}, 10000);
|
||||||
|
}
|
||||||
|
|
||||||
this.$el.setAttribute('status', status);
|
this.$el.setAttribute('status', status);
|
||||||
this.$el.querySelector('.status').innerText = statusName;
|
this.$el.querySelector('.status').innerText = statusName;
|
||||||
this.currentStatus = status;
|
this._currentStatus = status;
|
||||||
}
|
}
|
||||||
|
|
||||||
_onDrop(e) {
|
_onDrop(e) {
|
||||||
|
|
|
@ -188,12 +188,12 @@ x-peer:not(.type-public-id) .highlight-room-public-id {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
x-peer:not([status]):hover,
|
x-peer:not([status].blink):hover,
|
||||||
x-peer:not([status]):focus {
|
x-peer:not([status].blink):focus {
|
||||||
transform: scale(1.05);
|
transform: scale(1.05);
|
||||||
}
|
}
|
||||||
|
|
||||||
x-peer[status] x-icon {
|
x-peer[status].blink x-icon {
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -249,7 +249,7 @@ x-peer[status] .device-name {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
x-peer[status] {
|
x-peer[status].blink {
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -257,6 +257,10 @@ x-peer {
|
||||||
animation: pop 600ms ease-out 1;
|
animation: pop 600ms ease-out 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
x-peer[status]:not(.blink) .status {
|
||||||
|
color: var(--primary-color);
|
||||||
|
}
|
||||||
|
|
||||||
@keyframes pop {
|
@keyframes pop {
|
||||||
0% {
|
0% {
|
||||||
transform: scale(0.7);
|
transform: scale(0.7);
|
||||||
|
@ -747,7 +751,6 @@ x-dialog .dialog-subheader {
|
||||||
top: -8px;
|
top: -8px;
|
||||||
clip: rect(0px, 80px, 80px, 40px);
|
clip: rect(0px, 80px, 80px, 40px);
|
||||||
--progress: rotate(0deg);
|
--progress: rotate(0deg);
|
||||||
transition: transform 200ms;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.circle {
|
.circle {
|
||||||
|
@ -761,6 +764,10 @@ x-dialog .dialog-subheader {
|
||||||
transform: var(--progress);
|
transform: var(--progress);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.animate .circle {
|
||||||
|
transition: transform 200ms;
|
||||||
|
}
|
||||||
|
|
||||||
.over50 {
|
.over50 {
|
||||||
clip: rect(auto, auto, auto, auto);
|
clip: rect(auto, auto, auto, auto);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue