django-fast-treenode 3.0.2__py3-none-any.whl → 3.0.4__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.
- {django_fast_treenode-3.0.2.dist-info → django_fast_treenode-3.0.4.dist-info}/METADATA +24 -25
- {django_fast_treenode-3.0.2.dist-info → django_fast_treenode-3.0.4.dist-info}/RECORD +25 -25
- {django_fast_treenode-3.0.2.dist-info → django_fast_treenode-3.0.4.dist-info}/WHEEL +1 -1
- treenode/admin/admin.py +1 -0
- treenode/admin/mixin.py +1 -1
- treenode/managers/queries.py +6 -18
- treenode/managers/tasks.py +80 -42
- treenode/static/vendors/jquery-ui/AUTHORS.txt +384 -384
- treenode/static/vendors/jquery-ui/LICENSE.txt +43 -43
- treenode/static/vendors/jquery-ui/external/jquery/jquery.js +10716 -10716
- treenode/static/vendors/jquery-ui/index.html +297 -297
- treenode/static/vendors/jquery-ui/jquery-ui.css +438 -438
- treenode/static/vendors/jquery-ui/jquery-ui.js +5222 -5222
- treenode/static/vendors/jquery-ui/jquery-ui.min.css +6 -6
- treenode/static/vendors/jquery-ui/jquery-ui.min.js +5 -5
- treenode/static/vendors/jquery-ui/jquery-ui.structure.css +16 -16
- treenode/static/vendors/jquery-ui/jquery-ui.structure.min.css +4 -4
- treenode/static/vendors/jquery-ui/jquery-ui.theme.css +439 -439
- treenode/static/vendors/jquery-ui/jquery-ui.theme.min.css +4 -4
- treenode/static/vendors/jquery-ui/package.json +82 -82
- treenode/utils/db/sqlcompat.py +33 -1
- treenode/utils/db/sqlquery.py +24 -0
- treenode/version.py +2 -2
- {django_fast_treenode-3.0.2.dist-info → django_fast_treenode-3.0.4.dist-info}/licenses/LICENSE +0 -0
- {django_fast_treenode-3.0.2.dist-info → django_fast_treenode-3.0.4.dist-info}/top_level.txt +0 -0
@@ -1,5 +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
|
-
|
1
|
+
/*! jQuery UI - v1.14.1 - 2025-04-13
|
2
|
+
* https://jqueryui.com
|
3
|
+
* Copyright OpenJS Foundation and other contributors; Licensed MIT */
|
4
|
+
|
5
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}
|
@@ -1,82 +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
|
-
}
|
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
|
+
}
|
treenode/utils/db/sqlcompat.py
CHANGED
@@ -125,12 +125,44 @@ class SQLCompat:
|
|
125
125
|
{set_clause};
|
126
126
|
"""
|
127
127
|
|
128
|
+
elif connection.vendor == "sqlite":
|
129
|
+
# SQLite workaround via temporary table
|
130
|
+
temp_table = "temp_tree_update"
|
131
|
+
cols = ["id"] + [cte_alias.get(f, f) for f in update_fields]
|
132
|
+
col_defs = ", ".join(f"{c} TEXT" for c in cols)
|
133
|
+
insert_cols = ", ".join(cols)
|
134
|
+
select_cols = ", ".join(cols)
|
135
|
+
|
136
|
+
set_clause = ", ".join(
|
137
|
+
f"{qf(f)} = (SELECT t.{cte_alias.get(f, f)} FROM {temp_table} t WHERE t.id = {qt}.id)" # noqa
|
138
|
+
for f in update_fields
|
139
|
+
)
|
140
|
+
|
141
|
+
return f"""
|
142
|
+
DROP TABLE IF EXISTS {temp_table};
|
143
|
+
CREATE TEMP TABLE {temp_table} ({col_defs});
|
144
|
+
|
145
|
+
WITH RECURSIVE tree_cte {cte_header} AS (
|
146
|
+
{base_sql}
|
147
|
+
UNION ALL
|
148
|
+
{recursive_sql}
|
149
|
+
)
|
150
|
+
INSERT INTO {temp_table} ({insert_cols})
|
151
|
+
SELECT {select_cols} FROM tree_cte;
|
152
|
+
|
153
|
+
UPDATE {qt}
|
154
|
+
SET {set_clause}
|
155
|
+
WHERE id IN (SELECT id FROM {temp_table});
|
156
|
+
"""
|
157
|
+
|
128
158
|
else:
|
159
|
+
# Fallback: subqueries
|
160
|
+
# (still buggy in SQLite, hence above workaround)
|
129
161
|
set_clause = ", ".join(
|
130
162
|
f"{qf(f)} = (SELECT t.{f} FROM tree_cte t WHERE t.id = {qt}.id)"
|
131
163
|
for f in update_fields
|
132
164
|
)
|
133
|
-
where_clause =
|
165
|
+
where_clause = "id IN (SELECT id FROM tree_cte)"
|
134
166
|
return f"""
|
135
167
|
WITH RECURSIVE tree_cte {cte_header} AS (
|
136
168
|
{base_sql}
|
treenode/utils/db/sqlquery.py
CHANGED
@@ -66,5 +66,29 @@ class SQLQueue:
|
|
66
66
|
raise
|
67
67
|
self._items.clear()
|
68
68
|
|
69
|
+
@staticmethod
|
70
|
+
def wrap_union_all(queries):
|
71
|
+
"""
|
72
|
+
Combine multiple SQL queries using UNION ALL with vendor-specific handling.
|
73
|
+
Each query is a tuple: (sql, params).
|
74
|
+
Returns a tuple: (combined_sql, combined_params).
|
75
|
+
"""
|
76
|
+
if is_sqlite():
|
77
|
+
# SQLite требует одинаковое число и порядок столбцов. Добавим к каждому SELECT псевдонимы.
|
78
|
+
def alias_select(sql, alias_prefix, idx):
|
79
|
+
return f"SELECT * FROM ({sql}) AS {alias_prefix}_{idx}"
|
80
|
+
|
81
|
+
wrapped_queries = [
|
82
|
+
alias_select(q[0], "q", i) for i, q in enumerate(queries)
|
83
|
+
]
|
84
|
+
combined_sql = " UNION ALL ".join(wrapped_queries)
|
85
|
+
else:
|
86
|
+
combined_sql = " UNION ALL ".join(f"({q[0]})" for q in queries)
|
87
|
+
|
88
|
+
combined_params = []
|
89
|
+
for q in queries:
|
90
|
+
combined_params.extend(q[1])
|
91
|
+
|
92
|
+
return combined_sql, combined_params
|
69
93
|
|
70
94
|
# The End
|
treenode/version.py
CHANGED
{django_fast_treenode-3.0.2.dist-info → django_fast_treenode-3.0.4.dist-info}/licenses/LICENSE
RENAMED
File without changes
|
File without changes
|