62 lines
1.9 KiB
JavaScript
62 lines
1.9 KiB
JavaScript
import 'vendor/peek';
|
|
import 'vendor/peek.performance_bar';
|
|
|
|
export default class PerformanceBar {
|
|
constructor(opts) {
|
|
if (!PerformanceBar.singleton) {
|
|
this.init(opts);
|
|
PerformanceBar.singleton = this;
|
|
}
|
|
return PerformanceBar.singleton;
|
|
}
|
|
|
|
init(opts) {
|
|
const $container = $(opts.container);
|
|
this.$sqlProfileLink = $container.find('.js-toggle-modal-peek-sql');
|
|
this.$sqlProfileModal = $container.find('#modal-peek-pg-queries');
|
|
this.$lineProfileLink = $container.find('.js-toggle-modal-peek-line-profile');
|
|
this.$lineProfileModal = $('#modal-peek-line-profile');
|
|
this.initEventListeners();
|
|
this.showModalOnLoad();
|
|
}
|
|
|
|
initEventListeners() {
|
|
this.$sqlProfileLink.on('click', () => this.handleSQLProfileLink());
|
|
this.$lineProfileLink.on('click', e => this.handleLineProfileLink(e));
|
|
$(document).on('click', '.js-lineprof-file', PerformanceBar.toggleLineProfileFile);
|
|
}
|
|
|
|
showModalOnLoad() {
|
|
// When a lineprofiler query-string param is present, we show the line
|
|
// profiler modal upon page load
|
|
if (/lineprofiler/.test(window.location.search)) {
|
|
PerformanceBar.toggleModal(this.$lineProfileModal);
|
|
}
|
|
}
|
|
|
|
handleSQLProfileLink() {
|
|
PerformanceBar.toggleModal(this.$sqlProfileModal);
|
|
}
|
|
|
|
handleLineProfileLink(e) {
|
|
const lineProfilerParameter = gl.utils.getParameterValues('lineprofiler');
|
|
const lineProfilerParameterRegex = new RegExp(`lineprofiler=${lineProfilerParameter[0]}`);
|
|
const shouldToggleModal = lineProfilerParameter.length > 0 &&
|
|
lineProfilerParameterRegex.test(e.currentTarget.href);
|
|
|
|
if (shouldToggleModal) {
|
|
e.preventDefault();
|
|
PerformanceBar.toggleModal(this.$lineProfileModal);
|
|
}
|
|
}
|
|
|
|
static toggleModal($modal) {
|
|
if ($modal.length) {
|
|
$modal.modal('toggle');
|
|
}
|
|
}
|
|
|
|
static toggleLineProfileFile(e) {
|
|
$(e.currentTarget).parents('.peek-rblineprof-file').find('.data').toggle();
|
|
}
|
|
}
|