Skip to content

Commit

Permalink
Merge branch 'develop' into chore/exam-exercises-client-migration
Browse files Browse the repository at this point in the history
  • Loading branch information
coolchock authored Feb 14, 2025
2 parents 5d5507d + 33fc740 commit f825009
Show file tree
Hide file tree
Showing 28 changed files with 676 additions and 699 deletions.
4 changes: 2 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -299,8 +299,8 @@ dependencies {
implementation "org.springframework.boot:spring-boot-starter-oauth2-resource-server:${spring_boot_version}"
implementation "org.springframework.boot:spring-boot-starter-oauth2-client:${spring_boot_version}"

implementation "org.springframework.ldap:spring-ldap-core:3.2.10"
implementation "org.springframework.data:spring-data-ldap:3.4.2"
implementation "org.springframework.ldap:spring-ldap-core:3.2.11"
implementation "org.springframework.data:spring-data-ldap:3.4.3"

implementation "org.springframework.cloud:spring-cloud-starter-netflix-eureka-client:${spring_cloud_version}"
implementation "org.springframework.cloud:spring-cloud-starter-config:${spring_cloud_version}"
Expand Down
6 changes: 3 additions & 3 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ npm_version=10.9.0
# Dependency versions
jhipster_dependencies_version=8.9.0
spring_boot_version=3.4.2
spring_framework_version=6.2.2
spring_framework_version=6.2.3
spring_cloud_version=4.2.0
spring_security_version=6.4.2
# TODO: upgrading to 6.6.x currently leads to issues due to internal changes in Hibernate and potentially wrong use in Artemis server code
Expand All @@ -28,12 +28,12 @@ jplag_version=5.1.0
# NOTE: we cannot need to use the latest version 9.x or 10.x here as long as Stanford CoreNLP does not reference it
lucene_version=8.11.4
slf4j_version=2.0.16
sentry_version=8.1.0
sentry_version=8.2.0
liquibase_version=4.31.0
docker_java_version=3.4.1
logback_version=1.5.16
java_parser_version=3.26.2
byte_buddy_version=1.17.0
byte_buddy_version=1.17.1
netty_version=4.1.115.Final
mysql_version=9.2.0
micrometer_version=1.14.4
Expand Down
6 changes: 3 additions & 3 deletions jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -91,10 +91,10 @@ module.exports = {
coverageThreshold: {
global: {
// TODO: in the future, the following values should increase to at least 90%
statements: 88.66,
branches: 74.34,
statements: 88.99,
branches: 74.36,
functions: 82.84,
lines: 88.72,
lines: 88.75,
},
},
coverageReporters: ['clover', 'json', 'lcov', 'text-summary'],
Expand Down
1,017 changes: 495 additions & 522 deletions package-lock.json

Large diffs are not rendered by default.

72 changes: 36 additions & 36 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,21 @@
"node_modules"
],
"dependencies": {
"@angular/animations": "19.1.5",
"@angular/cdk": "19.1.3",
"@angular/common": "19.1.5",
"@angular/compiler": "19.1.5",
"@angular/core": "19.1.5",
"@angular/forms": "19.1.5",
"@angular/localize": "19.1.5",
"@angular/material": "19.1.3",
"@angular/platform-browser": "19.1.5",
"@angular/platform-browser-dynamic": "19.1.5",
"@angular/router": "19.1.5",
"@angular/service-worker": "19.1.5",
"@angular/animations": "19.1.6",
"@angular/cdk": "19.1.4",
"@angular/common": "19.1.6",
"@angular/compiler": "19.1.6",
"@angular/core": "19.1.6",
"@angular/forms": "19.1.6",
"@angular/localize": "19.1.6",
"@angular/material": "19.1.4",
"@angular/platform-browser": "19.1.6",
"@angular/platform-browser-dynamic": "19.1.6",
"@angular/router": "19.1.6",
"@angular/service-worker": "19.1.6",
"@ctrl/ngx-emoji-mart": "9.2.0",
"@danielmoncada/angular-datetime-picker": "19.1.0",
"@fingerprintjs/fingerprintjs": "4.5.1",
"@fingerprintjs/fingerprintjs": "4.6.0",
"@fortawesome/angular-fontawesome": "1.0.0",
"@fortawesome/fontawesome-svg-core": "6.7.2",
"@fortawesome/free-regular-svg-icons": "6.7.2",
Expand All @@ -36,7 +36,7 @@
"@ng-bootstrap/ng-bootstrap": "18.0.0",
"@ngx-translate/core": "16.0.4",
"@ngx-translate/http-loader": "16.0.1",
"@sentry/angular": "8.54.0",
"@sentry/angular": "9.1.0",
"@siemens/ngx-datatable": "22.4.1",
"@swimlane/ngx-charts": "21.1.3",
"@swimlane/ngx-graph": "9.0.1",
Expand Down Expand Up @@ -102,14 +102,14 @@
"@angular/cdk": "^19.1.0"
},
"@typescript-eslint/utils": {
"eslint": "^9.19.0"
"eslint": "^9.20.0"
},
"braces": "3.0.3",
"cookie": "1.0.2",
"critters": "0.0.25",
"debug": "4.4.0",
"eslint-plugin-deprecation": {
"eslint": "^9.19.0"
"eslint": "^9.20.0"
},
"express": "5.0.1",
"jsdom": "26.0.0",
Expand All @@ -124,7 +124,7 @@
"rimraf": "6.0.1",
"semver": "7.6.3",
"tough-cookie": "5.1.0",
"vite": "6.0.11",
"vite": "6.1.0",
"webpack-dev-middleware": "7.4.2",
"webpack-dev-server": "5.2.0",
"word-wrap": "1.2.5",
Expand All @@ -134,35 +134,35 @@
"devDependencies": {
"@analogjs/vite-plugin-angular": "1.13.0",
"@angular-builders/jest": "19.0.0",
"@angular-eslint/builder": "19.0.2",
"@angular-eslint/eslint-plugin": "19.0.2",
"@angular-eslint/eslint-plugin-template": "19.0.2",
"@angular-eslint/schematics": "19.0.2",
"@angular-eslint/template-parser": "19.0.2",
"@angular/build": "19.1.6",
"@angular/cli": "19.1.6",
"@angular/compiler-cli": "19.1.5",
"@angular/language-service": "19.1.5",
"@sentry/types": "8.54.0",
"@testing-library/angular": "17.3.5",
"@angular-eslint/builder": "19.1.0",
"@angular-eslint/eslint-plugin": "19.1.0",
"@angular-eslint/eslint-plugin-template": "19.1.0",
"@angular-eslint/schematics": "19.1.0",
"@angular-eslint/template-parser": "19.1.0",
"@angular/build": "19.1.7",
"@angular/cli": "19.1.7",
"@angular/compiler-cli": "19.1.6",
"@angular/language-service": "19.1.6",
"@sentry/types": "9.1.0",
"@testing-library/angular": "17.3.6",
"@types/crypto-js": "4.2.2",
"@types/d3-shape": "3.1.7",
"@types/dompurify": "3.0.5",
"@types/emoji-js": "3.5.2",
"@types/jest": "29.5.14",
"@types/lodash-es": "4.17.12",
"@types/markdown-it": "14.1.2",
"@types/node": "22.13.1",
"@types/node": "22.13.4",
"@types/pako": "2.0.3",
"@types/papaparse": "5.3.15",
"@types/smoothscroll-polyfill": "0.3.4",
"@types/sockjs-client": "1.5.4",
"@types/turndown": "5.0.5",
"@types/uuid": "10.0.0",
"@typescript-eslint/eslint-plugin": "8.23.0",
"@typescript-eslint/parser": "8.23.0",
"angular-eslint": "19.0.2",
"eslint": "9.19.0",
"@typescript-eslint/eslint-plugin": "8.24.0",
"@typescript-eslint/parser": "8.24.0",
"angular-eslint": "19.1.0",
"eslint": "9.20.1",
"eslint-config-prettier": "10.0.1",
"eslint-plugin-deprecation": "3.0.0",
"eslint-plugin-jest": "28.11.0",
Expand All @@ -180,12 +180,12 @@
"lint-staged": "15.4.3",
"ng-mocks": "14.13.1",
"patch-package": "8.0.0",
"prettier": "3.4.2",
"prettier": "3.5.1",
"rimraf": "6.0.1",
"sass": "1.84.0",
"sass": "1.85.0",
"ts-jest": "29.2.5",
"typescript": "5.7.3",
"typescript-eslint": "8.23.0",
"typescript-eslint": "8.24.0",
"vite-tsconfig-paths": "5.1.4",
"vitest": "3.0.5",
"weak-napi": "2.0.2"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
import { FileBadge, FileType } from 'app/exercises/programming/shared/code-editor/model/code-editor.model';
import { CodeEditorFileBrowserNodeComponent } from 'app/exercises/programming/shared/code-editor/file-browser/code-editor-file-browser-node.component';
import { faChevronDown, faChevronRight, faEdit, faFile, faFolder, faFolderOpen, faTrash } from '@fortawesome/free-solid-svg-icons';
import { TreeviewItem } from 'app/exercises/programming/shared/code-editor/treeview/models/treeview-item';
import { TreeViewItem } from 'app/exercises/programming/shared/code-editor/treeview/models/tree-view-item';
import { FaIconComponent } from '@fortawesome/angular-fontawesome';
import { CodeEditorFileBrowserBadgeComponent } from './code-editor-file-browser-badge.component';
import { ArtemisTranslatePipe } from 'app/shared/pipes/artemis-translate.pipe';
Expand All @@ -19,7 +19,7 @@ export class CodeEditorFileBrowserFolderComponent extends CodeEditorFileBrowserN
@Input() isCompressed = false;
@Input() disableActions: boolean;
@Input() badges: FileBadge[] = [];
@Output() onSetCreatingNodeInFolder = new EventEmitter<{ item: TreeviewItem<string>; fileType: FileType }>();
@Output() onSetCreatingNodeInFolder = new EventEmitter<{ item: TreeViewItem<string>; fileType: FileType }>();

// Icons
faTrash = faTrash;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Component, ElementRef, EventEmitter, Input, OnChanges, Output, SimpleChanges, ViewChild } from '@angular/core';
import { FileType } from 'app/exercises/programming/shared/code-editor/model/code-editor.model';
import { TreeviewItem } from 'app/exercises/programming/shared/code-editor/treeview/models/treeview-item';
import { TreeViewItem } from 'app/exercises/programming/shared/code-editor/treeview/models/tree-view-item';

@Component({
template: '',
Expand All @@ -10,16 +10,16 @@ export abstract class CodeEditorFileBrowserNodeComponent implements OnChanges {

@ViewChild('renamingInput', { static: false }) renamingInput: ElementRef;

@Input() item: TreeviewItem<string>;
@Input() item: TreeViewItem<string>;
@Input() hasError = false;
@Input() hasUnsavedChanges = false;
@Input() isBeingRenamed = false;

@Output() onNodeSelect = new EventEmitter<TreeviewItem<string>>();
@Output() onSetRenamingNode = new EventEmitter<TreeviewItem<string>>();
@Output() onNodeSelect = new EventEmitter<TreeViewItem<string>>();
@Output() onSetRenamingNode = new EventEmitter<TreeViewItem<string>>();
@Output() onClearRenamingNode = new EventEmitter<void>();
@Output() onRenameNode = new EventEmitter<{ item: TreeviewItem<string>; newFileName: string }>();
@Output() onDeleteNode = new EventEmitter<TreeviewItem<string>>();
@Output() onRenameNode = new EventEmitter<{ item: TreeViewItem<string>; newFileName: string }>();
@Output() onDeleteNode = new EventEmitter<TreeViewItem<string>>();

/**
* Check if the node is being renamed now, if so, focus the input when the view is rendered.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ import { CodeEditorStatusComponent } from 'app/exercises/programming/shared/code
import { CodeEditorFileBrowserDeleteComponent } from 'app/exercises/programming/shared/code-editor/file-browser/code-editor-file-browser-delete';
import { IFileDeleteDelegate } from 'app/exercises/programming/shared/code-editor/file-browser/code-editor-file-browser-on-file-delete-delegate';
import { faAngleDoubleDown, faAngleDoubleUp, faChevronLeft, faChevronRight, faCircleNotch, faFile, faFolder, faFolderOpen, faPlus } from '@fortawesome/free-solid-svg-icons';
import { TreeItem, TreeviewItem } from 'app/exercises/programming/shared/code-editor/treeview/models/treeview-item';
import { TreeviewComponent } from 'app/exercises/programming/shared/code-editor/treeview/components/treeview/treeview.component';
import { findItemInList } from 'app/exercises/programming/shared/code-editor/treeview/helpers/treeview-helper';
import { TreeItem, TreeViewItem } from 'app/exercises/programming/shared/code-editor/treeview/models/tree-view-item';
import { TreeViewComponent } from 'app/exercises/programming/shared/code-editor/treeview/components/treeview/tree-view.component';
import { findItemInList } from 'app/exercises/programming/shared/code-editor/treeview/helpers/tree-view-helper';
import { TEXT_FILE_EXTENSIONS } from 'app/shared/constants/file-extensions.constants';
import { NgStyle } from '@angular/common';
import { FaIconComponent } from '@fortawesome/angular-fontawesome';
Expand Down Expand Up @@ -59,7 +59,7 @@ export interface FileTreeItem extends TreeItem<string> {
FaIconComponent,
TranslateDirective,
CodeEditorFileBrowserCreateNodeComponent,
TreeviewComponent,
TreeViewComponent,
CodeEditorStatusComponent,
CodeEditorFileBrowserFolderComponent,
CodeEditorFileBrowserFileComponent,
Expand All @@ -77,7 +77,7 @@ export class CodeEditorFileBrowserComponent implements OnInit, OnChanges, AfterV
FileType = FileType;

@ViewChild('status', { static: false }) status: CodeEditorStatusComponent;
@ViewChild('treeview', { static: false }) treeview: TreeviewComponent<string>;
@ViewChild('treeview', { static: false }) treeview: TreeViewComponent<string>;

@Input()
get selectedFile(): string | undefined {
Expand Down Expand Up @@ -122,7 +122,7 @@ export class CodeEditorFileBrowserComponent implements OnInit, OnChanges, AfterV
commitStateValue: CommitState;
repositoryFiles: { [fileName: string]: FileType };
repositoryFilesWithInformationAboutChange: { [fileName: string]: boolean } | undefined;
filesTreeViewItem: TreeviewItem<string>[];
filesTreeViewItem: TreeViewItem<string>[];
compressFolders = true;

collapsed = false;
Expand Down Expand Up @@ -283,7 +283,7 @@ export class CodeEditorFileBrowserComponent implements OnInit, OnChanges, AfterV
* Callback function for when a node in the file tree view has been selected
* @param item Corresponding event object, holds the selected TreeViewItem
*/
handleNodeSelected(item: TreeviewItem<string>) {
handleNodeSelected(item: TreeViewItem<string>) {
if (item && item.value !== this.selectedFile) {
item.checked = true;
// If we had selected a file prior to this, we 'uncheck' it
Expand Down Expand Up @@ -319,10 +319,10 @@ export class CodeEditorFileBrowserComponent implements OnInit, OnChanges, AfterV
* Converts a parsed file tree to a TreeViewItem[] which will then be used by the Treeviewer
* @param tree File tree obtained by parsing the repository file list
*/
transformTreeToTreeViewItem(tree: FileTreeItem[]): TreeviewItem<string>[] {
const treeViewItem = new Array<TreeviewItem<string>>();
transformTreeToTreeViewItem(tree: FileTreeItem[]): TreeViewItem<string>[] {
const treeViewItem = new Array<TreeViewItem<string>>();
for (const node of tree) {
treeViewItem.push(new TreeviewItem<string>(node));
treeViewItem.push(new TreeViewItem<string>(node));
}
return treeViewItem;
}
Expand Down Expand Up @@ -454,7 +454,7 @@ export class CodeEditorFileBrowserComponent implements OnInit, OnChanges, AfterV
/**
* Enter rename file mode and focus the created input.
**/
setRenamingFile(item: TreeviewItem<string>) {
setRenamingFile(item: TreeViewItem<string>) {
this.renamingFile = [item.value, item.text, this.repositoryFiles[item.value]];
}

Expand Down Expand Up @@ -506,7 +506,7 @@ export class CodeEditorFileBrowserComponent implements OnInit, OnChanges, AfterV
/**
* Enter rename file mode and focus the created input.
**/
setCreatingFile({ item: { value: folder }, fileType }: { item: TreeviewItem<string>; fileType: FileType }) {
setCreatingFile({ item: { value: folder }, fileType }: { item: TreeViewItem<string>; fileType: FileType }) {
this.creatingFile = [folder, fileType];
}

Expand Down Expand Up @@ -561,7 +561,7 @@ export class CodeEditorFileBrowserComponent implements OnInit, OnChanges, AfterV
/**
* Opens a popup to delete the selected repository file
*/
openDeleteFileModal(item: TreeviewItem<string>) {
openDeleteFileModal(item: TreeViewItem<string>) {
const { value: filePath } = item;
const fileType = this.repositoryFiles[filePath];
if (filePath) {
Expand Down Expand Up @@ -605,7 +605,7 @@ export class CodeEditorFileBrowserComponent implements OnInit, OnChanges, AfterV
* Aggregate the file badges for the given folder. The numbers of the badges are summed up.
* The folder badges will only be shown on collapsed folders (otherwise you can see the file badges already and we don't want to clutter the UI)
*/
getFolderBadges(folder: TreeviewItem<string>): FileBadge[] {
getFolderBadges(folder: TreeViewItem<string>): FileBadge[] {
if (!folder.collapsed) {
return []; // Only show folder badges on collapsed folders
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
import { Component, EventEmitter, Input, Output, TemplateRef } from '@angular/core';
import { TreeviewItem } from '../../models/treeview-item';
import { TreeviewItemTemplateContext } from '../../models/treeview-item-template-context';
import { TreeViewItem } from '../../models/tree-view-item';
import { TreeViewItemTemplateContext } from '../../models/tree-view-item-template-context';
import { NgTemplateOutlet } from '@angular/common';

@Component({
selector: 'treeview-item',
templateUrl: './treeview-item.component.html',
styleUrls: ['./treeview-item.component.scss'],
templateUrl: './tree-view-item.component.html',
styleUrls: ['./tree-view-item.component.scss'],
imports: [NgTemplateOutlet],
})
export class TreeviewItemComponent<T> {
@Input() template: TemplateRef<TreeviewItemTemplateContext<T>>;
@Input() item: TreeviewItem<T>;
export class TreeViewItemComponent<T> {
@Input() template: TemplateRef<TreeViewItemTemplateContext<T>>;
@Input() item: TreeViewItem<T>;
@Output() checkedChange = new EventEmitter<boolean>();

onCollapseExpand = () => {
Expand All @@ -23,7 +23,7 @@ export class TreeviewItemComponent<T> {
this.checkedChange.emit(checked);
};

onChildCheckedChange(child: TreeviewItem<T>, checked: boolean): void {
onChildCheckedChange(child: TreeViewItem<T>, checked: boolean): void {
let itemChecked: boolean | undefined = undefined;
for (const childItem of this.item.children) {
if (itemChecked == undefined) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { Component, EventEmitter, Input, Output, TemplateRef } from '@angular/core';
import { TreeViewItem } from '../../models/tree-view-item';
import { TreeViewItemTemplateContext } from '../../models/tree-view-item-template-context';
import { FormsModule } from '@angular/forms';
import { TreeViewItemComponent } from '../treeview-item/tree-view-item.component';

@Component({
selector: 'treeview',
templateUrl: './tree-view.component.html',
styleUrls: ['./tree-view.component.scss'],
imports: [FormsModule, TreeViewItemComponent],
})
export class TreeViewComponent<T> {
@Input() itemTemplate: TemplateRef<TreeViewItemTemplateContext<T>>;
@Input() items: TreeViewItem<T>[];
@Input() maxHeight = 500;
@Output() filterChange = new EventEmitter<string>();
}
Loading

0 comments on commit f825009

Please sign in to comment.