node-mock-server
Version:
File based Node REST API mock server
369 lines (305 loc) • 8.79 kB
JavaScript
/* global window, document, hljs, JSONFormatter, jQuery */
/* eslint no-alert: 0*/
((($) => {
$(document).ready(function () {
function init() {
var $modal = $(window.location.hash);
if ($modal.length < 1) {
return;
}
$modal.eq(0).modal('show');
}
init();
$('.modal')
.on('shown.bs.modal', function (event) {
var $modal = $(event.currentTarget);
window.location.hash = $modal.attr('id');
})
.on('hide.bs.modal', function () {
window.location.hash = '';
});
$('.page-header pre code, .top-resource-description pre code').each(function (i, block) {
hljs.highlightBlock(block);
});
$('.btn[data-toggle="collapse"]', '.js-controlled-collapse').on('click', function (event) {
var $btn = $(event.currentTarget);
var $controlled = $btn.parents('.js-controlled-collapse');
var $collapse = $($btn.attr('href'));
if ($controlled.length < 1) {
return true;
}
if ($collapse.hasClass('in')) {
$collapse.removeClass('in');
return false;
}
$('.collapse', $controlled).each(function () {
$(this).removeClass('in');
});
});
$('[data-toggle]').on('click', function () {
var selector = $(this).data('target') + ' pre code';
$(selector).each(function (i, block) {
hljs.highlightBlock(block);
});
});
$('.js-format-json').each(function () {
var $elem = $(this);
var jsonData = JSON.parse($('.js-format-json__json', $elem).html());
var formatter = new JSONFormatter(jsonData, 2);
$('.js-format-json__outlet-formatted', $elem).html(formatter.render());
});
$('[data-load-code-url]').click(function () {
var path = $(this).data('load-code-url');
var selector = $(this).attr('href') + ' pre code';
$.ajax({
url: '/service/mock-preview',
dataType: 'text',
data: {
path: path,
},
cache: false,
success: function (data) {
$(selector).html(data).each(function (i, block) {
hljs.highlightBlock(block);
});
},
});
});
/**
* @param {Object} event - the click event object
* @returns {void}
* @private
*/
function _storeSettings(event) {
var $ipt = $(event.currentTarget);
var $form = $ipt.closest('.js-form-change-save');
event.preventDefault();
$ipt.attr('data-status', 'saving');
$.ajax({
url: $form.attr('action'),
type: $form.attr('method'),
data: {
key: $ipt.attr('name'),
value: $ipt.val(),
},
success: function () {
$ipt.attr('data-status', 'saved');
},
error: function () {
$ipt.attr('data-status', 'error');
},
});
}
$('.js-form-change-save').on('submit', _storeSettings);
$('.js-form-change-save input').
on('keydown', function (event) {
$(event.currentTarget).attr('data-status', 'not-saved');
}).
on('change', _storeSettings)
;
$('.js-change-response-data').on('change', function (event) {
var $radio = $(event.currentTarget);
$.ajax({
url: '/service/expected-response',
type: 'post',
data: {
value: $radio.val(),
path: $radio.data('path'),
},
});
});
/**
* @param {Array} data - list of messages
* @returns {Array} dom elements
* @private
*/
function getLogRows(data) {
var type;
var out;
if (data instanceof Array && data.length > 0) {
out = data.map(function (msg) {
switch (msg.type) {
case 'error':
type = 'danger';
break;
case 'warn':
type = 'warning';
break;
case 'neutral':
type = 'active';
break;
default:
type = msg.type;
break;
}
return '' +
'<tr>' +
'<td class="' + type + '" style="width:6px;padding:0;"></td>' +
'<td>' + msg.time + '</td>' +
'<td>' + msg.msg + '</td>' +
'</tr>';
});
}
return out;
}
$('.js-swagger-import-run').on('click', function (event) {
var $btn = $(event.currentTarget);
var $mBody = $btn.closest('.modal-body');
var $outlet = $('.js-swagger-import-outlet', $mBody);
var $result = $('.js-swagger-import-outlet-result', $mBody);
$btn.remove();
$outlet.html('Loading ...');
$.ajax({
url: '/service/swagger-import',
type: 'get',
success: function (data) {
$result.html(getLogRows(data));
$outlet.html('<a href="/" class="btn btn-lg btn-primary js-reload">Reload</a>');
},
});
});
$('.js-open-validation-result').on('click', function (event) {
var $btn = $(event.currentTarget);
var $modal = $($btn.data('target'));
var $result = $('.js-outlet-result', $modal);
$result.html(getLogRows(window.validationResult));
});
$('.js-validate-single').on('click', function (event) {
event.preventDefault();
var $btn = $(event.currentTarget);
var $modal = $('#_modal_validate_single');
var $outlet = $('.js-outlet', $modal);
var $result = $('.js-outlet-result', $modal);
$modal.modal();
$outlet.html('Loading ...');
$.ajax({
url: '/service/validation/response',
type: 'get',
data: {
path: $btn.data('path'),
method: $btn.data('method'),
expected: $btn.data('expected'),
},
success: function (data) {
$result.html(getLogRows(data));
$outlet.html('<a href="/" class="btn btn-lg btn-primary js-reload">Reload</a>');
},
});
});
$('.js-validate').on('click', function (event) {
event.preventDefault();
var $modal = $('#_modal_validate');
var $outlet = $('.js-outlet', $modal);
var $result = $('.js-outlet-result', $modal);
$modal.modal();
$outlet.html('Loading ...');
$.ajax({
url: '/service/validation/responses',
type: 'get',
success: function (data) {
$result.html(getLogRows(data));
$outlet.html('<a href="/" class="btn btn-lg btn-primary js-reload">Reload</a>');
},
});
});
$('.js-collection-activate').on('click', function (event) {
event.preventDefault();
var $btn = $(event.currentTarget);
var $modal = $btn.closest('.js-modal');
var $btns = $('.js-btn', $modal);
var $outlet = $('.js-outlet', $modal);
$outlet.html('Activating ...');
$btns.prop('disabled', true);
$.ajax({
url: '/service/collection/' + $btn.data('id') + '/activate',
type: 'post',
success: function () {
$btns.remove();
$outlet.html('<a href="/" class="btn btn-lg btn-primary js-reload">Reload</a>');
},
error: function () {
$btns.prop('disabled', false);
$outlet.html('Error, please try again later!');
},
});
});
$('.js-collection-delete').on('click', function (event) {
event.preventDefault();
var $btn = $(event.currentTarget);
var $modal = $btn.closest('.js-modal');
var $btns = $('.js-btn', $modal);
var $outlet = $('.js-outlet', $modal);
$outlet.html('Deleting ...');
$btns.prop('disabled', true);
$.ajax({
url: '/service/collection/' + $btn.data('id'),
type: 'delete',
success: function () {
$btns.remove();
$outlet.html('<br /><a href="/" class="btn btn-lg btn-primary js-reload">Reload</a>');
},
error: function () {
$btns.prop('disabled', false);
$outlet.html('Error, please try again later!');
},
});
});
$('.js-open-ide').on('click', function (event) {
var path = $(event.currentTarget).data('path');
$.ajax({
url: '/service/open?path=' + encodeURIComponent(path),
});
});
$('.js-reload').on('click', function (event) {
event.preventDefault();
window.location.reload();
});
$('.js-add-response').on('click', function (event) {
event.preventDefault();
var $btn = $(event.currentTarget);
var name = window.prompt('Enter response name');
var path = encodeURIComponent($btn.data('path'));
var method = encodeURIComponent($btn.data('method'));
if (name === null || name === '') {
return;
}
$.ajax({
url: '/service/response/' + path + '/' + method,
type: 'post',
data: {
name,
},
success: function () {
window.location.reload();
},
error: function () {
window.alert('Error: please try again later!');
},
});
});
$('.js-delete-response').on('click', function (event) {
event.preventDefault();
var $btn = $(event.currentTarget);
var path = encodeURIComponent($btn.data('path'));
var method = encodeURIComponent($btn.data('method'));
var name = $btn.data('name');
var accepted = window.confirm('Are you sure?');
if (accepted !== true) {
return;
}
$.ajax({
url: '/service/response/' + path + '/' + method,
type: 'delete',
data: {
name,
},
success: function () {
window.location.reload();
},
error: function () {
window.alert('Error: please try again later!');
},
});
});
});
})(jQuery));