main.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. // Start headers
  2. var requester = {
  3. headers: {
  4. 'x-sgw':12345,
  5. 'othertest':1234
  6. },
  7. params: {
  8. }
  9. };
  10. class MLog {
  11. constructor(jElem,listobj) {
  12. this.jElem = jElem;
  13. this.count = 0;
  14. }
  15. raw(msg) {
  16. var $output = $(this.jElem);
  17. $output.each(function() {
  18. var $this = $(this); // Cache element
  19. var tolerance = 100;
  20. var doscroll = false;
  21. if($this.scrollTop() + $this.innerHeight() >= $this.prop('scrollHeight')-tolerance){
  22. doscroll = true;
  23. }
  24. $this.append( msg );
  25. if(doscroll) {
  26. $this.scrollTop($this.prop('scrollHeight'));
  27. }
  28. });
  29. this.count++;
  30. }
  31. info(msg) {
  32. this.raw('<p>[' + this.count + '] ' + msg + '</p>');
  33. }
  34. error(msg) {
  35. this.raw('<p class="error">[' + this.count + '] ' + msg + '</p>');
  36. }
  37. clear() {
  38. $(this.jElem).html('');
  39. }
  40. }
  41. var mlog = new MLog('.output');
  42. class ListController {
  43. constructor(targetPane,targetObject) {
  44. this.targetPane = targetPane;
  45. this.targetObject = targetObject;
  46. }
  47. setupInteraction() {
  48. var self = this;
  49. $(document).on('click', this.targetPane + ' .entry-remove',function() {
  50. $(this).parent().remove()
  51. });
  52. $(document).on('click', this.targetPane + ' .entry-new',function() {
  53. self.add();
  54. });
  55. $(this.targetPane + ' .entry-input').on('keypress', function(e) {
  56. if(e.which != 13) return;
  57. var content = $(this).val();
  58. var arr = content.split(':');
  59. if(arr.length != 2) {
  60. mlog.error('Invalid format');
  61. return;
  62. }
  63. var headerKey = arr[0].trim();
  64. var headerContent = arr[1].trim();
  65. mlog.info('Header:' + headerKey + ' as "' + headerContent +'"');
  66. self.targetObject[arr[0].trim()] = arr[1].trim();
  67. self.update();
  68. $(this).val('');
  69. });
  70. }
  71. update() {
  72. console.log("HEaders: %o", this.targetObject);
  73. for( var k in this.targetObject) {
  74. this.add(k,this.targetObject[k]);
  75. }
  76. }
  77. add(key,value) {
  78. var k = key || "";
  79. var v = value || "";
  80. var $list = $(this.targetPane + ' .entry-list');
  81. $list.append('<li>'
  82. + '<input type="text" class="entry-name" value="' + k + '">'
  83. + '<input type="text" class="entry-content" value="' + v + '">'
  84. + '<button class="entry-remove">X</button>'
  85. + '</li>');
  86. }
  87. values() {
  88. var ret = {};
  89. $(this.targetPane + ' .entry-list > li').each(function() {
  90. var k = $(this).find('.entry-name').val();
  91. var v = $(this).find('.entry-content').val();
  92. ret[k] = v
  93. });
  94. return ret;
  95. }
  96. }
  97. $(function() {
  98. $('.output-clear').on('click',function(e) {
  99. e.preventDefault();
  100. e.stopPropagation();
  101. mlog.clear();
  102. })
  103. var headerList = new ListController('#header-list',requester.headers);
  104. headerList.setupInteraction();
  105. headerList.update();
  106. var paramList = new ListController('#params-list',requester.params);
  107. paramList.setupInteraction();
  108. paramList.update();
  109. $('#request-input').val('/api/endpoint/1234/named1/method1');
  110. $('.request').on('click',function() {
  111. var req = $('#request-input').val();
  112. var method= $(this).attr('data-method');
  113. mlog.info(method.toUpperCase() + ": " + req + " with var: " + Prism.highlight(JSON.stringify(requester.params),Prism.languages.json));
  114. var params = paramList.values();
  115. $.ajax({
  116. url: req,
  117. method: method,
  118. data: params,
  119. beforeSend: function(xhr) {
  120. var headers = headerList.values();
  121. for( var k in headers) {
  122. xhr.setRequestHeader(k,headers[k]);
  123. }
  124. },
  125. success: function(data) {
  126. var result = data;
  127. try {
  128. if(typeof(data) === "string") {
  129. data = JSON.parse(data);
  130. }
  131. var json = JSON.stringify(data,null,' ');
  132. result = Prism.highlight(json,Prism.languages.json);
  133. } catch(e) {
  134. mlog.error(e.message);
  135. }
  136. mlog.raw('<pre><code>'+ result + '</code></pre>');
  137. },
  138. error: function(xhr, err, thrown) {
  139. mlog.error('[' + xhr.status + '] ' +thrown + '</font>');
  140. }
  141. })
  142. });
  143. // Header handler area
  144. });