Working at a basic level for global manage page now reference #171

merge-requests/208/head
Thomas Lynch 4 years ago
parent e3a4524f74
commit e063f20507
  1. 20
      gulp/res/js/live.js
  2. 12
      models/forms/makepost.js
  3. 19
      socketio.js
  4. 2
      views/pages/globalmanagerecent.pug

@ -7,7 +7,9 @@ window.addEventListener('settingsReady', function(event) { //after domcontentloa
let supportsWebSockets = 'WebSocket' in window || 'MozWebSocket' in window;
const livecolor = document.getElementById('livecolor');
const livetext = (isThread || isGlobalRecent) && document.getElementById('livetext') ? document.getElementById('livetext').childNodes[1] : null;
const liveElem = document.getElementById('livetext');
const livetext = (isThread || isGlobalRecent) && liveElem ? liveElem.childNodes[1] : null;
let room = liveElem && liveElem.dataset.room;
const updateButton = document.getElementById('updatepostsbutton');
const updateLive = (message, color, showRelativeTime) => {
livecolor.style.backgroundColor = color;
@ -22,7 +24,7 @@ window.addEventListener('settingsReady', function(event) { //after domcontentloa
const newPost = (data) => {
//insert at end of thread, but insert at top for globalmanage
console.log('got new post');
console.log('got new post', data);
lastPostId = data.postId;
const postData = data;
//create a new post
@ -59,7 +61,7 @@ window.addEventListener('settingsReady', function(event) { //after domcontentloa
}
const newReply = document.createElement('a');
const space = document.createTextNode(' ');
newReply.href = `${window.location.pathname}#${postData.postId}`;
newReply.href = `/${postData.board}/${(isModView || isGlobalRecent) ? 'manage/' : ''}thread/${postData.thread || postData.postId}.html#${postData.postId}`;
newReply.textContent = `>>${postData.postId}`;
newReply.classList.add('quote');
replies.appendChild(newReply);
@ -68,7 +70,11 @@ window.addEventListener('settingsReady', function(event) { //after domcontentloa
const newPostAnchor = document.getElementById(postData.postId);
const newPost = newPostAnchor.nextSibling;
if (scrollEnabled) {
newPostAnchor.scrollIntoView(); //scroll to post if enabled;
if (globalManageRecent) {
window.scrollTo(0, 0); //recent pages are reverse sort, so just go to top
} else {
newPostAnchor.scrollIntoView(); //scroll to post if enabled;
} l
}
const newPostEvent = new CustomEvent('addPost', {
detail: {
@ -140,8 +146,10 @@ window.addEventListener('settingsReady', function(event) { //after domcontentloa
const enableLive = () => {
if (supportsWebSockets) {
updateButton.style.display = 'none';
const roomParts = window.location.pathname.replace(/\.html$/, '').split('/');
const room = `${roomParts[1]}-${roomParts[roomParts.length-1]}`;
if (!room) {
const roomParts = window.location.pathname.replace(/\.html$/, '').split('/');
room = `${roomParts[1]}-${roomParts[roomParts.length-1]}`;
}
socket = io({
transports: ['websocket'],
reconnectionAttempts: 3,

@ -588,15 +588,9 @@ ${res.locals.numFiles > 0 ? req.files.file.map(f => f.name+'|'+(f.phash || '')).
'cyclic': data.cyclic,
}
Socketio.emitRoom(`${res.locals.board._id}-${data.thread}`, 'newPost', projectedPost);
const { raw, single, qrange, hrange } = data.ip;
const projectedWithIp = {
...projectedPost,
ip: {
single, qrange, hrange,
raw: null, //TODO: this would need to be thought about more because of ipHashPermLevel
}
}
Socketio.emitRoom('globalmanage-recent', 'newPost', projectedWithIp);
const { raw, single } = data.ip;
Socketio.emitRoom('globalmanage-recent-hashed', 'newPost', { ...projectedPost, ip: { single, raw: null } });
Socketio.emitRoom('globalmanage-recent-raw', 'newPost', { ...projectedPost, ip: { single, raw } });
}
//now add other pages to be built in background

@ -1,7 +1,12 @@
'use strict';
const { redis: redisConfig } = require(__dirname+'/configs/main.js')
const { redis: redisConfig, ipHashPermLevel } = require(__dirname+'/configs/main.js')
, roomRegex = /[a-z0-9]+-\d+/i
, roomPermsMap = {
'globalmanage-recent-hashed': 1,
'globalmanage-recent-raw': ipHashPermLevel,
}
, authedRooms = new Set(Object.keys(roomPermsMap));
module.exports = {
@ -25,13 +30,13 @@ module.exports = {
startRooms: () => {
module.exports.io.on('connection', socket => {
socket.on('room', room => {
if ((!roomRegex.test(room) && room !== 'globalmanage-recent') //if not a valid room name
|| (room === 'globalmanage-recent' && (!socket.request.locals.user
|| socket.request.locals.user.authLevel > 1))) { //or no perms
return socket.disconnect(true); //then disconnect them
if ((!roomRegex.test(room) && !authedRooms.has(room)) //if not a valid room name
|| (authedRooms.has(room) && (!socket.request.locals.user //or the room requires auth and no session
|| socket.request.locals.user.authLevel > roomPermsMap[room]))) { //or not enough perms for that room
return socket.disconnect(true); //disconnect them
}
socket.join(room);
socket.send('joined');
socket.join(room); //otherwise join the room
socket.send('joined'); //send joined so frontend knows to show "connected"
});
});
},

@ -10,7 +10,7 @@ block content
br
.wrapbar
+globalmanagenav('recent')
.jsonly#livetext
.jsonly#livetext(data-room=`globalmanage-recent-${permLevel > ipHashPermLevel ? 'hashed' : 'raw'}`)
.dot#livecolor
| Connecting...
input.postform-style.ml-5.di#updatepostsbutton(type='button' value='Update')

Loading…
Cancel
Save