Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
1073462
* add lookylooky
h2Entwicklung Mar 3, 2025
169d37b
Update Crowdin configuration file
holema Mar 5, 2025
10f4abb
Update Crowdin configuration file
holema Mar 7, 2025
1ccfc39
Merge branch 'master' into feature/development
h2Entwicklung Mar 7, 2025
a7289b2
Merge branch 'feature/development' into feature/add-lookylooky
h2Entwicklung Mar 7, 2025
0d44054
add looky looky
h2Entwicklung Mar 17, 2025
05cbc89
Merge branch 'master' into feature/development
h2Entwicklung Mar 20, 2025
d217685
* remove min-heigt from body on all join pages
h2Entwicklung Mar 20, 2025
e2013a1
Merge branch 'feature/development' into feature/add-lookylooky
h2Entwicklung Mar 20, 2025
2a16d53
* remove min-heigt from body on all join pages
h2Entwicklung Mar 20, 2025
63a2d9b
* remove min-heigt from body on all join pages
h2Entwicklung Mar 20, 2025
ef770bd
add looky looky
h2Entwicklung Mar 21, 2025
018b243
* add new dialog system
h2Entwicklung Mar 26, 2025
175d49c
refactor toast
h2Entwicklung Apr 1, 2025
f2c005b
refactor toast
h2Entwicklung Apr 5, 2025
aaf506d
* fix unittests
h2Entwicklung May 5, 2025
f3d74da
Merge branch 'master' into feature/add-lookylooky
h2Entwicklung May 12, 2025
df45969
Merge pull request #640 from H2-invent/feature/add-lookylooky
holema May 12, 2025
0156538
* fix unittests
h2Entwicklung May 12, 2025
2adb937
Merge branch 'feature/add-lookylooky' into feature/development
h2Entwicklung May 13, 2025
dfc0a63
* notofication new style
h2Entwicklung May 27, 2025
f30235d
* add new notifiction
h2Entwicklung Jun 12, 2025
dc068b4
* add new notifiction
h2Entwicklung Jun 12, 2025
3752ddb
* add controller to test notification
h2Entwicklung Jun 24, 2025
7a11433
* add controller to test notification
h2Entwicklung Jun 24, 2025
9ccc89d
* change prerelase pipileine to buld on staging
h2Entwicklung Aug 3, 2025
94dc43a
* fix unittests to match the new messaging function
h2Entwicklung Aug 3, 2025
8a0f82f
Update Dockerfile-prod
holzi1005 Aug 3, 2025
66adc45
(MINOR)
h2Entwicklung Aug 3, 2025
387f096
* change toast text color to white
h2Entwicklung Aug 4, 2025
c72b0ca
Merge branch 'master' into staging
h2Entwicklung Aug 22, 2025
7100edf
* add try catch
h2Entwicklung Sep 1, 2025
ebbe23d
Merge branch 'master' into staging
h2Entwicklung Sep 25, 2025
8756684
* fix unittests and mic/camera aneblaed by url
h2Entwicklung Sep 25, 2025
b8c79d0
Merge branch 'master' into staging
h2Entwicklung Sep 25, 2025
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
12 changes: 10 additions & 2 deletions .env
Original file line number Diff line number Diff line change
Expand Up @@ -116,8 +116,7 @@ LAF_SHOW_PARTICIPANTS_ON_PARTICIPANTS=0
###> {"ldap1":"Nutzerkreis1"} ###
LAF_ADDRESSBOOK_CHECKBOX_LABEL_2_VALUE={}
VICH_BASE=http://dummy
LAF_WHITEBOARD_FUNCTION=0
LAF_ETHERPAD_FUNCTION=0

LAF_ALLOW_SET_DEPUTY=1
LAF_TERMS_AND_CONDITIONS=""
LAF_USE_MULTIFRAME=1
Expand All @@ -126,6 +125,7 @@ LAF_HIDE_PROFILEPICTURE=0
LAF_SHOW_TAG_TRANSPARENT_BACKGROUND=0
LAF_DEFAULT_ONLINE_STATUS=1
LAF_FLOATING_TAG_FORCE_SHOW=1
LAF_SHOW_CALENDLY=1
###< LaF ###

###> Default Jitsi Server ###
Expand Down Expand Up @@ -294,16 +294,24 @@ JITSI_MEET_DEFAULT_PARTICIPANTS_PANE=0
### <JITSI-MEET-IFRAME



