Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
196 commits
Select commit Hold shift + click to select a range
68d7f1b
Update component.jsx
hiroshisuga Aug 27, 2025
6a718fd
Update component.jsx
hiroshisuga Aug 27, 2025
aabe8a3
Update component.jsx
hiroshisuga Aug 27, 2025
380ce89
Update container.jsx
hiroshisuga Aug 27, 2025
4976e47
Update service.js
hiroshisuga Aug 27, 2025
c85ff13
Update customLayout.jsx
hiroshisuga Aug 27, 2025
119c461
Update component.jsx
hiroshisuga Aug 27, 2025
1f2aac5
Update component.jsx
hiroshisuga Aug 27, 2025
d35a846
Update container.jsx
hiroshisuga Aug 27, 2025
a799bf3
Update component.jsx
hiroshisuga Aug 27, 2025
bb39212
Update container.jsx
hiroshisuga Aug 27, 2025
86c29be
Update styles.js
hiroshisuga Aug 27, 2025
3d83c88
Update component.jsx
hiroshisuga Aug 27, 2025
44664f4
Update container.jsx
hiroshisuga Aug 27, 2025
7f98dbf
Update hooks.js
hiroshisuga Aug 27, 2025
b7afc8e
Update service.js
hiroshisuga Aug 27, 2025
4fd3b70
Update index.js
hiroshisuga Aug 27, 2025
a14b136
Update settings.yml
hiroshisuga Aug 27, 2025
cb21a9e
Update en.json
hiroshisuga Aug 27, 2025
289941a
Update hooks.js
hiroshisuga Aug 28, 2025
0f193fa
remove mutation observer
hiroshisuga Aug 30, 2025
2cdebe9
Fix resize figure and fullscreen on popup
hiroshisuga Aug 30, 2025
2607ed1
revert getContainerDimensions
hiroshisuga Aug 30, 2025
56d7ecf
Bring back the modification
hiroshisuga Aug 30, 2025
bc18970
Merge pull request #224 from bigbluebutton/v3.0.x-release
hiroshisuga Aug 30, 2025
8d98bfe
Update component.jsx
hiroshisuga Aug 31, 2025
34ce248
Merge pull request #226 from bigbluebutton/v3.0.x-release
hiroshisuga Sep 8, 2025
0a78781
fix the style panel problem
hiroshisuga Sep 10, 2025
7c0fbb0
comment update in hooks.js
hiroshisuga Sep 10, 2025
451f336
Update component.jsx
hiroshisuga Sep 11, 2025
186ad36
Update container.jsx
hiroshisuga Sep 11, 2025
a27ff67
Update component.jsx
hiroshisuga Sep 11, 2025
1753818
Update component.jsx
hiroshisuga Sep 11, 2025
e9efec4
Merge pull request #227 from hiroshisuga/dev3.0.14_suppressNotification
hiroshisuga Sep 11, 2025
93d5da1
Update comment on component.jsx
hiroshisuga Sep 11, 2025
82fe4f6
Add a warning
hiroshisuga Sep 12, 2025
60a0366
Remove duplicated copied styles
hiroshisuga Sep 12, 2025
bd6171c
merge #23888 (be careful on syncing)
hiroshisuga Sep 12, 2025
f6fa43d
Remove unnecessary style removal
hiroshisuga Sep 14, 2025
a5180fb
var(--tl-font-draw) font injection
hiroshisuga Sep 14, 2025
99fbb28
Create dummy
hiroshisuga Sep 14, 2025
e987fb2
upload Kosugi Maru font
hiroshisuga Sep 14, 2025
eebb092
Delete bigbluebutton-html5/public/fonts/KosugiMaru/dummy
hiroshisuga Sep 14, 2025
98b93ae
Update fonts.css
hiroshisuga Sep 14, 2025
e0a33fe
register KosugiMaru font to tldraw-draw font
hiroshisuga Sep 14, 2025
7b5bd4f
Merge pull request #228 from hiroshisuga/dev3.0.14_JapaneseFont
hiroshisuga Sep 14, 2025
ae8af91
remove RFs
hiroshisuga Sep 14, 2025
7aa38f8
Use KosugiMaru in the main window
hiroshisuga Sep 15, 2025
5786848
Uncomment lines to use KosugiMaru in the viewers'apps
hiroshisuga Sep 15, 2025
e8f07af
Only supplement Japanese fonts
hiroshisuga Sep 15, 2025
b930321
remove font load -> to style.css
hiroshisuga Sep 15, 2025
8449c6f
Supplement KosugiMaru to 'draw' font
hiroshisuga Sep 15, 2025
24fb3b4
Remove KosugiMaru injection as already done at whiteboard/styles.css
hiroshisuga Sep 15, 2025
adf1026
Merge pull request #229 from hiroshisuga/dev3.0.14_addJPNFontSimplified
hiroshisuga Sep 15, 2025
5726c9e
fix: popup turns full-screen on main monitor
hiroshisuga Sep 15, 2025
2d7972b
Firefox specific style injection
hiroshisuga Sep 16, 2025
78e86a0
Copy <html> attributes
hiroshisuga Sep 16, 2025
b5225a5
Merge branch 'dev3.0.15_popup' into test3.0.15_mergetopopup
hiroshisuga Sep 18, 2025
c13a921
Merge pull request #230 from hiroshisuga/test3.0.15_mergetopopup
hiroshisuga Sep 18, 2025
5b7dc91
Simplify HTMLElement injection
hiroshisuga Sep 20, 2025
a1f84bd
Create HTMLElementBackup.ts
hiroshisuga Sep 20, 2025
25c143a
use originalHTMLElement for scrollObserver
hiroshisuga Sep 20, 2025
e51b6d9
Merge pull request #232 from hiroshisuga/test3015popup_chatscroll
hiroshisuga Sep 20, 2025
dbe3f75
Create animationFrameBackup.js
hiroshisuga Sep 20, 2025
7f70d98
fix: catch the accumulated message pane bottom
hiroshisuga Sep 20, 2025
de7aae1
use originalRAF/CAF on each message
hiroshisuga Sep 20, 2025
ee4669e
Modified but commented out
hiroshisuga Sep 20, 2025
cc3d507
Global injection of rAF and cAF
hiroshisuga Sep 20, 2025
d34705f
use originalRAF, but not sure yet...
hiroshisuga Sep 20, 2025
6bc04b8
add a comment
hiroshisuga Sep 20, 2025
1864f90
Merge pull request #233 from hiroshisuga/test3015_injectRAFandCAF
hiroshisuga Sep 20, 2025
d879b7e
Revert simplification of HTMLElement hack
hiroshisuga Sep 20, 2025
3113f60
Update hooks.js
hiroshisuga Sep 20, 2025
428038c
modify comment
hiroshisuga Sep 20, 2025
d105316
Comment to avoid an eslint error
hiroshisuga Sep 20, 2025
8f4a7d3
Remove RFs
hiroshisuga Sep 21, 2025
978a72b
Remove RF
hiroshisuga Sep 21, 2025
cb4cb87
Delete bigbluebutton-html5/public/fonts/KosugiMaru directory
hiroshisuga Sep 22, 2025
84c6315
Update fonts.css
hiroshisuga Sep 22, 2025
04ba4f1
Update styles.js
hiroshisuga Sep 23, 2025
472f03d
Update component.jsx
hiroshisuga Sep 23, 2025
036267c
Update component.jsx
hiroshisuga Sep 23, 2025
81763b5
Update component.jsx
hiroshisuga Sep 23, 2025
2cc6f3a
Merge pull request #234 from hiroshisuga/test3015pop_RemoveJAfont
hiroshisuga Sep 23, 2025
2829029
fix a mistake
hiroshisuga Sep 23, 2025
491e5ed
observer -> observerTlCanvas
hiroshisuga Sep 23, 2025
bbb626e
simplify render()
hiroshisuga Sep 23, 2025
a387d7b
Decrease overhead at mutation observer
hiroshisuga Sep 23, 2025
3c0e4e5
fix a problem of Safari browser.
hiroshisuga Sep 23, 2025
63ff355
Quit fullscreen first when the popup launched
hiroshisuga Sep 24, 2025
23ed3dc
Merge branch 'dev3.0.17_popup' into test3017merge
hiroshisuga Nov 30, 2025
3d3fd1e
update to 3.0.17
hiroshisuga Nov 30, 2025
2bb1892
Merge branch 'v3.0.x-release' into dev3_popup_keepupdating
hiroshisuga Feb 22, 2026
a593b75
Close popup when meeting closed
hiroshisuga Mar 9, 2026
6e73f3e
Presentation shifted in prod mode
hiroshisuga Mar 10, 2026
4d86524
Update component.jsx
hiroshisuga Mar 11, 2026
fe174ce
Update container.jsx
hiroshisuga Mar 11, 2026
1187306
Update component.jsx
hiroshisuga Mar 11, 2026
5a33306
Merge pull request #241 from hiroshisuga/dev3_popup_revert_suppress_3…
hiroshisuga Mar 11, 2026
3783be5
fix a bug dir -> lang
hiroshisuga Mar 14, 2026
a1460bc
Simplify popup structure
hiroshisuga Mar 14, 2026
b558541
Remove the red cursor hack
hiroshisuga Mar 20, 2026
08c48ac
Update component.jsx
hiroshisuga Mar 21, 2026
3e050bb
Update component.jsx
hiroshisuga Mar 21, 2026
ffea8b4
Update component.jsx
hiroshisuga Mar 21, 2026
6801655
Update hooks.js
hiroshisuga Mar 21, 2026
ace5baf
Update component.jsx
hiroshisuga Mar 21, 2026
1a835b5
Update component.jsx
hiroshisuga Mar 21, 2026
5f8282e
Update component.jsx
hiroshisuga Mar 21, 2026
3e1a5ba
Update service.js
hiroshisuga Mar 21, 2026
31bcd6f
Merge pull request #243 from hiroshisuga/dev3_popup_kuded_replace_wit…
hiroshisuga Mar 21, 2026
af1a957
Remove unused originalCAF
hiroshisuga Mar 22, 2026
9da2c95
revive necessary originalCAF
hiroshisuga Mar 22, 2026
4d05cf2
remove unnecessary originalCAF
hiroshisuga Mar 22, 2026
3f1cfa9
move originalHTMLElementRef to the header
hiroshisuga Mar 27, 2026
9adf14d
Merge branch 'v3.0.x-release' into dev3_popup_keepupdating
hiroshisuga Apr 17, 2026
136ec1e
日本語翻訳を追加
hiroshisuga Jun 26, 2026
11d524c
[Presenter Note] Create extract_pptx_notes.py
hiroshisuga Jun 28, 2026
c34de98
[Presenter Note] Add note directive to bbb-web.nginx
hiroshisuga Jun 29, 2026
6028e09
[Presenter note] Revert - add note directive
hiroshisuga Jun 29, 2026
0e1587c
Merge pull request #256 from hiroshisuga/v3release_to_merge_popupkeep…
hiroshisuga Jun 29, 2026
5a31ce1
[Presenter Note] Add note directive to bbb-web.nginx
hiroshisuga Jun 29, 2026
d1bf44d
[Presentation Note] Update PresentationController.groovy
hiroshisuga Jun 29, 2026
abec9bf
[Presenter Note] Update UrlMappings.groovy
hiroshisuga Jun 29, 2026
df807ed
[Presenter Note] Update PresentationService.groovy
hiroshisuga Jun 29, 2026
c8a1499
[Presenter Note] Update presentation/component.jsx
hiroshisuga Jun 29, 2026
57d8b98
[Presenter Note] Update presentation/container.jsx
hiroshisuga Jun 29, 2026
48e9fdf
[Presenter Note] Update presentation-toast/presentation-uploader-toas…
hiroshisuga Jun 29, 2026
dd8421b
[Presenter Note] Update presentation-uploader/component.jsx
hiroshisuga Jun 29, 2026
5539407
[Presenter Note] Update presentation-uploader/container.jsx
hiroshisuga Jun 29, 2026
1974154
[Presenter Note] Update presentation-uploader/presentation-download-d…
hiroshisuga Jun 29, 2026
54c3a87
[Presenter note] Update presentation-uploader/service.js
hiroshisuga Jun 29, 2026
5346d7f
[Presenter Note] Update presentation/styles.js
hiroshisuga Jun 29, 2026
f4bf973
[Presenter Note] Update en.json
hiroshisuga Jun 29, 2026
698295f
[Presenter Note] Update ja.json
hiroshisuga Jun 29, 2026
97e0c34
[Presenter Note] Add forgotten modifications in PresentationService.g…
hiroshisuga Jun 29, 2026
d423952
[Presenter Tool] missing parenthesis
hiroshisuga Jun 29, 2026
87503b4
[Presenter Note] Ordering nextPagesSvg in bbb_schema.sql
hiroshisuga Jul 3, 2026
daf27ea
[chore] at -> to
hiroshisuga Jul 5, 2026
6fd5915
[chore] remove a comment in extract_pptx_notes.py
hiroshisuga Jul 5, 2026
d712c7a
[chore] Popup -> Detach in en.json
hiroshisuga Jul 5, 2026
b908ce7
[Update note immediately]
hiroshisuga Jul 7, 2026
4745120
[Update note immediately] modify uploader component
hiroshisuga Jul 7, 2026
086615d
[extract_pptx_notes.py] substitute to a new version
hiroshisuga Jul 14, 2026
014bb08
Merge branch 'v3.0.x-release' into dev3_popup_keepupdating
hiroshisuga Jul 14, 2026
7229352
[Very nice current slide window] update presentation/component.jsx
hiroshisuga Jul 15, 2026
bfded85
[very nice current slide window of presenter tool] presentation/style…
hiroshisuga Jul 15, 2026
56c47c7
[very nice current slide of presenter tool] whiteboard/component.jsx
hiroshisuga Jul 15, 2026
63a180c
[very nice current slide of presenter tool] whiteboard/container.jsx
hiroshisuga Jul 15, 2026
6225fac
definition of caf and raf in whiteboard/component.jsx
hiroshisuga Jul 21, 2026
110c6b6
Security fix in extract_pptx_notes.py
hiroshisuga Jul 22, 2026
acff5a5
add constraint to UrlMappings.groovy
hiroshisuga Jul 22, 2026
e9fa0de
a more robust condition hooks.js
hiroshisuga Jul 22, 2026
fc60112
add isPresenter in the effect deps of whiteboard/component.jsx
hiroshisuga Jul 22, 2026
e859ebb
remove duplicated labels and icons in presentation-menu/component.jsx
hiroshisuga Jul 22, 2026
aee0200
try-catch insertRule in presentation/component.jsx
hiroshisuga Jul 22, 2026
92c1b95
Use React instance to register event listener in presentation-toolbar…
hiroshisuga Jul 22, 2026
f5cb96b
consolidate the duplicate beforeunload handlers in presentation/compo…
hiroshisuga Jul 22, 2026
66d46d8
Strict event-listener registration/removal in whiteboard/hooks.js
hiroshisuga Jul 22, 2026
6bd91e3
[Bug fix: whiteboard/container] add editor as a trigger to re-run syn…
hiroshisuga Jul 22, 2026
fc9be5f
Use endpoint in presentation-uploader/service.js
hiroshisuga Jul 22, 2026
89e46b7
[Portrait mode presentation & transparent bg] presentation/styles.js
hiroshisuga Jul 24, 2026
5fa07ef
[Resizable presenter tool] presentation/component.jsx
hiroshisuga Jul 24, 2026
7f2e114
[Resizable presenter tool] presentation/styles.js
hiroshisuga Jul 24, 2026
27163bd
[only for desktop devices] presentation-menu/component.jsx
hiroshisuga Jul 26, 2026
62150f1
[only for desktop devices] presentation/container.jsx
hiroshisuga Jul 26, 2026
5110464
[only for desktop devices] presentation/component.jsx
hiroshisuga Jul 26, 2026
5b50ee5
[only for desktop devices] presentation/container.jsx
hiroshisuga Jul 26, 2026
b75a19e
[only for desktop devices] presentation/component.jsx
hiroshisuga Jul 26, 2026
fb2ef58
[only for desktop devices] presentation-menu/component.jsx
hiroshisuga Jul 26, 2026
21f221e
[only for desktop devices] presentation-menu/container.jsx
hiroshisuga Jul 26, 2026
6d3a2a5
Minor update whiteboard/component.jsx
hiroshisuga Jul 26, 2026
e4daa71
When the presenter changes, popup should be closed: presentation/comp…
hiroshisuga Jul 26, 2026
e22d40d
[WB annotations in the current slide] presentation/component.jsx
hiroshisuga Aug 4, 2026
dd35e67
[WB annotations in the current slide] presentation/styles.js
hiroshisuga Aug 4, 2026
1ebee11
[WB annotations in the current slide] whiteboard/component.jsx
hiroshisuga Aug 4, 2026
528d090
[WB annotations in the current slide] whiteboard/container.jsx
hiroshisuga Aug 4, 2026
da29810
Merge pull request #25376 from bigbluebutton/v3.0.x-develop
antobinary Aug 4, 2026
232c81a
Add new line
antobinary Aug 4, 2026
e04be26
[port] docs: iteration doc sync for 3.0.33 (#25568) (#25571)
antobinary Aug 5, 2026
66f94cf
chore: Update BigBlueButton release version to 3.0.34
antobinary Aug 5, 2026
2508a05
Merge branch 'v3.0.x-release' into dev3_popup_keepupdating
hiroshisuga Aug 6, 2026
ba0d6a4
[fix missing isPresentationDetached] presentation/component.jsx
hiroshisuga Aug 6, 2026
49daa77
[fix: suppress 404 error when not detached ] presentation/component.jsx
hiroshisuga Aug 11, 2026
d418348
[chore] remove a blank line
hiroshisuga Aug 12, 2026
966102b
No need to resize on the # camera change presentation/component.jsx
hiroshisuga Aug 12, 2026
dc0b799
[Fix: DarkMode works!] presenter/component.jsx
hiroshisuga Aug 12, 2026
273c95f
fix mistake on the "DarkMode working" change
hiroshisuga Aug 12, 2026
8420c2c
Update bigbluebutton-release
hiroshisuga Aug 12, 2026
37f9ad7
Update create.tsx
hiroshisuga Aug 12, 2026
c5eb042
Update api.md
hiroshisuga Aug 12, 2026
a3ec969
Update faq.md
hiroshisuga Aug 12, 2026
1f6a79a
Update new-features.md
hiroshisuga Aug 12, 2026
1ed2990
Update new-features.md
hiroshisuga Aug 12, 2026
5fb3741
Update new-features.md
hiroshisuga Aug 12, 2026
fb86574
Update plugins.md
hiroshisuga Aug 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion bbb-graphql-server/bbb_schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -1685,7 +1685,10 @@ SELECT pres_presentation."meetingId",
pres_page."infiniteWhiteboard",
pres_page."fitToWidth",
(
select array_agg("nextPages"."urlsJson"->>'svg')
select array_agg(
"nextPages"."urlsJson"->>'svg'
ORDER BY "nextPages".num
)
from pres_page "nextPages"
where "nextPages"."presentationId" = pres_page."presentationId"
and "nextPages".num > pres_page."num"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,7 @@ class ActionsBar extends PureComponent {
showScreenshareQuickSwapButton,
isReactionsButtonEnabled,
isRaiseHandEnabled,
isPresentationDetached,
} = this.props;

const Settings = getSettingsSingletonInstance();
Expand Down Expand Up @@ -256,6 +257,7 @@ class ActionsBar extends PureComponent {
hasPinnedSharedNotes={isSharedNotesPinned}
hasGenericContent={hasGenericContent}
hasCameraAsContent={hasCameraAsContent}
isPresentationDetached={isPresentationDetached}
/>
)
: null}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ const PresentationOptionsContainer = ({
hasPinnedSharedNotes,
hasGenericContent,
hasCameraAsContent,
isPresentationDetached,
}) => {
let buttonType = 'presentation';
if (hasExternalVideo) {
Expand Down Expand Up @@ -100,7 +101,7 @@ const PresentationOptionsContainer = ({
}
}}
id="restore-presentation"
disabled={!isThereCurrentPresentation}
disabled={!isThereCurrentPresentation || isPresentationDetached}
data-test={!presentationIsOpen ? 'restorePresentation' : 'minimizePresentation'}
/>
);
Expand Down
8 changes: 8 additions & 0 deletions bigbluebutton-html5/imports/ui/components/app/component.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,7 @@ class App extends Component {
const {
hideActionsBar,
presentationIsOpen,
isPresentationDetached,
} = this.props;

if (hideActionsBar) return null;
Expand All @@ -293,6 +294,7 @@ class App extends Component {
<ActionsBarContainer
presentationIsOpen={presentationIsOpen}
setPresentationFitToWidth={this.setPresentationFitToWidth}
isPresentationDetached={isPresentationDetached}
/>
);
}
Expand Down Expand Up @@ -337,6 +339,9 @@ class App extends Component {
isNotificationEnabled,
isNonMediaLayout,
isRaiseHandEnabled,
popupWindow,
isPresentationDetached,
toggleDetachPresentation,
currentUserHasVoice,
} = this.props;

Expand Down Expand Up @@ -388,6 +393,9 @@ class App extends Component {
fitToWidth={presentationFitToWidth}
darkTheme={darkTheme}
presentationIsOpen={presentationIsOpen}
popupWindow={popupWindow}
isPresentationDetached={isPresentationDetached}
toggleDetachPresentation={toggleDetachPresentation}
/>
)
: null
Expand Down
26 changes: 22 additions & 4 deletions bigbluebutton-html5/imports/ui/components/app/container.jsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React, { useEffect } from 'react';
import React, { useEffect, useState } from 'react';
import { useMutation, useReactiveVar } from '@apollo/client';
import AudioCaptionsLiveContainer from '/imports/ui/components/audio/audio-graphql/audio-captions/live/component';
import getFromUserSettings from '/imports/ui/services/users-settings';
Expand Down Expand Up @@ -122,9 +122,24 @@ const AppContainer = (props) => {
const shouldShowScreenshare = (viewScreenshare || isPresenter)
&& (currentMeeting?.componentsFlags?.hasScreenshare
|| currentMeeting?.componentsFlags?.hasCameraAsContent) && showScreenshare;
const shouldShowPresentation = (!shouldShowScreenshare && !isSharedNotesPinned
&& !shouldShowExternalVideo && !shouldShowGenericMainContent
&& (presentationIsOpen || presentationRestoreOnUpdate)) && isPresentationEnabled;

const [popupWindow, setPopupWindow] = useState(null);
const [isPresentationDetached, setIsPresentationDetached] = useState(false);

const toggleDetachPresentation = (popup) => {
setPopupWindow(popup);
setIsPresentationDetached(Boolean(popup));
};

const hasPresentationContent =
(presentationIsOpen || presentationRestoreOnUpdate) && isPresentationEnabled;
const noOtherMainContent =
!shouldShowScreenshare && !isSharedNotesPinned &&
!shouldShowExternalVideo && !shouldShowGenericMainContent;
const shouldShowPresentation = isPresentationDetached
? hasPresentationContent
: noOtherMainContent && hasPresentationContent;

const currentPageInfoData = currentPageInfo?.pres_page_curr[0] ?? {};
const fitToWidth = currentPageInfoData?.fitToWidth ?? false;
const pageId = currentPageInfoData?.pageId ?? '';
Expand Down Expand Up @@ -179,6 +194,9 @@ const AppContainer = (props) => {
isBreakout: currentMeeting?.isBreakout ?? false,
meetingName: currentMeeting?.name ?? '',
meetingId: currentMeeting?.meetingId ?? '',
isPresentationDetached,
popupWindow,
toggleDetachPresentation,
}}
{...props}
/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ import { CHAT_DELETE_REACTION_MUTATION, CHAT_SEND_REACTION_MUTATION } from './pa
import logger from '/imports/startup/client/logger';
import { ChatLoading } from '../component';
import Storage from '/imports/ui/services/storage/in-memory';
import { originalHTMLElement } from '/imports/utils/HTMLElementBackup';
import { originalRAF } from '/imports/utils/animationFrameBackup';

const PAGE_SIZE = 50;
const CLEANUP_TIMEOUT = 3000;
Expand Down Expand Up @@ -69,7 +71,7 @@ interface ChatListProps {
}

const isElement = (el: unknown): el is HTMLElement => {
return el instanceof HTMLElement;
return el instanceof originalHTMLElement;
};

const isMap = (map: unknown): map is Map<number, string> => {
Expand Down Expand Up @@ -439,7 +441,7 @@ const ChatMessageList: React.FC<ChatListProps> = ({
const value = (timestamp - initialTimestamp) / 300;
if (value <= 1) {
container.scrollTop = initialPosition + (value * scrollPositionDiff);
requestAnimationFrame(animateScrollPosition);
originalRAF(animateScrollPosition);
} else {
container.scrollTop = container.scrollHeight - container.offsetHeight;
setIsScrollingDisabled(false);
Expand All @@ -456,10 +458,10 @@ const ChatMessageList: React.FC<ChatListProps> = ({
initialTimestamp = timestamp;
initialPosition = scrollTop;
scrollPositionDiff = scrollHeight - offsetHeight - scrollTop;
requestAnimationFrame(animateScrollPosition);
originalRAF(animateScrollPosition);
};

requestAnimationFrame(startScrollAnimation);
originalRAF(startScrollAnimation);
}, []);

const renderUnreadNotification = useMemo(() => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ import { isMobile } from '/imports/utils/deviceInfo';
import { layoutSelect } from '/imports/ui/components/layout/context';
import { Layout } from '/imports/ui/components/layout/layoutTypes';
import { useModalRegistration } from '/imports/ui/core/singletons/modalController';
import { originalRAF, originalCAF } from '/imports/utils/animationFrameBackup';

interface ChatMessageProps {
message: Message;
Expand Down Expand Up @@ -247,28 +248,28 @@ const ChatMessage = React.forwardRef<ChatMessageRef, ChatMessageProps>(({
useImperativeHandle(ref, () => ({
requestFocus() {
setTimeout(() => {
requestAnimationFrame(startScrollAnimation);
originalRAF(startScrollAnimation);
}, 0);
},
sequence: message.messageSequence,
}), [message.messageSequence]);

const startScrollAnimation = (timestamp: number) => {
if ((containerRef.current?.offsetTop || 0) > (scrollRef.current?.scrollTop || 0)) {
requestAnimationFrame(startBackgroundAnimation);
originalRAF(startBackgroundAnimation);
return;
}
animationInitialScrollPosition.current = scrollRef.current?.scrollTop || 0;
animationScrollPositionDiff.current = (scrollRef.current?.scrollTop || 0)
- ((containerRef.current?.offsetTop || 0) - ((scrollRef.current?.offsetHeight || 0) / 2));
animationInitialTimestamp.current = timestamp;
requestAnimationFrame(animateScrollPosition);
originalRAF(animateScrollPosition);
};

const startBackgroundAnimation = (timestamp: number) => {
animationInitialTimestamp.current = timestamp;
animationInitialBgColor.current = containerRef.current?.style.backgroundColor ?? '';
requestAnimationFrame(animateBackgroundColor);
originalRAF(animateBackgroundColor);
};

const animateScrollPosition = (timestamp: number) => {
Expand All @@ -280,10 +281,10 @@ const ChatMessage = React.forwardRef<ChatMessageRef, ChatMessageProps>(({
if (!scrollContainer || !messageContainer) return;
if (value <= 1) {
scrollContainer.scrollTop = initialPosition - (value * diff);
requestAnimationFrame(animateScrollPosition);
originalRAF(animateScrollPosition);
} else {
scrollContainer.scrollTop = initialPosition - diff;
requestAnimationFrame(startBackgroundAnimation);
originalRAF(startBackgroundAnimation);
}
};

Expand All @@ -292,7 +293,7 @@ const ChatMessage = React.forwardRef<ChatMessageRef, ChatMessageProps>(({
const value = (timestamp - animationInitialTimestamp.current) / ANIMATION_DURATION;
if (value < 1) {
chatMessageContentWrapperRef.current.style.backgroundColor = `rgb(${colorBlueLighterChannel} / ${1 - value})`;
requestAnimationFrame(animateBackgroundColor);
originalRAF(animateBackgroundColor);
} else {
chatMessageContentWrapperRef.current.style.backgroundColor = animationInitialBgColor.current;
}
Expand Down Expand Up @@ -323,7 +324,7 @@ const ChatMessage = React.forwardRef<ChatMessageRef, ChatMessageProps>(({
},
) => {
if (currentFrame < stabilityFrames) {
const frameId = requestAnimationFrame(() => {
const frameId = originalRAF(() => {
pollScrollEndEvent(setFrameId, {
stabilityFrames,
currentFrame: currentFrame + 1,
Expand All @@ -340,10 +341,10 @@ const ChatMessage = React.forwardRef<ChatMessageRef, ChatMessageProps>(({

const startScrollEndEventPolling = useCallback(() => {
if (scrollEndFrameRef.current != null) {
cancelAnimationFrame(scrollEndFrameRef.current);
originalCAF(scrollEndFrameRef.current);
scrollEndFrameRef.current = undefined;
}
scrollEndFrameRef.current = requestAnimationFrame(() => {
scrollEndFrameRef.current = originalRAF(() => {
pollScrollEndEvent((frameId) => {
scrollEndFrameRef.current = frameId;
});
Expand All @@ -364,7 +365,7 @@ const ChatMessage = React.forwardRef<ChatMessageRef, ChatMessageProps>(({
return () => {
scrollRef?.current?.removeEventListener('scroll', callbackFunction);
if (scrollEndFrameRef.current !== undefined) {
cancelAnimationFrame(scrollEndFrameRef.current);
originalCAF(scrollEndFrameRef.current);
scrollEndFrameRef.current = undefined;
}
};
Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
function getFullscreenElement() {
if (document.fullscreenElement) return document.fullscreenElement;
if (document.webkitFullscreenElement) return document.webkitFullscreenElement;
if (document.mozFullScreenElement) return document.mozFullScreenElement;
if (document.msFullscreenElement) return document.msFullscreenElement;
function getFullscreenElement(d = document) {
if (d.fullscreenElement) return d.fullscreenElement;
if (d.webkitFullscreenElement) return d.webkitFullscreenElement;
if (d.mozFullScreenElement) return d.mozFullScreenElement;
if (d.msFullscreenElement) return d.msFullscreenElement;
return null;
}

const isFullScreen = (element) => {
if (getFullscreenElement() && getFullscreenElement() === element) {
const isFullScreen = (element, doc = document) => {
if (getFullscreenElement(doc) && getFullscreenElement(doc) === element) {
return true;
}
return false;
};

function cancelFullScreen() {
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.webkitExitFullscreen) {
document.webkitExitFullscreen();
function cancelFullScreen(doc = document) {
if (doc.exitFullscreen) {
doc.exitFullscreen();
} else if (doc.mozCancelFullScreen) {
doc.mozCancelFullScreen();
} else if (doc.webkitExitFullscreen) {
doc.webkitExitFullscreen();
}
}

Expand All @@ -39,13 +39,20 @@ function fullscreenRequest(element) {
element.focus();
}

const toggleFullScreen = (ref = null) => {
const element = ref || document.documentElement;

if (isFullScreen(element)) {
cancelFullScreen();
const toggleFullScreen = (ref = null, isDetached = false, p) => {
const element = isDetached ? p.document.documentElement : (ref || document.documentElement);
if (isDetached) {
if (isFullScreen(element, p.document)) {
cancelFullScreen(p.document);
} else {
fullscreenRequest(element);
}
} else {
fullscreenRequest(element);
if (isFullScreen(element)) {
cancelFullScreen();
} else {
fullscreenRequest(element);
}
}
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import React, { useRef, useState, useEffect } from 'react';
import { getSettingsSingletonInstance } from '/imports/ui/services/settings';
import Service from './service';
import logger from '/imports/startup/client/logger';
//import { originalRAF } from '/imports/utils/animationFrameBackup';

const EmojiRain = ({ reactions }) => {
const Settings = getSettingsSingletonInstance();
Expand Down Expand Up @@ -57,6 +58,8 @@ const EmojiRain = ({ reactions }) => {
}

requestAnimationFrame(() => setTimeout(() => flyingEmojis.forEach((emoji) => {
// No effect observed (emoji rain works without using originalRAF). So removed.
//originalRAF(() => setTimeout(() => flyingEmojis.forEach((emoji) => {
const { shapeElement, endPosition } = emoji;
shapeElement.style.left = `${endPosition.x}px`;
shapeElement.style.top = `${endPosition.y}px`;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -461,10 +461,13 @@ const CustomLayout = (props) => {
}

if (
fullscreenElement === 'Presentation' ||
fullscreenElement === 'Screenshare' ||
fullscreenElement === 'ExternalVideo' ||
fullscreenElement === 'GenericContent'
(fullscreenElement === 'Presentation' ||
fullscreenElement === 'Screenshare' ||
fullscreenElement === 'ExternalVideo' ||
fullscreenElement === 'GenericContent') &&
// this is indispensable for showing a normal-sized operatable external video
// when popup is fullscreen within the sub-monitor
document.getElementById('presentationInnerWrapper')
) {
mediaBounds.width = windowWidth();
mediaBounds.height = windowHeight();
Expand Down Expand Up @@ -803,4 +806,4 @@ const CustomLayout = (props) => {
return null;
};

export default CustomLayout;
export default CustomLayout;
Loading
Loading