Releases: Merkoba/Hue
October 2018 Week #3
Requires server restart since last release: No
Requires npm install: No
Added a "maxer" to the left side of the chat (similar to the maxers on the right edge that maximize images and tv), that when clicked changes the font size of the chat. If it's not "very_big", it will change it to it, if it is it will change it to "normal".
Added /togglefontsize command which does what was described above.
Added the abbility to change the media percentages by using the mousewheel on #media_image_frame and #media_image_error. Scrolling down makes the image bigger (and the tv smaller), scrolling up makes the image smaller (and the tv bigger).
Added a new #infotip element used to display quick feedback. It has a consistent black background and white font color. It was implemented to show tv_display_percentage feedback for the operation described above. To display a message show_infotip(s) function is used. It will hide itself 1 second after the last message.
October 2018 Week #2
Requires server restart since last release: Yes
Requires npm install: Yes
Big dependency update (Increased version for many Node packages), and modifications made to make them work, especially with the new MongoDB client which went from version 2 to 3. https://i.imgur.com/Lftj6cG.jpg
Minimum Node version changed to 10.
connect-mongo was replaced by connect-mongodb-session
serve-favicon is no longer used and instead the favicon is imported manually in meta.ejs.
Changed utilz.get_extension to find extensions more accurately in both file and url cases.
Modified how chat clicks work (selecting text and clicking the text works as expected).
Adjusted slice upload to use Buffer.from
Fixed S3 uploading.
Added new background mode: Mirror Tiled. This is the same as Mirror but with tile support. It shares the same tiling dimensions as Tiled background.
September 2018 Week #4
Requires server restart since last release: No
Fixed how media icons on the bottom left get hidden and shown. It now hides the container, which avoid unecesary padding when icon is not displayed.
Added some "return false" in start_radio.
September 2018 Week #3
Requires server restart since last release: No
Refactored how e.preventDefault() is handled on the F keys in key detection function. Now there's a check_prevent_default function to check that.
Added the ability to quote part of a message (max 100 characters), which sends a message that says like "Joe said: Hello what is this?". If the message is > 100 chars it will add "..." to the end.
Added markdown: italic, bold, italic_and_bold, and underlined.
Added list of usernames with "'s" at the end to "words_to_autocomplete" so for instance woo[tab] will show "woody ", a second tab will show "woody's ". Removed user settings from autocomplete to avoid bloat and confusion.
Double taps will not work if active element is a textbox and it has text in it. To avoid accidental triggers.
Added missing type (text) to media change window inputs.
Made settings widgets to display title on hover by changing the title dynamically for all elements using set_user_settings_titles() function. Title is the internal name of the setting, for example "animate_scroll". The idea is to have a way to know the internal name to use it programatically with /modifysetting. This can easily be extended to more detailed titles by adding a title attributes to the user_settings object's objects.
September 2018 Week #2
Requires server restart: Yes
Modified how media history windows work. It no longer allows repeated sources, duplicates get removed, mirroring the media changed arrays.
Fixed how the media history windows are cleared in clear_room. It now removes everything but the first (top) item.
Changed how the Send Whisper in Show Profile looks. Now it's a bit smaller and has an envelope icon next to it.
Added an entry in the Main Menu, More section, to Clear Log & Room, which does a clearlog2. For this I created a new clear_log_and_room function. Also reordered the More items.
Changed the way up and down arrows work. Now up and down arrows alone scroll that chat, when used with shift it cycles through input history.
Updated help2.
Changed small_keyboard_scroll to 100 and big_keyboard_scroll to 400.
Disabled up/down scroll when #input has scroll, to be able to jump inside its text.
Changed the way how pressed keys are processed. Removed num_keys_pressed and instead keep track of a keys_pressed object with keyCodes. Do e.preventDefault() in every case when the F (1 to 4) keys are pressed.
September 2018 Week #1
Requires server restart: Yes
Reduced chat_crop_limit from 1000 to 500 to avoid lag when animating lots of messages on screen.
Removed chat_history_crop limit and now chat_history uses chat_crop_limit.
Changed how media history is populated, which is now in the push to media changed functions.
Removed media_history_max_items and it now uses media_changed_crop_limit.
Reduced most crop limits to 500.
Made the invalid command error more verbose.
If a media item is default set by the system it won't go into media changed arrays.
Joining now shows the topic first befere the "you joined" message.
Changed how spectrum color pickers change event works. Now it won't trigger a change when clicking outside the box without selecting "Choose" first.
Changed how text messages are added. Now there's no chat animation neither on subsequent messages or full messages. The fade effect remains. This is to avoid inconsistency, especially when the message limit is met and old messages are deleted as new ones are added, which messed up with the animated scroll.
Changed crop limits from 500 to 1000.
Added a highlighted2 class that is applied for 2 seconds to an element when the user Jumps to it, to give better feedback of where it is.
Big change on how frames are resized to fit their container while keeping their aspect ratio. Now it's much less brute forced and simply calculated through ratio calculations. Also now ratios hard coded, calulated by natural width and height for images, and 0.5625 for tv elements.
Added onclick event to newly implemented Media History windows.
Jumping to a message (like from Search or Highlights) will now close all open modals.
Removed voice chat. It didn't work very well, it's hard to maintain, and voice chat mechanisms might be hooked to the radio. This makes the media more defined: images, tv, radio.
Very big change in how media setup/change/announcements are handled. Instead of having separated setup and announce functions now there's a single unified one. Also there are no independent variables to hold media data, they're all handled through the current media objects. This change makes the structure more coherent and organized. Media data objects now use generic property names like "source" instead of "image_source".
Current media objects are now accessed through a function, like current_image(), current_tv(), and current_radio(). Which get the last object from the changed lists.
There's now a configurable cooldown for each media type which is checked in the server. For instance if tv_change_cooldown is set to 2000, if somebody tries to change the tv and the last change was less then 2 seconds ago it will not change and send feedback to the user about it. This is to about a) The case where people accidentally "competed" at the same time to change video, and b) To avoid spam (potentially thousands of calls in seconds).
Same media is now checked not only by source but by query too. If somebody does "/tv red" and "red" is already the query it will just return feedback about it. This is checked in the back and front end.
Added default_tv_title to use with the default tv.
Separated the media announcements to small dedicated functions to fix announcements when room is cleared, plus adding more flexibility.
Default media now shows messages normally (their title) instead of just saying "default".
Changed default room theme to "rgb(100,65,164)" and default room text_color to "rgb(205,202,223)".
Removed "force" when changing initial media, to avoid autoplaying.
Tweaked some anti spam settings. Max spam score is now 20 instead of 100. Now every 50 typing emits a score is added. The dividing factor of slice spam reduced from 20 to 10. All this means it's generally more strict to spam, though slice spam was slowed a bit.
Changed the way the maxers look. They now have a background color, are thicker, and have 0.5 opacity.
Added checks to ensure background image external links are valid urls. Added the ability to set the default background with "/background default" which sets the background_image to "" and background_image_type to "hosted".
Fix when previous/prev is used in media.
Added urlize to media history items. Also made stop_propagation true by default, which is now used by every urlize so far.
Fixed some bug in clear_room.
August 2018 Week #4
Requires server restart: Yes
Fix on chat resize when media visibility changes.
Fix on image resize where it didn't resize in some cases.
Modified how toggling media is handled.
Fix on initial image. Gave it 0 width and height so it doesn't start huge.
Moved "Search Term" info to the title (that appears on hover), to avoid redundancy.
New admin log messages. All admin activities are now recorded in an array which gets truncated after max_admin_log_messages quantity. Messages can be accessed in "Admin Activity" under Actions or with the command /adminactivity.
max_room_log_messages changed to max_log_messages.
Fixed forced redirection with warn_before_closing enabled.
Added a filter to admin activities window, and now it has its own Msg instance.
Removed media menu categories.
Added background_image_setter and background_image_date.
Changed get public roomlist to use rooms cached in memory, which should be much faster than querying potentially millions of rooms.
To do this, topic and room name are now stored in the room objects.
Changed the positions of some reactions in the reaction box.
Room objects now get deleted when there are no users connected to it.
Added return false when privacy change is already set to target.
Made /privacy show if a room is either public or private.
Changed the structure of the media icons so they're less prone to be clicked by accident. This was done by moving the footer icon classes to the icon containers.
Fixed some default value types in the database room "schema", which would cause some problems on room schema update check.
Added the abbility to jump to messages through the Highlights window. A "Jump" button appears on hover, and when clicked the chat scrolls to that position using scrollIntoView.
Added jumpers to chat search too and refactored the whole jump system.
Added /clearlog2 which apart from clearing the log it also removes all chat and media data (except current) on all clients.
/clearlog2 will still clear the room even if there's no log to clear.
Fixed how room objects get deleted, which is in the room loop checking for userlist length.
August 2018 Week #3
Requires server restart: Yes
Modified how buttons at the bottom of help modals are unselectable.
Background images can now be external URLS.
Clicking the background image in the main menu now opens a picker to select either to upload one or use a URL.
New db rooms property "background_image_type" which is either "hosted" or "external".
Media (image, tv, radio) now have a query property which is filled when the media is retrieved by a search term. The announcements in the chat now show the query used to find something.
Refactored the way images are handled in sockets.js
Made /whisper and /whisper2 be endable with /endwhisper. This is to allow stuff like "/whisper2 mybot > .command && .othercommand" or "/whisper2 mybot > .command && .othercommand && /ping".
Modified how aliases are processed when chained. Making it possible for stuff like /ww .cmd1 && .cmd2, if /ww is "/whisper2 bot >" it will turn into "/whisper2 bot > .cmd1 && .cmd2" instead of separating them in 2 main commands.
Some refactoring on how media is changed.
"image_change" event changed to "changed_image_source".
Changed commands_queue to an object, like it should be.
Very big refactoring on how media is changed and restarted.
Using the same source won't change the media anymore, doing a restart is required to start something again.
New properties in the room objects:
current_image_source: info.image_source,
current_tv_source: info.tv_source,
current_radio_source: info.radio_source
These get updated on media change.
When changing tv or radio, compact youtube urls will be converted to full ones.
This is to better check if something is already a current url.
data.src = data.src.replace(/youtu.be/(\w{11})/, "www.youtube.com/watch?v=$1")
Changed instances of "youtube.com" to "www.youtube.com" in sockets.js
Added more appearance options: Chat font size (very small, small, normal, big, very big), and interface wide font family (which includes Open Sans, Comic Sans, Inconsolata, and Montserrat).
Font faces (imported_font) are now imported dynamically using the font face api.
Titlebars now always use the default font family (sans serif) so it looks good in any font family setting.
Added a warn_before_closing setting which when enabled will show a confirmation message on closing or refresh. If the refresh is triggered by the client itself it will omit the check.
New /refresh command which refreshes (restarts) the client.
Made chat profile image sizes adjust to chat font size setting.
Open Sans is now the default font.
Removed public and personal feedback brk icon to an "info" icon.
Changed the way the asterisk on overriden categories look. It's now an asterisk without parenthesis and there's an invisible filler on the other end to keep text in position.
Big refactoring of how user settings work.
Now there's a global user_settings object which contains every available user setting as a key with a an object containing "widget_type" property; this information is no longer fetched by html data.
New /modifiysetting command which can be used to directly modify a user setting and it will react accordingly.
For example "/modifysetting chat_font_size very_big".
Toggling media on or off won't change if target mode is already set.
New administration commands:
/theme x: Changes the theme to a specified rgb color.
/textcolormode x: Changes the text color mode. Valid modes include automatic, and custom.
/textcolor x: Changes the text color to a specified rgb color.
/background x: Changes the background image to a specified URL.
/backgroundmode x: Changes the background mode. Valid modes include normal, tiled, mirror, and solid.
/tiledimensions x: Changes the dimension for tiled backgrounds.
/imagesmode x: Changes the images mode. Valid modes include enabled, disabled, and locked.
/tvmode x: Changes the tv mode. Valid modes include enabled, disabled, and locked.
/radiomode x: Changes the radio mode. Valid modes include enabled, disabled, and locked.
/voicechatmode x: Changes the voice chat mode. Valid modes include enabled, and disabled.
/voicepermission x: Changes a specific voice permission. Format: /voicepermission {number} {type} {value}. For example: /voicepermission 2 tv true. Valid types are images, tv, radio, or voice_chat.
Improved rgb validation for color settings.
Fixed how History is displayed.
Very big change on the media image structure.
Now the structure looks like #media_image -> #media_image_container -> #media_image_frame
The media image frame gets calculated the same way as video frames are using the generic function "fix_frame", which needs to be called whenever the image or tv dimensions must be recalculated.
New generic classes .media_main_container and .media_container, which are used for both image and tv.
Modal images now fill the container.
Some fix in how aliases are formatted.
Added user_settings to autocomplete list.
Usernames can't longer contain slashes (/) in them.
Changed the way the Media Menu looks. It now has 3 separated categories with icons. History was moved above Refresh.
Added resolution info for modal images. It gets shown when the image is done loading.
August 2018 Week #2
Requires server restart: Yes
Spaces between slash and command no longer trigger command, throws error instead.
Links inside containers with click events trigger e.stopPropagation when clicked, instead of being disabled.
This means they can still be clicked, without triggering parent click event.
/top: Scrolls the chat to the top.
/top2: Scrolls the chat to the top without animating the scroll.
/bottom: Scrolls the chat to the bottom.
/bottom2: Scrolls the chat to the bottom without animating the scroll
/activityabove2: Scrolls chat to activity pertaining you above without animating the scroll.
/activitybelow2: Scrolls chat to activity pertaining you below without animating the scroll.
Removed the image queue.
Added a console.error in vars.ejs to know when a config var is undefined.
When searching for youtube videos it now filters out in the call videos that are not embedable.
Fix in main menu to make scrollbar update on background mode change.
August 2018 Week #1
Requires server restart: Yes.
Usernames no longer can have < or > in them.
This is to allow commands like "/whisper Jack > hello my friend"
Message variables have been changed to use "message" instead of "msg" throughout the code. As well as uname to username in some cases.
This is to standarize the code internally and externally by having responses use the same terms.
For instanace "chat_message" and "whisper" responses both now have "message" and "username", making the data object usable in different scenarios.
Some modifications in how images_changed, tv_changed, and radio_changed are updated.
Commands can be chained with &&. For instance "/tv The World && /maximizetv".
To avoid problems with this, usernames can't longer contain "&" in them.
New "aliases" setting, which allows new commands to be created.
For example, "/rad = /startradio" or "/whoa = /clear && /ping".
Added /say command. It sends a normal chat message.
Useful if you want to make a chain of commands that starts with a message.
Aliases input autoformats entered commands appropriately.
Modified how history is saved with some commands.
Aliases starting with an "X" won't be saved to history.
Autocomplete includes aliases.
Most textareas rows increased to 5.
Some style and markup fixes.
Twitch channel tv urls now fetch the title, defaulting to channel login name if it fails.
Media announcements now open a window with options instead of going directly to a url.
If a only contains 1 line the message is trimmed. This is to avoid accidental spaces on the left of messages, while allowing things like ascii art or code to be pasted.
Aliases can now receive arguments. For instance, /s = /search, can be used with: /s someargument.
New sdeb function for string debugging purposes.
Created /whisper2 which when used with the inline message format it won't show the confirmation/feedback upon sent.
Useful for making programatic calls to bots without filling the chat too much.
Some fixes on how media services are loaded.
After a /js or /js2, && won't separate commands, since it will consider them part of the js.
bg1 class moved from chat_area to chat_main.
Refactored how chained commands are processed.
New /endjs command: This can be used when chaining /js or /js2 commands with other commands. For example: /js true && true /endjs && /ping.
Refactored process_messsage to receive an object as an argument.
New /sleep command which can be used with chained commands as a way to separate them with an x ms duration, or 1000ms if no argument is given.
When an invalid command is used, the error message now includes that attempted command.
Created /closeandwait command.
Used with chained commands. Whatever is after it will be triggered after the modals are closed.
For instance: /closeandwait && /somecommand.
Added filters to the help windows.
New msg_help, and other underlying changes.
/input x: Adds text to the input.
/inputend: Since everything after /input is part of it, /endinput is needed to chain more commands. For instance: /input a && b /endinput && /say hello.
/inputenter: The same as pressing Enter when there's text in the input. For instance: /input hello /endinput && /inputenter.
Added new User Function 4.
Keyboard keys F1, F2, F3, and F4, are mapped to the corresponding User Function.
Made User Functions switchable, for example change settings of 3 with 1, etc.
Made the error message when no command is found shorter.
Added setting "other_words_to_autocomplete".
This allows the user to add more words/phrases to the list of words autocompleted through Tab.
Made chained commands processing case insensitive.
Links in announcements with click events will do nothing when clicked.
Redesigned link actions window.
Changed the width of some modals.
Changed the way to detect if a message is a command.