pywebexec 2.4.0__tar.gz → 2.4.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. {pywebexec-2.4.0/pywebexec.egg-info → pywebexec-2.4.2}/PKG-INFO +1 -1
  2. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/css/style.css +2 -0
  3. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/js/tablefilter.js +54 -2
  4. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/version.py +2 -2
  5. {pywebexec-2.4.0 → pywebexec-2.4.2/pywebexec.egg-info}/PKG-INFO +1 -1
  6. {pywebexec-2.4.0 → pywebexec-2.4.2}/.github/workflows/python-publish.yml +0 -0
  7. {pywebexec-2.4.0 → pywebexec-2.4.2}/.gitignore +0 -0
  8. {pywebexec-2.4.0 → pywebexec-2.4.2}/LICENSE +0 -0
  9. {pywebexec-2.4.0 → pywebexec-2.4.2}/README.md +0 -0
  10. {pywebexec-2.4.0 → pywebexec-2.4.2}/pyproject.toml +0 -0
  11. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/__init__.py +0 -0
  12. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/host_ip.py +0 -0
  13. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/pywebexec.py +0 -0
  14. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/css/form.css +0 -0
  15. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/css/markdown.css +0 -0
  16. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/css/swagger-ui.css +0 -0
  17. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/css/swagger-ui.css.map +0 -0
  18. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/css/xterm.css +0 -0
  19. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/fonts/CommitMonoNerdFontMono-Regular.ttf +0 -0
  20. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/fonts/LICENSE +0 -0
  21. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/fonts/glyphicons-halflings-regular.eot +0 -0
  22. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/fonts/glyphicons-halflings-regular.svg +0 -0
  23. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/fonts/glyphicons-halflings-regular.ttf +0 -0
  24. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/fonts/glyphicons-halflings-regular.woff +0 -0
  25. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/fonts/glyphicons-halflings-regular.woff2 +0 -0
  26. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/images/aborted.svg +0 -0
  27. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/images/copy.svg +0 -0
  28. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/images/copy_ok.svg +0 -0
  29. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/images/down-arrow.svg +0 -0
  30. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/images/failed.svg +0 -0
  31. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/images/favicon.svg +0 -0
  32. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/images/fit-tty.svg +0 -0
  33. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/images/fit-win.svg +0 -0
  34. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/images/font-decrease.svg +0 -0
  35. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/images/font-increase.svg +0 -0
  36. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/images/norun.svg +0 -0
  37. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/images/pause.svg +0 -0
  38. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/images/popup.svg +0 -0
  39. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/images/resume.svg +0 -0
  40. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/images/running.svg +0 -0
  41. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/images/success.svg +0 -0
  42. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/images/swagger-ui.svg +0 -0
  43. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/js/executables.js +0 -0
  44. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/js/js-yaml/LICENSE +0 -0
  45. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/js/js-yaml/js-yaml.min.js +0 -0
  46. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/js/marked/LICENSE.md +0 -0
  47. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/js/marked/marked.min.js +0 -0
  48. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/js/popup.js +0 -0
  49. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/js/schemaform.js +0 -0
  50. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/js/script.js +0 -0
  51. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/js/swagger-form.js +0 -0
  52. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/js/swagger-ui/LICENSE +0 -0
  53. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/js/swagger-ui/swagger-ui-bundle.js +0 -0
  54. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/js/swagger-ui/swagger-ui-standalone-preset.js +0 -0
  55. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/js/xterm/LICENSE +0 -0
  56. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/js/xterm/addon-canvas.js +0 -0
  57. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/js/xterm/addon-canvas.js.map +0 -0
  58. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/js/xterm/addon-fit.js +0 -0
  59. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/js/xterm/addon-fit.js.map +0 -0
  60. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/js/xterm/addon-unicode-graphemes.js +0 -0
  61. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/js/xterm/addon-unicode-graphemes.js.map +0 -0
  62. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/js/xterm/addon-unicode11.js +0 -0
  63. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/js/xterm/addon-unicode11.js.map +0 -0
  64. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/js/xterm/xterm.js +0 -0
  65. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/js/xterm/xterm.js.map +0 -0
  66. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/jsonform/LICENSE +0 -0
  67. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/jsonform/deps/README.md +0 -0
  68. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/jsonform/deps/img/glyphicons-halflings.png +0 -0
  69. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/jsonform/deps/jquery.min.js +0 -0
  70. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/jsonform/deps/jsv.js +0 -0
  71. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/jsonform/deps/underscore.js +0 -0
  72. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/static/jsonform/lib/jsonform.js +0 -0
  73. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/swagger.yaml +0 -0
  74. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/templates/__init__.py +0 -0
  75. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/templates/index.html +0 -0
  76. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/templates/popup.html +0 -0
  77. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec/templates/swagger_ui.html +0 -0
  78. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec.egg-info/SOURCES.txt +0 -0
  79. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec.egg-info/dependency_links.txt +0 -0
  80. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec.egg-info/entry_points.txt +0 -0
  81. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec.egg-info/requires.txt +0 -0
  82. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexec.egg-info/top_level.txt +0 -0
  83. {pywebexec-2.4.0 → pywebexec-2.4.2}/pywebexecdev +0 -0
  84. {pywebexec-2.4.0 → pywebexec-2.4.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pywebexec
3
- Version: 2.4.0
3
+ Version: 2.4.2
4
4
  Summary: Simple Python HTTP Exec Server
5
5
  Home-page: https://github.com/joknarf/pywebexec
6
6
  Author: Franck Jouvanceau
@@ -53,6 +53,7 @@ th {
53
53
  align-items: center;
54
54
  gap: 5px;
55
55
  white-space: nowrap;
56
+ font-weight: 600;
56
57
  }
57
58
  .sort-btn {
58
59
  color: #aaa;
@@ -538,6 +539,7 @@ body.dimmed * {
538
539
  text-align: center;
539
540
  padding: 0px 4px;
540
541
  margin-left: auto;
542
+ cursor: pointer
541
543
  }
542
544
 
543
545
  .xterm-accessibility {
@@ -21,11 +21,13 @@ function initTableFilters(table) {
21
21
  // Add sort button at the beginning
22
22
  contentSpan.insertBefore(sortBtn, contentSpan.firstChild);
23
23
 
24
- // Add row counter for last column
24
+ // Add export button and row counter for last column
25
25
  if (index === headers.length - 1) {
26
+ // Add row counter
26
27
  const rowCount = document.createElement('span');
27
28
  rowCount.className = 'row-count';
28
29
  rowCount.classList.add('system-font');
30
+ rowCount.onclick = () => exportToExcel(table);
29
31
  contentSpan.appendChild(rowCount);
30
32
  }
31
33
 
@@ -47,7 +49,7 @@ function initTableFilters(table) {
47
49
  function updateRowCount(table, count) {
48
50
  const rowCount = table.querySelector('.row-count');
49
51
  if (rowCount) {
50
- rowCount.textContent = `${count}`;
52
+ rowCount.textContent = `⤓ ${count}`;
51
53
  }
52
54
  }
53
55
 
@@ -143,6 +145,56 @@ function applyFilters(table) {
143
145
  }
144
146
  }
145
147
 
148
+ function exportToExcel(table) {
149
+ // Create HTML content
150
+ const html = `
151
+ <html>
152
+ <head>
153
+ <meta charset="UTF-8">
154
+ <style>
155
+ table { border-collapse: collapse; }
156
+ th, td { border: 1px solid black; padding: 5px; }
157
+ th { background-color: #f2f2f2; }
158
+ </style>
159
+ </head>
160
+ <body>
161
+ <table>
162
+ <thead>
163
+ <tr>${
164
+ Array.from(table.querySelectorAll('thead th'))
165
+ .filter((_, i) => i !== 4 || table !== commandsTable)
166
+ .map(th => `<th>${th.querySelector('.th-content')?.textContent.replace('⇕', '').replace(/⤓.*/, '').trim() || ''}</th>`)
167
+ .join('')
168
+ }</tr>
169
+ </thead>
170
+ <tbody>${
171
+ Array.from(table.querySelectorAll('tbody tr'))
172
+ .filter(row => row.style.display !== 'none')
173
+ .map(row =>
174
+ `<tr>${
175
+ Array.from(row.cells)
176
+ .filter((_, i) => i !== 4 || table !== commandsTable)
177
+ .map(cell => `<td>${cell.textContent.trim()}</td>`)
178
+ .join('')
179
+ }</tr>`
180
+ ).join('')
181
+ }</tbody>
182
+ </table>
183
+ </body>
184
+ </html>`;
185
+
186
+ // Create and trigger download
187
+ const blob = new Blob([html], { type: 'application/vnd.ms-excel' });
188
+ const url = window.URL.createObjectURL(blob);
189
+ const a = document.createElement('a');
190
+ a.href = url;
191
+ a.download = 'export_' + new Date().toISOString().slice(0,10) + '.xls';
192
+ document.body.appendChild(a);
193
+ a.click();
194
+ document.body.removeChild(a);
195
+ window.URL.revokeObjectURL(url);
196
+ }
197
+
146
198
  let commandsTable = document.querySelector('#commandsTable');
147
199
  document.addEventListener('DOMContentLoaded', () => {
148
200
  if (commandsTable) initTableFilters(commandsTable);
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '2.4.0'
21
- __version_tuple__ = version_tuple = (2, 4, 0)
20
+ __version__ = version = '2.4.2'
21
+ __version_tuple__ = version_tuple = (2, 4, 2)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pywebexec
3
- Version: 2.4.0
3
+ Version: 2.4.2
4
4
  Summary: Simple Python HTTP Exec Server
5
5
  Home-page: https://github.com/joknarf/pywebexec
6
6
  Author: Franck Jouvanceau
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes