Cleaned up global namespace JS
Moved most of the functions that contained "window.doSomething" that were located at: - app/assets/javascripts/application.js To the following file: - app/assets/javascripts/lib/utils/common_utils.js The functions listed here: - window.ajaxGet - window.split - window.extractLast - window.rstrip - window.disableButtonIfEmptyField - window.disableButtonIfAnyEmptyField - window.sanitize - window.unbindEvents - window.shiftWindow Now will be accessible from the "gl.utils" namespace
This commit is contained in:
parent
3a8a7c1251
commit
b1b51b774b
|
@ -17,6 +17,7 @@ entry.
|
||||||
- Fix mobile layout issues in admin user overview page !7087
|
- Fix mobile layout issues in admin user overview page !7087
|
||||||
- Fix HipChat notifications rendering (airatshigapov, eisnerd)
|
- Fix HipChat notifications rendering (airatshigapov, eisnerd)
|
||||||
- Remove 'Edit' button from wiki edit view !7143 (Hiroyuki Sato)
|
- Remove 'Edit' button from wiki edit view !7143 (Hiroyuki Sato)
|
||||||
|
- Cleaned up global namespace JS !19661 (Jose Ivan Vargas)
|
||||||
- Refactor Jira service to use jira-ruby gem
|
- Refactor Jira service to use jira-ruby gem
|
||||||
- Improved todos empty state
|
- Improved todos empty state
|
||||||
- Add hover to trash icon in notes !7008 (blackst0ne)
|
- Add hover to trash icon in notes !7008 (blackst0ne)
|
||||||
|
|
|
@ -56,109 +56,37 @@
|
||||||
/*= require fuzzaldrin-plus */
|
/*= require fuzzaldrin-plus */
|
||||||
|
|
||||||
(function () {
|
(function () {
|
||||||
window.slugify = function(text) {
|
document.addEventListener('page:fetch', gl.utils.cleanupBeforeFetch);
|
||||||
return text.replace(/[^-a-zA-Z0-9]+/g, '_').toLowerCase();
|
window.addEventListener('hashchange', gl.utils.shiftWindow);
|
||||||
};
|
|
||||||
|
|
||||||
window.ajaxGet = function(url) {
|
|
||||||
return $.ajax({
|
|
||||||
type: "GET",
|
|
||||||
url: url,
|
|
||||||
dataType: "script"
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
window.split = function(val) {
|
|
||||||
return val.split(/,\s*/);
|
|
||||||
};
|
|
||||||
|
|
||||||
window.extractLast = function(term) {
|
|
||||||
return split(term).pop();
|
|
||||||
};
|
|
||||||
|
|
||||||
window.rstrip = function(val) {
|
|
||||||
if (val) {
|
|
||||||
return val.replace(/\s+$/, '');
|
|
||||||
} else {
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Disable button if text field is empty
|
|
||||||
window.disableButtonIfEmptyField = function(field_selector, button_selector, event_name) {
|
|
||||||
event_name = event_name || 'input';
|
|
||||||
var closest_submit, field;
|
|
||||||
field = $(field_selector);
|
|
||||||
closest_submit = field.closest('form').find(button_selector);
|
|
||||||
if (rstrip(field.val()) === "") {
|
|
||||||
closest_submit.disable();
|
|
||||||
}
|
|
||||||
return field.on(event_name, function() {
|
|
||||||
if (rstrip($(this).val()) === "") {
|
|
||||||
return closest_submit.disable();
|
|
||||||
} else {
|
|
||||||
return closest_submit.enable();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
// Disable button if any input field with given selector is empty
|
|
||||||
window.disableButtonIfAnyEmptyField = function(form, form_selector, button_selector) {
|
|
||||||
var closest_submit, updateButtons;
|
|
||||||
closest_submit = form.find(button_selector);
|
|
||||||
updateButtons = function() {
|
|
||||||
var filled;
|
|
||||||
filled = true;
|
|
||||||
form.find('input').filter(form_selector).each(function() {
|
|
||||||
return filled = rstrip($(this).val()) !== "" || !$(this).attr('required');
|
|
||||||
});
|
|
||||||
if (filled) {
|
|
||||||
return closest_submit.enable();
|
|
||||||
} else {
|
|
||||||
return closest_submit.disable();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
updateButtons();
|
|
||||||
return form.keyup(updateButtons);
|
|
||||||
};
|
|
||||||
|
|
||||||
window.sanitize = function(str) {
|
|
||||||
return str.replace(/<(?:.|\n)*?>/gm, '');
|
|
||||||
};
|
|
||||||
|
|
||||||
window.shiftWindow = function() {
|
|
||||||
return scrollBy(0, -100);
|
|
||||||
};
|
|
||||||
|
|
||||||
document.addEventListener("page:fetch", gl.utils.cleanupBeforeFetch);
|
|
||||||
|
|
||||||
window.addEventListener("hashchange", shiftWindow);
|
|
||||||
|
|
||||||
window.onload = function () {
|
window.onload = function () {
|
||||||
// Scroll the window to avoid the topnav bar
|
// Scroll the window to avoid the topnav bar
|
||||||
// https://github.com/twitter/bootstrap/issues/1768
|
// https://github.com/twitter/bootstrap/issues/1768
|
||||||
if (location.hash) {
|
if (location.hash) {
|
||||||
return setTimeout(shiftWindow, 100);
|
return setTimeout(gl.utils.shiftWindow, 100);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$(function () {
|
$(function () {
|
||||||
var $body, $document, $sidebarGutterToggle, $window, bootstrapBreakpoint, checkInitialSidebarSize, fitSidebarForSize, flash;
|
var $body = $('body');
|
||||||
$document = $(document);
|
var $document = $(document);
|
||||||
$window = $(window);
|
var $window = $(window);
|
||||||
$body = $('body');
|
var $sidebarGutterToggle = $('.js-sidebar-toggle');
|
||||||
|
var $flash = $('.flash-container');
|
||||||
|
var bootstrapBreakpoint = bp.getBreakpointSize();
|
||||||
|
var checkInitialSidebarSize;
|
||||||
|
var fitSidebarForSize;
|
||||||
|
|
||||||
// Set the default path for all cookies to GitLab's root directory
|
// Set the default path for all cookies to GitLab's root directory
|
||||||
Cookies.defaults.path = gon.relative_url_root || '/';
|
Cookies.defaults.path = gon.relative_url_root || '/';
|
||||||
|
|
||||||
gl.utils.preventDisabledButtons();
|
gl.utils.preventDisabledButtons();
|
||||||
bootstrapBreakpoint = bp.getBreakpointSize();
|
$('.nav-sidebar').niceScroll({
|
||||||
$(".nav-sidebar").niceScroll({
|
|
||||||
cursoropacitymax: '0.4',
|
cursoropacitymax: '0.4',
|
||||||
cursorcolor: '#FFF',
|
cursorcolor: '#FFF',
|
||||||
cursorborder: "1px solid #FFF"
|
cursorborder: '1px solid #FFF'
|
||||||
});
|
});
|
||||||
$(".js-select-on-focus").on("focusin", function() {
|
$('.js-select-on-focus').on('focusin', function () {
|
||||||
return $(this).select().one('mouseup', function (e) {
|
return $(this).select().one('mouseup', function (e) {
|
||||||
return e.preventDefault();
|
return e.preventDefault();
|
||||||
});
|
});
|
||||||
|
@ -202,11 +130,11 @@
|
||||||
});
|
});
|
||||||
gl.utils.localTimeAgo($('abbr.timeago, .js-timeago'), true);
|
gl.utils.localTimeAgo($('abbr.timeago, .js-timeago'), true);
|
||||||
// Flash
|
// Flash
|
||||||
if ((flash = $(".flash-container")).length > 0) {
|
if ($flash.length > 0) {
|
||||||
flash.click(function() {
|
$flash.click(function () {
|
||||||
return $(this).fadeOut();
|
return $(this).fadeOut();
|
||||||
});
|
});
|
||||||
flash.show();
|
$flash.show();
|
||||||
}
|
}
|
||||||
// Disable form buttons while a form is submitting
|
// Disable form buttons while a form is submitting
|
||||||
$body.on('ajax:complete, ajax:beforeSend, submit', 'form', function (e) {
|
$body.on('ajax:complete, ajax:beforeSend, submit', 'form', function (e) {
|
||||||
|
@ -220,11 +148,11 @@
|
||||||
return buttons.enable();
|
return buttons.enable();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
$(document).ajaxError(function(e, xhrObj, xhrSetting, xhrErrorText) {
|
$(document).ajaxError(function (e, xhrObj) {
|
||||||
var ref;
|
var ref = xhrObj.status;
|
||||||
if (xhrObj.status === 401) {
|
if (xhrObj.status === 401) {
|
||||||
return new Flash('You need to be logged in.', 'alert');
|
return new Flash('You need to be logged in.', 'alert');
|
||||||
} else if ((ref = xhrObj.status) === 404 || ref === 500) {
|
} else if (ref === 404 || ref === 500) {
|
||||||
return new Flash('Something went wrong on our end.', 'alert');
|
return new Flash('Something went wrong on our end.', 'alert');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -246,10 +174,10 @@
|
||||||
return $('.navbar-toggle').toggleClass('active');
|
return $('.navbar-toggle').toggleClass('active');
|
||||||
});
|
});
|
||||||
// Show/hide comments on diff
|
// Show/hide comments on diff
|
||||||
$body.on("click", ".js-toggle-diff-comments", function(e) {
|
$body.on('click', '.js-toggle-diff-comments', function (e) {
|
||||||
var $this = $(this);
|
var $this = $(this);
|
||||||
$this.toggleClass('active');
|
|
||||||
var notesHolders = $this.closest('.diff-file').find('.notes_holder');
|
var notesHolders = $this.closest('.diff-file').find('.notes_holder');
|
||||||
|
$this.toggleClass('active');
|
||||||
if ($this.hasClass('active')) {
|
if ($this.hasClass('active')) {
|
||||||
notesHolders.show().find('.hide').show();
|
notesHolders.show().find('.hide').show();
|
||||||
} else {
|
} else {
|
||||||
|
@ -258,29 +186,26 @@
|
||||||
$this.trigger('blur');
|
$this.trigger('blur');
|
||||||
return e.preventDefault();
|
return e.preventDefault();
|
||||||
});
|
});
|
||||||
$document.off("click", '.js-confirm-danger');
|
$document.off('click', '.js-confirm-danger');
|
||||||
$document.on("click", '.js-confirm-danger', function(e) {
|
$document.on('click', '.js-confirm-danger', function (e) {
|
||||||
var btn, form, text;
|
var btn = $(e.target);
|
||||||
|
var form = btn.closest('form');
|
||||||
|
var text = btn.data('confirm-danger-message');
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
btn = $(e.target);
|
|
||||||
text = btn.data("confirm-danger-message");
|
|
||||||
form = btn.closest("form");
|
|
||||||
return new ConfirmDangerModal(form, text);
|
return new ConfirmDangerModal(form, text);
|
||||||
});
|
});
|
||||||
$document.on('click', 'button', function () {
|
$document.on('click', 'button', function () {
|
||||||
return $(this).blur();
|
return $(this).blur();
|
||||||
});
|
});
|
||||||
$('input[type="search"]').each(function () {
|
$('input[type="search"]').each(function () {
|
||||||
var $this;
|
var $this = $(this);
|
||||||
$this = $(this);
|
|
||||||
$this.attr('value', $this.val());
|
$this.attr('value', $this.val());
|
||||||
});
|
});
|
||||||
$document.off('keyup', 'input[type="search"]').on('keyup', 'input[type="search"]', function(e) {
|
$document.off('keyup', 'input[type="search"]').on('keyup', 'input[type="search"]', function () {
|
||||||
var $this;
|
var $this;
|
||||||
$this = $(this);
|
$this = $(this);
|
||||||
return $this.attr('value', $this.val());
|
return $this.attr('value', $this.val());
|
||||||
});
|
});
|
||||||
$sidebarGutterToggle = $('.js-sidebar-toggle');
|
|
||||||
$document.off('breakpoint:change').on('breakpoint:change', function (e, breakpoint) {
|
$document.off('breakpoint:change').on('breakpoint:change', function (e, breakpoint) {
|
||||||
var $gutterIcon;
|
var $gutterIcon;
|
||||||
if (breakpoint === 'sm' || breakpoint === 'xs') {
|
if (breakpoint === 'sm' || breakpoint === 'xs') {
|
||||||
|
@ -300,11 +225,11 @@
|
||||||
};
|
};
|
||||||
checkInitialSidebarSize = function () {
|
checkInitialSidebarSize = function () {
|
||||||
bootstrapBreakpoint = bp.getBreakpointSize();
|
bootstrapBreakpoint = bp.getBreakpointSize();
|
||||||
if (bootstrapBreakpoint === "xs" || "sm") {
|
if (bootstrapBreakpoint === 'xs' || 'sm') {
|
||||||
return $document.trigger('breakpoint:change', [bootstrapBreakpoint]);
|
return $document.trigger('breakpoint:change', [bootstrapBreakpoint]);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
$window.off("resize.app").on("resize.app", function(e) {
|
$window.off('resize.app').on('resize.app', function () {
|
||||||
return fitSidebarForSize();
|
return fitSidebarForSize();
|
||||||
});
|
});
|
||||||
gl.awardsHandler = new AwardsHandler();
|
gl.awardsHandler = new AwardsHandler();
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
(function() {
|
(function() {
|
||||||
this.AwardsHandler = (function() {
|
this.AwardsHandler = (function() {
|
||||||
const FROM_SENTENCE_REGEX = /(?:, and | and |, )/; //For separating lists produced by ruby's Array#toSentence
|
var FROM_SENTENCE_REGEX = /(?:, and | and |, )/; //For separating lists produced by ruby's Array#toSentence
|
||||||
function AwardsHandler() {
|
function AwardsHandler() {
|
||||||
this.aliases = gl.emojiAliases();
|
this.aliases = gl.emojiAliases();
|
||||||
$(document).off('click', '.js-add-award').on('click', '.js-add-award', (function(_this) {
|
$(document).off('click', '.js-add-award').on('click', '.js-add-award', (function(_this) {
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
submit.disable();
|
submit.disable();
|
||||||
$('.js-confirm-danger-input').off('input');
|
$('.js-confirm-danger-input').off('input');
|
||||||
$('.js-confirm-danger-input').on('input', function() {
|
$('.js-confirm-danger-input').on('input', function() {
|
||||||
if (rstrip($(this).val()) === project_path) {
|
if (gl.utils.rstrip($(this).val()) === project_path) {
|
||||||
return submit.enable();
|
return submit.enable();
|
||||||
} else {
|
} else {
|
||||||
return submit.disable();
|
return submit.disable();
|
||||||
|
|
|
@ -126,8 +126,8 @@
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
username: m.username,
|
username: m.username,
|
||||||
title: sanitize(title),
|
title: gl.utils.sanitize(title),
|
||||||
search: sanitize(m.username + " " + m.name)
|
search: gl.utils.sanitize(m.username + " " + m.name)
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -159,7 +159,7 @@
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
id: i.iid,
|
id: i.iid,
|
||||||
title: sanitize(i.title),
|
title: gl.utils.sanitize(i.title),
|
||||||
search: i.iid + " " + i.title
|
search: i.iid + " " + i.title
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
@ -189,7 +189,7 @@
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
id: m.iid,
|
id: m.iid,
|
||||||
title: sanitize(m.title),
|
title: gl.utils.sanitize(m.title),
|
||||||
search: "" + m.title
|
search: "" + m.title
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
@ -222,7 +222,7 @@
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
id: m.iid,
|
id: m.iid,
|
||||||
title: sanitize(m.title),
|
title: gl.utils.sanitize(m.title),
|
||||||
search: m.iid + " " + m.title
|
search: m.iid + " " + m.title
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
@ -240,9 +240,9 @@
|
||||||
var sanitizeLabelTitle;
|
var sanitizeLabelTitle;
|
||||||
sanitizeLabelTitle = function(title) {
|
sanitizeLabelTitle = function(title) {
|
||||||
if (/[\w\?&]+\s+[\w\?&]+/g.test(title)) {
|
if (/[\w\?&]+\s+[\w\?&]+/g.test(title)) {
|
||||||
return "\"" + (sanitize(title)) + "\"";
|
return "\"" + (gl.utils.sanitize(title)) + "\"";
|
||||||
} else {
|
} else {
|
||||||
return sanitize(title);
|
return gl.utils.sanitize(title);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
return $.map(merges, function(m) {
|
return $.map(merges, function(m) {
|
||||||
|
|
|
@ -24,8 +24,8 @@
|
||||||
if (isNewForm) {
|
if (isNewForm) {
|
||||||
this.form.find('.div-dropzone').remove();
|
this.form.find('.div-dropzone').remove();
|
||||||
this.form.addClass('gfm-form');
|
this.form.addClass('gfm-form');
|
||||||
disableButtonIfEmptyField(this.form.find('.js-note-text'), this.form.find('.js-comment-button'));
|
|
||||||
// remove notify commit author checkbox for non-commit notes
|
// remove notify commit author checkbox for non-commit notes
|
||||||
|
gl.utils.disableButtonIfEmptyField(this.form.find('.js-note-text'), this.form.find('.js-comment-button'));
|
||||||
GitLab.GfmAutoComplete.setup(this.form.find('.js-gfm-input'));
|
GitLab.GfmAutoComplete.setup(this.form.find('.js-gfm-input'));
|
||||||
new DropzoneInput(this.form);
|
new DropzoneInput(this.form);
|
||||||
autosize(this.textarea);
|
autosize(this.textarea);
|
||||||
|
|
|
@ -24,6 +24,81 @@
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
w.gl.utils.ajaxGet = function(url) {
|
||||||
|
return $.ajax({
|
||||||
|
type: "GET",
|
||||||
|
url: url,
|
||||||
|
dataType: "script"
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
w.gl.utils.split = function(val) {
|
||||||
|
return val.split(/,\s*/);
|
||||||
|
};
|
||||||
|
|
||||||
|
w.gl.utils.extractLast = function(term) {
|
||||||
|
return this.split(term).pop();
|
||||||
|
};
|
||||||
|
|
||||||
|
w.gl.utils.rstrip = function rstrip(val) {
|
||||||
|
if (val) {
|
||||||
|
return val.replace(/\s+$/, '');
|
||||||
|
} else {
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
w.gl.utils.disableButtonIfEmptyField = function(field_selector, button_selector, event_name) {
|
||||||
|
event_name = event_name || 'input';
|
||||||
|
var closest_submit, field, that;
|
||||||
|
that = this;
|
||||||
|
field = $(field_selector);
|
||||||
|
closest_submit = field.closest('form').find(button_selector);
|
||||||
|
if (this.rstrip(field.val()) === "") {
|
||||||
|
closest_submit.disable();
|
||||||
|
}
|
||||||
|
return field.on(event_name, function() {
|
||||||
|
if (that.rstrip($(this).val()) === "") {
|
||||||
|
return closest_submit.disable();
|
||||||
|
} else {
|
||||||
|
return closest_submit.enable();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
w.gl.utils.disableButtonIfAnyEmptyField = function(form, form_selector, button_selector) {
|
||||||
|
var closest_submit, updateButtons;
|
||||||
|
closest_submit = form.find(button_selector);
|
||||||
|
updateButtons = function() {
|
||||||
|
var filled;
|
||||||
|
filled = true;
|
||||||
|
form.find('input').filter(form_selector).each(function() {
|
||||||
|
return filled = this.rstrip($(this).val()) !== "" || !$(this).attr('required');
|
||||||
|
});
|
||||||
|
if (filled) {
|
||||||
|
return closest_submit.enable();
|
||||||
|
} else {
|
||||||
|
return closest_submit.disable();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
updateButtons();
|
||||||
|
return form.keyup(updateButtons);
|
||||||
|
};
|
||||||
|
|
||||||
|
w.gl.utils.sanitize = function(str) {
|
||||||
|
return str.replace(/<(?:.|\n)*?>/gm, '');
|
||||||
|
};
|
||||||
|
|
||||||
|
w.gl.utils.unbindEvents = function() {
|
||||||
|
return $(document).off('scroll');
|
||||||
|
};
|
||||||
|
|
||||||
|
w.gl.utils.shiftWindow = function() {
|
||||||
|
return w.scrollBy(0, -100);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
gl.utils.updateTooltipTitle = function($tooltipEl, newTitle) {
|
gl.utils.updateTooltipTitle = function($tooltipEl, newTitle) {
|
||||||
return $tooltipEl.tooltip('destroy').attr('title', newTitle).tooltip('fixTitle');
|
return $tooltipEl.tooltip('destroy').attr('title', newTitle).tooltip('fixTitle');
|
||||||
};
|
};
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
$('.project_member, .group_member').off('ajax:success').on('ajax:success', this.removeRow);
|
$('.project_member, .group_member').off('ajax:success').on('ajax:success', this.removeRow);
|
||||||
$('.js-member-update-control').off('change').on('change', this.formSubmit);
|
$('.js-member-update-control').off('change').on('change', this.formSubmit);
|
||||||
$('.js-edit-member-form').off('ajax:success').on('ajax:success', this.formSuccess);
|
$('.js-edit-member-form').off('ajax:success').on('ajax:success', this.formSuccess);
|
||||||
disableButtonIfEmptyField('#user_ids', 'input[name=commit]', 'change');
|
gl.utils.disableButtonIfEmptyField('#user_ids', 'input[name=commit]', 'change');
|
||||||
}
|
}
|
||||||
|
|
||||||
removeRow(e) {
|
removeRow(e) {
|
||||||
|
|
|
@ -26,6 +26,6 @@
|
||||||
|
|
||||||
|
|
||||||
:javascript
|
:javascript
|
||||||
disableButtonIfEmptyField($('.js-upload-blob-form').find('.js-commit-message'), '.btn-upload-file');
|
gl.utils.disableButtonIfEmptyField($('.js-upload-blob-form').find('.js-commit-message'), '.btn-upload-file');
|
||||||
new BlobFileDropzone($('.js-upload-blob-form'), '#{method}');
|
new BlobFileDropzone($('.js-upload-blob-form'), '#{method}');
|
||||||
new NewCommitForm($('.js-upload-blob-form'))
|
new NewCommitForm($('.js-upload-blob-form'))
|
||||||
|
|
|
@ -37,5 +37,5 @@
|
||||||
:javascript
|
:javascript
|
||||||
// Load last commit log for each file in tree
|
// Load last commit log for each file in tree
|
||||||
$('#tree-slider').waitForImages(function() {
|
$('#tree-slider').waitForImages(function() {
|
||||||
ajaxGet("#{escape_javascript(@logs_path)}");
|
gl.utils.ajaxGet("#{escape_javascript(@logs_path)}");
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue