drf-to-mkdoc 0.2.3__py3-none-any.whl → 0.3.0__py3-none-any.whl

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.

Potentially problematic release.


This version of drf-to-mkdoc might be problematic. Click here for more details.

Files changed (40) hide show
  1. drf_to_mkdoc/conf/defaults.py +1 -0
  2. drf_to_mkdoc/conf/settings.py +1 -0
  3. drf_to_mkdoc/management/commands/build_model_docs.py +10 -1
  4. drf_to_mkdoc/static/drf-to-mkdoc/javascripts/field-sections-loader.js +29 -0
  5. drf_to_mkdoc/static/drf-to-mkdoc/javascripts/query-parameters-loader.js +16 -0
  6. drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/field-extractor.js +200 -0
  7. drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/form-manager.js +307 -14
  8. drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/main.js +39 -11
  9. drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/modal.js +298 -18
  10. drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/query-parameters-extractor.js +94 -0
  11. drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/request-executor.js +278 -62
  12. drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/response-modal.js +173 -0
  13. drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/suggestions.js +59 -152
  14. drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/tabs.js +52 -9
  15. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/badges.css +13 -5
  16. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/theme-toggle.css +297 -25
  17. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/try-out/fab.css +204 -0
  18. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/try-out/response.css +323 -0
  19. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/try-out/variables.css +139 -0
  20. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/field-sections.css +136 -0
  21. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/try-out/form.css +539 -0
  22. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/try-out/modal.css +239 -17
  23. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/try-out/response.css +503 -43
  24. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/try-out/tabs.css +71 -19
  25. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/try-out/variables.css +71 -15
  26. drf_to_mkdoc/templates/endpoints/detail/request_body.html +2 -0
  27. drf_to_mkdoc/templates/er_diagrams/app.html +26 -0
  28. drf_to_mkdoc/templates/er_diagrams/index.html +14 -0
  29. drf_to_mkdoc/templates/er_diagrams/main.html +22 -0
  30. drf_to_mkdoc/templates/try-out/fab.html +67 -3
  31. drf_to_mkdoc/templates/try-out/form.html +221 -74
  32. drf_to_mkdoc/templates/try-out/modal.html +75 -7
  33. drf_to_mkdoc/templates/try-out/response-modal.html +138 -9
  34. drf_to_mkdoc/utils/endpoint_detail_generator.py +1 -0
  35. drf_to_mkdoc/utils/er_diagram_generator.py +230 -0
  36. {drf_to_mkdoc-0.2.3.dist-info → drf_to_mkdoc-0.3.0.dist-info}/METADATA +89 -10
  37. {drf_to_mkdoc-0.2.3.dist-info → drf_to_mkdoc-0.3.0.dist-info}/RECORD +40 -27
  38. {drf_to_mkdoc-0.2.3.dist-info → drf_to_mkdoc-0.3.0.dist-info}/WHEEL +0 -0
  39. {drf_to_mkdoc-0.2.3.dist-info → drf_to_mkdoc-0.3.0.dist-info}/licenses/LICENSE +0 -0
  40. {drf_to_mkdoc-0.2.3.dist-info → drf_to_mkdoc-0.3.0.dist-info}/top_level.txt +0 -0
@@ -110,8 +110,480 @@
110
110
  display: block;
111
111
  }
112
112
 
