-
Notifications
You must be signed in to change notification settings - Fork 5
/
scripts.js
110 lines (84 loc) · 2.49 KB
/
scripts.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
$(function () {
var $optionsGroups = $('.options-group');
var $jumpToTop = $('.jump-to-top');
var $window = $(window);
var $document = $(document);
var $pathTarget = $('.path');
var opts;
var defaultOpts = {
pathNotation: 'dots',
pathQuotesType: 'single'
};
var toggleJumpToTopButton = function () {
var isScrolled = $window.scrollTop() !== 0;
$jumpToTop.toggleClass('visible', isScrolled);
};
var loadOptsFromStorage = function () {
return JSON.parse(localStorage.getItem('opts'));
};
var storeOptsInStorage = function () {
localStorage.setItem('opts', JSON.stringify(opts));
};
(function prepareOpts() {
opts = loadOptsFromStorage() || defaultOpts;
for (var opt in opts) {
if (opts.hasOwnProperty(opt)) {
var optValue = opts[opt];
$optionsGroups.find(':checkbox[name=' + opt + ']')
.prop('checked', optValue);
$optionsGroups.find(':radio[name=' + opt + ']')
.filter('[value="' + optValue + '"]')
.prop('checked', true);
$optionsGroups.find(':text[name=' + opt + ']')
.val(optValue);
}
}
$('body').removeClass('loading');
})();
$window.scroll(_.debounce(toggleJumpToTopButton, 100));
$jumpToTop.click(function () {
$('html, body').animate({scrollTop: 0}, 'fast');
});
$optionsGroups.find(':checkbox').change(function () {
var optName = $(this).attr('name');
opts[optName] = $(this).prop('checked');
storeOptsInStorage();
});
$optionsGroups.find(':radio, :text').change(function () {
var optName = $(this).attr('name');
opts[optName] = $(this).val();
storeOptsInStorage();
});
var transformJson = function () {
try {
var jsonData = eval('(' + $('#json-input').val() + ')');
}
catch (error) {
return alert("Cannot eval JSON: " + error);
}
$('#json-renderer').jsonPathPicker(jsonData, $pathTarget, opts);
toggleJumpToTopButton();
};
var isKeysCombinationActive = false;
var keys = {
q: 81,
ctrl: 17
};
$document.keydown(function (e) {
if (e.keyCode === keys.ctrl) {
isKeysCombinationActive = true;
}
});
$document.keyup(function (e) {
if (e.keyCode === keys.ctrl) {
setTimeout(function () {
isKeysCombinationActive = false;
}, 50);
}
if (isKeysCombinationActive && e.keyCode === keys.q) {
isKeysCombinationActive = false;
transformJson();
}
});
$('#btn-json-path-picker').click(transformJson);
});