Reduce client-side JS for compose delay
This commit is contained in:
@@ -1414,43 +1414,48 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
const collectReplyTimingSnapshot = function () {
|
const collectReplyTimingSnapshot = function () {
|
||||||
const rows = Array.from(thread.querySelectorAll(".compose-row"));
|
const rows = thread.querySelectorAll(".compose-row");
|
||||||
if (!rows.length) {
|
const count = rows ? rows.length : 0;
|
||||||
|
if (!count) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
const timeline = rows
|
const lastRow = rows[count - 1];
|
||||||
.map(function (row, idx) {
|
const lastTs = toInt(lastRow && lastRow.dataset ? lastRow.dataset.ts : 0);
|
||||||
return {
|
if (!lastTs) {
|
||||||
ts: toInt(row && row.dataset ? row.dataset.ts : 0),
|
|
||||||
outgoing: !!(row && row.classList && row.classList.contains("is-out")),
|
|
||||||
order: idx,
|
|
||||||
};
|
|
||||||
})
|
|
||||||
.filter(function (item) {
|
|
||||||
return item.ts > 0;
|
|
||||||
})
|
|
||||||
.sort(function (left, right) {
|
|
||||||
if (left.ts === right.ts) {
|
|
||||||
return left.order - right.order;
|
|
||||||
}
|
|
||||||
return left.ts - right.ts;
|
|
||||||
});
|
|
||||||
if (!timeline.length) {
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
let counterpartBaselineMs = null;
|
let counterpartBaselineMs = null;
|
||||||
for (let idx = timeline.length - 1; idx > 0; idx -= 1) {
|
for (let idx = count - 1; idx > 0; idx -= 1) {
|
||||||
const current = timeline[idx];
|
const currentRow = rows[idx];
|
||||||
const previous = timeline[idx - 1];
|
const previousRow = rows[idx - 1];
|
||||||
if (!current.outgoing && previous.outgoing && current.ts >= previous.ts) {
|
const currentOutgoing = !!(
|
||||||
counterpartBaselineMs = current.ts - previous.ts;
|
currentRow
|
||||||
|
&& currentRow.classList
|
||||||
|
&& currentRow.classList.contains("is-out")
|
||||||
|
);
|
||||||
|
const previousOutgoing = !!(
|
||||||
|
previousRow
|
||||||
|
&& previousRow.classList
|
||||||
|
&& previousRow.classList.contains("is-out")
|
||||||
|
);
|
||||||
|
const currentTs = toInt(
|
||||||
|
currentRow && currentRow.dataset ? currentRow.dataset.ts : 0
|
||||||
|
);
|
||||||
|
const previousTs = toInt(
|
||||||
|
previousRow && previousRow.dataset ? previousRow.dataset.ts : 0
|
||||||
|
);
|
||||||
|
if (!currentOutgoing && previousOutgoing && currentTs >= previousTs) {
|
||||||
|
counterpartBaselineMs = currentTs - previousTs;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const last = timeline[timeline.length - 1];
|
|
||||||
return {
|
return {
|
||||||
lastTs: last.ts,
|
lastTs: lastTs,
|
||||||
isMyTurn: !last.outgoing,
|
isMyTurn: !(
|
||||||
|
lastRow
|
||||||
|
&& lastRow.classList
|
||||||
|
&& lastRow.classList.contains("is-out")
|
||||||
|
),
|
||||||
counterpartBaselineMs: counterpartBaselineMs,
|
counterpartBaselineMs: counterpartBaselineMs,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -1497,7 +1502,6 @@
|
|||||||
isOverTarget: ratio > 1,
|
isOverTarget: ratio > 1,
|
||||||
};
|
};
|
||||||
renderReplyTimingChip();
|
renderReplyTimingChip();
|
||||||
ensurePriorityGlanceOrder();
|
|
||||||
};
|
};
|
||||||
const collectLightboxImages = function () {
|
const collectLightboxImages = function () {
|
||||||
return Array.from(thread.querySelectorAll(".compose-image"));
|
return Array.from(thread.querySelectorAll(".compose-image"));
|
||||||
@@ -1880,8 +1884,7 @@
|
|||||||
glanceNode.appendChild(chip);
|
glanceNode.appendChild(chip);
|
||||||
});
|
});
|
||||||
|
|
||||||
renderReplyTimingChip();
|
renderReplyTimingChip({ placeAfterDelay: true });
|
||||||
ensurePriorityGlanceOrder();
|
|
||||||
|
|
||||||
if (glanceNode.children.length) {
|
if (glanceNode.children.length) {
|
||||||
glanceNode.classList.remove("is-hidden");
|
glanceNode.classList.remove("is-hidden");
|
||||||
@@ -1890,34 +1893,11 @@
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const ensurePriorityGlanceOrder = function () {
|
const renderReplyTimingChip = function (options) {
|
||||||
if (!glanceNode) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const children = Array.from(glanceNode.querySelectorAll(".compose-glance-item"));
|
|
||||||
const delayChip = children.find(function (chip) {
|
|
||||||
if (chip.classList.contains("is-delay")) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
const key = chip.querySelector(".compose-glance-key");
|
|
||||||
return /^delay$/i.test(String(key ? key.textContent : "").trim());
|
|
||||||
}) || null;
|
|
||||||
const replyChip = glanceNode.querySelector(".compose-glance-item-reply");
|
|
||||||
|
|
||||||
if (delayChip) {
|
|
||||||
glanceNode.insertBefore(delayChip, glanceNode.firstChild);
|
|
||||||
}
|
|
||||||
if (replyChip && delayChip) {
|
|
||||||
glanceNode.insertBefore(replyChip, delayChip.nextSibling);
|
|
||||||
} else if (replyChip) {
|
|
||||||
glanceNode.insertBefore(replyChip, glanceNode.firstChild);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const renderReplyTimingChip = function () {
|
|
||||||
if (!glanceNode) {
|
if (!glanceNode) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
const placeAfterDelay = !!(options && options.placeAfterDelay);
|
||||||
let chip = glanceNode.querySelector(".compose-glance-item-reply");
|
let chip = glanceNode.querySelector(".compose-glance-item-reply");
|
||||||
if (!chip) {
|
if (!chip) {
|
||||||
chip = document.createElement("span");
|
chip = document.createElement("span");
|
||||||
@@ -1945,6 +1925,15 @@
|
|||||||
glanceNode.appendChild(chip);
|
glanceNode.appendChild(chip);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (placeAfterDelay) {
|
||||||
|
const delayChip = glanceNode.querySelector(".compose-glance-item.is-delay");
|
||||||
|
if (delayChip && chip !== delayChip.nextSibling) {
|
||||||
|
glanceNode.insertBefore(chip, delayChip.nextSibling);
|
||||||
|
} else if (!delayChip && glanceNode.firstChild !== chip) {
|
||||||
|
glanceNode.insertBefore(chip, glanceNode.firstChild);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const valueNode = chip.querySelector('[data-role="reply-value"]');
|
const valueNode = chip.querySelector('[data-role="reply-value"]');
|
||||||
const fillNode = chip.querySelector('[data-role="reply-fill"]');
|
const fillNode = chip.querySelector('[data-role="reply-fill"]');
|
||||||
if (valueNode) {
|
if (valueNode) {
|
||||||
|
|||||||
Reference in New Issue
Block a user