113
+ /* Request Header Section */
114
+ .request-header {
115
+ display: flex;
116
+ align-items: center;
117
+ gap: var(--try-out-spacing);
118
+ margin-bottom: var(--try-out-spacing-lg);
119
+ }
120
+
121
+ /* Floating Label Input */
122
+ .floating-label-group {
123
+ position: relative;
124
+ margin-bottom: var(--try-out-spacing-lg);
125
+ }
126
+
127
+ .floating-input {
128
+ width: 100%;
129
+ padding: var(--try-out-spacing-sm) var(--try-out-spacing);
130
+ border: 1px solid var(--try-out-border);
131
+ border-radius: var(--try-out-border-radius);
132
+ font-size: var(--try-out-font-base);
133
+ background: var(--try-out-bg);
134
+ color: var(--try-out-text);
135
+ transition: var(--try-out-transition);
136
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
137
+ }
138
+
139
+ .floating-label {
140
+ position: absolute;
141
+ left: var(--try-out-spacing);
142
+ top: 50%;
143
+ transform: translateY(-50%);
144
+ background: var(--try-out-bg);
145
+ padding: 0 var(--try-out-spacing-xs);
146
+ color: var(--try-out-text-light);
147
+ transition: var(--try-out-transition);
148
+ pointer-events: none;
149
+ font-size: var(--try-out-font-base);
150
+ }
151
+
152
+ .floating-input:focus + .floating-label,
153
+ .floating-input:not(:placeholder-shown) + .floating-label {
154
+ top: 0;
155
+ transform: translateY(-50%) scale(0.85);
156
+ color: var(--try-out-primary);
157
+ font-weight: 500;
158
+ }
159
+
160
+ .floating-input:focus {
161
+ border-color: var(--try-out-primary);
162
+ box-shadow: 0 0 0 2px var(--try-out-primary-light);
163
+ outline: none;
164
+ }
165
+
166
+ .url-preview {
167
+ display: flex;
168
+ align-items: center;
169
+ gap: var(--try-out-spacing-sm);
170
+ margin-top: var(--try-out-spacing-sm);
171
+ padding: var(--try-out-spacing-sm);
172
+ background: var(--try-out-surface);
173
+ border: 1px solid var(--try-out-border);
174
+ border-radius: var(--try-out-border-radius);
175
+ }
176
+
177
+ .path-display {
178
+ flex: 1;
179
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
180
+ font-size: var(--try-out-font-sm);
181
+ color: var(--try-out-text-light);
182
+ background: transparent;
183
+ border: none;
184
+ padding: 0;
185
+ }
186
+
187
+ .copy-btn {
188
+ padding: var(--try-out-spacing-xs);
189
+ background: transparent;
190
+ border: 1px solid var(--try-out-border);
191
+ border-radius: var(--try-out-border-radius);
192
+ color: var(--try-out-text-light);
193
+ cursor: pointer;
194
+ transition: var(--try-out-transition);
195
+ display: flex;
196
+ align-items: center;
197
+ justify-content: center;
198
+ width: 28px;
199
+ height: 28px;
200
+ }
201
+
202
+ .copy-btn:hover {
203
+ background: var(--try-out-primary);
204
+ color: white;
205
+ border-color: var(--try-out-primary);
206
+ }
207
+
208
+ /* Modern Input Styles */
209
+ .modern-input {
210
+ width: 100%;
211
+ padding: var(--try-out-spacing-sm) var(--try-out-spacing);
212
+ border: 1px solid var(--try-out-border);
213
+ border-radius: var(--try-out-border-radius);
214
+ background: var(--try-out-bg);
215
+ color: var(--try-out-text);
216
+ font-size: var(--try-out-font-base);
217
+ line-height: var(--try-out-line-height);
218
+ transition: var(--try-out-transition);
219
+ }
220
+
221
+ .modern-input:focus {
222
+ border-color: var(--try-out-primary);
223
+ box-shadow: 0 0 0 2px var(--try-out-primary-light);
224
+ outline: none;
225
+ }
226
+
227
+ .modern-input::placeholder {
228
+ color: var(--try-out-text-lighter);
229
+ }
230
+
231
+ /* Form Sections */
232
+ .form-section {
233
+ margin-bottom: var(--try-out-spacing-xl);
234
+ }
235
+
236
+ .section-header {
237
+ display: flex;
238
+ align-items: center;
239
+ gap: var(--try-out-spacing-sm);
240
+ margin-bottom: var(--try-out-spacing);
241
+ }
242
+
243
+ .section-header h4 {
244
+ margin: 0;
245
+ font-size: var(--try-out-font-base);
246
+ font-weight: 600;
247
+ color: var(--try-out-text);
248
+ }
249
+
250
+ .tooltip {
251
+ position: relative;
252
+ cursor: help;
253
+ display: inline-flex;
254
+ align-items: center;
255
+ justify-content: center;
256
+ width: 18px;
257
+ height: 18px;
258
+ background: var(--try-out-primary-light);
259
+ border-radius: 50%;
260
+ font-size: 0.7rem;
261
+ color: var(--try-out-primary);
262
+ }
263
+
264
+ .tooltip::after {
265
+ content: attr(data-tooltip);
266
+ position: absolute;
267
+ bottom: 125%;
268
+ left: 50%;
269
+ transform: translateX(-50%);
270
+ padding: var(--try-out-spacing-xs) var(--try-out-spacing-sm);
271
+ background: var(--try-out-text);
272
+ color: white;
273
+ border-radius: var(--try-out-border-radius);
274
+ font-size: var(--try-out-font-sm);
275
+ white-space: nowrap;
276
+ opacity: 0;
277
+ visibility: hidden;
278
+ transition: var(--try-out-transition);
279
+ z-index: 10;
280
+ }
281
+
282
+ .tooltip:hover::after {
283
+ opacity: 1;
284
+ visibility: visible;
285
+ }
286
+
287
+ /* Parameter Cards */
288
+ .parameter-grid {
289
+ display: grid;
290
+ gap: var(--try-out-spacing);
291
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
292
+ }
293
+
294
+ .parameter-card {
295
+ background: var(--try-out-surface);
296
+ border-radius: var(--try-out-border-radius);
297
+ padding: var(--try-out-spacing);
298
+ border: 1px solid var(--try-out-border);
299
+ transition: var(--try-out-transition);
300
+ }
301
+
302
+ .parameter-card.required {
303
+ border-color: var(--try-out-primary);
304
+ box-shadow: 0 0 0 1px var(--try-out-primary-light);
305
+ }
306
+
307
+ .parameter-card:hover {
308
+ box-shadow: var(--try-out-shadow-md);
309
+ }
310
+
311
+ .parameter-header {
312
+ display: flex;
313
+ justify-content: space-between;
314
+ align-items: center;
315
+ margin-bottom: var(--try-out-spacing-sm);
316
+ }
317
+
318
+ .param-label {
319
+ font-weight: 600;
320
+ color: var(--try-out-text);
321
+ font-size: var(--try-out-font-base);
322
+ margin: 0;
323
+ }
324
+
325
+ .required-badge {
326
+ font-size: var(--try-out-font-sm);
327
+ color: var(--try-out-primary);
328
+ font-weight: 500;
329
+ padding: 2px 6px;
330
+ background: var(--try-out-primary-light);
331
+ border-radius: var(--try-out-border-radius);
332
+ }
333
+
334
+ .parameter-input-group {
335
+ position: relative;
336
+ }
337
+
338
+ .validation-message {
339
+ color: var(--try-out-danger);
340
+ font-size: var(--try-out-font-sm);
341
+ margin-top: var(--try-out-spacing-xs);
342
+ min-height: 1.2em;
343
+ }
344
+
345
+ /* Header Container */
346
+ .header-container {
347
+ background: var(--try-out-surface);
348
+ border: 1px solid var(--try-out-border);
349
+ border-radius: var(--try-out-border-radius);
350
+ padding: var(--try-out-spacing);
351
+ }
352
+
353
+ .header-toolbar {
354
+ display: flex;
355
+ justify-content: space-between;
356
+ align-items: center;
357
+ gap: var(--try-out-spacing);
358
+ padding: var(--try-out-spacing-lg);
359
+ background: var(--try-out-surface-raised);
360
+ border-bottom: 1px solid var(--try-out-border);
361
+ margin-bottom: var(--try-out-spacing);
362
+ }
363
+
364
+ .header-item {
365
+ margin-bottom: var(--try-out-spacing);
366
+ }
367
+
368
+ .header-item:last-child {
369
+ margin-bottom: 0;
370
+ }
371
+
372
+ .header-inputs {
373
+ display: grid;
374
+ grid-template-columns: 1fr 2fr auto;
375
+ gap: var(--try-out-spacing-sm);
376
+ align-items: center;
377
+ }
378
+
379
+ /* Parameter Container */
380
+ .parameter-container {
381
+ background: var(--try-out-surface);
382
+ border: 1px solid var(--try-out-border);
383
+ border-radius: var(--try-out-border-radius);
384
+ overflow: hidden;
385
+ margin-bottom: var(--try-out-spacing-lg);
386
+ }
387
+
388
+ .parameter-toolbar {
389
+ display: flex;
390
+ justify-content: space-between;
391
+ align-items: center;
392
+ gap: var(--try-out-spacing);
393
+ padding: var(--try-out-spacing-lg);
394
+ background: var(--try-out-surface-raised);
395
+ border-bottom: 1px solid var(--try-out-border);
396
+ }
397
+
398
+ .add-param-btn,
399
+ .add-header-btn {
400
+ padding: var(--try-out-spacing-sm) var(--try-out-spacing-lg);
401
+ background: var(--try-out-primary);
402
+ color: white;
403
+ border: none;
404
+ border-radius: var(--try-out-border-radius);
405
+ cursor: pointer;
406
+ font-size: var(--try-out-font-base);
407
+ font-weight: 500;
408
+ display: flex;
409
+ align-items: center;
410
+ gap: var(--try-out-spacing-sm);
411
+ transition: var(--try-out-transition);
412
+ min-height: 40px;
413
+ }
414
+
415
+ .add-param-btn:hover,
416
+ .add-header-btn:hover {
417
+ background: var(--try-out-primary-hover);
418
+ }
419
+
420
+ .parameter-list {
421
+ padding: var(--try-out-spacing-lg);
422
+ }
423
+
424
+ .parameter-item {
425
+ margin-bottom: var(--try-out-spacing-lg);
426
+ padding: var(--try-out-spacing);
427
+ background: var(--try-out-bg);
428
+ border-radius: var(--try-out-border-radius);
429
+ border: 1px solid var(--try-out-border);
430
+ }
431
+
432
+ .parameter-inputs {
433
+ display: grid;
434
+ grid-template-columns: 1fr 1fr auto;
435
+ gap: var(--try-out-spacing);
436
+ align-items: center;
437
+ }
438
+
439
+ .name-input,
440
+ .value-input {
441
+ padding: var(--try-out-spacing-sm) var(--try-out-spacing);
442
+ border: 1px solid var(--try-out-border);
443
+ border-radius: var(--try-out-border-radius);
444
+ background: var(--try-out-bg);
445
+ color: var(--try-out-text);
446
+ font-size: var(--try-out-font-base);
447
+ position: relative;
448
+ min-height: 40px;
449
+ }
450
+
451
+ .name-input:focus {
452
+ border-color: var(--try-out-primary);
453
+ box-shadow: 0 0 0 2px var(--try-out-primary-light);
454
+ }
455
+
456
+ /* Parameter Suggestions */
457
+
458
+ .remove-btn {
459
+ padding: var(--try-out-spacing-xs);
460
+ background: transparent;
461
+ border: 1px solid var(--try-out-border);
462
+ border-radius: var(--try-out-border-radius);
463
+ color: var(--try-out-danger);
464
+ cursor: pointer;
465
+ transition: var(--try-out-transition);
466
+ display: flex;
467
+ align-items: center;
468
+ justify-content: center;
469
+ width: 40px;
470
+ height: 40px;
471
+ font-size: var(--try-out-font-base);
472
+ }
473
+
474
+ .remove-btn:hover {
475
+ background: var(--try-out-danger);
476
+ color: white;
477
+ border-color: var(--try-out-danger);
478
+ }
479
+
480
+ /* Remove duplicate action bar - buttons will be in modal footer only */
481
+ /* Keep action bar hidden for backward compatibility */
482
+ .action-bar {
483
+ display: none;
484
+ }
485
+
486
+ /* Request Body Toolbar */
487
+ .body-toolbar {
488
+ display: flex;
489
+ gap: var(--try-out-spacing-xs);
490
+ margin-left: auto;
491
+ }
492
+
493
+ .format-btn,
494
+ .validate-btn {
495
+ padding: var(--try-out-spacing-xs) var(--try-out-spacing-sm);
496
+ background: transparent;
497
+ border: 1px solid var(--try-out-border);
498
+ border-radius: var(--try-out-border-radius);
499
+ color: var(--try-out-text-light);
500
+ cursor: pointer;
501
+ font-size: var(--try-out-font-sm);
502
+ transition: var(--try-out-transition);
503
+ display: flex;
504
+ align-items: center;
505
+ gap: var(--try-out-spacing-xs);
506
+ }
507
+
508
+ .format-btn:hover,
509
+ .validate-btn:hover {
510
+ background: var(--try-out-primary);
511
+ color: white;
512
+ border-color: var(--try-out-primary);
513
+ }
514
+
515
+ /* Editor Container */
516
+ .editor-wrapper {
517
+ position: relative;
518
+ }
519
+
520
+ .code-editor {
521
+ width: 100%;
522
+ padding: var(--try-out-spacing);
523
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
524
+ font-size: var(--try-out-font-sm);
525
+ line-height: var(--try-out-line-height);
526
+ border: 1px solid var(--try-out-border);
527
+ border-radius: var(--try-out-border-radius);
528
+ background: var(--try-out-surface);
529
+ color: var(--try-out-text);
530
+ resize: vertical;
531
+ min-height: 120px;
532
+ transition: var(--try-out-transition);
533
+ }
534
+
535
+ .code-editor:focus {
536
+ border-color: var(--try-out-primary);
537
+ box-shadow: 0 0 0 2px var(--try-out-primary-light);
538
+ outline: none;
539
+ }
540
+
541
+ .validation-status {
542
+ margin-top: var(--try-out-spacing-xs);
543
+ font-size: var(--try-out-font-sm);
544
+ font-weight: 500;
545
+ }
546
+
547
+ .validation-status.valid {
548
+ color: var(--try-out-success);
549
+ }
550
+
551
+ .validation-status.invalid {
552
+ color: var(--try-out-danger);
553
+ }
554
+
555
+ /* Loading States */
556
+ .loading-spinner {
557
+ display: none;
558
+ width: 16px;
559
+ height: 16px;
560
+ border: 2px solid rgba(255, 255, 255, 0.3);
561
+ border-radius: 50%;
562
+ border-top-color: white;
563
+ animation: spin 1s linear infinite;
564
+ }
565
+
566
+ .primary-button.loading .loading-spinner {
567
+ display: inline-block;
568
+ margin-right: var(--try-out-spacing-xs);
569
+ }
570
+
571
+ .primary-button.loading .icon {
572
+ display: none;
573
+ }
574
+
575
+ @keyframes spin {
576
+ to { transform: rotate(360deg); }
577
+ }
578
+
113
579
  /* Mobile Form Adjustments */
