django-fast-treenode 2.1.4__py3-none-any.whl → 3.0.1__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.
Files changed (107) hide show
  1. django_fast_treenode-3.0.1.dist-info/METADATA +203 -0
  2. django_fast_treenode-3.0.1.dist-info/RECORD +90 -0
  3. {django_fast_treenode-2.1.4.dist-info → django_fast_treenode-3.0.1.dist-info}/WHEEL +1 -1
  4. treenode/admin/__init__.py +2 -7
  5. treenode/admin/admin.py +138 -209
  6. treenode/admin/changelist.py +21 -39
  7. treenode/admin/exporter.py +170 -0
  8. treenode/admin/importer.py +171 -0
  9. treenode/admin/mixin.py +291 -0
  10. treenode/apps.py +41 -19
  11. treenode/cache.py +192 -303
  12. treenode/forms.py +45 -65
  13. treenode/managers/__init__.py +4 -20
  14. treenode/managers/managers.py +216 -0
  15. treenode/managers/queries.py +233 -0
  16. treenode/managers/tasks.py +167 -0
  17. treenode/models/__init__.py +8 -5
  18. treenode/models/decorators.py +54 -0
  19. treenode/models/factory.py +44 -68
  20. treenode/models/mixins/__init__.py +2 -1
  21. treenode/models/mixins/ancestors.py +44 -20
  22. treenode/models/mixins/children.py +33 -26
  23. treenode/models/mixins/descendants.py +33 -22
  24. treenode/models/mixins/family.py +25 -15
  25. treenode/models/mixins/logical.py +23 -21
  26. treenode/models/mixins/node.py +162 -104
  27. treenode/models/mixins/properties.py +22 -16
  28. treenode/models/mixins/roots.py +59 -15
  29. treenode/models/mixins/siblings.py +46 -43
  30. treenode/models/mixins/tree.py +212 -153
  31. treenode/models/mixins/update.py +154 -0
  32. treenode/models/models.py +365 -0
  33. treenode/settings.py +28 -0
  34. treenode/static/{treenode/css → css}/tree_widget.css +1 -1
  35. treenode/static/{treenode/css → css}/treenode_admin.css +43 -2
  36. treenode/static/css/treenode_tabs.css +51 -0
  37. treenode/static/js/lz-string.min.js +1 -0
  38. treenode/static/{treenode/js → js}/tree_widget.js +9 -23
  39. treenode/static/js/treenode_admin.js +531 -0
  40. treenode/static/vendors/jquery-ui/AUTHORS.txt +384 -0
  41. treenode/static/vendors/jquery-ui/LICENSE.txt +43 -0
  42. treenode/static/vendors/jquery-ui/external/jquery/jquery.js +10716 -0
  43. treenode/static/vendors/jquery-ui/images/ui-icons_444444_256x240.png +0 -0
  44. treenode/static/vendors/jquery-ui/images/ui-icons_555555_256x240.png +0 -0
  45. treenode/static/vendors/jquery-ui/images/ui-icons_777620_256x240.png +0 -0
  46. treenode/static/vendors/jquery-ui/images/ui-icons_777777_256x240.png +0 -0
  47. treenode/static/vendors/jquery-ui/images/ui-icons_cc0000_256x240.png +0 -0
  48. treenode/static/vendors/jquery-ui/images/ui-icons_ffffff_256x240.png +0 -0
  49. treenode/static/vendors/jquery-ui/index.html +297 -0
  50. treenode/static/vendors/jquery-ui/jquery-ui.css +438 -0
  51. treenode/static/vendors/jquery-ui/jquery-ui.js +5223 -0
  52. treenode/static/vendors/jquery-ui/jquery-ui.min.css +7 -0
  53. treenode/static/vendors/jquery-ui/jquery-ui.min.js +6 -0
  54. treenode/static/vendors/jquery-ui/jquery-ui.structure.css +16 -0
  55. treenode/static/vendors/jquery-ui/jquery-ui.structure.min.css +5 -0
  56. treenode/static/vendors/jquery-ui/jquery-ui.theme.css +439 -0
  57. treenode/static/vendors/jquery-ui/jquery-ui.theme.min.css +5 -0
  58. treenode/static/vendors/jquery-ui/package.json +82 -0
  59. treenode/templates/admin/treenode_changelist.html +25 -0
  60. treenode/templates/admin/treenode_import_export.html +85 -0
  61. treenode/templates/admin/treenode_rows.html +57 -0
  62. treenode/tests.py +3 -0
  63. treenode/urls.py +6 -27
  64. treenode/utils/__init__.py +0 -15
  65. treenode/utils/db/__init__.py +7 -0
  66. treenode/utils/db/compiler.py +114 -0
  67. treenode/utils/db/db_vendor.py +50 -0
  68. treenode/utils/db/service.py +84 -0
  69. treenode/utils/db/sqlcompat.py +60 -0
  70. treenode/utils/db/sqlquery.py +70 -0
  71. treenode/version.py +2 -2
  72. treenode/views/__init__.py +5 -0
  73. treenode/views/autoapi.py +91 -0
  74. treenode/views/autocomplete.py +52 -0
  75. treenode/views/children.py +41 -0
  76. treenode/views/common.py +23 -0
  77. treenode/views/crud.py +209 -0
  78. treenode/views/search.py +48 -0
  79. treenode/widgets.py +27 -44
  80. django_fast_treenode-2.1.4.dist-info/METADATA +0 -166
  81. django_fast_treenode-2.1.4.dist-info/RECORD +0 -63
  82. treenode/admin/mixins.py +0 -302
  83. treenode/managers/adjacency.py +0 -205
  84. treenode/managers/closure.py +0 -278
  85. treenode/models/adjacency.py +0 -342
  86. treenode/models/classproperty.py +0 -27
  87. treenode/models/closure.py +0 -122
  88. treenode/static/treenode/js/.gitkeep +0 -1
  89. treenode/static/treenode/js/treenode_admin.js +0 -131
  90. treenode/templates/admin/export_success.html +0 -26
  91. treenode/templates/admin/tree_node_changelist.html +0 -19
  92. treenode/templates/admin/tree_node_export.html +0 -27
  93. treenode/templates/admin/tree_node_import.html +0 -45
  94. treenode/templates/admin/tree_node_import_report.html +0 -32
  95. treenode/templates/widgets/tree_widget.css +0 -23
  96. treenode/utils/aid.py +0 -46
  97. treenode/utils/base16.py +0 -38
  98. treenode/utils/base36.py +0 -37
  99. treenode/utils/db.py +0 -116
  100. treenode/utils/exporter.py +0 -196
  101. treenode/utils/importer.py +0 -328
  102. treenode/utils/radix.py +0 -61
  103. treenode/views.py +0 -184
  104. {django_fast_treenode-2.1.4.dist-info → django_fast_treenode-3.0.1.dist-info/licenses}/LICENSE +0 -0
  105. {django_fast_treenode-2.1.4.dist-info → django_fast_treenode-3.0.1.dist-info}/top_level.txt +0 -0
  106. /treenode/static/{treenode → css}/.gitkeep +0 -0
  107. /treenode/static/{treenode/css → js}/.gitkeep +0 -0
