Skip to content

Commit

Permalink
merge 2
Browse files Browse the repository at this point in the history
  • Loading branch information
chlulei committed Aug 13, 2024
1 parent 7577e67 commit c5001cc
Show file tree
Hide file tree
Showing 3 changed files with 118 additions and 2 deletions.
20 changes: 19 additions & 1 deletion components/ILIAS/UI/resources/js/Modal/dist/modal.min.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,22 @@
* https://www.ilias.de
* https://github.com/ILIAS-eLearning
*/
!function(e,t){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=o(e),l=o(t);i.default.UI=i.default.UI||{},i.default.UI.modal=new class{#e;#t=[];#o={ajaxRenderUrl:""};#i={};constructor(e){this.#e=e}showModal(e,t,o){if(!0===this.#t[o.id])return;this.#t[o.id]=!0;const i=this.#e.extend(this.#o,t);if(i.ajaxRenderUrl){const t=document.getElementById(e);this.#e(t).load(i.ajaxRenderUrl,(()=>{document.querySelector(`#${e} > dialog`).showModal(),this.#t[o.id]=!1}))}else document.getElementById(e).showModal(),this.#t[o.id]=!1;this.#i[o.id]=e}closeModal(e){document.getElementById(e).close()}replaceFromSignal(e,t){const{url:o}=t.options;il.UI.core.replaceContent(e,o,"component")}}(l.default)}(il,$);
!(function (e, t) {
function o(e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; } const i = o(e); const l = o(t); i.default.UI = i.default.UI || {}, i.default.UI.modal = new class {
#e;

#t = [];

#o = { ajaxRenderUrl: '' };

#i = {};

constructor(e) { this.#e = e; }

showModal(e, t, o) { if (!0 === this.#t[o.id]) return; this.#t[o.id] = !0; const i = this.#e.extend(this.#o, t); if (i.ajaxRenderUrl) { const t = document.getElementById(e); this.#e(t).load(i.ajaxRenderUrl, (() => { document.querySelector(`#${e} > dialog`).showModal(), this.#t[o.id] = !1; })); } else document.getElementById(e).showModal(), this.#t[o.id] = !1; this.#i[o.id] = e; }

closeModal(e) { document.getElementById(e).close(); }

replaceFromSignal(e, t) { const { url: o } = t.options; il.UI.core.replaceContent(e, o, 'component'); }
}(l.default);
}(il, $));
2 changes: 2 additions & 0 deletions components/ILIAS/UI/resources/js/Modal/src/modal.class.js
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ export default class Modal {
/**
* @param {string} id
*/
// eslint-disable-next-line class-methods-use-this
closeModal(id) {
document.getElementById(id).close();
}
Expand All @@ -82,6 +83,7 @@ export default class Modal {
* @param {string} id
* @param {array} signalData
*/
// eslint-disable-next-line class-methods-use-this
replaceFromSignal(id, signalData) {
const { url } = signalData.options;
il.UI.core.replaceContent(id, url, 'component');
Expand Down
98 changes: 97 additions & 1 deletion components/ILIAS/UI/resources/js/Table/dist/table.min.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,100 @@
* https://www.ilias.de
* https://github.com/ILIAS-eLearning
*/
!function(e,t){"use strict";function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=s(e),o=s(t);class i{#e;#t;#s;#n;#o;#i;#a;#l;constructor(e,t,s,n){if(this.#s=document.getElementById(n),null===this.#s)throw new Error(`Could not find a DataTable for id '${n}'.`);if(this.#a=this.#s.getElementsByTagName("table").item(0),null===this.#a)throw new Error("There is no <table> in the component's HTML.");this.#n=this.#s.getElementsByClassName("c-table-data__async_modal_container").item(0),this.#o=this.#s.getElementsByClassName("c-table-data__async_message").item(0),this.#i=this.#o.getElementsByClassName("c-table-data__async_messageresponse").item(0),this.#e=e,this.#t={actionId:t,rowId:s},this.#l={},this.#s.addEventListener("keydown",(e=>this.navigateCellsWithArrowKeys(e)))}registerAction(e,t,s,n){this.#l[e]={async:t,urlBuilder:s,urlTokens:n}}selectAll(e){const t=this.#a.getElementsByClassName("c-table-data__row-selector"),s=this.#a.getElementsByClassName("c-table-data__selection_all").item(0),n=this.#a.getElementsByClassName("c-table-data__selection_none").item(0);for(let s=0;s<t.length;s+=1){t[s].checked=e}e?(s.style.display="none",n.style.display="block"):(s.style.display="block",n.style.display="none")}collectSelectedRowIds(){const e=this.#a.getElementsByClassName("c-table-data__row-selector"),t=[];return e.forEach((e=>{e.checked&&t.push(e.value)})),t}doMultiAction(e){this.doAction(e,this.collectSelectedRowIds())}doSingleAction(e){const t=e.options[this.#t.rowId];this.doAction(e,[t])}doActionForAll(e){const t=e.parentNode.parentNode,s=t.getElementsByClassName("close").item(0),n=t.getElementsByClassName("modal-body")[0].getElementsByTagName("select")[0].value;if(n in this.#l){const e=this.#t.actionId,t={options:{}};t.options[e]=n,s.click(),this.doAction(t,["ALL_OBJECTS"])}}doAction(e,t){const s=e.options[this.#t.actionId],n=this.#l[s],o=n.urlTokens.values().next().value;n.urlBuilder.writeParameter(o,t);const i=decodeURI(n.urlBuilder.getUrl().toString());n.async?this.asyncAction(i):window.location.href=i}asyncAction(e){this.#e.ajax({url:e,dataType:"html"}).done((e=>{let t="";if("SCRIPT"===this.#e(e).first().prop("tagName"))this.#e.globalEval(this.#e(e).first().text());else{this.#e(e).first().hasClass("c-modal")?(this.#n.innerHTML=e,t=this.#e(e).first().get(0).id):(this.#i.innerHTML=e,t=this.#o.id);this.#e(`<div>${e}</div>`).find("[data-replace-marker='script']").each(((e,t)=>this.#e.globalEval(t.innerHTML))),il.UI.modal.showModal(t,{},{id:t})}}))}navigateCellsWithArrowKeys(e){if(37!==e.which&&38!==e.which&&39!==e.which&&40!==e.which)return;const t=e.target.closest("td, th"),s=t.closest("tr");let{cellIndex:n}=t,{rowIndex:o}=s;switch(e.which){case 37:n-=1;break;case 39:n+=1;break;case 38:o-=1;break;case 40:o+=1}o<0||n<0||o>=this.#a.rows.length||n>=s.cells.length||this.focusCell(t,o,n)}focusCell(e,t,s){const n=this.#a.rows[t].cells[s];n.focus(),e.setAttribute("tabindex",-1),n.setAttribute("tabindex",0)}}class a{#s;constructor(e){if(this.#s=document.getElementById(e),null===this.#s)throw new Error(`Could not find a PresentationTable for id '${e}'.`)}expandRow(e){this.#s.querySelector(`#${e} .il-table-presentation-row-controls-expander`).style.display="none",this.#s.querySelector(`#${e} .il-table-presentation-row-controls-collapser`).style.display="block",this.#s.querySelector(`#${e} .il-table-presentation-row-expanded`).style.display="block",this.#s.querySelector(`#${e} .il-table-presentation-row-header-fields`).style.display="none",this.#s.classList.remove("collapsed"),this.#s.classList.add("expanded")}collapseRow(e){this.#s.querySelector(`#${e} .il-table-presentation-row-controls-expander`).style.display="block",this.#s.querySelector(`#${e} .il-table-presentation-row-controls-collapser`).style.display="none",this.#s.querySelector(`#${e} .il-table-presentation-row-expanded`).style.display="none",this.#s.querySelector(`#${e} .il-table-presentation-row-header-fields`).style.display="block",this.#s.classList.remove("expanded"),this.#s.classList.add("collapsed")}toggleRow(e){const t=[this.#s.querySelector(`#${e} .il-table-presentation-row-controls-expander`),this.#s.querySelector(`#${e} .il-table-presentation-row-controls-collapser`),this.#s.querySelector(`#${e} .il-table-presentation-row-expanded`),this.#s.querySelector(`#${e} .il-table-presentation-row-header-fields`)];let s=0;for(;s<t.length;s+=1){const e=t[s],n="none"===e.style.display?"block":"none";e.style.display=n}this.#s.classList.contains("expanded")?(this.#s.classList.remove("expanded"),this.#s.classList.add("collapsed")):(this.#s.classList.remove("collapsed"),this.#s.classList.add("expanded"))}expandAll(e){const t=this.#s.querySelectorAll(".il-table-presentation-row");e.options.expand?t.forEach((e=>this.expandRow(e.id))):t.forEach((e=>this.collapseRow(e.id)))}}class l{#s;#a;#r;#c;constructor(e){if(this.#s=document.getElementById(e),null===this.#s)throw new Error(`Could not find a OrderingTable for id '${e}'.`);if(this.#a=this.#s.getElementsByTagName("table").item(0),null===this.#a)throw new Error("There is no <table> in the component's HTML.");this.#d(),this.#r.forEach((e=>this.#h(e)))}#d(){this.#r=Array.from(this.#a.rows),this.#r.shift(),this.#r.pop()}#h(e){e.setAttribute("draggable",!0),e.addEventListener("dragstart",(e=>this.dragstart(e))),e.addEventListener("dragover",(e=>this.dragover(e))),e.addEventListener("dragend",(()=>{this.#d(),this.#p()}))}dragstart(e){this.#c=e.target}#m(){return this.#r.includes(this.#c)}dragover(e){if(!this.#m())return;const t=e;t.preventDefault();const s=t.target.closest("tr");this.#r.indexOf(s)>this.#r.indexOf(this.#c)?s.after(this.#c):s.before(this.#c)}#p(){let e=10;this.#a.querySelectorAll('input[type="number"]').forEach((t=>{t.value=e,e+=10}))}}n.default.UI=n.default.UI||{},n.default.UI.table=n.default.UI.table||{},n.default.UI.table.data=new class{#e;#u=[];constructor(e){this.#e=e}init(e,t,s){if(void 0!==this.#u[e])throw new Error(`DataTable with id '${e}' has already been initialized.`);this.#u[e]=new i(this.#e,t,s,e)}get(e){return this.#u[e]??null}}(o.default),n.default.UI.table.presentation=new class{#u=[];init(e){if(void 0!==this.#u[e])throw new Error(`PresentationTable with input-id '${e}' has already been initialized.`);this.#u[e]=new a(e)}get(e){return this.#u[e]??null}},n.default.UI.table.ordering=new class{#u=[];init(e){if(void 0!==this.#u[e])throw new Error(`OrderingTable with id '${e}' has already been initialized.`);this.#u[e]=new l(e)}get(e){return this.#u[e]??null}}}(il,$);
!(function (e, t) {
function s(e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; } const n = s(e); const o = s(t); class i {
#e;

#t;

#s;

#n;

#o;

#i;

#a;

#l;

constructor(e, t, s, n) { if (this.#s = document.getElementById(n), this.#s === null) throw new Error(`Could not find a DataTable for id '${n}'.`); if (this.#a = this.#s.getElementsByTagName('table').item(0), this.#a === null) throw new Error("There is no <table> in the component's HTML."); this.#n = this.#s.getElementsByClassName('c-table-data__async_modal_container').item(0), this.#o = this.#s.getElementsByClassName('c-table-data__async_message').item(0), this.#i = this.#o.getElementsByClassName('c-table-data__async_messageresponse').item(0), this.#e = e, this.#t = { actionId: t, rowId: s }, this.#l = {}, this.#s.addEventListener('keydown', ((e) => this.navigateCellsWithArrowKeys(e))); }

registerAction(e, t, s, n) { this.#l[e] = { async: t, urlBuilder: s, urlTokens: n }; }

selectAll(e) { const t = this.#a.getElementsByClassName('c-table-data__row-selector'); const s = this.#a.getElementsByClassName('c-table-data__selection_all').item(0); const n = this.#a.getElementsByClassName('c-table-data__selection_none').item(0); for (let s = 0; s < t.length; s += 1) { t[s].checked = e; }e ? (s.style.display = 'none', n.style.display = 'block') : (s.style.display = 'block', n.style.display = 'none'); }

collectSelectedRowIds() { const e = this.#a.getElementsByClassName('c-table-data__row-selector'); const t = []; return e.forEach(((e) => { e.checked && t.push(e.value); })), t; }

doMultiAction(e) { this.doAction(e, this.collectSelectedRowIds()); }

doSingleAction(e) { const t = e.options[this.#t.rowId]; this.doAction(e, [t]); }

doActionForAll(e) { const t = e.parentNode.parentNode; const s = t.getElementsByClassName('close').item(0); const n = t.getElementsByClassName('modal-body')[0].getElementsByTagName('select')[0].value; if (n in this.#l) { const e = this.#t.actionId; const t = { options: {} }; t.options[e] = n, s.click(), this.doAction(t, ['ALL_OBJECTS']); } }

doAction(e, t) { const s = e.options[this.#t.actionId]; const n = this.#l[s]; const o = n.urlTokens.values().next().value; n.urlBuilder.writeParameter(o, t); const i = decodeURI(n.urlBuilder.getUrl().toString()); n.async ? this.asyncAction(i) : window.location.href = i; }

asyncAction(e) { this.#e.ajax({ url: e, dataType: 'html' }).done(((e) => { let t = ''; if (this.#e(e).first().prop('tagName') === 'SCRIPT') this.#e.globalEval(this.#e(e).first().text()); else { this.#e(e).first().hasClass('c-modal') ? (this.#n.innerHTML = e, t = this.#e(e).first().get(0).id) : (this.#i.innerHTML = e, t = this.#o.id); this.#e(`<div>${e}</div>`).find("[data-replace-marker='script']").each(((e, t) => this.#e.globalEval(t.innerHTML))), il.UI.modal.showModal(t, {}, { id: t }); } })); }

navigateCellsWithArrowKeys(e) { if (e.which !== 37 && e.which !== 38 && e.which !== 39 && e.which !== 40) return; const t = e.target.closest('td, th'); const s = t.closest('tr'); let { cellIndex: n } = t; let { rowIndex: o } = s; switch (e.which) { case 37: n -= 1; break; case 39: n += 1; break; case 38: o -= 1; break; case 40: o += 1; }o < 0 || n < 0 || o >= this.#a.rows.length || n >= s.cells.length || this.focusCell(t, o, n); }

focusCell(e, t, s) { const n = this.#a.rows[t].cells[s]; n.focus(), e.setAttribute('tabindex', -1), n.setAttribute('tabindex', 0); }
} class a {
#s;

constructor(e) { if (this.#s = document.getElementById(e), this.#s === null) throw new Error(`Could not find a PresentationTable for id '${e}'.`); }

expandRow(e) { this.#s.querySelector(`#${e} .il-table-presentation-row-controls-expander`).style.display = 'none', this.#s.querySelector(`#${e} .il-table-presentation-row-controls-collapser`).style.display = 'block', this.#s.querySelector(`#${e} .il-table-presentation-row-expanded`).style.display = 'block', this.#s.querySelector(`#${e} .il-table-presentation-row-header-fields`).style.display = 'none', this.#s.classList.remove('collapsed'), this.#s.classList.add('expanded'); }

collapseRow(e) { this.#s.querySelector(`#${e} .il-table-presentation-row-controls-expander`).style.display = 'block', this.#s.querySelector(`#${e} .il-table-presentation-row-controls-collapser`).style.display = 'none', this.#s.querySelector(`#${e} .il-table-presentation-row-expanded`).style.display = 'none', this.#s.querySelector(`#${e} .il-table-presentation-row-header-fields`).style.display = 'block', this.#s.classList.remove('expanded'), this.#s.classList.add('collapsed'); }

toggleRow(e) { const t = [this.#s.querySelector(`#${e} .il-table-presentation-row-controls-expander`), this.#s.querySelector(`#${e} .il-table-presentation-row-controls-collapser`), this.#s.querySelector(`#${e} .il-table-presentation-row-expanded`), this.#s.querySelector(`#${e} .il-table-presentation-row-header-fields`)]; let s = 0; for (;s < t.length; s += 1) { const e = t[s]; const n = e.style.display === 'none' ? 'block' : 'none'; e.style.display = n; } this.#s.classList.contains('expanded') ? (this.#s.classList.remove('expanded'), this.#s.classList.add('collapsed')) : (this.#s.classList.remove('collapsed'), this.#s.classList.add('expanded')); }

expandAll(e) { const t = this.#s.querySelectorAll('.il-table-presentation-row'); e.options.expand ? t.forEach(((e) => this.expandRow(e.id))) : t.forEach(((e) => this.collapseRow(e.id))); }
} class l {
#s;

#a;

#r;

#c;

constructor(e) { if (this.#s = document.getElementById(e), this.#s === null) throw new Error(`Could not find a OrderingTable for id '${e}'.`); if (this.#a = this.#s.getElementsByTagName('table').item(0), this.#a === null) throw new Error("There is no <table> in the component's HTML."); this.#d(), this.#r.forEach(((e) => this.#h(e))); }

#d() { this.#r = Array.from(this.#a.rows), this.#r.shift(), this.#r.pop(); }

#h(e) { e.setAttribute('draggable', !0), e.addEventListener('dragstart', ((e) => this.dragstart(e))), e.addEventListener('dragover', ((e) => this.dragover(e))), e.addEventListener('dragend', (() => { this.#d(), this.#p(); })); }

dragstart(e) { this.#c = e.target; }

#m() { return this.#r.includes(this.#c); }

dragover(e) { if (!this.#m()) return; const t = e; t.preventDefault(); const s = t.target.closest('tr'); this.#r.indexOf(s) > this.#r.indexOf(this.#c) ? s.after(this.#c) : s.before(this.#c); }

#p() { let e = 10; this.#a.querySelectorAll('input[type="number"]').forEach(((t) => { t.value = e, e += 10; })); }
}n.default.UI = n.default.UI || {}, n.default.UI.table = n.default.UI.table || {}, n.default.UI.table.data = new class {
#e;

#u = [];

constructor(e) { this.#e = e; }

init(e, t, s) { if (void 0 !== this.#u[e]) throw new Error(`DataTable with id '${e}' has already been initialized.`); this.#u[e] = new i(this.#e, t, s, e); }

get(e) { return this.#u[e] ?? null; }
}(o.default), n.default.UI.table.presentation = new class {
#u = [];

init(e) { if (void 0 !== this.#u[e]) throw new Error(`PresentationTable with input-id '${e}' has already been initialized.`); this.#u[e] = new a(e); }

get(e) { return this.#u[e] ?? null; }
}(), n.default.UI.table.ordering = new class {
#u = [];

init(e) { if (void 0 !== this.#u[e]) throw new Error(`OrderingTable with id '${e}' has already been initialized.`); this.#u[e] = new l(e); }

get(e) { return this.#u[e] ?? null; }
}();
}(il, $));

0 comments on commit c5001cc

Please sign in to comment.