### WHITEBOARD
WHITEBOARD_URL=https://wbo.ophir.dev
WHITEBOARD_SECRET=setYourSecretHere
LAF_WHITEBOARD_FUNCTION=0
### <WHITEBOARD

### ETHERPAD
ETHERPAD_URL=https://yopad.eu
ETHERPAD_SECRET=setYourSecretHere
LAF_ETHERPAD_FUNCTION=0
### <ETHERPAD

### LOOKYLOOKY
LOOKYLOOKY_URL=https://lookylooky.de
LAF_LOOKYLOOKY_FUNCTION=0
### <LOOKYLOOKY

### JITSI-MEET-PUBLIC_SERVER
PUBLIC_SERVER=-1
PUBLIC_TEXT_HEADER="Ein Meetling starten"
Expand Down
3 changes: 1 addition & 2 deletions .github/workflows/pipeline-prerelease.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,8 @@ env:
on:
push:
branches:
- feature/development
- unstable/*
- hotfix/*
- staging

jobs:
version:
Expand Down
17 changes: 17 additions & 0 deletions RELEASE_NOTE.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,19 @@
# Features, Improvements, and Bug Fixes in Jitsi Admin
## 1.3

### Features:
* **LookyLooky** The great new document sharing tool [LookyLooky GIthub Repo](https://github.com/H2-invent/lookylooky)
### Bug Fixes:
a lot
### ⭐ Improvements
* Join a Videoconference without an camera and microphone
* Add Api to change Server of Room to use auto provisioner
* add @ server to livekit roomname
* add @ servername to jwt roomname claim
* add relay for events to other middlewares
* Add Chatwoot in conferences in sidebar

## 1.2
### 🚀 Features
* **Improved Side-Navigation in the Conference**:
* Better overview of all Add-Ons during the conference
Expand All @@ -24,7 +38,10 @@
* Fix Docker Image Build to new Base Image

# Features, Improvements, and Bug Fixes related to the Livekit Integration
## 1.3
Nothing

## 1.2
### 🚀 Feature
* New start page for registered and unregistered conference participants
* Force a name for unregistered participants
Expand Down
3 changes: 1 addition & 2 deletions assets/css/app.scss
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,4 @@
@import "./layout/browserWindow";
@import "~@holema/h2datetimepicker/css/dateTimePicker.css";
@import "./layout/adressbook";


@import "~node-snackbar/src/sass/snackbar";
7 changes: 6 additions & 1 deletion assets/css/layout/_browserWindow.scss
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,11 @@
-ms-transition-delay: 0.25s;
-o-transition-delay: 0.25s;
transition-delay: 0.25s;

position: absolute!important;
left: 0;
border-radius: 8px;
overflow: hidden;
box-shadow: $box-shadow;
}
}

Expand All @@ -194,6 +198,7 @@

.pausedFrame {
position: absolute;
z-index: 50;
top: 0;
left: 0;
width: 100%;
Expand Down
6 changes: 6 additions & 0 deletions assets/css/layout/_main.scss
Original file line number Diff line number Diff line change
Expand Up @@ -1806,4 +1806,10 @@ a:hover {
50% {
color: red;
}
}
.snackbar-container{
p{
color: white !important;
}

}
1 change: 1 addition & 0 deletions assets/js/adhoc.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ function initconfirmLoadOpenPopUp() {
showCancelButton: true,
confirmButtonText: ok,
cancelButtonText: cancel,
heightAuto: false,
customClass: {
confirmButton: 'btn btn-outline-danger',
cancelButton: 'btn btn-outline-primary',
Expand Down
3 changes: 3 additions & 0 deletions assets/js/confirmation.js
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ function initconfirmHref() {
backdrop: false,
showCancelButton: true,
cancelButtonText: cancel,
heightAuto: false,
customClass: {
confirmButton: 'btn-danger btn',
cancelButton: 'btn-outline-primary btn'
Expand Down Expand Up @@ -133,6 +134,7 @@ function initconfirmLoadOpenPopUp() {
backdrop: false,
showCancelButton: true,
cancelButtonText: cancel,
heightAuto: false,
customClass: {
confirmButton: 'btn-danger btn',
cancelButton: 'btn-outline-primary btn'
Expand Down Expand Up @@ -175,6 +177,7 @@ function initConfirmDirectSendHref() {
backdrop: false,
showCancelButton: true,
cancelButtonText: 'Abbrechen', // Übersetzung anpassen
heightAuto: false,
customClass: {
confirmButton: 'btn-danger btn',
cancelButton: 'btn-outline-primary btn'
Expand Down
56 changes: 39 additions & 17 deletions assets/js/createConference.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {Tooltip} from 'mdb-ui-kit';
import $ from "jquery";
import {setCookie, getCookie} from './cookie'
import {multiframe} from "./multiframe";
import {sendViaWebsocket} from "./websocket";


let counter = 50;
Expand All @@ -20,7 +21,7 @@ let startWidth = null;
let startHeight = null;
let startTransform = null;
let tryfullscreen = null;

let blockedUrls = [];

function initStartIframe() {

Expand All @@ -39,9 +40,9 @@ function initStartIframe() {
e.preventDefault();
var target = e.target.closest('.startIframe')
if ("iframetoast" in target.dataset) {
setSnackbar(target.dataset.iframetoast, '','danger');
setSnackbar(target.dataset.iframetoast, '', 'danger');
} else {
const isMaximized= getCookie('startMaximized')?getCookie('startMaximized'):1;
const isMaximized = getCookie('startMaximized') ? getCookie('startMaximized') : 1;
createIframe(target.href, target.dataset.roomname, isMaximized == 1, true, target.dataset.bordercolor);
}
}
Expand All @@ -54,8 +55,7 @@ function initStartIframe() {
}



function createIframe(url, title, startMaximized = true, borderColor = '') {
function createIframe(url, title, startMaximized = true, borderColor = '', roomUid = null) {

width = window.innerWidth * 0.75;
height = window.innerHeight * 0.75;
Expand All @@ -65,13 +65,17 @@ function createIframe(url, title, startMaximized = true, borderColor = '') {
var random = md5(urlPath);

const existingMultiframe = multiframeCheck(random);
if (existingMultiframe){
const isInBlockedUrl = checkIfUrlIsBlocked(url);
if (isInBlockedUrl) {
return;
}
if (existingMultiframe) {
existingMultiframe.restoreWindowFromMaximized();
existingMultiframe.restoreMinimized();
existingMultiframe.moveInForeground();

}else {
const newInstance = new multiframe(url,title,startMaximized,borderColor,counter,counter,height,width,multiframes.length+zIndexOffset);
} else {
const newInstance = new multiframe(url, title, startMaximized, borderColor, counter, counter, height, width, multiframes.length + zIndexOffset, roomUid);
newInstance.addEventListener('remove', () => {
removeMultiframe(newInstance);
});
Expand All @@ -82,33 +86,47 @@ function createIframe(url, title, startMaximized = true, borderColor = '') {
removeInteraction(newInstance.frame);
});
newInstance.addEventListener('incrementZindex', () => {
zIndex++;
zIndex++;
});
newInstance.addEventListener('createNewMultiframe', (data) => {
createIframe(data.url,data.title,data.maximize)
createIframe(data.url, data.title, data.maximize, '', data.roomuid)
});
newInstance.addEventListener('blockUrlForMultiframe', (data) => {
blockedUrls.push(data.url);
});
newInstance.addEventListener('openNewMultiframe', (data) => {
sendViaWebsocket('openNewIframe',JSON.stringify(data));
});
multiframes.push(newInstance);

}
counter += 40;

if (isFullscreen()) {
if (document){
if (document) {
document.exitFullscreen();
}
}
}

function checkIfUrlIsBlocked(url) {
return blockedUrls.includes(url)
}

function multiframeCheck(random) {
return multiframes.some(instance => instance.random === random);
return multiframes.find(instance => instance.random === random);
}

function getMultiframeFromHtmlFrame(frame) {
const res= multiframes.find(instance => instance.frame === frame);
const res = multiframes.find(instance => instance.frame === frame);
return res;
}

function getotherFramesNotActual(instance) {
const res = multiframes.filter(frame => frame !== instance);
return res;
}

function removeMultiframe(instance) {
multiframes = multiframes.filter(i => i !== instance);

Expand Down Expand Up @@ -157,6 +175,7 @@ function switchDragOff() {
return null;
}
}

function moveActualToForeground(actualFrame) {
if (actualFrame.isMutable) {
actualFrame.playFrame();
Expand All @@ -171,7 +190,7 @@ function moveActualToForeground(actualFrame) {
const totalFrames = multiframes.length;

// Setze das z-index des aktuellen Frames auf die Anzahl der Frames (höchstes z-index)
actualFrame.setZindex(totalFrames +zIndexOffset);
actualFrame.setZindex(totalFrames + zIndexOffset);
actualFrame.moveInForeground();
// Sortiere die anderen Frames nach ihrem aktuellen z-index
const otherFrames = getotherFramesNotActual(actualFrame)
Expand All @@ -181,10 +200,11 @@ function moveActualToForeground(actualFrame) {
// Vergib die z-index-Werte beginnend bei 1
let zIndex = 1;
otherFrames.forEach(frame => {
frame.setZindex(zIndex+zIndexOffset);
frame.setZindex(zIndex + zIndexOffset);
zIndex++;
});
}

function addInteractions(ele) {

const position = {x: counter, y: counter}
Expand Down Expand Up @@ -372,7 +392,7 @@ function addInteractions(ele) {

function makeBlury(frame) {
var content = frame.querySelector('.iframeFrame');
content.style.visibility='hidden';
content.style.visibility = 'hidden';
frame.style.opacity = 0.5;
// for (var f of frames) {
// f.insertAdjacentHTML('afterbegin', '<div class="blurryOverlay" style="position: absolute; z-index: 2; height: 100%; width: 100%; opacity: 0.0; background-color: inherit"></div>');
Expand All @@ -390,6 +410,7 @@ function removeBlury(frame) {
function checkIfIsMutable(frame) {

}

// function checkIfIsMutable(frame) {
// if (frame.classList.contains('isMutable')) {
// var actualPause = frame.querySelector('.pauseConference')
Expand Down Expand Up @@ -435,4 +456,5 @@ function addOverlayOverAllMultiframes() {
function removeOverlayFromAllMultiframes() {
document.querySelectorAll('.iframe-overlay').forEach(overlay => overlay.remove());
}
export {initStartIframe, createIframe, checkIfIsMutable}

export {initStartIframe, createIframe, checkIfIsMutable}
29 changes: 29 additions & 0 deletions assets/js/createDialog.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import Swal from 'sweetalert2';

export function showDialog(data) {
if (data.type !== 'dialog') return;

const buttonsHtml = data.buttons.map((button, index) => {
const dataAttributes = button.data ? Object.entries(button.data).map(([key, value]) => `data-${key}='${value}'`).join(' ') : '';
return `
<a id="swal-btn-${index}" class="${button.class || 'btn btn-primary'}" href="${button.link || '#'}" ${dataAttributes}>${button.text}</a>
`;
}).join(' ');

Swal.fire({
title: data.header,
backdrop: false,
html: `<p>${data.text}</p>${buttonsHtml}`,
icon: data.dialogType,
showConfirmButton: false,
heightAuto: false,
didRender: () => {
data.buttons.forEach((button, index) => {
document.getElementById(`swal-btn-${index}`).addEventListener('click', () => {
Swal.close();
});
});
}
});
}

2 changes: 2 additions & 0 deletions assets/js/frontend.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import {initSchedulePublic} from './scheduling'
import {initGenerell} from './init';
import {setSnackbar} from "./myToastr";
import * as h2Button from "h2-invent-apps";
import {initAllComponents} from "./confirmation";

$(document).ready(function () {
initGenerell();
Expand All @@ -30,6 +31,7 @@ $(window).on('load', function () {


initMDB({ Popover });
initAllComponents();
$('[data-mdb-toggle="toastr"]').click(function (e) {

setSnackbar($(this).data('text'),'',$(this).data('type'))
Expand Down
5 changes: 4 additions & 1 deletion assets/js/livekit/livekitUtils.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ export class LivekitUtils {
initStartWhiteboard();
showPlayPause();
initSocialIcons(changeCamera.bind(this));
this.initChatToggle();
// this.initChatToggle();
this.conferenceRunning = true;
this.initMicAndCamera();
window.onbeforeunload = function (e) {
Expand Down Expand Up @@ -112,6 +112,9 @@ export class LivekitUtils {
this.conferencePaused = false;
this.playConference();
break;
case 'pleaseClose':
this.hangup();
break;
// Weitere Fälle können hier hinzugefügt werden
default:
console.log(`Unbekannter Nachrichtentyp: ${decoded.type}`);
Expand Down
1 change: 1 addition & 0 deletions assets/js/lobbyModerator.js
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,7 @@ function askHangup() {
showCancelButton: true,
confirmButtonText: hangupText,
cancelButtonText: cancel,
heightAuto: false,
customClass: {
confirmButton: 'btn-danger btn',
denyButton: 'btn-danger btn',
Expand Down
Loading
Loading