Files
webapp/assets/js/simulator.js
T

112 lines
4.8 KiB
JavaScript

/*******************************************************************
Module : /assets/js/simulator.js
Desc. : JS Class Simulator Data dalam Code
Created By : Siau Pheng ([email protected]).
Created Date : March 18th, 2021.
Last Modified : November 2nd, 2026.
(c) 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************
*
* Class Simulator
*
* Simulator Data untuk sinkron data dengan JSON
*
* @license MIT, https://www.3fonia.com
* @copyright Copyright (c) 2008-2026, Siau Pheng <[email protected]>
*
* @param {object} options
* @param {string} options.url - Endpoint URL Print Page
* @param {Array} [options.params] - Request payload
*/
class Simulator {
constructor(options = {}) {
this.url = typeof options === 'string' ? options : options.url || '';
this.params = options.params || [];
}
addParam(id, val) {
this.params.push(val !== undefined ? `${id}=${encodeURIComponent(val)}` : id);
return this;
}
doPreview() {
if (!this.url) {
console.warn('Url Simulator dibutuhkan!');
return;
}
$.ajax({
type: 'POST',
url: this.url,
data: FoniaJS.RequestParam(this.params),
dataType: 'json',
error: typeof onFailure === 'function' ? onFailure : null,
success: (data) => {
if (!data || data.length === 0) {
FoniaJS.showInfo('Tidak ada data !');
return false;
}
const divContent = data
.map(item => `<div class="sim-code px-2 py-2 mb-1 border border-info">${item}</div>`)
.join('');
const modalHtml = `
<div class="modal fade" id="winAPPSim" tabindex="-1" role="dialog" data-bs-keyboard="false" data-bs-show="false" data-bs-backdrop="static" aria-labelledby="winAPPSimLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-dialog-scrollable modal-fs" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="winAPPSimLabel">Code Simulator</h5>
<div class="ms-auto">
<button class="btn me-2" id="tombSalin" type="button" aria-label="Salin Semua">
<i class="bi-copy me-2"></i><span aria-hidden="true">Salin Semua</span>
</button>
<button class="btn" type="button" data-bs-dismiss="modal" aria-label="Tutup">
<i class="bi-x-lg me-2"></i><span aria-hidden="true">Tutup</span>
</button>
</div>
</div>
<div class="modal-body">${divContent}</div>
</div>
</div>
</div>`;
$('#winAPPSim').modal('dispose').remove();
$(modalHtml)
.on('shown.bs.modal', function () {
const $modal = $(this);
// Copy all code blocks
$modal.find('#tombSalin').on('click', () => {
window.getSelection().removeAllRanges();
$('.sim-code').each((_, ele) => {
const range = document.createRange();
range.selectNode(ele);
window.getSelection().addRange(range);
});
document.execCommand('copy');
window.getSelection().removeAllRanges();
FoniaJS.showInfo('Sukses salin semua Kode !');
});
// Copy individual code block and hide it
$modal.find('.sim-code').on('click', function () {
const range = document.createRange();
range.selectNode(this);
window.getSelection().removeAllRanges();
window.getSelection().addRange(range);
document.execCommand('copy');
window.getSelection().removeAllRanges();
$(this).addClass('d-none');
});
})
.on('hidden.bs.modal', function () {
$(this).remove();
})
.modal('show');
}
});
}
}