112 lines
4.8 KiB
JavaScript
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');
|
|
}
|
|
});
|
|
}
|
|
}
|