window.STUDIP.MVV = window.STUDIP.MVV || {}; STUDIP.MVV.CourseWizard = { /** * Fetches the children of a given lvgroup. * @param node the ID of the parent. * @param assignable is the given lvgroup assignable? * @param classtype * @returns {boolean} */ getTreeChildren(node, assignable, classtype) { const target = $('.' + (assignable ? 'lvgroup-tree-' : 'lvgroup-tree-assign-') + node); if (!target.hasClass('tree-loaded')) { const params = 'step=' + $('input[name="step"]').val() + '&method=getLVGroupTreeLevel' + '¶meter[]=' + $('#' + node).attr('id') + '¶meter[]=' + classtype; $.ajax($('#studyareas').data('ajax-url'), { data: params, beforeSend() { target.children('ul').append( $('
  • ').html( $('') .attr('src', STUDIP.ASSETS_URL + 'images/loading-indicator.svg') .css('width', '16') .css('height', '16') ) ); }, success(data) { const items = $.parseJSON(data); target.find('.tree-loading').remove(); if (items.length > 0) { const list = target.children('ul'); for (let i = 0; i < items.length; i++) { if (items[i].assignable || items[i].has_children) { list.append(STUDIP.MVV.CourseWizard.createTreeNode(items[i], assignable)); } } } target.addClass('tree-loaded'); const onode = $('') .attr('type', 'hidden') .attr('name', 'open_lvg_nodes[]') .attr('value', node); $('#lvgroup-tree-open-nodes').append(onode); }, error(xhr, status, error) { alert(error); } }); } if (!target.hasClass('tree-open')) { target.removeClass('tree-closed').addClass('tree-open'); } else { target.removeClass('tree-open').addClass('tree-closed'); } var checkbox = target.children('input[id="' + node + '"]'); checkbox.prop('checked', !checkbox.prop('checked')); return false; }, /** * Search the lvgruppen tree for a given term and show all matching groups. * @returns {boolean} */ searchTree() { const searchterm = $('#lvgroup-tree-search').val(); if (searchterm !== '') { $.ajax($('#studyareas').data('ajax-url'), { data: { step: $('input[name="step"]').val(), method: 'searchLVGroupTree', 'parameter[]': searchterm }, method: 'POST', beforeSend() { $('#lvgroup-tree-search-start') .parent() .append( $('') .attr('src', STUDIP.ASSETS_URL + 'images/loading-indicator.svg') .attr('id', 'lvgroup-tree-search-loading') .css('width', '16') .css('height', '16') ); }, success(data) { $('#lvgroup-tree-search-loading').remove(); const items = $.parseJSON(data); if (items.length > 0) { $('#lvgroup-tree-search-reset') .removeClass('hidden-js'); $('#lvgsearchresults ul').empty(); $('#lvgsearchresults').show(); for (var i = 0; i < items.length; i++) { const lvgroup_html = $(items[i].html_string); if ($('#lvgroup-tree-assigned-' + items[i].id).length) { lvgroup_html .find('input') .first() .css('visibility', 'hidden'); } $('#lvgsearchresults ul').append(lvgroup_html); } } else { alert($('#studyareas').data('no-search-result')); } }, error(xhr, status, error) { $('#lvgroup-tree-search-loading').remove(); alert(error); } }); } return false; }, /** * Reset a search and empty the search result. * @returns {boolean} */ resetSearch() { $('#lvgroup-tree-search-reset').addClass('hidden-js'); $('#lvgroup-tree-search').val(''); $('#lvgsearchresults ul').empty(); $('#lvgsearchresults').hide(); return false; }, /** * Creates a tree node element from given data. * @param values values for the node * @param assignable is the given lvgroup assignable? * @returns {*|jQuery} */ createTreeNode(values, assignable) { const item = $('
  • '); // Node in lvgroups tree. if (assignable) { const mvv_ids = values.id.split('-'); item.addClass('lvgroup-tree-' + values.id); const assign = $('') .attr('type', 'image') .attr('name', 'assign[' + values.id + ']') .attr('src', STUDIP.ASSETS_URL + 'images/icons/yellow/arr_2left.svg') .attr('width', '16') .height('height', '16') .attr('onclick', "return STUDIP.MVV.CourseWizard.assignNode('" + values.id + "')"); if (values.assignable) { item.append(assign); item.append(document.createTextNode(' ')); } if (values.has_children) { const input = $('') .attr('type', 'checkbox') .attr('id', values.id); const label = $('