dotted underlines when hovering reply link to post w/ multiple quotes, and CSS trick to show play button on video/audio for nojs users

merge-requests/208/head
fatchan 5 years ago
parent 2090d22623
commit a4a063d10d
  1. 32
      gulp/res/css/style.css
  2. 15
      gulp/res/js/expand.js
  3. 21
      gulp/res/js/hover.js

@ -572,6 +572,7 @@ video, img {
justify-content: center; justify-content: center;
display: flex; display: flex;
image-orientation: from-image; image-orientation: from-image;
position:relative;
} }
.expanded { .expanded {
@ -879,6 +880,37 @@ table.boardtable td:nth-child(6) {
color: white; color: white;
} }
.post-file-src[data-type="audio"]::after,
.post-file-src[data-type="video"]::after {
content: "▶";
display: inline-block;
position: absolute;
top: 50%;
left: 50%;
background: #000;
color: #fff;
border-radius: 100%;
width: 50px;
height: 50px;
line-height: 50px;
text-align:center;
box-sizing:border-box;
font-size: 20px;
padding-left: 4px;
transform: translate(-50%, -50%);
opacity: 0.5;
box-shadow: 0 0 3px #fff;
pointer-events: none;
}
.post-file-src:hover::after {
opacity: 1;
}
.post-file-src * {
visibility: visible;
}
@media only screen and (max-width: 700px) { @media only screen and (max-width: 700px) {
table { table {
width: 100%; width: 100%;

@ -17,21 +17,25 @@ window.addEventListener('DOMContentLoaded', (event) => {
volumeSetting.value = volumeLevel; volumeSetting.value = volumeLevel;
volumeSetting.addEventListener('change', changeVolume, false); volumeSetting.addEventListener('change', changeVolume, false);
const toggle = function(thumb, exp, fn) { const toggle = function(thumb, exp, fn, src) {
const close = exp.previousSibling.innerText === 'Close' ? exp.previousSibling : null; const close = exp.previousSibling.innerText === 'Close' ? exp.previousSibling : null;
if (thumb.style.display === 'none') { if (thumb.style.display === 'none') {
//closing
thumb.style.display = ''; thumb.style.display = '';
exp.style.display = 'none'; exp.style.display = 'none';
fn.style.maxWidth = ''; fn.style.maxWidth = '';
if (close) { if (close) {
src.style.visibility = 'visible';
close.style.display = 'none'; close.style.display = 'none';
exp.pause(); exp.pause();
} }
} else { } else {
//expanding
thumb.style.display = 'none'; thumb.style.display = 'none';
exp.style.display = ''; exp.style.display = '';
fn.style.maxWidth = exp.offsetWidth+'px'; fn.style.maxWidth = exp.offsetWidth+'px';
if (close) { if (close) {
src.style.visibility = 'hidden';
close.style.display = ''; close.style.display = '';
exp.play(); exp.play();
} }
@ -46,6 +50,7 @@ window.addEventListener('DOMContentLoaded', (event) => {
const thumbElement = fileLink.firstChild; const thumbElement = fileLink.firstChild;
const fileName = this.previousSibling; const fileName = this.previousSibling;
const next = thumbElement.nextSibling; const next = thumbElement.nextSibling;
const pfs = this.closest('.post-file-src');
let expandedElement; let expandedElement;
if (next) { if (next) {
if (next.innerText === 'Close') { if (next.innerText === 'Close') {
@ -68,7 +73,7 @@ window.addEventListener('DOMContentLoaded', (event) => {
thumbElement.style.opacity = ''; thumbElement.style.opacity = '';
thumbElement.style.cursor = ''; thumbElement.style.cursor = '';
fileLink.appendChild(expandedElement); fileLink.appendChild(expandedElement);
toggle(thumbElement, expandedElement, fileName); toggle(thumbElement, expandedElement, fileName, pfs);
} }
break; break;
case 'video': case 'video':
@ -81,7 +86,7 @@ window.addEventListener('DOMContentLoaded', (event) => {
close.addEventListener('click', function(e) { close.addEventListener('click', function(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
toggle(thumbElement, expandedElement, fileName); toggle(thumbElement, expandedElement, fileName, pfs);
}, true); }, true);
expandedElement.controls = 'true'; expandedElement.controls = 'true';
expandedElement.volume = volumeLevel/100; expandedElement.volume = volumeLevel/100;
@ -89,14 +94,14 @@ window.addEventListener('DOMContentLoaded', (event) => {
expandedElement.appendChild(source); expandedElement.appendChild(source);
fileLink.appendChild(expandedElement); fileLink.appendChild(expandedElement);
fileLink.insertBefore(close, expandedElement); fileLink.insertBefore(close, expandedElement);
toggle(thumbElement, expandedElement, fileName); toggle(thumbElement, expandedElement, fileName, pfs);
break; break;
deault: deault:
break; //uh oh break; //uh oh
} }
source.src = fileSrc; source.src = fileSrc;
} else if (expandedElement) { } else if (expandedElement) {
toggle(thumbElement, expandedElement, fileName); toggle(thumbElement, expandedElement, fileName, pfs);
} }
return false; return false;
}; };

@ -5,6 +5,19 @@ window.addEventListener('DOMContentLoaded', (event) => {
let hovering = false; let hovering = false;
let lastHover; let lastHover;
const toggleDottedUnderlines = (hoveredPost, id) => {
let uniqueQuotes = new Set();
hoveredPost.querySelectorAll('.post-message .quote').forEach(q => uniqueQuotes.add(q.href));
if (uniqueQuotes.size > 1) {
const matchingQuotes = hoveredPost.querySelectorAll(`.post-message .quote[href$="${id}"]`);
for (let i = 0; i < matchingQuotes.length; i++) {
const mq = matchingQuotes[i];
mq.style.borderBottom = mq.style.borderBottom == '' ? '1px dashed' : '';
mq.style.textDecoration = mq.style.textDecoration == '' ? 'none' : '';
}
}
}
const isVisible = (e) => { const isVisible = (e) => {
const top = e.getBoundingClientRect().top; const top = e.getBoundingClientRect().top;
const bottom = e.getBoundingClientRect().bottom; const bottom = e.getBoundingClientRect().bottom;
@ -60,9 +73,10 @@ window.addEventListener('DOMContentLoaded', (event) => {
return; //non-post number board quote return; //non-post number board quote
} }
const float = document.getElementById('float'); const float = document.getElementById('float');
if (float != null) { if (float) {
return document.body.removeChild(float); document.body.removeChild(float);
} }
const thisId = this.closest('.post-container').dataset.postId;
const loading = Date.now(); const loading = Date.now();
lastHover = loading; lastHover = loading;
const hash = this.hash.substring(1); const hash = this.hash.substring(1);
@ -127,9 +141,10 @@ window.addEventListener('DOMContentLoaded', (event) => {
}); });
window.dispatchEvent(newPostEvent); window.dispatchEvent(newPostEvent);
} }
toggleDottedUnderlines(hoveredPost, thisId);
if (anchor && isVisible(hoveredPost)) { if (anchor && isVisible(hoveredPost)) {
hoveredPost.classList.toggle('highlighted'); hoveredPost.classList.toggle('highlighted');
} else { } else if (hovering) {
floatPost(hoveredPost, e.clientX, e.clientY); floatPost(hoveredPost, e.clientX, e.clientY);
} }
} }

Loading…
Cancel
Save