114
580
  @media screen and (max-width: 768px) {
581
+ .request-header {
582
+ flex-direction: column;
583
+ align-items: stretch;
584
+ gap: var(--try-out-spacing);
585
+ }
586
+
115
587
  .base-url-section .url-display {
116
588
  flex-direction: column;
117
589
  align-items: stretch;
@@ -121,4 +593,71 @@
121
593
  .base-url-section .base-url-input {
122
594
  min-width: auto;
123
595
  }
596
+
597
+ .parameter-grid {
598
+ grid-template-columns: 1fr;
599
+ }
600
+
601
+ .parameter-inputs,
602
+ .header-inputs {
603
+ grid-template-columns: 1fr;
604
+ gap: var(--try-out-spacing-xs);
605
+ }
606
+
607
+ .header-inputs {
608
+ grid-template-columns: 1fr;
609
+ }
610
+
611
+ .parameter-toolbar {
612
+ flex-direction: column;
613
+ align-items: stretch;
614
+ gap: var(--try-out-spacing-sm);
615
+ }
616
+
617
+ .add-param-btn,
618
+ .add-header-btn {
619
+ order: 1;
620
+ align-self: flex-start;
621
+ }
622
+
623
+ /* Ensure inputs are easily tappable */
624
+ .modern-input,
625
+ .name-input,
626
+ .value-input {
627
+ min-height: 44px;
628
+ padding: var(--try-out-spacing) var(--try-out-spacing-sm);
629
+ font-size: 16px; /* Prevent zoom on iOS */
630
+ }
631
+
632
+ .remove-btn,
633
+ .copy-btn,
634
+ .format-btn,
635
+ .validate-btn {
636
+ min-width: 44px;
637
+ min-height: 44px;
638
+ padding: var(--try-out-spacing);
639
+ }
640
+
641
+ .code-editor {
642
+ min-height: 100px;
643
+ font-size: 16px; /* Prevent zoom on iOS */
644
+ }
645
+
646
+ /* Smart tabs mobile adjustments */
647
+ .smart-tabs {
648
+ flex-wrap: wrap;
649
+ gap: var(--try-out-spacing-xs);
650
+ }
651
+
652
+ .tab {
653
+ flex: 1;
654
+ min-width: calc(50% - var(--try-out-spacing-xs));
655
+ justify-content: center;
656
+ padding: var(--try-out-spacing-sm);
657
+ }
658
+
659
+ /* Hide action bar on mobile since buttons are in footer */
660
+ .action-bar {
661
+ display: none;
662
+ }
124
663
  }