Prettified Code!
This commit is contained in:
@@ -4,11 +4,11 @@ import {
|
||||
CHAT_PLACEHOLDER_OFFLINE,
|
||||
} from './constants.js';
|
||||
|
||||
|
||||
// Taken from https://stackoverflow.com/questions/3972014/get-contenteditable-caret-index-position
|
||||
export function getCaretPosition(editableDiv) {
|
||||
var caretPos = 0,
|
||||
sel, range;
|
||||
sel,
|
||||
range;
|
||||
if (window.getSelection) {
|
||||
sel = window.getSelection();
|
||||
if (sel.rangeCount) {
|
||||
@@ -20,11 +20,11 @@ export function getCaretPosition(editableDiv) {
|
||||
} else if (document.selection && document.selection.createRange) {
|
||||
range = document.selection.createRange();
|
||||
if (range.parentElement() == editableDiv) {
|
||||
var tempEl = document.createElement("span");
|
||||
var tempEl = document.createElement('span');
|
||||
editableDiv.insertBefore(tempEl, editableDiv.firstChild);
|
||||
var tempRange = range.duplicate();
|
||||
tempRange.moveToElementText(tempEl);
|
||||
tempRange.setEndPoint("EndToEnd", range);
|
||||
tempRange.setEndPoint('EndToEnd', range);
|
||||
caretPos = tempRange.text.length;
|
||||
}
|
||||
}
|
||||
@@ -44,10 +44,11 @@ export function setCaretPosition(editableDiv, position) {
|
||||
sel.addRange(range);
|
||||
}
|
||||
|
||||
|
||||
export function generatePlaceholderText(isEnabled, hasSentFirstChatMessage) {
|
||||
if (isEnabled) {
|
||||
return hasSentFirstChatMessage ? CHAT_PLACEHOLDER_TEXT : CHAT_INITIAL_PLACEHOLDER_TEXT;
|
||||
return hasSentFirstChatMessage
|
||||
? CHAT_PLACEHOLDER_TEXT
|
||||
: CHAT_INITIAL_PLACEHOLDER_TEXT;
|
||||
}
|
||||
return CHAT_PLACEHOLDER_OFFLINE;
|
||||
}
|
||||
@@ -112,7 +113,7 @@ export function convertToText(str = '') {
|
||||
You would call this when a user pastes from
|
||||
the clipboard into a `contenteditable` area.
|
||||
*/
|
||||
export function convertOnPaste(event = { preventDefault() { } }, emojiList) {
|
||||
export function convertOnPaste(event = { preventDefault() {} }, emojiList) {
|
||||
// Prevent paste.
|
||||
event.preventDefault();
|
||||
|
||||
@@ -149,17 +150,29 @@ export function convertOnPaste(event = { preventDefault() { } }, emojiList) {
|
||||
|
||||
export function createEmojiMarkup(data, isCustom) {
|
||||
const emojiUrl = isCustom ? data.emoji : data.url;
|
||||
const emojiName = (isCustom ? data.name : data.url.split('\\').pop().split('/').pop().split('.').shift()).toLowerCase();
|
||||
return '<img class="emoji" alt=":' + emojiName + ':" title=":' + emojiName + ':" src="' + emojiUrl + '"/>';
|
||||
const emojiName = (
|
||||
isCustom
|
||||
? data.name
|
||||
: data.url.split('\\').pop().split('/').pop().split('.').shift()
|
||||
).toLowerCase();
|
||||
return (
|
||||
'<img class="emoji" alt=":' +
|
||||
emojiName +
|
||||
':" title=":' +
|
||||
emojiName +
|
||||
':" src="' +
|
||||
emojiUrl +
|
||||
'"/>'
|
||||
);
|
||||
}
|
||||
|
||||
// trim html white space characters from ends of messages for more accurate counting
|
||||
export function trimNbsp(html) {
|
||||
return html.replace(/^(?: |\s)+|(?: |\s)+$/ig,'');
|
||||
return html.replace(/^(?: |\s)+|(?: |\s)+$/gi, '');
|
||||
}
|
||||
|
||||
export function emojify(HTML, emojiList) {
|
||||
const textValue = convertToText(HTML)
|
||||
const textValue = convertToText(HTML);
|
||||
|
||||
for (var lastPos = textValue.length; lastPos >= 0; lastPos--) {
|
||||
const endPos = textValue.lastIndexOf(':', lastPos);
|
||||
@@ -176,10 +189,9 @@ export function emojify(HTML, emojiList) {
|
||||
});
|
||||
|
||||
if (emojiIndex != -1) {
|
||||
const emojiImgElement = createEmojiMarkup(emojiList[emojiIndex], true)
|
||||
HTML = HTML.replace(":" + typedEmoji + ":", emojiImgElement)
|
||||
const emojiImgElement = createEmojiMarkup(emojiList[emojiIndex], true);
|
||||
HTML = HTML.replace(':' + typedEmoji + ':', emojiImgElement);
|
||||
}
|
||||
}
|
||||
return HTML;
|
||||
|
||||
}
|
||||
|
||||
@@ -8,7 +8,9 @@ export const URL_VIEWER_PING = `/api/ping`;
|
||||
|
||||
// TODO: This directory is customizable in the config. So we should expose this via the config API.
|
||||
export const URL_STREAM = `/hls/stream.m3u8`;
|
||||
export const URL_WEBSOCKET = `${location.protocol === 'https:' ? 'wss' : 'ws'}://${location.host}/ws`;
|
||||
export const URL_WEBSOCKET = `${
|
||||
location.protocol === 'https:' ? 'wss' : 'ws'
|
||||
}://${location.host}/ws`;
|
||||
export const URL_CHAT_REGISTRATION = `/api/chat/register`;
|
||||
|
||||
export const TIMER_STATUS_UPDATE = 5000; // ms
|
||||
|
||||
@@ -21,7 +21,7 @@ export const SOCKET_MESSAGE_TYPES = {
|
||||
export const CALLBACKS = {
|
||||
RAW_WEBSOCKET_MESSAGE_RECEIVED: 'rawWebsocketMessageReceived',
|
||||
WEBSOCKET_CONNECTED: 'websocketConnected',
|
||||
}
|
||||
};
|
||||
|
||||
const TIMER_WEBSOCKET_RECONNECT = 5000; // ms
|
||||
|
||||
@@ -48,7 +48,7 @@ export default class Websocket {
|
||||
createAndConnect() {
|
||||
const url = new URL(URL_WEBSOCKET);
|
||||
url.searchParams.append('accessToken', this.accessToken);
|
||||
|
||||
|
||||
const ws = new WebSocket(url.toString());
|
||||
ws.onopen = this.onOpen.bind(this);
|
||||
ws.onclose = this.onClose.bind(this);
|
||||
@@ -161,10 +161,10 @@ export default class Websocket {
|
||||
}
|
||||
|
||||
if (!model.type) {
|
||||
console.error("No type provided", model);
|
||||
console.error('No type provided', model);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// Send PONGs
|
||||
if (model.type === SOCKET_MESSAGE_TYPES.PING) {
|
||||
this.sendPong();
|
||||
@@ -182,6 +182,8 @@ export default class Websocket {
|
||||
}
|
||||
|
||||
handleNetworkingError(error) {
|
||||
console.error(`Websocket Error. Chat is likely not working. Visit troubleshooting steps to resolve. https://owncast.online/docs/troubleshooting/#chat-is-disabled: ${error}`);
|
||||
console.error(
|
||||
`Websocket Error. Chat is likely not working. Visit troubleshooting steps to resolve. https://owncast.online/docs/troubleshooting/#chat-is-disabled: ${error}`
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user