Current File : /home/escuelai/public_html/wp-content/plugins/learnpress/assets/js/dist/admin/course-material.js |
/******/ (() => { // webpackBootstrap
/*!************************************************!*\
!*** ./assets/src/js/admin/course-material.js ***!
\************************************************/
document.addEventListener('DOMContentLoaded', function () {
const $ = window.jQuery;
const postID = document.getElementById('current-material-post-id').value,
max_file_size = document.getElementById('material-max-file-size').value,
accept_file = document.querySelector('.lp-material--field-upload').getAttribute('accept').split(','),
can_upload = document.getElementById('available-to-upload'),
add_btn = document.getElementById('btn-lp--add-material'),
group_template = document.getElementById('lp-material--add-material-template'),
material__group_container = document.getElementById('lp-material--group-container'),
material_tab = document.getElementById('lp-material-container'),
material_save_btn = document.getElementById('btn-lp--save-material');
const getResponse = async (ele, postID) => {
const elementMaterial = document.querySelector('.lp-material--table tbody');
try {
const url = `${lpDataAdmin.lp_rest_url}lp/v1/material/item-materials/${postID}`;
fetch(url, {
method: 'GET',
headers: {
'X-WP-Nonce': lpGlobalSettings.nonce,
'Content-Type': 'application/json'
}
}).then(response => response.json()).then(response => {
const {
data,
status
} = response;
if (status !== 'success') {
console.error(response.message);
return;
}
if (data && data.items && data.items.length > 0) {
const materials = data.items;
if (ele.querySelector('.lp-skeleton-animation')) {
ele.querySelector('.lp-skeleton-animation').remove();
}
for (let i = 0; i < materials.length; i++) {
insertRow(elementMaterial, materials[i]);
}
}
}).catch(err => console.log(err));
} catch (error) {
console.log(error.message);
}
};
const insertRow = (parent, data) => {
if (!parent) {
return;
}
const delete_btn_text = document.getElementById('delete-material-row-text').value;
parent.insertAdjacentHTML('beforeend', `<tr data-id="${data.file_id}" data-sort="${data.orders}" >
<td class="sort"><span class="dashicons dashicons-menu"></span> ${data.file_name}</td>
<td>${capitalizeFirstChar(data.method)}</td>
<td><a href="javascript:void(0)" class="delete-material-row" data-id="${data.file_id}">${delete_btn_text}</a></td>
</tr>`);
};
const capitalizeFirstChar = str => str.charAt(0).toUpperCase() + str.substring(1);
//load material data from API
getResponse(material_tab, postID);
//add material group field
add_btn.addEventListener('click', function (e) {
const can_upload_data = ~~this.getAttribute('can-upload');
const groups = material__group_container.querySelectorAll('.lp-material--group').length;
if (groups >= can_upload_data) {
return false;
}
material__group_container.insertAdjacentHTML('afterbegin', group_template.innerHTML);
});
//switch input when change method between "upload" and "external"
material_tab.addEventListener('change', function (event) {
const target = event.target;
if (target.classList.contains('lp-material--field-method')) {
const method = target.value;
const upload_field_template = document.getElementById('lp-material--upload-field-template').innerHTML,
external_field_template = document.getElementById('lp-material--external-field-template').innerHTML;
switch (method) {
case 'upload':
target.parentNode.insertAdjacentHTML('afterend', upload_field_template);
target.closest('.lp-material--group').querySelector('.lp-material--external-wrap').remove();
break;
case 'external':
target.parentNode.insertAdjacentHTML('afterend', external_field_template);
target.closest('.lp-material--group').querySelector('.lp-material--upload-wrap').remove();
break;
}
}
if (target.classList.contains('lp-material--field-upload')) {
if (target.value && target.files.length > 0) {
if (!accept_file.includes(target.files[0].type)) {
alert('This file is not allowed! Please choose another file!');
target.value = '';
} else if (target.files[0].size > max_file_size * 1024 * 1024) {
alert(`This file size is greater than ${max_file_size}MB! Please choose another file!`);
target.value = '';
}
}
}
});
// Dynamic click action ...
material_tab.addEventListener('click', function (event) {
const target = event.target;
if (target.classList.contains('lp-material--delete') && target.nodeName == 'BUTTON') {
target.closest('.lp-material--group').remove();
} else if (target.classList.contains('lp-material-save-field')) {
// save a file
let material = target.closest('.lp-material--group');
material = singleNode(material);
// target.classList.add( 'loading' );
lpSaveMaterial(material, true, target);
// target.classList.remove( 'loading' );
}
return false;
});
//save all material files
material_save_btn.addEventListener('click', function (event) {
const materials = material__group_container.querySelectorAll('.lp-material--group');
if (materials.length > 0) {
// material_save_btn.classList.add( 'loading' );
lpSaveMaterial(materials, false, material_save_btn);
// material_save_btn.classList.remove( 'loading' );
}
});
function lpSaveMaterial(materials, is_single = false, target) {
if (materials.length > 0) {
let material_data = [];
let formData = new FormData(),
send_request = true;
materials.forEach(function (ele, index) {
const label = ele.querySelector('.lp-material--field-title').value,
method = ele.querySelector('.lp-material--field-method').value,
external_field = ele.querySelector('.lp-material--field-external-link'),
upload_field = ele.querySelector('.lp-material--field-upload');
let file, link;
if (!label) {
send_request = false;
}
switch (method) {
case 'upload':
if (upload_field.value) {
file = upload_field.files[0].name;
link = '';
formData.append('file[]', upload_field.files[0]);
} else {
send_request = false;
}
break;
case 'external':
link = external_field.value;
file = '';
if (!link) {
send_request = false;
}
break;
}
material_data.push({
label,
method,
file,
link
});
});
if (!send_request) {
alert('Enter file title, choose file or enter file link!');
} else {
// console.log(material_data);
material_data = JSON.stringify(material_data);
const url = `${lpGlobalSettings.rest}lp/v1/material/item-materials/${postID}`;
formData.append('data', material_data);
target.classList.add('loading');
fetch(url, {
method: 'POST',
headers: {
'X-WP-Nonce': lpGlobalSettings.nonce
},
body: formData
}) // wrapped
.then(res => res.text()).then(resString => {
// console.log( data );
if (!is_single) {
material__group_container.innerHTML = '';
} else {
materials[0].remove();
}
const res = JSON.parse(resString);
const {
message,
data,
status
} = res;
alert(message);
if (status === 'success') {
if (data.length > 0) {
const material_table = document.querySelector('.lp-material--table');
const thead = material_table.querySelector('thead');
const tbody = material_table.querySelector('tbody');
thead.classList.remove('hidden');
for (let i = 0; i < data.length; i++) {
const row = data[i];
insertRow(tbody, row);
}
can_upload.innerText = parseInt(can_upload.innerText) - data.length;
add_btn.setAttribute('can-upload', can_upload.innerText);
}
}
}).finally(() => {
target.classList.remove('loading');
}).catch(err => console.log(err));
}
}
}
//delete material
document.addEventListener('click', function (e) {
const target = e.target;
if (target.classList.contains('delete-material-row') && target.nodeName == 'A') {
const rowID = target.getAttribute('data-id'),
//material file ID
message = document.getElementById('delete-material-message').value; //Delete message content
if (confirm(message)) {
wp.apiFetch({
path: `lp/v1/material/${rowID}`,
method: 'DELETE',
data: {
item_id: postID
}
}).then(res => {
// console.log( res );
if (res.status !== 200 || !res.delete) {
alert(res.message);
} else {
target.closest('tr').remove();
can_upload.innerText = ~~can_upload.innerText + 1;
add_btn.setAttribute('can-upload', ~~can_upload.innerText);
}
}).catch(err => {
console.log(err);
}).finally(() => {});
}
}
});
const singleNode = (nodeList => node => {
const layer = {
// define our specific case
0: {
value: node,
enumerable: true
},
length: {
value: 1
},
item: {
value(i) {
return this[+i || 0];
},
enumerable: true
}
};
return Object.create(nodeList, layer); // put our case on top of true NodeList
})(document.createDocumentFragment().childNodes); // scope a true NodeList
$('.lp-material--table tbody').sortable({
items: 'tr',
cursor: 'move',
axis: 'y',
handle: 'td.sort',
scrollSensitivity: 40,
forcePlaceholderSize: true,
helper: 'clone',
opacity: 0.65,
update(event, ui) {
$(this).sortable('option', 'disabled', true);
updateSort();
$(this).sortable('option', 'disabled', false);
}
});
function updateSort() {
const items = $('.lp-material--table tbody tr'),
data = [];
// $( ".lp-material--table tbody tr" ).sortable( "option", "disabled", true );
items.each(function (i, item) {
$(this).attr('data-sort', i + 1);
data.push({
file_id: ~~$(this).attr('data-id'),
orders: i + 1
});
});
wp.apiFetch({
path: `lp/v1/material/item-materials/${postID}`,
method: 'PUT',
data: {
sort_arr: JSON.stringify(data)
}
}).then(res => {
if (res.status == 200) {
//
} else {
alert('Sort table fail.');
}
}).catch(err => {
console.log(err);
}).finally(() => {});
// $( ".lp-material--table tbody tr" ).sortable( "option", "disabled", false );
// console.log( data );
}
});
/******/ })()
;
//# sourceMappingURL=course-material.js.map