Initial Nuxt frontend import
Some checks failed
continuous-integration/drone/push Build is failing

- Complete GGZ Ecademy Nuxt.js user portal
- Learning products browser and management
- Member management interface
- User authentication and roles
- Multi-language support (NL/EN)
- Vuex store for state management
- Component-based architecture
This commit is contained in:
Joris Slagter
2025-12-02 17:48:48 +01:00
parent 0f691e83e3
commit 791aebc346
290 changed files with 113801 additions and 0 deletions

56
util/Name.js Normal file
View File

@@ -0,0 +1,56 @@
export default class Name {
constructor(
salutation,
nameFirst,
nameMiddle,
nameLast,
initials,
) {
this.salutation = this._sanitizeNamePart(salutation);
this.nameFirst = this._sanitizeNamePart(nameFirst);
this.nameMiddle = this._sanitizeNamePart(nameMiddle);
this.nameLast = this._sanitizeNamePart(nameLast);
this.initials = this._formatInitials(this._sanitizeNamePart(initials));
}
static fromContactPersonItem(item) {
return new this(
item.salutation,
item.firstname,
item.middlename,
item.lastname,
item.initials,
);
}
_sanitizeNamePart(value) {
if (this._isNamePartValid(value)) {
return value.trim();
} else {
return '';
}
}
_isNamePartValid(value) {
return typeof value === 'string' && value.length;
}
_formatInitials(initials) {
return initials.replace(/[^a-zA-Z]/g, '')
.toUpperCase()
.split('')
.map(x => `${x}.`)
.join('');
}
get nameFull() {
const nameParts = [
this.salutation,
this.initials || this.nameFirst,
this.nameMiddle,
this.nameLast,
];
return nameParts.filter(x => x).join(' ');
}
};

93
util/index.js Normal file
View File

@@ -0,0 +1,93 @@
import isEqual from 'lodash.isequal';
const toggleFullScreen = () => {
let doc = window.document;
let docEl = doc.documentElement;
let requestFullScreen = docEl.requestFullscreen || docEl.mozRequestFullScreen || docEl.webkitRequestFullScreen || docEl.msRequestFullscreen;
let cancelFullScreen = doc.exitFullscreen || doc.mozCancelFullScreen || doc.webkitExitFullscreen || doc.msExitFullscreen;
if (!doc.fullscreenElement && !doc.mozFullScreenElement && !doc.webkitFullscreenElement && !doc.msFullscreenElement) {
requestFullScreen.call(docEl);
}
else {
cancelFullScreen.call(doc);
}
};
const arraysMatch = (arr1, arr2) => {
// Check if the arrays are the same length
if (arr1.length !== arr2.length) return false;
// Make local copy
const arrayTmp1 = [...arr1];
const arrayTmp2 = [...arr2];
// Sort arrays
arrayTmp1.sort();
arrayTmp2.sort();
// Check if all items exist and are in the same order
for (var i = 0; i < arrayTmp1.length; i++) {
if (arrayTmp1[i] !== arrayTmp2[i]) return false;
}
// Otherwise, return true
return true;
};
const arraysMatchNoSorting = (arr1, arr2) => {
// Check if the arrays are the same length
if (arr1.length !== arr2.length) return false;
// Check if all items exist and are in the same order
for (var i = 0; i < arr1.length; i++) {
if (arr1[i] !== arr2[i]) return false;
}
// Otherwise, return true
return true;
};
const areEqualInputs = (input1, input2, propertiesToExclude = []) => {
const tmpInput1 = Object.assign({}, input1);
const tmpInput2 = Object.assign({}, input2);
if (propertiesToExclude.length) {
propertiesToExclude.forEach(p => {
delete tmpInput1[p]
delete tmpInput2[p]
})
}
return isEqual(tmpInput1, tmpInput2);
}
const arrayOfObjsSortByKey = (array, key) => {
function compare(a, b) {
if (a[key] < b[key]) return -1
if (a[key] > b[key]) return 1
return 0
}
return array.sort(compare)
}
const findCommonValuesInArray = (arr1, arr2) => arr1.some(item => arr2.includes(item))
const findItemsWithExactValuesInArray = (arr1, arr2) => arr1.every(item => arr2.includes(item))
const isNotEmptyObj = (obj) => Object.keys(obj).length > 0
export default {
toggleFullScreen,
arraysMatch,
arraysMatchNoSorting,
arrayOfObjsSortByKey,
findCommonValuesInArray,
findItemsWithExactValuesInArray,
isNotEmptyObj,
areEqualInputs
};