Skip to content

Commit

Permalink
Merge branch 'uzl'
Browse files Browse the repository at this point in the history
  • Loading branch information
YorikHansen committed Jun 17, 2024
2 parents 8def49e + 996134e commit 6592d88
Show file tree
Hide file tree
Showing 5 changed files with 158 additions and 36 deletions.
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "1.37.1"
".": "1.38.0"
}
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
# Changelog

## [1.38.0](https://github.com/YorikHansen/better-moodle/compare/1.37.4...1.38.0) (2024-06-17)


### Features

* **quickRoleChange:** Make switching roles as easy as switching lang ([#215](https://github.com/jxn-30/better-moodle/issues/215)) ([6aac352](https://github.com/YorikHansen/better-moodle/commit/6aac35237c4033964f159d5553ac15ad99aae01f))

## [1.37.4](https://github.com/YorikHansen/better-moodle/compare/1.37.3...1.37.4) (2024-06-14)


Expand Down
8 changes: 4 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "uzl-better-moodle",
"description": "Improves the new weird Moodle 4 UI on UzL-Moodle",
"version": "1.37.1",
"version": "1.38.0",
"packageManager": "yarn@4.3.0",
"type": "module",
"private": true,
Expand All @@ -10,14 +10,14 @@
"prettier:write": "prettier --write --cache --cache-strategy content ."
},
"devDependencies": {
"@eslint/js": "9.4.0",
"@eslint/js": "9.5.0",
"@types/eslint": "8.56.10",
"@types/tampermonkey": "5.0.3",
"darkreader": "4.9.86",
"eslint": "9.4.0",
"eslint": "9.5.0",
"eslint-config-prettier": "9.1.0",
"eslint-plugin-userscripts": "0.5.3",
"globals": "15.4.0",
"globals": "15.5.0",
"prettier": "3.3.2",
"userscript-meta": "1.0.1"
}
Expand Down
115 changes: 115 additions & 0 deletions redesign.user.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// @name 🎓️ CAU: better-moodle
// @namespace https://better-moodle.yorik.dev
// @ x-release-please-start-version
// @version 1.38.0
// @version 1.37.4
// @ x-release-please-end
// @author Jan (jxn_30), Yorik (YorikHansen)
Expand Down Expand Up @@ -114,6 +115,11 @@ const TRANSLATIONS = {
},
},
},
quickRoleChange: {
defaultSwitchRole: 'Zur Moodle Rollenwechsel-Seite gehen',
goBack: 'Zurück zum Nutzermenü',
roleSelector: 'Rollen-Auswahl',
},
modals: {
settings: {
title: 'Einstellungen',
Expand Down Expand Up @@ -347,6 +353,11 @@ Viele Grüße
trans: 'Transgender',
},
},
quickRoleChange: {
name: 'Schneller Rollenwechsel',
description:
'Ermöglicht es (mit den passenden Berechtigungen), die Betrachtung eines Kurses mit einer anderen Rolle direkt über das Profil-Dropdown zu ändern.',
},
},
darkmode: {
_title: 'Darkmode',
Expand Down Expand Up @@ -607,6 +618,11 @@ Viele Grüße
},
},
},
quickRoleChange: {
defaultSwitchRole: 'Go to Moodle switch role page',
goBack: 'Go back to user menu',
roleSelector: 'Role selector',
},
modals: {
settings: {
title: 'Preferences',
Expand Down Expand Up @@ -843,6 +859,11 @@ Best regards
trans: 'Transgender',
},
},
quickRoleChange: {
name: 'Quick role change',
description:
'Allows (with the appropriate permissions) to change the view of a course with a different role directly via the profile dropdown.',
},
},
darkmode: {
_title: 'Darkmode',
Expand Down Expand Up @@ -2800,6 +2821,7 @@ const SETTINGS = [
'gay',
'trans',
]),
new BooleanSetting('general.quickRoleChange', true),
'darkmode',
$t('settings.darkmode._description'),
new SelectSetting('darkmode.mode', 'off', ['off', 'on', 'auto']).onInput(
Expand Down Expand Up @@ -2923,6 +2945,7 @@ const existingSettings = new Set([
'general.speiseplan',
'general.googlyEyes',
'general.semesterzeiten',
'general.quickRoleChange',
'darkmode.mode',
'darkmode.brightness',
'darkmode.contrast',
Expand Down Expand Up @@ -4883,6 +4906,98 @@ const updateDarkReaderMode = (live = false) => {
updateDarkReaderMode();
// endregion

// region Feature: general.quickRoleChange
if (getSetting('general.quickRoleChange')) {
ready(() => {
const usermenu = document.getElementById('usermenu-carousel');
const usermenuInner = usermenu?.querySelector('.carousel-inner');
const roleSelectBtn = usermenu?.querySelector(
'.dropdown-item[href*="switchrole.php"]'
);
if (!roleSelectBtn) return;

const rolesUrl = roleSelectBtn.href;
fetch(rolesUrl)
.then(response => response.text())
.then(html => {
const parser = new DOMParser();
const doc = parser.parseFromString(html, 'text/html');
return doc.querySelectorAll('form[action*="switchrole.php"]');
})
.then(forms => {
const roles = [];
forms.forEach(form => {
const role = {
id: form.querySelector('input[name="id"]').value,
switchrole: form.querySelector(
'input[name="switchrole"]'
).value,
returnurl: form.querySelector('input[name="returnurl"]')
.value,
sesskey: form.querySelector('input[name="sesskey"]')
.value,
title: form.querySelector('button').textContent,
};
roles.push(role);
});
return roles;
})
.then(roles => {
if (roles.length === 0) return;

const roleSelecotrItemId = PREFIX('role-selector-item');
const roleSelectorItem = document.createElement('div');
roleSelectorItem.id = roleSelecotrItemId;
roleSelectorItem.classList.add('carousel-item', 'submenu');
roleSelectorItem.setAttribute('role', 'menu');
roleSelectorItem.setAttribute(
'aria-label',
$t('quickRoleChange.roleSelector')
);
roleSelectorItem.setAttribute('tabindex', -1);

roleSelectorItem.innerHTML = `
<div class="d-flex flex-column h-100">
<div class="header">
<button type="button" class="btn btn-icon carousel-navigation-link text-decoration-none text-body" data-carousel-target-id="carousel-item-main" aria-label="${$t('quickRoleChange.goBack')}">
<span class="dir-rtl-hide"><img class="icon " alt="" aria-hidden="true" src="/theme/image.php/boost/core/1718107763/i/arrow-left"></span>
<span class="dir-ltr-hide"><img class="icon " alt="" aria-hidden="true" src="/theme/image.php/boost/core/1718107763/i/arrow-right"></span>
</button>
<span class="pl-2" id="${roleSelecotrItemId}-title">${$t('quickRoleChange.roleSelector')}</span>
</div>
<div class="dropdown-divider"></div>
<div class="items h-100 overflow-auto" role="menu" aria-labelledby=""${roleSelecotrItemId}-title">
${Object.entries(roles)
.map(
([, role]) => `
<form method="post" action="/course/switchrole.php">
<input type="hidden" name="id" value="${role.id}">
<input type="hidden" name="switchrole" value="${role.switchrole}">
<input type="hidden" name="returnurl" value="${role.returnurl}">
<input type="hidden" name="sesskey" value="${role.sesskey}">
<button type="submit" class="dropdown-item text-truncate">${role.title}</button>
</form>
`
)
.join('')}
</div>
<div class="dropdown-divider"></div>
<div class="footer d-flex justify-content-center">
<a href="${rolesUrl}" class="small">${$t('quickRoleChange.defaultSwitchRole')}</a>
</div>
</div>
`;

usermenuInner?.append(roleSelectorItem);

roleSelectBtn.href = '#';
roleSelectBtn.classList.add('carousel-navigation-link');
roleSelectBtn.dataset.carouselTargetId = roleSelecotrItemId;
});
});
}
// endregion

// region Feature: Dashboard right sidebar
// add a right sidebar with timeline and upcoming events on Dashboard
// if (isDashboard) {
Expand Down
62 changes: 31 additions & 31 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,14 @@ __metadata:
languageName: node
linkType: hard

"@eslint/config-array@npm:^0.15.1":
version: 0.15.1
resolution: "@eslint/config-array@npm:0.15.1"
"@eslint/config-array@npm:^0.16.0":
version: 0.16.0
resolution: "@eslint/config-array@npm:0.16.0"
dependencies:
"@eslint/object-schema": "npm:^2.1.3"
"@eslint/object-schema": "npm:^2.1.4"
debug: "npm:^4.3.1"
minimatch: "npm:^3.0.5"
checksum: 10c0/60947a188157f2f811cc2aedf3c2494fa10932178838f6a7c7e9a8bb106ab51b4b4e571f49ae63cdd3884002b78631e4395be25d4ae52470360fc7fb463303d2
checksum: 10c0/b9d04409151dc95ec6b5e04e1e185a808d58e18cfc7340adc1e9420a5ff15843a0a308fb2cd9a2b354652885c2bebbcd5515814e93e9c9133f423891b6e53c70
languageName: node
linkType: hard

Expand All @@ -51,17 +51,17 @@ __metadata:
languageName: node
linkType: hard

"@eslint/js@npm:9.4.0":
version: 9.4.0
resolution: "@eslint/js@npm:9.4.0"
checksum: 10c0/7ffc508d3e9cd496cab7f08c5ba8f97851c8adaea3ebff8804b1c3b4662aa7aac7e9c3b597f7e47fdc29319a107bcf892865070a6b113c2e4d19f8fa1f99f569
"@eslint/js@npm:9.5.0":
version: 9.5.0
resolution: "@eslint/js@npm:9.5.0"
checksum: 10c0/dacf51ec2d5b4c8d1315d21a0ff761235d9e39b2391cb945138c58dc512a6c18949c40b644235f5c4fdf5b637ef8f881214acc496dddf46b718529bf22af42ac
languageName: node
linkType: hard

"@eslint/object-schema@npm:^2.1.3":
version: 2.1.3
resolution: "@eslint/object-schema@npm:2.1.3"
checksum: 10c0/ee892d0112ee7ec86312dfb1fa718da76b2d446e3495b9ec1f3ef31382a335d31420b76f3def175b96f7c3517c88fc860fec049d62a81d444237a23881559403
"@eslint/object-schema@npm:^2.1.4":
version: 2.1.4
resolution: "@eslint/object-schema@npm:2.1.4"
checksum: 10c0/e9885532ea70e483fb007bf1275968b05bb15ebaa506d98560c41a41220d33d342e19023d5f2939fed6eb59676c1bda5c847c284b4b55fce521d282004da4dda
languageName: node
linkType: hard

Expand Down Expand Up @@ -147,11 +147,11 @@ __metadata:
linkType: hard

"acorn@npm:^8.11.3":
version: 8.11.3
resolution: "acorn@npm:8.11.3"
version: 8.12.0
resolution: "acorn@npm:8.12.0"
bin:
acorn: bin/acorn
checksum: 10c0/3ff155f8812e4a746fee8ecff1f227d527c4c45655bb1fad6347c3cb58e46190598217551b1500f18542d2bbe5c87120cb6927f5a074a59166fbdd9468f0a299
checksum: 10c0/a19f9dead009d3b430fa3c253710b47778cdaace15b316de6de93a68c355507bc1072a9956372b6c990cbeeb167d4a929249d0faeb8ae4bb6911d68d53299549
languageName: node
linkType: hard

Expand Down Expand Up @@ -337,15 +337,15 @@ __metadata:
languageName: node
linkType: hard

"eslint@npm:9.4.0":
version: 9.4.0
resolution: "eslint@npm:9.4.0"
"eslint@npm:9.5.0":
version: 9.5.0
resolution: "eslint@npm:9.5.0"
dependencies:
"@eslint-community/eslint-utils": "npm:^4.2.0"
"@eslint-community/regexpp": "npm:^4.6.1"
"@eslint/config-array": "npm:^0.15.1"
"@eslint/config-array": "npm:^0.16.0"
"@eslint/eslintrc": "npm:^3.1.0"
"@eslint/js": "npm:9.4.0"
"@eslint/js": "npm:9.5.0"
"@humanwhocodes/module-importer": "npm:^1.0.1"
"@humanwhocodes/retry": "npm:^0.3.0"
"@nodelib/fs.walk": "npm:^1.2.8"
Expand All @@ -357,7 +357,7 @@ __metadata:
eslint-scope: "npm:^8.0.1"
eslint-visitor-keys: "npm:^4.0.0"
espree: "npm:^10.0.1"
esquery: "npm:^1.4.2"
esquery: "npm:^1.5.0"
esutils: "npm:^2.0.2"
fast-deep-equal: "npm:^3.1.3"
file-entry-cache: "npm:^8.0.0"
Expand All @@ -377,7 +377,7 @@ __metadata:
text-table: "npm:^0.2.0"
bin:
eslint: bin/eslint.js
checksum: 10c0/826c901812536451e1bdb151359098db3a01ee9ff41775d5e97553626d07f7319cb2a0fd54176ef8e2e057105874077426b5d408ee6e8cff06bb814651f4c004
checksum: 10c0/1c83d94ccfd6d97474aaaf463714eba7afa040639ad9191db430d34e9e2851ba14510651de69b52f26ee30611caf0fa4c66b3fb73bb71df6ab10cef5bb44bb32
languageName: node
linkType: hard

Expand All @@ -392,7 +392,7 @@ __metadata:
languageName: node
linkType: hard

"esquery@npm:^1.4.2":
"esquery@npm:^1.5.0":
version: 1.5.0
resolution: "esquery@npm:1.5.0"
dependencies:
Expand Down Expand Up @@ -499,10 +499,10 @@ __metadata:
languageName: node
linkType: hard

"globals@npm:15.4.0":
version: 15.4.0
resolution: "globals@npm:15.4.0"
checksum: 10c0/19041b8fd49deb154e1cb706c82756ab7184c8ae3495aab183efcad9edd1b6320cc54af1a9110d8699245bef124834b004a8156ca988ba7814c25ec71a43f6a4
"globals@npm:15.5.0":
version: 15.5.0
resolution: "globals@npm:15.5.0"
checksum: 10c0/f13c3cb0c6d49b9d23e447b86e33ca6139753087060c3063863c0dd2b5d79f4a114c48d20e321916e6c3701adb3f6b67d6ac8d8ed2bae6da45482c968532d4e2
languageName: node
linkType: hard

Expand Down Expand Up @@ -858,14 +858,14 @@ __metadata:
version: 0.0.0-use.local
resolution: "uzl-better-moodle@workspace:."
dependencies:
"@eslint/js": "npm:9.4.0"
"@eslint/js": "npm:9.5.0"
"@types/eslint": "npm:8.56.10"
"@types/tampermonkey": "npm:5.0.3"
darkreader: "npm:4.9.86"
eslint: "npm:9.4.0"
eslint: "npm:9.5.0"
eslint-config-prettier: "npm:9.1.0"
eslint-plugin-userscripts: "npm:0.5.3"
globals: "npm:15.4.0"
globals: "npm:15.5.0"
prettier: "npm:3.3.2"
userscript-meta: "npm:1.0.1"
languageName: unknown
Expand Down

0 comments on commit 6592d88

Please sign in to comment.