@@ -0,0 +1,439 @@
1
+ /*!
2
+ * jQuery UI CSS Framework 1.14.1
3
+ * https://jqueryui.com
4
+ *
5
+ * Copyright OpenJS Foundation and other contributors
6
+ * Released under the MIT license.
7
+ * https://jquery.org/license
8
+ *
9
+ * https://api.jqueryui.com/category/theming/
10
+ *
11
+ * To view and modify this theme, visit https://jqueryui.com/themeroller/?ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&fwDefault=normal&cornerRadius=3px&bgColorHeader=e9e9e9&bgTextureHeader=flat&borderColorHeader=dddddd&fcHeader=333333&iconColorHeader=444444&bgColorContent=ffffff&bgTextureContent=flat&borderColorContent=dddddd&fcContent=333333&iconColorContent=444444&bgColorDefault=f6f6f6&bgTextureDefault=flat&borderColorDefault=c5c5c5&fcDefault=454545&iconColorDefault=777777&bgColorHover=ededed&bgTextureHover=flat&borderColorHover=cccccc&fcHover=2b2b2b&iconColorHover=555555&bgColorActive=007fff&bgTextureActive=flat&borderColorActive=003eff&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=fffa90&bgTextureHighlight=flat&borderColorHighlight=dad55e&fcHighlight=777620&iconColorHighlight=777620&bgColorError=fddfdf&bgTextureError=flat&borderColorError=f1a899&fcError=5f3f3f&iconColorError=cc0000&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=666666&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=5px&offsetTopShadow=0px&offsetLeftShadow=0px&cornerRadiusShadow=8px
12
+ */
13
+
14
+
15
+ /* Component containers
16
+ ----------------------------------*/
17
+ .ui-widget {
18
+ font-family: Arial,Helvetica,sans-serif;
19
+ font-size: 1em;
20
+ }
21
+ .ui-widget .ui-widget {
22
+ font-size: 1em;
23
+ }
24
+ .ui-widget input,
25
+ .ui-widget select,
26
+ .ui-widget textarea,
27
+ .ui-widget button {
28
+ font-family: Arial,Helvetica,sans-serif;
29
+ font-size: 1em;
30
+ }
31
+ .ui-widget.ui-widget-content {
32
+ border: 1px solid #c5c5c5;
33
+ }
34
+ .ui-widget-content {
35
+ border: 1px solid #dddddd;
36
+ background: #ffffff;
37
+ color: #333333;
38
+ }
39
+ .ui-widget-content a {
40
+ color: #333333;
41
+ }
42
+ .ui-widget-header {
43
+ border: 1px solid #dddddd;
44
+ background: #e9e9e9;
45
+ color: #333333;
46
+ font-weight: bold;
47
+ }
48
+ .ui-widget-header a {
49
+ color: #333333;
50
+ }
51
+
52
+ /* Interaction states
53
+ ----------------------------------*/
54
+ .ui-state-default,
55
+ .ui-widget-content .ui-state-default,
56
+ .ui-widget-header .ui-state-default,
57
+ .ui-button,
58
+
59
+ /* We use html here because we need a greater specificity to make sure disabled
60
+ works properly when clicked or hovered */
61
+ html .ui-button.ui-state-disabled:hover,
62
+ html .ui-button.ui-state-disabled:active {
63
+ border: 1px solid #c5c5c5;
64
+ background: #f6f6f6;
65
+ font-weight: normal;
66
+ color: #454545;
67
+ }
68
+ .ui-state-default a,
69
+ .ui-state-default a:link,
70
+ .ui-state-default a:visited,
71
+ a.ui-button,
72
+ a:link.ui-button,
73
+ a:visited.ui-button,
74
+ .ui-button {
75
+ color: #454545;
76
+ text-decoration: none;
77
+ }
78
+ .ui-state-hover,
79
+ .ui-widget-content .ui-state-hover,
80
+ .ui-widget-header .ui-state-hover,
81
+ .ui-state-focus,
82
+ .ui-widget-content .ui-state-focus,
83
+ .ui-widget-header .ui-state-focus,
84
+ .ui-button:hover,
85
+ .ui-button:focus {
86
+ border: 1px solid #cccccc;
87
+ background: #ededed;
88
+ font-weight: normal;
89
+ color: #2b2b2b;
90
+ }
91
+ .ui-state-hover a,
92
+ .ui-state-hover a:hover,
93
+ .ui-state-hover a:link,
94
+ .ui-state-hover a:visited,
95
+ .ui-state-focus a,
96
+ .ui-state-focus a:hover,
97
+ .ui-state-focus a:link,
98
+ .ui-state-focus a:visited,
99
+ a.ui-button:hover,
100
+ a.ui-button:focus {
101
+ color: #2b2b2b;
102
+ text-decoration: none;
103
+ }
104
+
105
+ .ui-visual-focus {
106
+ box-shadow: 0 0 3px 1px rgb(94, 158, 214);
107
+ }
108
+ .ui-state-active,
109
+ .ui-widget-content .ui-state-active,
110
+ .ui-widget-header .ui-state-active,
111
+ a.ui-button:active,
112
+ .ui-button:active,
113
+ .ui-button.ui-state-active:hover {
114
+ border: 1px solid #003eff;
115
+ background: #007fff;
116
+ font-weight: normal;
117
+ color: #ffffff;
118
+ }
119
+ .ui-icon-background,
120
+ .ui-state-active .ui-icon-background {
121
+ border: #003eff;
122
+ background-color: #ffffff;
123
+ }
124
+ .ui-state-active a,
125
+ .ui-state-active a:link,
126
+ .ui-state-active a:visited {
127
+ color: #ffffff;
128
+ text-decoration: none;
129
+ }
130
+
131
+ /* Interaction Cues
132
+ ----------------------------------*/
133
+ .ui-state-highlight,
134
+ .ui-widget-content .ui-state-highlight,
135
+ .ui-widget-header .ui-state-highlight {
136
+ border: 1px solid #dad55e;
137
+ background: #fffa90;
138
+ color: #777620;
139
+ }
140
+ .ui-state-checked {
141
+ border: 1px solid #dad55e;
142
+ background: #fffa90;
143
+ }
144
+ .ui-state-highlight a,
145
+ .ui-widget-content .ui-state-highlight a,
146
+ .ui-widget-header .ui-state-highlight a {
147
+ color: #777620;
148
+ }
149
+ .ui-state-error,
150
+ .ui-widget-content .ui-state-error,
151
+ .ui-widget-header .ui-state-error {
152
+ border: 1px solid #f1a899;
153
+ background: #fddfdf;
154
+ color: #5f3f3f;
155
+ }
156
+ .ui-state-error a,
157
+ .ui-widget-content .ui-state-error a,
158
+ .ui-widget-header .ui-state-error a {
159
+ color: #5f3f3f;
160
+ }
161
+ .ui-state-error-text,
162
+ .ui-widget-content .ui-state-error-text,
163
+ .ui-widget-header .ui-state-error-text {
164
+ color: #5f3f3f;
165
+ }
166
+ .ui-priority-primary,
167
+ .ui-widget-content .ui-priority-primary,
168
+ .ui-widget-header .ui-priority-primary {
169
+ font-weight: bold;
170
+ }
171
+ .ui-priority-secondary,
172
+ .ui-widget-content .ui-priority-secondary,
173
+ .ui-widget-header .ui-priority-secondary {
174
+ opacity: .7;
175
+ font-weight: normal;
176
+ }
177
+ .ui-state-disabled,
178
+ .ui-widget-content .ui-state-disabled,
179
+ .ui-widget-header .ui-state-disabled {
180
+ opacity: .35;
181
+ background-image: none;
182
+ }
183
+
184
+ /* Icons
185
+ ----------------------------------*/
186
+
187
+ /* states and images */
188
+ .ui-icon {
189
+ width: 16px;
190
+ height: 16px;
191
+ }
192
+ .ui-icon,
193
+ .ui-widget-content .ui-icon {
194
+ background-image: url("images/ui-icons_444444_256x240.png");
195
+ }
196
+ .ui-widget-header .ui-icon {
197
+ background-image: url("images/ui-icons_444444_256x240.png");
198
+ }
199
+ .ui-state-hover .ui-icon,
200
+ .ui-state-focus .ui-icon,
201
+ .ui-button:hover .ui-icon,
202
+ .ui-button:focus .ui-icon {
203
+ background-image: url("images/ui-icons_555555_256x240.png");
204
+ }
205
+ .ui-state-active .ui-icon,
206
+ .ui-button:active .ui-icon {
207
+ background-image: url("images/ui-icons_ffffff_256x240.png");
208
+ }
209
+ .ui-state-highlight .ui-icon,
210
+ .ui-button .ui-state-highlight.ui-icon {
211
+ background-image: url("images/ui-icons_777620_256x240.png");
212
+ }
213
+ .ui-state-error .ui-icon,
214
+ .ui-state-error-text .ui-icon {
215
+ background-image: url("images/ui-icons_cc0000_256x240.png");
216
+ }
217
+ .ui-button .ui-icon {
218
+ background-image: url("images/ui-icons_777777_256x240.png");
219
+ }
220
+
221
+ /* positioning */
222
+ /* Three classes needed to override `.ui-button:hover .ui-icon` */
223
+ .ui-icon-blank.ui-icon-blank.ui-icon-blank {
224
+ background-image: none;
225
+ }
226
+ .ui-icon-caret-1-n { background-position: 0 0; }
227
+ .ui-icon-caret-1-ne { background-position: -16px 0; }
228
+ .ui-icon-caret-1-e { background-position: -32px 0; }
229
+ .ui-icon-caret-1-se { background-position: -48px 0; }
230
+ .ui-icon-caret-1-s { background-position: -65px 0; }
231
+ .ui-icon-caret-1-sw { background-position: -80px 0; }
232
+ .ui-icon-caret-1-w { background-position: -96px 0; }
233
+ .ui-icon-caret-1-nw { background-position: -112px 0; }
234
+ .ui-icon-caret-2-n-s { background-position: -128px 0; }
235
+ .ui-icon-caret-2-e-w { background-position: -144px 0; }
236
+ .ui-icon-triangle-1-n { background-position: 0 -16px; }
237
+ .ui-icon-triangle-1-ne { background-position: -16px -16px; }
238
+ .ui-icon-triangle-1-e { background-position: -32px -16px; }
239
+ .ui-icon-triangle-1-se { background-position: -48px -16px; }
240
+ .ui-icon-triangle-1-s { background-position: -65px -16px; }
241
+ .ui-icon-triangle-1-sw { background-position: -80px -16px; }
242
+ .ui-icon-triangle-1-w { background-position: -96px -16px; }
243
+ .ui-icon-triangle-1-nw { background-position: -112px -16px; }
244
+ .ui-icon-triangle-2-n-s { background-position: -128px -16px; }
245
+ .ui-icon-triangle-2-e-w { background-position: -144px -16px; }
246
+ .ui-icon-arrow-1-n { background-position: 0 -32px; }
247
+ .ui-icon-arrow-1-ne { background-position: -16px -32px; }
248
+ .ui-icon-arrow-1-e { background-position: -32px -32px; }
249
+ .ui-icon-arrow-1-se { background-position: -48px -32px; }
250
+ .ui-icon-arrow-1-s { background-position: -65px -32px; }
251
+ .ui-icon-arrow-1-sw { background-position: -80px -32px; }
252
+ .ui-icon-arrow-1-w { background-position: -96px -32px; }
253
+ .ui-icon-arrow-1-nw { background-position: -112px -32px; }
254
+ .ui-icon-arrow-2-n-s { background-position: -128px -32px; }
255
+ .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
256
+ .ui-icon-arrow-2-e-w { background-position: -160px -32px; }
257
+ .ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
258
+ .ui-icon-arrowstop-1-n { background-position: -192px -32px; }
259
+ .ui-icon-arrowstop-1-e { background-position: -208px -32px; }
260
+ .ui-icon-arrowstop-1-s { background-position: -224px -32px; }
261
+ .ui-icon-arrowstop-1-w { background-position: -240px -32px; }
262
+ .ui-icon-arrowthick-1-n { background-position: 1px -48px; }
263
+ .ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
264
+ .ui-icon-arrowthick-1-e { background-position: -32px -48px; }
265
+ .ui-icon-arrowthick-1-se { background-position: -48px -48px; }
266
+ .ui-icon-arrowthick-1-s { background-position: -64px -48px; }
267
+ .ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
268
+ .ui-icon-arrowthick-1-w { background-position: -96px -48px; }
269
+ .ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
270
+ .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
271
+ .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
272
+ .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
273
+ .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
274
+ .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
275
+ .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
276
+ .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
277
+ .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
278
+ .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
279
+ .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
280
+ .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
281
+ .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
282
+ .ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
283
+ .ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
284
+ .ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
285
+ .ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
286
+ .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
287
+ .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
288
+ .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
289
+ .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
290
+ .ui-icon-arrow-4 { background-position: 0 -80px; }
291
+ .ui-icon-arrow-4-diag { background-position: -16px -80px; }
292
+ .ui-icon-extlink { background-position: -32px -80px; }
293
+ .ui-icon-newwin { background-position: -48px -80px; }
294
+ .ui-icon-refresh { background-position: -64px -80px; }
295
+ .ui-icon-shuffle { background-position: -80px -80px; }
296
+ .ui-icon-transfer-e-w { background-position: -96px -80px; }
297
+ .ui-icon-transferthick-e-w { background-position: -112px -80px; }
298
+ .ui-icon-folder-collapsed { background-position: 0 -96px; }
299
+ .ui-icon-folder-open { background-position: -16px -96px; }
300
+ .ui-icon-document { background-position: -32px -96px; }
301
+ .ui-icon-document-b { background-position: -48px -96px; }
302
+ .ui-icon-note { background-position: -64px -96px; }
303
+ .ui-icon-mail-closed { background-position: -80px -96px; }
304
+ .ui-icon-mail-open { background-position: -96px -96px; }
305
+ .ui-icon-suitcase { background-position: -112px -96px; }
306
+ .ui-icon-comment { background-position: -128px -96px; }
307
+ .ui-icon-person { background-position: -144px -96px; }
308
+ .ui-icon-print { background-position: -160px -96px; }
309
+ .ui-icon-trash { background-position: -176px -96px; }
310
+ .ui-icon-locked { background-position: -192px -96px; }
311
+ .ui-icon-unlocked { background-position: -208px -96px; }
312
+ .ui-icon-bookmark { background-position: -224px -96px; }
313
+ .ui-icon-tag { background-position: -240px -96px; }
314
+ .ui-icon-home { background-position: 0 -112px; }
315
+ .ui-icon-flag { background-position: -16px -112px; }
316
+ .ui-icon-calendar { background-position: -32px -112px; }
317
+ .ui-icon-cart { background-position: -48px -112px; }
318
+ .ui-icon-pencil { background-position: -64px -112px; }
319
+ .ui-icon-clock { background-position: -80px -112px; }
320
+ .ui-icon-disk { background-position: -96px -112px; }
321
+ .ui-icon-calculator { background-position: -112px -112px; }
322
+ .ui-icon-zoomin { background-position: -128px -112px; }
323
+ .ui-icon-zoomout { background-position: -144px -112px; }
324
+ .ui-icon-search { background-position: -160px -112px; }
325
+ .ui-icon-wrench { background-position: -176px -112px; }
326
+ .ui-icon-gear { background-position: -192px -112px; }
327
+ .ui-icon-heart { background-position: -208px -112px; }
328
+ .ui-icon-star { background-position: -224px -112px; }
329
+ .ui-icon-link { background-position: -240px -112px; }
330
+ .ui-icon-cancel { background-position: 0 -128px; }
331
+ .ui-icon-plus { background-position: -16px -128px; }
332
+ .ui-icon-plusthick { background-position: -32px -128px; }
333
+ .ui-icon-minus { background-position: -48px -128px; }
334
+ .ui-icon-minusthick { background-position: -64px -128px; }
335
+ .ui-icon-close { background-position: -80px -128px; }
336
+ .ui-icon-closethick { background-position: -96px -128px; }
337
+ .ui-icon-key { background-position: -112px -128px; }
338
+ .ui-icon-lightbulb { background-position: -128px -128px; }
339
+ .ui-icon-scissors { background-position: -144px -128px; }
340
+ .ui-icon-clipboard { background-position: -160px -128px; }
341
+ .ui-icon-copy { background-position: -176px -128px; }
342
+ .ui-icon-contact { background-position: -192px -128px; }
343
+ .ui-icon-image { background-position: -208px -128px; }
344
+ .ui-icon-video { background-position: -224px -128px; }
345
+ .ui-icon-script { background-position: -240px -128px; }
346
+ .ui-icon-alert { background-position: 0 -144px; }
347
+ .ui-icon-info { background-position: -16px -144px; }
348
+ .ui-icon-notice { background-position: -32px -144px; }
349
+ .ui-icon-help { background-position: -48px -144px; }
350
+ .ui-icon-check { background-position: -64px -144px; }
351
+ .ui-icon-bullet { background-position: -80px -144px; }
352
+ .ui-icon-radio-on { background-position: -96px -144px; }
353
+ .ui-icon-radio-off { background-position: -112px -144px; }
354
+ .ui-icon-pin-w { background-position: -128px -144px; }
355
+ .ui-icon-pin-s { background-position: -144px -144px; }
356
+ .ui-icon-play { background-position: 0 -160px; }
357
+ .ui-icon-pause { background-position: -16px -160px; }
358
+ .ui-icon-seek-next { background-position: -32px -160px; }
359
+ .ui-icon-seek-prev { background-position: -48px -160px; }
360
+ .ui-icon-seek-end { background-position: -64px -160px; }
361
+ .ui-icon-seek-start { background-position: -80px -160px; }
362
+ /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
363
+ .ui-icon-seek-first { background-position: -80px -160px; }
364
+ .ui-icon-stop { background-position: -96px -160px; }
365
+ .ui-icon-eject { background-position: -112px -160px; }
366
+ .ui-icon-volume-off { background-position: -128px -160px; }
367
+ .ui-icon-volume-on { background-position: -144px -160px; }
368
+ .ui-icon-power { background-position: 0 -176px; }
369
+ .ui-icon-signal-diag { background-position: -16px -176px; }
370
+ .ui-icon-signal { background-position: -32px -176px; }
371
+ .ui-icon-battery-0 { background-position: -48px -176px; }
372
+ .ui-icon-battery-1 { background-position: -64px -176px; }
373
+ .ui-icon-battery-2 { background-position: -80px -176px; }
374
+ .ui-icon-battery-3 { background-position: -96px -176px; }
375
+ .ui-icon-circle-plus { background-position: 0 -192px; }
376
+ .ui-icon-circle-minus { background-position: -16px -192px; }
377
+ .ui-icon-circle-close { background-position: -32px -192px; }
378
+ .ui-icon-circle-triangle-e { background-position: -48px -192px; }
379
+ .ui-icon-circle-triangle-s { background-position: -64px -192px; }
380
+ .ui-icon-circle-triangle-w { background-position: -80px -192px; }
381
+ .ui-icon-circle-triangle-n { background-position: -96px -192px; }
382
+ .ui-icon-circle-arrow-e { background-position: -112px -192px; }
383
+ .ui-icon-circle-arrow-s { background-position: -128px -192px; }
384
+ .ui-icon-circle-arrow-w { background-position: -144px -192px; }
385
+ .ui-icon-circle-arrow-n { background-position: -160px -192px; }
386
+ .ui-icon-circle-zoomin { background-position: -176px -192px; }
387
+ .ui-icon-circle-zoomout { background-position: -192px -192px; }
388
+ .ui-icon-circle-check { background-position: -208px -192px; }
389
+ .ui-icon-circlesmall-plus { background-position: 0 -208px; }
390
+ .ui-icon-circlesmall-minus { background-position: -16px -208px; }
391
+ .ui-icon-circlesmall-close { background-position: -32px -208px; }
392
+ .ui-icon-squaresmall-plus { background-position: -48px -208px; }
393
+ .ui-icon-squaresmall-minus { background-position: -64px -208px; }
394
+ .ui-icon-squaresmall-close { background-position: -80px -208px; }
395
+ .ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
396
+ .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
397
+ .ui-icon-grip-solid-vertical { background-position: -32px -224px; }
398
+ .ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
399
+ .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
400
+ .ui-icon-grip-diagonal-se { background-position: -80px -224px; }
401
+
402
+
403
+ /* Misc visuals
404
+ ----------------------------------*/
405
+
406
+ /* Corner radius */
407
+ .ui-corner-all,
408
+ .ui-corner-top,
409
+ .ui-corner-left,
410
+ .ui-corner-tl {
411
+ border-top-left-radius: 3px;
412
+ }
413
+ .ui-corner-all,
414
+ .ui-corner-top,
415
+ .ui-corner-right,
416
+ .ui-corner-tr {
417
+ border-top-right-radius: 3px;
418
+ }
419
+ .ui-corner-all,
420
+ .ui-corner-bottom,
421
+ .ui-corner-left,
422
+ .ui-corner-bl {
423
+ border-bottom-left-radius: 3px;
424
+ }
425
+ .ui-corner-all,
426
+ .ui-corner-bottom,
427
+ .ui-corner-right,
428
+ .ui-corner-br {
429
+ border-bottom-right-radius: 3px;
430
+ }
431
+
432
+ /* Overlays */
433
+ .ui-widget-overlay {
434
+ background: #aaaaaa;
435
+ opacity: .3;
436
+ }
437
+ .ui-widget-shadow {
438
+ box-shadow: 0px 0px 5px #666666;
439
+ }
@@ -0,0 +1,5 @@
1
+ /*! jQuery UI - v1.14.1 - 2025-04-13
2
+ * https://jqueryui.com
3
+ * Copyright OpenJS Foundation and other contributors; Licensed MIT */
4
+
5
+ .ui-widget{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget.ui-widget-content{border:1px solid #c5c5c5}.ui-widget-content{border:1px solid #ddd;background:#fff;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #ddd;background:#e9e9e9;color:#333;font-weight:bold}.ui-widget-header a{color:#333}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,.ui-button,html .ui-button.ui-state-disabled:hover,html .ui-button.ui-state-disabled:active{border:1px solid #c5c5c5;background:#f6f6f6;font-weight:normal;color:#454545}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button,.ui-button{color:#454545;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus,.ui-button:hover,.ui-button:focus{border:1px solid #ccc;background:#ededed;font-weight:normal;color:#2b2b2b}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,a.ui-button:hover,a.ui-button:focus{color:#2b2b2b;text-decoration:none}.ui-visual-focus{box-shadow:0 0 3px 1px rgb(94,158,214)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,a.ui-button:active,.ui-button:active,.ui-button.ui-state-active:hover{border:1px solid #003eff;background:#007fff;font-weight:normal;color:#fff}.ui-icon-background,.ui-state-active .ui-icon-background{border:#003eff;background-color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #dad55e;background:#fffa90;color:#777620}.ui-state-checked{border:1px solid #dad55e;background:#fffa90}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#777620}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #f1a899;background:#fddfdf;color:#5f3f3f}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#5f3f3f}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#5f3f3f}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;background-image:none}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_444444_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_444444_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon,.ui-button:hover .ui-icon,.ui-button:focus .ui-icon{background-image:url("images/ui-icons_555555_256x240.png")}.ui-state-active .ui-icon,.ui-button:active .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-state-highlight .ui-icon,.ui-button .ui-state-highlight.ui-icon{background-image:url("images/ui-icons_777620_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cc0000_256x240.png")}.ui-button .ui-icon{background-image:url("images/ui-icons_777777_256x240.png")}.ui-icon-blank.ui-icon-blank.ui-icon-blank{background-image:none}.ui-icon-caret-1-n{background-position:0 0}.ui-icon-caret-1-ne{background-position:-16px 0}.ui-icon-caret-1-e{background-position:-32px 0}.ui-icon-caret-1-se{background-position:-48px 0}.ui-icon-caret-1-s{background-position:-65px 0}.ui-icon-caret-1-sw{background-position:-80px 0}.ui-icon-caret-1-w{background-position:-96px 0}.ui-icon-caret-1-nw{background-position:-112px 0}.ui-icon-caret-2-n-s{background-position:-128px 0}.ui-icon-caret-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-65px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-65px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:1px -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:3px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:3px}.ui-widget-overlay{background:#aaa;opacity:.3}.ui-widget-shadow{box-shadow:0 0 5px #666}
@@ -0,0 +1,82 @@
1
+ {
2
+ "name": "jquery-ui",
3
+ "title": "jQuery UI",
4
+ "description": "A curated set of user interface interactions, effects, widgets, and themes built on top of the jQuery JavaScript Library.",
5
+ "version": "1.14.1",
6
+ "homepage": "https://jqueryui.com",
7
+ "author": {
8
+ "name": "OpenJS Foundation and other contributors",
9
+ "url": "https://github.com/jquery/jquery-ui/blob/1.14.1/AUTHORS.txt"
10
+ },
11
+ "main": "ui/widget.js",
12
+ "maintainers": [
13
+ {
14
+ "name": "Jörn Zaefferer",
15
+ "email": "joern.zaefferer@gmail.com",
16
+ "url": "https://bassistance.de"
17
+ },
18
+ {
19
+ "name": "Mike Sherov",
20
+ "email": "mike.sherov@gmail.com",
21
+ "url": "https://mike.sherov.com"
22
+ },
23
+ {
24
+ "name": "TJ VanToll",
25
+ "email": "tj.vantoll@gmail.com",
26
+ "url": "https://www.tjvantoll.com"
27
+ },
28
+ {
29
+ "name": "Felix Nagel",
30
+ "email": "info@felixnagel.com",
31
+ "url": "https://www.felixnagel.com"
32
+ },
33
+ {
34
+ "name": "Alex Schmitz",
35
+ "email": "arschmitz@gmail.com",
36
+ "url": "https://github.com/arschmitz"
37
+ }
38
+ ],
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "git://github.com/jquery/jquery-ui.git"
42
+ },
43
+ "bugs": {
44
+ "url": "https://github.com/jquery/jquery-ui/issues"
45
+ },
46
+ "license": "MIT",
47
+ "scripts": {
48
+ "build": "grunt build",
49
+ "lint": "grunt lint",
50
+ "test:server": "node tests/runner/server.js",
51
+ "test:unit": "node tests/runner/command.js",
52
+ "test": "grunt && npm run test:unit -- -h"
53
+ },
54
+ "dependencies": {
55
+ "jquery": ">=1.12.0 <5.0.0"
56
+ },
57
+ "devDependencies": {
58
+ "body-parser": "1.20.3",
59
+ "browserstack-local": "1.5.5",
60
+ "commitplease": "3.2.0",
61
+ "diff": "5.2.0",
62
+ "eslint-config-jquery": "3.0.2",
63
+ "exit-hook": "4.0.0",
64
+ "express": "4.21.1",
65
+ "express-body-parser-error-handler": "1.0.7",
66
+ "grunt": "1.6.1",
67
+ "grunt-bowercopy": "1.2.5",
68
+ "grunt-compare-size": "0.4.2",
69
+ "grunt-contrib-concat": "2.1.0",
70
+ "grunt-contrib-csslint": "2.0.0",
71
+ "grunt-contrib-requirejs": "1.0.0",
72
+ "grunt-contrib-uglify": "5.2.2",
73
+ "grunt-eslint": "24.0.1",
74
+ "grunt-git-authors": "3.2.0",
75
+ "grunt-html": "17.1.0",
76
+ "load-grunt-tasks": "5.1.0",
77
+ "rimraf": "6.0.1",
78
+ "selenium-webdriver": "4.26.0",
79
+ "yargs": "17.7.2"
80
+ },
81
+ "keywords": []
82
+ }
@@ -0,0 +1,25 @@
1
+ {% extends "admin/change_list.html" %}
2
+ {% load admin_list %}
3
+ {% load i18n %}
4
+ {% load treenode_admin %}
5
+
6
+ {% block object-tools-items %}
7
+ {{ block.super }}
8
+ {% if import_export_enabled %}
9
+ <li><a href="import/" class="button">Import</a></li>
10
+ <li><a href="export/" class="button">Export</a></li>
11
+ {% endif %}
12
+ {% endblock %}
13
+
14
+ {% block result_list %}
15
+ {% if action_form and actions_on_top and cl.show_admin_actions %}
16
+ {% admin_actions %}
17
+ {% endif %}
18
+
19
+ {% tree_result_list cl %}
20
+
21
+ {% if action_form and actions_on_bottom and cl.show_admin_actions %}
22
+ {% admin_actions %}
23
+ {% endif %}
24
+
25
+ {% endblock %}
@@ -0,0 +1,85 @@
1
+ {% extends "admin/base_site.html" %}
2
+ {% load static %}
3
+
4
+ {% block extrastyle %}
5
+ {{ block.super }}
6
+ <link rel="stylesheet" href="{% static 'admin/css/forms.css' %}">
7
+ <link rel="stylesheet" href="{% static 'css/treenode_tabs.css' %}">
8
+ {% endblock %}
9
+
10
+ {% block content %}
11
+ <h1>Data Exchange Center</h1>
12
+
13
+ <div class="module">
14
+ <ul class="tabs">
15
+ <li class="tab {% if not import_active %}active{% endif %}" data-tab="export">Export</li>
16
+ <li class="tab {% if import_active %}active{% endif %}" data-tab="import">Import</li>
17
+ </ul>
18
+ </div>
19
+
20
+ <div class="tab-content" id="export" {% if import_active %}style="display: none"{% endif %}>
21
+ <form method="get" action="" class="form-horizontal">
22
+ <div class="form-row">
23
+ <label for="format"><strong>Export format:</strong></label>
24
+ <select name="format" id="format">
25
+ <option value="csv">CSV</option>
26
+ <option value="tsv">TSV</option>
27
+ <option value="xlsx">XLSX</option>
28
+ <option value="json">JSON</option>
29
+ <option value="yaml">YAML</option>
30
+ </select>
31
+ </div>
32
+ <div class="form-row">
33
+ <input type="submit" name="download" class="button default" value="💾 Download">
34
+ <a href="../" class="button cancel-link">Back to list</a>
35
+ </div>
36
+ </form>
37
+ </div>
38
+
39
+ <div class="tab-content" id="import" {% if not import_active %}style="display: none"{% endif %}>
40
+ <form method="post" enctype="multipart/form-data" class="form-horizontal">
41
+ {% csrf_token %}
42
+ <div class="form-row">
43
+ <label for="file"><strong>Upload file:</strong></label>
44
+ <input type="file" name="file" id="file" required>
45
+ </div>
46
+ <div class="form-row">
47
+ <input type="submit" class="button default" value="📂 Import">
48
+ <a href="../" class="button cancel-link">Back to list</a>
49
+ </div>
50
+ </form>
51
+ </div>
52
+
53
+ {% if errors or created_count or updated_count %}
54
+ <ul class="messagelist">
55
+ {% if created_count %}<li class="success">Successfully created: {{ created_count }}</li>{% endif %}
56
+ {% if updated_count %}<li class="success">Successfully updated: {{ updated_count }}</li>{% endif %}
57
+ {% if errors %}<li class="error">Errors: {{ errors|length }}</li>{% endif %}
58
+ </ul>
59
+ {% if errors %}
60
+ <div class="module">
61
+ <ul class="errorlist">
62
+ {% for error in errors %}
63
+ <li>{{ error }}</li>
64
+ {% endfor %}
65
+ </ul>
66
+ </div>
67
+ {% endif %}
68
+ {% endif %}
69
+
70
+
71
+ <script>
72
+ const tabs = document.querySelectorAll('.tab');
73
+ const contents = document.querySelectorAll('.tab-content');
74
+
75
+ tabs.forEach(tab => {
76
+ tab.addEventListener('click', () => {
77
+ tabs.forEach(t => t.classList.remove('active'));
78
+ contents.forEach(c => c.style.display = 'none');
79
+ tab.classList.add('active');
80
+ document.getElementById(tab.dataset.tab).style.display = '';
81
+ });
82
+ });
83
+ </script>
84
+
85
+ {% endblock %}