Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion components/ILIAS/UI/resources/js/Prompt/dist/prompt.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

41 changes: 26 additions & 15 deletions components/ILIAS/UI/resources/js/Prompt/src/prompt.class.js
Original file line number Diff line number Diff line change
Expand Up @@ -70,13 +70,19 @@ export default class Prompt {
const buttons = doc.querySelector('section[data-section="il-prompt-state__buttons"]');
const command = doc.querySelector('section[data-section="il-prompt-state__command"]');
const parameters = doc.querySelector('section[data-section="il-prompt-state__parameters"]');
const scripts = doc.querySelector('script');
const scripts = doc.querySelector('script[data-replace-marker="script"]');
const dialogTitle = this.#prompt.querySelector('span.il-prompt__title');
const dialogContents = this.#prompt.querySelector('div.il-prompt__contents');
const dialogButtons = this.#prompt.querySelector('div.il-prompt__buttons');
dialogTitle.innerHTML = title.innerHTML;
dialogContents.innerHTML = contents.innerHTML;
dialogButtons.innerHTML = buttons.innerHTML;
if (title) {
dialogTitle.innerHTML = title.innerHTML;
}
if (contents) {
dialogContents.innerHTML = contents.innerHTML;
}
if (buttons) {
dialogButtons.innerHTML = buttons.innerHTML;
}

this.#captureForms(dialogContents);
this.#captureLinks(dialogContents);
Expand All @@ -85,14 +91,16 @@ export default class Prompt {
}

const params = [];
parameters.querySelectorAll('data').forEach(
(data) => {
params[data.innerHTML.trim()] = data.getAttribute('value');
},
);
if (parameters) {
parameters.querySelectorAll('data').forEach(
(data) => {
params[data.innerHTML.trim()] = data.getAttribute('value');
},
);
}

return {
cmd: command.innerHTML.trim(),
cmd: command ? command.innerHTML.trim() : '',
params,
};
})
Expand All @@ -117,7 +125,12 @@ export default class Prompt {
#appendScript(js) {
const dialogScript = this.#component.querySelector('section.il-prompt__scripts');
const script = document.createElement('script');
script.text = js;
script.text = js
.replace(/il\.UI\.prompt\.init\([^)]*\);?/g, '')
.replace(
/\$\(this\)\.trigger\('(il_signal_[^']+)'/g,
"$(document).trigger('$1'",
);
dialogScript.innerHTML = '';
dialogScript.appendChild(script);
}
Expand All @@ -127,8 +140,7 @@ export default class Prompt {
* @return {void}
*/
#captureForms(doc) {
const forms = doc.getElementsByTagName('form');
forms.forEach(
doc.querySelectorAll('form').forEach(
(form) => {
form.addEventListener('submit', (e) => {
e.preventDefault();
Expand All @@ -146,8 +158,7 @@ export default class Prompt {
* @return {void}
*/
#captureLinks(doc) {
const links = doc.getElementsByTagName('a');
links.forEach(
doc.querySelectorAll('a').forEach(
(lnk) => {
const { target } = lnk;
if (target !== '_blank') {
Expand Down
10 changes: 7 additions & 3 deletions components/ILIAS/UI/resources/js/Prompt/src/prompt.factory.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
* https://github.com/ILIAS-eLearning
*/

import Prompt from './prompt.class';
import Prompt from './prompt.class.js';

export default class PromptFactory {
/**
Expand All @@ -40,10 +40,14 @@ export default class PromptFactory {
*/
init(id) {
if (this.#instances[id] !== undefined) {
throw new Error(`Prompt with id '${id}' has already been initialized.`);
return;
}

this.#instances[id] = new Prompt(this.#DOMParser, id);
try {
this.#instances[id] = new Prompt(this.#DOMParser, id);
} catch (error) {
// Prompt element may not exist yet during async content replacement.
}
}

/**
Expand Down
Loading