Extends the Chrome Developer Tools, adding a new Network Panel in the Developer Tools window with better searching and response previews. https://leviolson.com/posts/chrome-ext-better-network-panel
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

299 lines
16 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. <html ng-app="BNPChrome" ng-csp="">
  2. <head>
  3. <link rel="stylesheet" type="text/css" href="vendor/assets/stylesheets/jquery.resizableColumns.css">
  4. <link rel="stylesheet" type="text/css" href="vendor/assets/stylesheets/style.css">
  5. <link rel="stylesheet" type="text/css" href="assets/stylesheets/panel.css">
  6. <link href="vendor/assets/stylesheets/jsoneditor.css" rel="stylesheet" type="text/css">
  7. <script src="vendor/assets/javascripts/jsoneditor.js"></script>
  8. <script src="vendor/assets/javascripts/jquery-2.2.4.min.js"></script>
  9. <script src="vendor/assets/javascripts/jquery-ui-1.10.3.custom.min.js"></script>
  10. <script src="vendor/assets/javascripts/keymaster.min.js"></script>
  11. <script src="vendor/assets/javascripts/angular.min.js"></script>
  12. <script src="vendor/assets/javascripts/jquery.resizableColumns.min.js"></script>
  13. <script src="vendor/assets/javascripts/prettydiff.min.js"></script>
  14. <script src="vendor/assets/javascripts/rawinflate.js"></script>
  15. <script src="vendor/assets/javascripts/FileSaver.min.js"></script>
  16. </head>
  17. <body ng-controller='PanelController' ng-init="init('chrome-extension')" ng-cloak>
  18. <section class="wrapper">
  19. <section class="request">
  20. <div class="search">
  21. <input ng-model="search" type="text" placeholder='Add search term then ENTER' title='prefix with "-" to remove from search results' on-search="customSearch()" />
  22. <div class="filtering">
  23. <span class="label">Filtering for:</span>
  24. <span ng-repeat="term in searchTerms">
  25. <span title="Click to remove"
  26. class="searchterm"
  27. ng-class="{ neg: term[0] == '-'}"
  28. ng-click="removeSearchTerm($index)">{{term}}</span>
  29. <span class="operator" ng-hide="$last" ng-click="toggleSearchType()">{{ andFilter && 'and' || 'or' }}</span>
  30. </span>
  31. </div>
  32. <div class="recent-searches">
  33. <span class="label">Recent searches:</span>
  34. <span ng-repeat="term in oldSearchTerms"
  35. title="Click to Search, right click to permanently remove from history"
  36. class="recents"
  37. ng-class="{ neg: term[0] == '-'}"
  38. ng-click="addSearchTerm($index)"
  39. ng-right-click="deleteSearchTerm($index)">{{term}}</span>
  40. </div>
  41. </div>
  42. <div class="requests">
  43. <table class="header styled" id="requests-header" resizable-columns data-resizable-columns-sync="#requests">
  44. <thead>
  45. <tr>
  46. <th class='request'>
  47. Path
  48. </th>
  49. <th class='apextype'>
  50. Apex Type
  51. </th>
  52. <th class='apexmethod'>
  53. Apex Method
  54. </th>
  55. <th class='method'>
  56. Method
  57. </th>
  58. <th class='status'>
  59. Status
  60. </th>
  61. <th class='time'>
  62. Time
  63. </th>
  64. <th class='datetime'>
  65. Started
  66. </th>
  67. </tr>
  68. </thead>
  69. </table>
  70. <div class="data-container">
  71. <table id="requests" class="styled" resizable-columns data-resizable-columns-sync="#requests-header">
  72. <tr class="sizing">
  73. <td class='request'></td>
  74. <td class='apextype'></td>
  75. <td class='apexmethod'></td>
  76. <td class='method'></td>
  77. <td class='status'></td>
  78. <td class='time'></td>
  79. <td class='datetime'></td>
  80. </tr>
  81. <tr class="data clickable" ng-repeat="request in filteredRequests | orderBy:'id'" scroll-to-new
  82. ng-click="!request.separator && setActive(request.id)" ng-class="getClass(request.id, request.separator)">
  83. <!-- scroll-to-new -->
  84. <td class='request' title="{{request.request_url || titleIfSeparator(request.separator) }}">{{request.request_url}}</td>
  85. <td class='apextype' title="{{request.request_apex_type || titleIfSeparator(request.separator) }}">{{request.request_apex_type}}</td>
  86. <td class='apexmethod' title="{{request.request_apex_method || titleIfSeparator(request.separator) }}">{{request.request_apex_method}}</td>
  87. <td class='method' title="{{request.request_method || titleIfSeparator(request.separator) }}">{{request.request_method}}</td>
  88. <td class='status' title="{{request.response_status || titleIfSeparator(request.separator) }}">{{request.response_status}}</td>
  89. <td class='time' title="{{request.time || titleIfSeparator(request.separator) }}">{{ request.time / 1000 | number : 2 }} s</td>
  90. <td class='datetime' title="{{request.startedDateTime || titleIfSeparator(request.separator) }}">{{ request.startedDateTime | date: "mediumTime" }}</td>
  91. </tr>
  92. </table>
  93. </div>
  94. </div>
  95. </section>
  96. <section class="response">
  97. <div id="tabs" class="tabbed-pane">
  98. <div class="tabbed-pane-header">
  99. <div class="tabbed-pane-header-contents">
  100. <ul class="tabbed-pane-header-tabs">
  101. <li class="tabbed-pane-header-tab">
  102. <a href="#tab-response" class="tabbed-pane-header-tab-title"
  103. ng-click="selectDetailTab('tab-response')">
  104. <span ng-show="showOriginal">Raw</span>
  105. <span ng-hide="showOriginal">Formatted</span>
  106. Response</a>
  107. </li>
  108. <li class="tabbed-pane-header-tab">
  109. <a href="#tab-request" class="tabbed-pane-header-tab-title"
  110. ng-click="selectDetailTab('tab-request')">
  111. <span ng-show="showOriginal">Raw</span>
  112. <span ng-hide="showOriginal">Formatted</span>
  113. Request</a>
  114. </li>
  115. <li class="tabbed-pane-header-tab">
  116. <a href="#tab-request-stats" class="tabbed-pane-header-tab-title"
  117. ng-click="selectDetailTab('tab-request-stats')">Request</a>
  118. </li>
  119. <li class="tabbed-pane-header-tab">
  120. <a href="#tab-response-stats" class="tabbed-pane-header-tab-title"
  121. ng-click="selectDetailTab('tab-response-stats')">Response</a>
  122. </li>
  123. <li class="tabbed-pane-header-tab">
  124. <a href="#tab-settings" class="tabbed-pane-header-tab-title"
  125. ng-click="selectDetailTab('tab-settings')">Panel Settings</a>
  126. </li>
  127. </ul>
  128. </div>
  129. <div class="toolbar"></div>
  130. </div>
  131. <div class="tabbed-pane-content data-grid data-grid-details">
  132. <div id="tab-request-stats">
  133. <table id="postData" class="styled" ng-show="activePostData.length" title="Click to open Request preview tab">
  134. <thead>
  135. <tr>
  136. <th colspan="2">Request POST Data</th>
  137. </tr>
  138. </thead>
  139. <tbody>
  140. <tr ng-repeat="param in activePostData" ng-click="selectDetailTab('tab-request', true)">
  141. <td class="key">{{param.name}}</td>
  142. <td>
  143. <pretty-print data="param.value" />
  144. </td>
  145. </tr>
  146. </tbody>
  147. </table>
  148. <table id="request-data" class="styled" ng-show="activeRequest.length">
  149. <thead>
  150. <tr>
  151. <th colspan="2">Request Data</th>
  152. </tr>
  153. </thead>
  154. <tbody>
  155. <tr ng-repeat="param in activeRequest">
  156. <td class="key">{{param.name}}</td>
  157. <td class="value">
  158. <pretty-print data="param.value" />
  159. </td>
  160. </tr>
  161. </tbody>
  162. </table>
  163. <table id="headers" class="styled" ng-show="activeHeaders.length">
  164. <thead>
  165. <tr>
  166. <th colspan="2">Request Headers</th>
  167. </tr>
  168. </thead>
  169. <tbody>
  170. <tr ng-repeat="param in activeHeaders">
  171. <td class="key">{{param.name}}</td>
  172. <td class="value">
  173. <pretty-print data="param.value" />
  174. </td>
  175. </tr>
  176. </tbody>
  177. </table>
  178. <table id="request-cookies" class="styled" ng-show="activeResponseCookies.length">
  179. <thead>
  180. <tr>
  181. <th colspan="2">Request Cookies</th>
  182. </tr>
  183. </thead>
  184. <tbody>
  185. <tr ng-repeat="param in activeCookies">
  186. <td class="key">{{param.name}}</td>
  187. <td>
  188. <pretty-print data="param.value" />
  189. </td>
  190. </tr>
  191. </tbody>
  192. </table>
  193. </div>
  194. <div id="tab-response-stats">
  195. <table id="response-data" class="styled" ng-show="activeResponseData.length">
  196. <thead>
  197. <tr>
  198. <th colspan="2">Response Data</th>
  199. </tr>
  200. </thead>
  201. <tbody>
  202. <tr ng-repeat="param in activeResponseData">
  203. <td class="key">{{param.name}}</td>
  204. <td class="value">
  205. <pretty-print data="param.value" />
  206. </td>
  207. </tr>
  208. </tbody>
  209. </table>
  210. <table id="response-headers" class="styled" ng-show="activeResponseHeaders.length">
  211. <thead>
  212. <tr>
  213. <th colspan="2">Response Headers</th>
  214. </tr>
  215. </thead>
  216. <tbody>
  217. <tr ng-repeat="param in activeResponseHeaders">
  218. <td class="key">{{param.name}}</td>
  219. <td class="value">
  220. <pretty-print data="param.value" />
  221. </td>
  222. </tr>
  223. </tbody>
  224. </table>
  225. <table id="response-cookies" class="styled" ng-show="activeResponseCookies.length">
  226. <thead>
  227. <tr>
  228. <th colspan="2">Response Cookies</th>
  229. </tr>
  230. </thead>
  231. <tbody>
  232. <tr ng-repeat="param in activeResponseCookies">
  233. <td class="key">{{param.name}}</td>
  234. <td>
  235. <pretty-print data="param.value" />
  236. </td>
  237. </tr>
  238. </tbody>
  239. </table>
  240. </div>
  241. <div id="tab-response">
  242. <div id="response-jsoneditor"></div>
  243. </div>
  244. <div id="tab-request">
  245. <div id="request-jsoneditor"></div>
  246. </div>
  247. <div id="tab-settings">
  248. <h3>Settings</h3>
  249. <div class="form-group">
  250. <label for="scroll-to-new">Auto Scroll Network Log</label>
  251. <input type="checkbox" name="scroll-to-new" id="scroll-to-new" ng-model="showIncomingRequests">
  252. </div>
  253. <h3>Coming Soon</h3>
  254. <div class="form-group" title="Not implemented yet">
  255. <label for="clear-on-refresh">Clear Network Log on Page Refresh</label>
  256. <input disabled="disabled" type="checkbox" name="clear-on-refresh" id="clear-on-refresh" ng-model="clearOnRefresh">
  257. </div>
  258. <div class="form-group" title="Not implemented yet">
  259. <label for="auto-json-parse-depth-response">Auto JSON Parse Depth (Response)</label>
  260. <input disabled="disabled" type="number" name="auto-json-parse-depth-response" id="auto-json-parse-depth-response" ng-model="autoJSONParseDepthRes">
  261. </div>
  262. <div class="form-group" title="Not implemented yet">
  263. <label for="auto-json-parse-depth-request">Auto JSON Parse Depth (Request)</label>
  264. <input disabled="disabled" type="number" name="auto-json-parse-depth-request" id="auto-json-parse-depth-request" ng-model="autoJSONParseDepthReq">
  265. </div>
  266. </div>
  267. <script src="assets/javascripts/app.js"></script>
  268. <script src="assets/javascripts/panel.js"></script>
  269. <script src="assets/javascripts/toolbar.js"></script>
  270. </div>
  271. </div>
  272. </section>
  273. </section>
  274. </body>
  275. </html>