From 9d4ca3f16b37d6871361e3b116979de93f95e971 Mon Sep 17 00:00:00 2001 From: yaemiku Date: Wed, 5 Oct 2022 21:24:27 +0200 Subject: [PATCH] [func] tournament pages --- db/tournamentpages/admin.py | 3 - db/tournamentpages/models.py | 3 - db/tournamentpages/tests.py | 3 - db/tournamentpages/views.py | 3 - pdlzbs/settings.py | 6 +- pdlzbs/urls.py | 1 + static/css/dist/styles.css | 41 ++- .../css/images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 212 bytes .../css/images/ui-bg_flat_0_eeeeee_40x100.png | Bin 0 -> 220 bytes .../images/ui-bg_flat_55_c0402a_40x100.png | Bin 0 -> 206 bytes .../images/ui-bg_flat_55_eeeeee_40x100.png | Bin 0 -> 220 bytes .../images/ui-bg_glass_100_f8f8f8_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_35_dddddd_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_60_eeeeee_1x400.png | Bin 0 -> 262 bytes .../ui-bg_inset-hard_75_999999_1x100.png | Bin 0 -> 253 bytes .../ui-bg_inset-soft_50_c9c9c9_1x100.png | Bin 0 -> 281 bytes .../css/images/ui-icons_3383bb_256x240.png | Bin 0 -> 4549 bytes .../css/images/ui-icons_444444_256x240.png | Bin 0 -> 6992 bytes .../css/images/ui-icons_454545_256x240.png | Bin 0 -> 6992 bytes .../css/images/ui-icons_555555_256x240.png | Bin 0 -> 6988 bytes .../css/images/ui-icons_70b2e1_256x240.png | Bin 0 -> 4549 bytes .../css/images/ui-icons_777620_256x240.png | Bin 0 -> 4549 bytes .../css/images/ui-icons_777777_256x240.png | Bin 0 -> 6999 bytes .../css/images/ui-icons_999999_256x240.png | Bin 0 -> 6986 bytes .../css/images/ui-icons_cc0000_256x240.png | Bin 0 -> 4549 bytes .../css/images/ui-icons_fbc856_256x240.png | Bin 0 -> 4549 bytes .../css/images/ui-icons_ffffff_256x240.png | Bin 0 -> 6299 bytes .../tabbed_admin/css/jquery-ui-1.11.4.min.css | 7 + static/tabbed_admin/css/tabbed_admin.css | 1 + .../css/tabbed_grappelli_admin.css | 1 + .../tabbed_admin/js/jquery-ui-1.11.4.min.js | 8 + tabbed_admin/LICENSE.txt | 27 ++ tabbed_admin/__init__.py | 6 + tabbed_admin/admin.py | 154 +++++++++++ .../__init__.py => tabbed_admin/models.py | 0 tabbed_admin/requirements.txt | 6 + tabbed_admin/settings.py | 18 ++ .../css/images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 212 bytes .../css/images/ui-bg_flat_0_eeeeee_40x100.png | Bin 0 -> 220 bytes .../images/ui-bg_flat_55_c0402a_40x100.png | Bin 0 -> 206 bytes .../images/ui-bg_flat_55_eeeeee_40x100.png | Bin 0 -> 220 bytes .../images/ui-bg_glass_100_f8f8f8_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_35_dddddd_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_60_eeeeee_1x400.png | Bin 0 -> 262 bytes .../ui-bg_inset-hard_75_999999_1x100.png | Bin 0 -> 253 bytes .../ui-bg_inset-soft_50_c9c9c9_1x100.png | Bin 0 -> 281 bytes .../css/images/ui-icons_3383bb_256x240.png | Bin 0 -> 4549 bytes .../css/images/ui-icons_444444_256x240.png | Bin 0 -> 6992 bytes .../css/images/ui-icons_454545_256x240.png | Bin 0 -> 6992 bytes .../css/images/ui-icons_555555_256x240.png | Bin 0 -> 6988 bytes .../css/images/ui-icons_70b2e1_256x240.png | Bin 0 -> 4549 bytes .../css/images/ui-icons_777620_256x240.png | Bin 0 -> 4549 bytes .../css/images/ui-icons_777777_256x240.png | Bin 0 -> 6999 bytes .../css/images/ui-icons_999999_256x240.png | Bin 0 -> 6986 bytes .../css/images/ui-icons_cc0000_256x240.png | Bin 0 -> 4549 bytes .../css/images/ui-icons_fbc856_256x240.png | Bin 0 -> 4549 bytes .../css/images/ui-icons_ffffff_256x240.png | Bin 0 -> 6299 bytes .../tabbed_admin/css/jquery-ui-1.11.4.min.css | 7 + .../static/tabbed_admin/css/tabbed_admin.css | 1 + .../css/tabbed_grappelli_admin.css | 1 + .../tabbed_admin/js/jquery-ui-1.11.4.min.js | 8 + .../templates/tabbed_admin/change_form.html | 104 ++++++++ .../templatetags}/__init__.py | 0 .../templatetags/tabbed_admin_tags.py | 49 ++++ tabbed_admin/tests/__init__.py | 0 tabbed_admin/tests/admin.py | 42 +++ tabbed_admin/tests/models.py | 55 ++++ tabbed_admin/tests/runtests.py | 74 ++++++ tabbed_admin/tests/tests.py | 240 ++++++++++++++++++ tabbed_admin/tests/urls.py | 6 + theme/static/css/dist/styles.css | 41 ++- theme/static_src/src/styles.css | 20 +- tournamentpages/__init__.py | 0 tournamentpages/admin.py | 72 ++++++ .../apps.py | 1 + tournamentpages/migrations/0001_initial.py | 42 +++ tournamentpages/migrations/__init__.py | 0 tournamentpages/models.py | 52 ++++ tournamentpages/templates/tournament.html | 76 ++++++ tournamentpages/urls.py | 14 + tournamentpages/views.py | 67 +++++ 81 files changed, 1212 insertions(+), 48 deletions(-) delete mode 100644 db/tournamentpages/admin.py delete mode 100644 db/tournamentpages/models.py delete mode 100644 db/tournamentpages/tests.py delete mode 100644 db/tournamentpages/views.py create mode 100644 static/tabbed_admin/css/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 static/tabbed_admin/css/images/ui-bg_flat_0_eeeeee_40x100.png create mode 100644 static/tabbed_admin/css/images/ui-bg_flat_55_c0402a_40x100.png create mode 100644 static/tabbed_admin/css/images/ui-bg_flat_55_eeeeee_40x100.png create mode 100644 static/tabbed_admin/css/images/ui-bg_glass_100_f8f8f8_1x400.png create mode 100644 static/tabbed_admin/css/images/ui-bg_glass_35_dddddd_1x400.png create mode 100644 static/tabbed_admin/css/images/ui-bg_glass_60_eeeeee_1x400.png create mode 100644 static/tabbed_admin/css/images/ui-bg_inset-hard_75_999999_1x100.png create mode 100644 static/tabbed_admin/css/images/ui-bg_inset-soft_50_c9c9c9_1x100.png create mode 100644 static/tabbed_admin/css/images/ui-icons_3383bb_256x240.png create mode 100644 static/tabbed_admin/css/images/ui-icons_444444_256x240.png create mode 100644 static/tabbed_admin/css/images/ui-icons_454545_256x240.png create mode 100644 static/tabbed_admin/css/images/ui-icons_555555_256x240.png create mode 100644 static/tabbed_admin/css/images/ui-icons_70b2e1_256x240.png create mode 100644 static/tabbed_admin/css/images/ui-icons_777620_256x240.png create mode 100644 static/tabbed_admin/css/images/ui-icons_777777_256x240.png create mode 100644 static/tabbed_admin/css/images/ui-icons_999999_256x240.png create mode 100644 static/tabbed_admin/css/images/ui-icons_cc0000_256x240.png create mode 100644 static/tabbed_admin/css/images/ui-icons_fbc856_256x240.png create mode 100644 static/tabbed_admin/css/images/ui-icons_ffffff_256x240.png create mode 100644 static/tabbed_admin/css/jquery-ui-1.11.4.min.css create mode 100644 static/tabbed_admin/css/tabbed_admin.css create mode 100644 static/tabbed_admin/css/tabbed_grappelli_admin.css create mode 100644 static/tabbed_admin/js/jquery-ui-1.11.4.min.js create mode 100644 tabbed_admin/LICENSE.txt create mode 100644 tabbed_admin/__init__.py create mode 100644 tabbed_admin/admin.py rename db/tournamentpages/__init__.py => tabbed_admin/models.py (100%) create mode 100644 tabbed_admin/requirements.txt create mode 100644 tabbed_admin/settings.py create mode 100644 tabbed_admin/static/tabbed_admin/css/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 tabbed_admin/static/tabbed_admin/css/images/ui-bg_flat_0_eeeeee_40x100.png create mode 100644 tabbed_admin/static/tabbed_admin/css/images/ui-bg_flat_55_c0402a_40x100.png create mode 100644 tabbed_admin/static/tabbed_admin/css/images/ui-bg_flat_55_eeeeee_40x100.png create mode 100644 tabbed_admin/static/tabbed_admin/css/images/ui-bg_glass_100_f8f8f8_1x400.png create mode 100644 tabbed_admin/static/tabbed_admin/css/images/ui-bg_glass_35_dddddd_1x400.png create mode 100644 tabbed_admin/static/tabbed_admin/css/images/ui-bg_glass_60_eeeeee_1x400.png create mode 100644 tabbed_admin/static/tabbed_admin/css/images/ui-bg_inset-hard_75_999999_1x100.png create mode 100644 tabbed_admin/static/tabbed_admin/css/images/ui-bg_inset-soft_50_c9c9c9_1x100.png create mode 100644 tabbed_admin/static/tabbed_admin/css/images/ui-icons_3383bb_256x240.png create mode 100644 tabbed_admin/static/tabbed_admin/css/images/ui-icons_444444_256x240.png create mode 100644 tabbed_admin/static/tabbed_admin/css/images/ui-icons_454545_256x240.png create mode 100644 tabbed_admin/static/tabbed_admin/css/images/ui-icons_555555_256x240.png create mode 100644 tabbed_admin/static/tabbed_admin/css/images/ui-icons_70b2e1_256x240.png create mode 100644 tabbed_admin/static/tabbed_admin/css/images/ui-icons_777620_256x240.png create mode 100644 tabbed_admin/static/tabbed_admin/css/images/ui-icons_777777_256x240.png create mode 100644 tabbed_admin/static/tabbed_admin/css/images/ui-icons_999999_256x240.png create mode 100644 tabbed_admin/static/tabbed_admin/css/images/ui-icons_cc0000_256x240.png create mode 100644 tabbed_admin/static/tabbed_admin/css/images/ui-icons_fbc856_256x240.png create mode 100644 tabbed_admin/static/tabbed_admin/css/images/ui-icons_ffffff_256x240.png create mode 100644 tabbed_admin/static/tabbed_admin/css/jquery-ui-1.11.4.min.css create mode 100644 tabbed_admin/static/tabbed_admin/css/tabbed_admin.css create mode 100644 tabbed_admin/static/tabbed_admin/css/tabbed_grappelli_admin.css create mode 100644 tabbed_admin/static/tabbed_admin/js/jquery-ui-1.11.4.min.js create mode 100644 tabbed_admin/templates/tabbed_admin/change_form.html rename {db/tournamentpages/migrations => tabbed_admin/templatetags}/__init__.py (100%) create mode 100644 tabbed_admin/templatetags/tabbed_admin_tags.py create mode 100644 tabbed_admin/tests/__init__.py create mode 100644 tabbed_admin/tests/admin.py create mode 100644 tabbed_admin/tests/models.py create mode 100644 tabbed_admin/tests/runtests.py create mode 100644 tabbed_admin/tests/tests.py create mode 100644 tabbed_admin/tests/urls.py create mode 100644 tournamentpages/__init__.py create mode 100644 tournamentpages/admin.py rename {db/tournamentpages => tournamentpages}/apps.py (80%) create mode 100644 tournamentpages/migrations/0001_initial.py create mode 100644 tournamentpages/migrations/__init__.py create mode 100644 tournamentpages/models.py create mode 100644 tournamentpages/templates/tournament.html create mode 100644 tournamentpages/urls.py create mode 100644 tournamentpages/views.py diff --git a/db/tournamentpages/admin.py b/db/tournamentpages/admin.py deleted file mode 100644 index 8c38f3f..0000000 --- a/db/tournamentpages/admin.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.contrib import admin - -# Register your models here. diff --git a/db/tournamentpages/models.py b/db/tournamentpages/models.py deleted file mode 100644 index 71a8362..0000000 --- a/db/tournamentpages/models.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.db import models - -# Create your models here. diff --git a/db/tournamentpages/tests.py b/db/tournamentpages/tests.py deleted file mode 100644 index 7ce503c..0000000 --- a/db/tournamentpages/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/db/tournamentpages/views.py b/db/tournamentpages/views.py deleted file mode 100644 index 91ea44a..0000000 --- a/db/tournamentpages/views.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.shortcuts import render - -# Create your views here. diff --git a/pdlzbs/settings.py b/pdlzbs/settings.py index 4f2796f..cacdd54 100644 --- a/pdlzbs/settings.py +++ b/pdlzbs/settings.py @@ -55,12 +55,14 @@ INSTALLED_APPS = [ 'db.atu', 'db.mbkb', 'theme', - 'core' + 'core', + 'tournamentpages' ] + [ 'tailwind', 'tinymce', 'filebrowser', 'admin_ordering', + 'tabbed_admin', 'django_browser_reload' ] @@ -169,3 +171,5 @@ TINYMCE_SPELLCHECKER = True FILEBROWSER_DIRECTORY = '' FILEBROWSER_EXCLUDE = [r'^_versions'] + +TABBED_ADMIN_USE_JQUERY_UI = True diff --git a/pdlzbs/urls.py b/pdlzbs/urls.py index f8363a2..109e3e0 100644 --- a/pdlzbs/urls.py +++ b/pdlzbs/urls.py @@ -21,6 +21,7 @@ from filebrowser.sites import site urlpatterns = [ path('', include('core.urls')), + path('turnieje/', include('tournamentpages.urls')), path('admin/filebrowser/', site.urls), path('admin/', admin.site.urls), path('tinymce/', include('tinymce.urls')), diff --git a/static/css/dist/styles.css b/static/css/dist/styles.css index 4e6b3c1..dc30e55 100644 --- a/static/css/dist/styles.css +++ b/static/css/dist/styles.css @@ -1233,6 +1233,21 @@ select { padding-bottom: 7px; } +.tpage-nav ul li:hover { + font-weight: 700; + -webkit-text-decoration-line: underline; + text-decoration-line: underline; +} + +.tpage-nav ul li.active { + -webkit-text-decoration-line: none; + text-decoration-line: none; + } + +.tpage-nav ul li.active a { + font-weight: 600; + } + .sr-only { position: absolute; width: 1px; @@ -1406,6 +1421,10 @@ select { resize: both; } +.flex-row { + flex-direction: row; +} + .flex-col { flex-direction: column; } @@ -1505,6 +1524,11 @@ select { background-color: rgb(250 250 249 / var(--tw-bg-opacity)); } +.bg-green-100 { + --tw-bg-opacity: 1; + background-color: rgb(220 252 231 / var(--tw-bg-opacity)); +} + .bg-gray-50 { --tw-bg-opacity: 1; background-color: rgb(249 250 251 / var(--tw-bg-opacity)); @@ -1795,19 +1819,6 @@ h4 { font-size: 1.25em; } -#atu { - transition: all 0.2s ease, visibility 0s; - border-radius: 0px; - background: repeat padding-box border-box 0% 0% / auto auto scroll - linear-gradient(180deg, rgba(8, 50, 4, 0.5) 0%, rgba(8, 50, 4, 0.5) 100%), - no-repeat padding-box border-box 78% 59%/200% scroll url("/static/atu.jpg"); - display: block; -} - -.target\:block:target { - display: block; -} - .active\:ring-2:active { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); @@ -1818,6 +1829,10 @@ h4 { display: block; } +.prose-h1\:font-medium :is(:where(h1):not(:where([class~="not-prose"] *))) { + font-weight: 500; +} + .prose-h2\:mb-2 :is(:where(h2):not(:where([class~="not-prose"] *))) { margin-bottom: 0.5rem; } diff --git a/static/tabbed_admin/css/images/ui-bg_flat_0_aaaaaa_40x100.png b/static/tabbed_admin/css/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..352a197282fcb5eadd4a6ff6b18864956c574b20 GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F1SA+{?>A)!QcOwS?k)_>#w|r1Kptm-M`SUO z_5fqIli7AahM1>|V~EA+ zRdP`(kYX@0Ff`RQFxNFQ3o$UaGB&j`FxECOure?>Z=C%cMMG|WN@iLmZVmhLE=L13 OFnGH9xvX?t&Hpz19_YU9+AaB z+5?Q;PG;Ky8FHR3jv*e$lPlU;4SKlxP~aja2Dul`ryR1bKLV;$Epd$~Nl7e8wMs5Z z1yT$~28O1(2Ijg(W+4XVR>r1Q1}54D237_JTvI|bQ8eV{r(~v8;?_`o^6gci1_n=8 KKbLh*2~7ay@;8S7 literal 0 HcmV?d00001 diff --git a/static/tabbed_admin/css/images/ui-bg_flat_55_c0402a_40x100.png b/static/tabbed_admin/css/images/ui-bg_flat_55_c0402a_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..a36c8ec2a14cae03615a1837bb982539f8d343a0 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F$P6UUt$JVyq?iMILR=3xXvvD}dIGte1s;*b zK-vS0-A-oP0U7+BE{-7@=aUm8SQj_^Vqjp3U|=jYYbyszsg}4#l%ynUftDnm{ Hr-UW|AG$Gq literal 0 HcmV?d00001 diff --git a/static/tabbed_admin/css/images/ui-bg_flat_55_eeeeee_40x100.png b/static/tabbed_admin/css/images/ui-bg_flat_55_eeeeee_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..d49599a836abbb00e3cd4fb32a651267eb318137 GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F0wfqj{vTKlq?nSt-CY>?t&Hpz19_YU9+AaB z+5?Q;PG;Ky8FHR3jv*e$lPlU;4SKlxP~aja2Dul`ryR1bKLV;$Epd$~Nl7e8wMs5Z z1yT$~28O1(2Ijg(W+4XVR>r1Q1}54D237_JTvI|bQ8eV{r(~v8;?_`o^6gci1_n=8 KKbLh*2~7ay@;8S7 literal 0 HcmV?d00001 diff --git a/static/tabbed_admin/css/images/ui-bg_glass_100_f8f8f8_1x400.png b/static/tabbed_admin/css/images/ui-bg_glass_100_f8f8f8_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..18984c832c5d8f96fda80699dab195e9a3edf128 GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&0LWmFTHNUZq?nSt-Ch3w7g=q17Rci)@Q5r1 z(jH*!b~4)z#PD=+46!(!{G+xhQKVOC)na*jiMlR>KRk&)EV~~*=WdJF?)FK#IZ0z|d6Jz+BhJEX2Uv%GlJ(z(m`?z{?)FK#IZ0z|d6Jz+BhJEX2Uv%GlJ(z(m`?z{lg z;~K5>A79!Z77HJKzMm)llf=F`X+KV#{193p(yNptz~H}Xrrw0rvJ-)3s+PD$l%yn< zq*^5xr2;7iBLhQIT?2DnBeM_#b1P$0D+3d40|P4q1Fk8dnJ5}^^HVa@DsgM5KKb@4 PPy>UftDnm{r-UW|6Wmo2 literal 0 HcmV?d00001 diff --git a/static/tabbed_admin/css/images/ui-bg_inset-hard_75_999999_1x100.png b/static/tabbed_admin/css/images/ui-bg_inset-hard_75_999999_1x100.png new file mode 100644 index 0000000000000000000000000000000000000000..55347c6ec96d7f556628c022a04b4e9be4888935 GIT binary patch literal 253 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 DFxXs& literal 0 HcmV?d00001 diff --git a/static/tabbed_admin/css/images/ui-icons_444444_256x240.png b/static/tabbed_admin/css/images/ui-icons_444444_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..a802263b58990c806c1d1bc2a95c3847f01b138e GIT binary patch literal 6992 zcmZ{pcTiJbxA&6}ieMljO?vMobcpmK9qA}Nbd@ehhkzixNhgR%Z_+_J2uKSZY0^_lx`@6IO3d2*TEE$9Sr8xq3bV=jFLP?oogMqNM*(1yyZvsTdm>dt{s3FZ9)^HEv~ch?Tu$#>0mBwl;gheD z(l$7Cougedy^{}HZ9i|W-#G2gz%&K0$K4{-XQ(G((EZI$k)>ZcE3T!OnBgHUEo@7m zUIotbPbwv`k27h&&gsL>v|i7Tz+oEmMGmLrL!G!_iqmZryXviBxOBL)&6vpMhZnMj zbiFAm@2(9+x*TmnKkHgo(c$BpBbjNm7Uk1}6Ljrmkqhwvl%Rcg6GK<_+Yi!Sr#N#XYr69)>Z(Kg_-=K`Oq9-8uG)zA zY`yc|m%@(J%kRZ9Lao5)OCa->aZj=iyFV(&C1$^tq00dN`uFKy`!M$(gPW>y%OtrM z{5A_}L?u0Qm&NEHfd1`k9+X9Z!mi6(A<2CrTM$(B_M|!nSs7*i{rF8AA3B!Ld9Tba z#__0F=Ffv#%F`dTw8U-h>~m!mIW!LUf458e9I)8Xy>_tSE4Z%+Eo*|>pJ~Hba1uBNry-`qXyJOLuZN1HbD}Zg;ta!cw*Wa6O60|74nv0 z5In)X7hM_A<`QLnZ^}b7N=V&FRDn*@-jcJ$2@Db7I-x0U>Qw%A?%m28GWAKPeQB=R)yG&ESyyVmC_nmce(|sYs2H6^% zq9YZceNrdwo+9fdgZj_-^B&%rN=D)4z5AY}U^@{cYNtXR4WVt&>>Q$^BCjxQ2~o@_ zgON;OfI5%Pa@ogMVOykon^!!&e|SRv*HZYGdPi&Hz0Y@6txf{lg0rUWONJj8)ar+B;xSPBALWH_WOkXXG0_=0T8I-1>zxU(jq<@PJ5h1MbF z04>qEQOU$P{tuxvntMyyRqgIPY#ZRN_RWQ=SQz=}8=FX*Y4zD2RI0Rp_AgZx4QfnmH{vEo?gf_Zs){;X#+*)%2*9d4T>7jzS|T zCk5J$>x(1tNW6ei>-EC^V&xz+;we+C>n()0#tUOHwKg#xwPP_Q9pXovyWnZnXl$pb zn5spjJ67Y0n!JP&xHtU4Wy>i$GTd;LotH`(0LzJyrF~IVp%mCX!W&$E->bZrS>iXv6K6|P3%Z)R>gfIn{DV!8hmU|>N^p9`db0-+k zWa7r9=lbi|nohmYcMah0GivoG5Uy#X87lCJ_6XpUc2oca0h3 zr6F#6z!M^L%0#sL^?#gs|B}3i1MnH~oYfic2()UC7Rz)};3(r)ius+>77h79(mkG= z-RdK*KkO5C9>(U zrJsp&pjvie|F*{GwWO!U4E^5O!=l`$F?Q&5+4iZyhc@nU~@3N4AwvVcB7}k>VhE0*a`l%y>nIqo) z+Uj1uarbFIvblLPOu(8fsSq^GemKXpxx~~yrz^NU7{+el7YTv^jerE{@c(wbP_Y3s z)Qzc&F5chB6ZhY~bKWt-NdgS_LB0$*ZKTK`YEBlQ9!5X-bkd^qD~eZUQ)`M}M)k{E zY_h+Z-(a^ej_yinIO(_9ao3{vYvE%LU_2YkRvaqa^6?o6G{ZBgAPA{5uAM(Qr==88 zbJ*NTlPG_#Ns&Y%I7S2_LWCUa{jA*Vep;s+%Ac-d*z&WD^IGPs#w509v6tPZi{H6p z>}fq;?r0B2%Z&J;gnlpdIeK9ygZ~4^`+!GC(Gl*&Xa%{M4EYE)EnwfIYb)*#p@jT? zc#=&NfoWKUhGc~>UsRW8yi0$K!gd}h=BKMr-vcXd3b45(!bIL()_A(Ar!FtDn2QZm z{U|tk0oKcGiPte!>7IG&cI9hCv!2Lw3KFPx%pFtX=ftp@<5n|8BFoM;$2KV*c|;md zVP|>JZehFkn)-Bx9z#Ux@I+8Qag@0?z*2}?*JG0PpH95HCZvC5TEk%;514^e;sr&! z;#O0D12b+A(`%_>f}}{fr0WMJ&12TvF0i!vk%VTPztqllR}fWYRrAp8XZl){cojh` zh+C{6dkk_n!06kJHBRVrUFE<{JGPM`An60So}l%`3GE~8UoyuM!z4dl#kosVniNo4 zxg+GudKoys_(~0>0dwT-e7y_@;oWtS*BZ3I4p8F#)!$Vi%BPz=K9E^Ah>cmk;d|rP zqQ*F7^o>pkSp0~oHRcu>|kK~XMYA9pORsEWeNu%cP-==|(>!xdFY z8e%ydh(U4gusP>FN~+*k9%3iJ;-cyykE3@u|1M=QefNi3MDJ3LjOm@Cz;fAx6sg)t z*TJJilU2;a+!Ipx8AffG)K55VqGy?|d5%HuiGR9zti;qPKK?3x(Wpi*#dbwr(^Y%W zZbBe!p{{IZbqh1662!e~Ik?0fQ7Y>skpFsPQACe`*<|1EVFb$;G!b70TE8H%(T9^BOfWLHXKqIxpFgPj(p}-evjh zN3mkDN2_^%|GC8MbA=J%v4A7R0Ep9s9rZKgy%EcecpuyyCL@Wy=x*z437Tx&v?gS{fcaEqraq4#tR~+$@OXZPF#kA= z0V60gY_r(klZBUM{r0&Lp_ugHRxvkz`tCyKx7Ma%uA8Wp@xKy|ufr3O$>FITvBXqc z0*BNQ5|srUBb@-=bf>RjEh$+G$`{sO2|5eRo`0|l$K@Z_5?hSKtlCO?eb`oyH|cE$ zy+p6^IUVBM#4#L&_OVNRgTFQ#&+^<|#rkrjJHC!G{j1_!;>g$TT!4O+CS;+%N3NcD z(qYHuW%g2ZX_V-XOAHNN4j=$bl@QTS@pztgwW2<&W3(P&8bSPcZ@ds4f9f_Xd)ylE z!MCGZ521+9x@UStOH6EExDt&{+}fjS?q%5I z^kH3%cz0d1bR?b8l!@}6WC!5qY$Lu=peE%-n{-$xEV^|85N3w=z34}t2-G>3zD z5hb$u70@cG>vQjpbb7GJY1QDw5w+ajxAQ0BEQAx$sLrdPjFNS~Qw~?)Jp)(Z&(fGI zYr5g&UR&E+N}KJSaU2DlOG7pT$;oIXxj%RZ^!$fR^!OC#Jle2H zUcM+pswP%LE44>`Z`fi=&#I1z<-yCk)wds4m0N75#vT&3Ts}S-^ zdgB?_ecSr5$7}%lV)UzMCEgm#(YAFV+= z=AN9b*l$kG58qS#lNI4`(-oOxRbIlb!Fr&!k#GTO}x~zU)1cKtADh`;qJWj6Js zxET;zEOy;6DJmf^-cFidg8x2H2Ts@0qu}()aKW@kB9&|W<=Pj)LDu9e<0Hl?0Ml!; zRa&B&0@PXERxPFO6Ot_#PN=&cR3r5roFn5|dULtl*uvD2H0$pDexI7eOO^mKq$oW1 zyWDzIzj-0v_$Gr81-6M=zXyy{&E6%hHJV7!-)w7;|nPse3w4 z8v_vc*BaLbQ{HOf1jNf~c5a@18{9J%JYZ#b5EK|{e80II%)68C3OL9z!r5vg2&YZX ziD=Us2jtyEI{9y40OB~e_qq~lXGXqTpePyD?;|2xZa%o`;1R`ou<~gSJ9-gcN=amj(>j9gCPCai^$2`h z|LtpEgBcoahW0wVwJ#aPTe!>Sfuv~)p+TaOq4QAad1s`>`yYxgE=?m>K>T&3j>yRC zm0$eJqo0))n3a_FEQJe#GwnKXuil4V13ucsMLhqh+ro=fAd)MvH=Khu*3b%M%jU$8 z%sSkTZ79_1(Is7tDlW3;FAL=##OlmYOAO4)37dH8f4k-Vf~mkvyb-^&V5#3oD9U(D zYr~PFO+U~a7SejoFKcVMpw1-kXTc~tA~jr9L+?6>!dSjG)o>v9=d?=?JclYr1gYQR zF4OX^^GSiFa<{)7$JWut7{=UgY!WiFE3g6b#CwAF{3`)>bVB9W2}n=+|J$MXHo)-9 z>+qGq^Y8CHm$yi#Z5ZTpz?Co}GtRcR-3-Uui^=}y!?{FQU4}e73A(eJ=h~YJOPRH@ zrk^hB^@u7SQZKT0(7sBHZ!kNB`X_jO&FYx#2)e}61*9R}`?%Q;j#(37}6^84EUvzwRHk&M1#f&c*^#q1%;wZIukXH!`yy#wVSvD8y zjhn>g$(&EB$r|pZi~E#}&8jSj^x2#dabLX1S>urEd7(wvirok-uQgP zh&KFI`ey1AkrOw2X4K?t%?df?+=RtToRxtI5ru zc?Uci2JdN2_Rp#@9}8;b!9bs_g6eqljaG|&@sJD61zHFeI~SQSAM)wGl3@@tWLz!y z3s~6Z^hD6kYLhohr9MSYA*LmQP^S;))`{_-=mE^!XzC6dm3&f&qN5Ci$DaWYsMLI3S^Wc5{iigJ zww|?}V}-dwktb#SZAV)=N@Z`(QVL{Yg2!*Xaz(!Hk|D20gW zxyf-v1EWIiUq0@w7(I3F2fTkfIa92XlohWR=drcrFDx0cJQCg1BwXpXf0n}(xhzzJ zv}9kl0k#h07JZ7yC?rjDRg4+8*3qJ{yZ-pTi0RNhFC`=J^lKz>`Aln@*CFYXm_QM- zoGekz_o2jwq6P-h>t9;9_Wet6t>Pa2G#rIj2=?5M!W-~YWt0*{`M)Rgtp2t_6RWh6 zphJdih>pwdeN{7bU!Ff)6lDLb&`x!QZ?kM8IS^V>D%{t^EL!1a)2*YBgR|9l!y9(< zBxEhZHzgr)#BfOejIB)+mOxyNM}aE6g#L?ub&}5g8}0o!vY=uC&~$K>ege$|)LR>u zihJbu%?8;z`0FVCnM+p%=PHYP5xMyFRPsDqv}uXJ8&nvV zr1&es!1PO=p4p&9F@D@SJbpUUX~NL`=F1*u&59=pgc;~KVVA7mg%j{rlz(bwQM-MZ z!zbJjo<*dY@5XI8ZBz63k78Tjr%>7b#9iOiUEGM>mlx$G!50sl#c%X|_s(<}JtzV} zO$1Q?q)t`T!*KfV7&0`kTdZUY?}2J*_HuTR{>n|D^Hp(20DWc5?Q-l7`d~g7{Zzm7 zv3b%g;K6rl#(T|u_cx!7w(D_#r5yt&4?ySU(01?@!;%jqi}PBF2UQ!FHcau7FNMe!K+r+tl&1LD@*!M zhAbIO^eR>F6&M4Iq8Q-44Vi;7wz*5gc2U>T@>LN?-&LvU2;>E~g=L2|;j}>$SD-k= zdP=9|$`w=FdqeMtbR>0bCFzO_60aWixY8%k2x1u7KX=33ZeO zHD1JQ2++u4+sb(95>q;}c-Y*h-I3{kNtV;|7kl)#&st6x4rCXT@>kHCXR*uJ3rLp5 z9ir&6o0(fPKb%rI*EcF~^V%Leq_ZfdyS{JI+xl15M?sk zmSHz?tYQW`HYWiCAlRc@2zBE!T}`n6_%~YI0Z=vhErg2TxgTr93(ii3b2yk|_ePQqWe+S5)Oi(K;G8X+Ky4p8R1~3XNR!$bsw~ox^n`kDQhcLDp-a7KQ{_2(*OVf literal 0 HcmV?d00001 diff --git a/static/tabbed_admin/css/images/ui-icons_454545_256x240.png b/static/tabbed_admin/css/images/ui-icons_454545_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..d6169e8bf9389ab9b5b7d2c6f0c5fe3e4d363105 GIT binary patch literal 6992 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 DJqb9i literal 0 HcmV?d00001 diff --git a/static/tabbed_admin/css/images/ui-icons_777777_256x240.png b/static/tabbed_admin/css/images/ui-icons_777777_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..8e26ee4fd8c3d9f55b7495bd708181b8558c861c GIT binary patch literal 6999 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 literal 0 HcmV?d00001 diff --git a/static/tabbed_admin/css/images/ui-icons_cc0000_256x240.png b/static/tabbed_admin/css/images/ui-icons_cc0000_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..28154300a67013332fb1ba53c629138ee31c8558 GIT binary patch literal 4549 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 E2bfitbN~PV literal 0 HcmV?d00001 diff --git a/static/tabbed_admin/css/images/ui-icons_ffffff_256x240.png b/static/tabbed_admin/css/images/ui-icons_ffffff_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..4d66f596e5967a460a37526e2130a55711eeca3c GIT binary patch literal 6299 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 literal 0 HcmV?d00001 diff --git a/static/tabbed_admin/css/jquery-ui-1.11.4.min.css b/static/tabbed_admin/css/jquery-ui-1.11.4.min.css new file mode 100644 index 0000000..f633b3a --- /dev/null +++ b/static/tabbed_admin/css/jquery-ui-1.11.4.min.css @@ -0,0 +1,7 @@ +/*! jQuery UI - v1.11.4 - 2016-12-04 +* http://jqueryui.com +* Includes: core.css, tabs.css, theme.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&fwDefault=normal&cornerRadius=3px&bgColorHeader=%2379aec8&bgTextureHeader=flat&borderColorHeader=%23dddddd&fcHeader=%23333333&iconColorHeader=%23444444&bgColorContent=%23fff&bgTextureContent=flat&borderColorContent=%23eee&fcContent=%23333333&iconColorContent=%23444444&bgColorDefault=%23205067&bgTextureDefault=flat&borderColorDefault=%23205067&fcDefault=%23f9f9f9&iconColorDefault=%23777777&bgColorHover=%2379aec8&bgTextureHover=flat&borderColorHover=%23205067&fcHover=%23fff&iconColorHover=%23555555&bgColorActive=%23fff&bgTextureActive=flat&borderColorActive=%23fff&fcActive=%23000&iconColorActive=%23ffffff&bgColorHighlight=%23fffa90&bgTextureHighlight=flat&borderColorHighlight=%23dad55e&fcHighlight=%23777620&iconColorHighlight=%23777620&bgColorError=%23fddfdf&bgTextureError=flat&borderColorError=%23f1a899&fcError=%235f3f3f&iconColorError=%23cc0000&bgColorOverlay=%23aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=%23666666&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=5px&offsetTopShadow=0px&offsetLeftShadow=0px&cornerRadiusShadow=8px&bgImgOpacityHeader=&bgImgOpacityContent=&bgImgOpacityDefault=&bgImgOpacityHover=&bgImgOpacityActive=&bgImgOpacityHighlight=&bgImgOpacityError= +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.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-content{border:1px solid #eee;background:#fff;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #ddd;background:#79aec8;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{border:1px solid #205067;background:#205067;font-weight:normal;color:#f9f9f9}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#f9f9f9;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{border:1px solid #205067;background:#79aec8;font-weight:normal;color:#fff}.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{color:#fff;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #fff;background:#fff;font-weight:normal;color:#000}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#000;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-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;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.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-default .ui-icon{background-image:url("images/ui-icons_777777_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_555555_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.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-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-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:-64px -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:-64px -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:0 -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;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:0 0 0 0;padding:5px;background:#666;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px} diff --git a/static/tabbed_admin/css/tabbed_admin.css b/static/tabbed_admin/css/tabbed_admin.css new file mode 100644 index 0000000..aa810b0 --- /dev/null +++ b/static/tabbed_admin/css/tabbed_admin.css @@ -0,0 +1 @@ +#tabs{clear:both}.ui-state-default a.errortab{background-color:red;color:white}.ui-tabs .ui-tabs-panel{overflow:hidden} diff --git a/static/tabbed_admin/css/tabbed_grappelli_admin.css b/static/tabbed_admin/css/tabbed_grappelli_admin.css new file mode 100644 index 0000000..97af0b2 --- /dev/null +++ b/static/tabbed_admin/css/tabbed_grappelli_admin.css @@ -0,0 +1 @@ +.ui-tabs{background-color:#fff;border:0;min-width:960px}.ui-widget textarea,.ui-widget input,.ui-widget select{font-family:Arial,sans-serif}.ui-widget{font-family:Arial,sans-serif;font-size:1em}.ui-tabs .ui-tabs-panel{background-color:#fff;padding:5px 4px 0}.ui-tabs .ui-tabs-anchor{font-size:9pt}.ui-widget-content{background:none}.ui-tabs .ui-widget-content a{color:#309BBF}.ui-tabs .ui-widget-content a:hover{color:#444}.ui-tabs .ui-widget-header{background-image:linear-gradient(#E5E5E5,#DBDBDB)}.ui-tabs .ui-state-default{background-image:linear-gradient(#CEE9F2,#E1F0F5)}.ui-tabs .ui-state-active{background-image:linear-gradient(#CEE9F2,#fff);border-color:#BBB}.ui-tabs .ui-state-active a{color:#444} diff --git a/static/tabbed_admin/js/jquery-ui-1.11.4.min.js b/static/tabbed_admin/js/jquery-ui-1.11.4.min.js new file mode 100644 index 0000000..0859952 --- /dev/null +++ b/static/tabbed_admin/js/jquery-ui-1.11.4.min.js @@ -0,0 +1,8 @@ +/*! jQuery UI - v1.11.4 - 2015-07-27 +* http://jqueryui.com +* Includes: core.js, widget.js, tabs.js +* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */ + +jQuery = jQuery || django.jQuery.noConflict(false); + +(function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){function t(t,s){var n,a,o,r=t.nodeName.toLowerCase();return"area"===r?(n=t.parentNode,a=n.name,t.href&&a&&"map"===n.nodeName.toLowerCase()?(o=e("img[usemap='#"+a+"']")[0],!!o&&i(o)):!1):(/^(input|select|textarea|button|object)$/.test(r)?!t.disabled:"a"===r?t.href||s:s)&&i(t)}function i(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}e.ui=e.ui||{},e.extend(e.ui,{version:"1.11.4",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({scrollParent:function(t){var i=this.css("position"),s="absolute"===i,n=t?/(auto|scroll|hidden)/:/(auto|scroll)/,a=this.parents().filter(function(){var t=e(this);return s&&"static"===t.css("position")?!1:n.test(t.css("overflow")+t.css("overflow-y")+t.css("overflow-x"))}).eq(0);return"fixed"!==i&&a.length?a:e(this[0].ownerDocument||document)},uniqueId:function(){var e=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++e)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(i){return t(i,!isNaN(e.attr(i,"tabindex")))},tabbable:function(i){var s=e.attr(i,"tabindex"),n=isNaN(s);return(n||s>=0)&&t(i,!n)}}),e("").outerWidth(1).jquery||e.each(["Width","Height"],function(t,i){function s(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],a=i.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+i]=function(t){return void 0===t?o["inner"+i].call(this):this.each(function(){e(this).css(a,s(this,t)+"px")})},e.fn["outer"+i]=function(t,n){return"number"!=typeof t?o["outer"+i].call(this,t):this.each(function(){e(this).css(a,s(this,t,!0,n)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),disableSelection:function(){var e="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.bind(e+".ui-disableSelection",function(e){e.preventDefault()})}}(),enableSelection:function(){return this.unbind(".ui-disableSelection")},zIndex:function(t){if(void 0!==t)return this.css("zIndex",t);if(this.length)for(var i,s,n=e(this[0]);n.length&&n[0]!==document;){if(i=n.css("position"),("absolute"===i||"relative"===i||"fixed"===i)&&(s=parseInt(n.css("zIndex"),10),!isNaN(s)&&0!==s))return s;n=n.parent()}return 0}}),e.ui.plugin={add:function(t,i,s){var n,a=e.ui[t].prototype;for(n in s)a.plugins[n]=a.plugins[n]||[],a.plugins[n].push([i,s[n]])},call:function(e,t,i,s){var n,a=e.plugins[t];if(a&&(s||e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType))for(n=0;a.length>n;n++)e.options[a[n][0]]&&a[n][1].apply(e.element,i)}};var s=0,n=Array.prototype.slice;e.cleanData=function(t){return function(i){var s,n,a;for(a=0;null!=(n=i[a]);a++)try{s=e._data(n,"events"),s&&s.remove&&e(n).triggerHandler("remove")}catch(o){}t(i)}}(e.cleanData),e.widget=function(t,i,s){var n,a,o,r,h={},l=t.split(".")[0];return t=t.split(".")[1],n=l+"-"+t,s||(s=i,i=e.Widget),e.expr[":"][n.toLowerCase()]=function(t){return!!e.data(t,n)},e[l]=e[l]||{},a=e[l][t],o=e[l][t]=function(e,t){return this._createWidget?(arguments.length&&this._createWidget(e,t),void 0):new o(e,t)},e.extend(o,a,{version:s.version,_proto:e.extend({},s),_childConstructors:[]}),r=new i,r.options=e.widget.extend({},r.options),e.each(s,function(t,s){return e.isFunction(s)?(h[t]=function(){var e=function(){return i.prototype[t].apply(this,arguments)},n=function(e){return i.prototype[t].apply(this,e)};return function(){var t,i=this._super,a=this._superApply;return this._super=e,this._superApply=n,t=s.apply(this,arguments),this._super=i,this._superApply=a,t}}(),void 0):(h[t]=s,void 0)}),o.prototype=e.widget.extend(r,{widgetEventPrefix:a?r.widgetEventPrefix||t:t},h,{constructor:o,namespace:l,widgetName:t,widgetFullName:n}),a?(e.each(a._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete a._childConstructors):i._childConstructors.push(o),e.widget.bridge(t,o),o},e.widget.extend=function(t){for(var i,s,a=n.call(arguments,1),o=0,r=a.length;r>o;o++)for(i in a[o])s=a[o][i],a[o].hasOwnProperty(i)&&void 0!==s&&(t[i]=e.isPlainObject(s)?e.isPlainObject(t[i])?e.widget.extend({},t[i],s):e.widget.extend({},s):s);return t},e.widget.bridge=function(t,i){var s=i.prototype.widgetFullName||t;e.fn[t]=function(a){var o="string"==typeof a,r=n.call(arguments,1),h=this;return o?this.each(function(){var i,n=e.data(this,s);return"instance"===a?(h=n,!1):n?e.isFunction(n[a])&&"_"!==a.charAt(0)?(i=n[a].apply(n,r),i!==n&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):e.error("no such method '"+a+"' for "+t+" widget instance"):e.error("cannot call methods on "+t+" prior to initialization; "+"attempted to call method '"+a+"'")}):(r.length&&(a=e.widget.extend.apply(null,[a].concat(r))),this.each(function(){var t=e.data(this,s);t?(t.option(a||{}),t._init&&t._init()):e.data(this,s,new i(a,this))})),h}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{disabled:!1,create:null},_createWidget:function(t,i){i=e(i||this.defaultElement||this)[0],this.element=e(i),this.uuid=s++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=e(),this.hoverable=e(),this.focusable=e(),i!==this&&(e.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===i&&this.destroy()}}),this.document=e(i.style?i.ownerDocument:i.document||i),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(t,i){var s,n,a,o=t;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof t)if(o={},s=t.split("."),t=s.shift(),s.length){for(n=o[t]=e.widget.extend({},this.options[t]),a=0;s.length-1>a;a++)n[s[a]]=n[s[a]]||{},n=n[s[a]];if(t=s.pop(),1===arguments.length)return void 0===n[t]?null:n[t];n[t]=i}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=i}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled",!!t),t&&(this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus"))),this},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_on:function(t,i,s){var n,a=this;"boolean"!=typeof t&&(s=i,i=t,t=!1),s?(i=n=e(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),e.each(s,function(s,o){function r(){return t||a.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?a[o]:o).apply(a,arguments):void 0}"string"!=typeof o&&(r.guid=o.guid=o.guid||r.guid||e.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+a.eventNamespace,u=h[2];u?n.delegate(u,l,r):i.bind(l,r)})},_off:function(t,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.unbind(i).undelegate(i),this.bindings=e(this.bindings.not(t).get()),this.focusable=e(this.focusable.not(t).get()),this.hoverable=e(this.hoverable.not(t).get())},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,o=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(o)&&o.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var o,r=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),o=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),o&&e.effects&&e.effects.effect[r]?s[t](n):r!==t&&s[r]?s[r](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}}),e.widget,e.widget("ui.tabs",{version:"1.11.4",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var e=/#.*$/;return function(t){var i,s;t=t.cloneNode(!1),i=t.href.replace(e,""),s=location.href.replace(e,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return t.hash.length>1&&i===s}}(),_create:function(){var t=this,i=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",i.collapsible),this._processTabs(),i.active=this._initialActive(),e.isArray(i.disabled)&&(i.disabled=e.unique(i.disabled.concat(e.map(this.tabs.filter(".ui-state-disabled"),function(e){return t.tabs.index(e)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):e(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var t=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===t&&(s&&this.tabs.each(function(i,n){return e(n).attr("aria-controls")===s?(t=i,!1):void 0}),null===t&&(t=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===t||-1===t)&&(t=this.tabs.length?0:!1)),t!==!1&&(t=this.tabs.index(this.tabs.eq(t)),-1===t&&(t=i?!1:0)),!i&&t===!1&&this.anchors.length&&(t=0),t},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):e()}},_tabKeydown:function(t){var i=e(this.document[0].activeElement).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(t)){switch(t.keyCode){case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:s++;break;case e.ui.keyCode.UP:case e.ui.keyCode.LEFT:n=!1,s--;break;case e.ui.keyCode.END:s=this.anchors.length-1;break;case e.ui.keyCode.HOME:s=0;break;case e.ui.keyCode.SPACE:return t.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case e.ui.keyCode.ENTER:return t.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}t.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),t.ctrlKey||t.metaKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(t){this._handlePageNav(t)||t.ctrlKey&&t.keyCode===e.ui.keyCode.UP&&(t.preventDefault(),this.active.focus())},_handlePageNav:function(t){return t.altKey&&t.keyCode===e.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):t.altKey&&t.keyCode===e.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(t,i){function s(){return t>n&&(t=0),0>t&&(t=n),t}for(var n=this.tabs.length-1;-1!==e.inArray(s(),this.options.disabled);)t=i?t+1:t-1;return t},_focusNextTab:function(e,t){return e=this._findNextTab(e,t),this.tabs.eq(e).focus(),e},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):"disabled"===e?(this._setupDisabled(t),void 0):(this._super(e,t),"collapsible"===e&&(this.element.toggleClass("ui-tabs-collapsible",t),t||this.options.active!==!1||this._activate(0)),"event"===e&&this._setupEvents(t),"heightStyle"===e&&this._setupHeightStyle(t),void 0)},_sanitizeSelector:function(e){return e?e.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var t=this.options,i=this.tablist.children(":has(a[href])");t.disabled=e.map(i.filter(".ui-state-disabled"),function(e){return i.index(e)}),this._processTabs(),t.active!==!1&&this.anchors.length?this.active.length&&!e.contains(this.tablist[0],this.active[0])?this.tabs.length===t.disabled.length?(t.active=!1,this.active=e()):this._activate(this._findNextTab(Math.max(0,t.active-1),!1)):t.active=this.tabs.index(this.active):(t.active=!1,this.active=e()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var t=this,i=this.tabs,s=this.anchors,n=this.panels;this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist").delegate("> li","mousedown"+this.eventNamespace,function(t){e(this).is(".ui-state-disabled")&&t.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){e(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return e("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=e(),this.anchors.each(function(i,s){var n,a,o,r=e(s).uniqueId().attr("id"),h=e(s).closest("li"),l=h.attr("aria-controls");t._isLocal(s)?(n=s.hash,o=n.substring(1),a=t.element.find(t._sanitizeSelector(n))):(o=h.attr("aria-controls")||e({}).uniqueId()[0].id,n="#"+o,a=t.element.find(n),a.length||(a=t._createPanel(o),a.insertAfter(t.panels[i-1]||t.tablist)),a.attr("aria-live","polite")),a.length&&(t.panels=t.panels.add(a)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":o,"aria-labelledby":r}),a.attr("aria-labelledby",r)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol,ul").eq(0)},_createPanel:function(t){return e("
").attr("id",t).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(t){e.isArray(t)&&(t.length?t.length===this.anchors.length&&(t=!0):t=!1);for(var i,s=0;i=this.tabs[s];s++)t===!0||-1!==e.inArray(s,t)?e(i).addClass("ui-state-disabled").attr("aria-disabled","true"):e(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=t},_setupEvents:function(t){var i={};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(e){e.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var i,s=this.element.parent();"fill"===t?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var t=e(this),s=t.css("position");"absolute"!==s&&"fixed"!==s&&(i-=t.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=e(this).outerHeight(!0)}),this.panels.each(function(){e(this).height(Math.max(0,i-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===t&&(i=0,this.panels.each(function(){i=Math.max(i,e(this).height("").height())}).height(i))},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n.closest("li"),o=a[0]===s[0],r=o&&i.collapsible,h=r?e():this._getPanelForTab(a),l=s.length?this._getPanelForTab(s):e(),u={oldTab:s,oldPanel:l,newTab:r?e():a,newPanel:h};t.preventDefault(),a.hasClass("ui-state-disabled")||a.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||this._trigger("beforeActivate",t,u)===!1||(i.active=r?!1:this.tabs.index(a),this.active=o?e():a,this.xhr&&this.xhr.abort(),l.length||h.length||e.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(a),t),this._toggle(t,u))},_toggle:function(t,i){function s(){a.running=!1,a._trigger("activate",t,i)}function n(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),o.length&&a.options.show?a._show(o,a.options.show,s):(o.show(),s())}var a=this,o=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),n()}):(i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),o.length&&r.length?i.oldTab.attr("tabIndex",-1):o.length&&this.tabs.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),o.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(t){var i,s=this._findActive(t);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return t===!1?e():this.tabs.eq(t)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+e+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tablist.unbind(this.eventNamespace),this.tabs.add(this.panels).each(function(){e.data(this,"ui-tabs-destroy")?e(this).remove():e(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var t=e(this),i=t.data("ui-tabs-aria-controls");i?t.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):t.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(t){var i=this.options.disabled;i!==!1&&(void 0===t?i=!1:(t=this._getIndex(t),i=e.isArray(i)?e.map(i,function(e){return e!==t?e:null}):e.map(this.tabs,function(e,i){return i!==t?i:null})),this._setupDisabled(i))},disable:function(t){var i=this.options.disabled;if(i!==!0){if(void 0===t)i=!0;else{if(t=this._getIndex(t),-1!==e.inArray(t,i))return;i=e.isArray(i)?e.merge([t],i).sort():[t]}this._setupDisabled(i)}},load:function(t,i){t=this._getIndex(t);var s=this,n=this.tabs.eq(t),a=n.find(".ui-tabs-anchor"),o=this._getPanelForTab(n),r={tab:n,panel:o},h=function(e,t){"abort"===t&&s.panels.stop(!1,!0),n.removeClass("ui-tabs-loading"),o.removeAttr("aria-busy"),e===s.xhr&&delete s.xhr};this._isLocal(a[0])||(this.xhr=e.ajax(this._ajaxSettings(a,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(n.addClass("ui-tabs-loading"),o.attr("aria-busy","true"),this.xhr.done(function(e,t,n){setTimeout(function(){o.html(e),s._trigger("load",i,r),h(n,t)},1)}).fail(function(e,t){setTimeout(function(){h(e,t)},1)})))},_ajaxSettings:function(t,i,s){var n=this;return{url:t.attr("href"),beforeSend:function(t,a){return n._trigger("beforeLoad",i,e.extend({jqXHR:t,ajaxSettings:a},s))}}},_getPanelForTab:function(t){var i=e(t).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}})}); diff --git a/tabbed_admin/LICENSE.txt b/tabbed_admin/LICENSE.txt new file mode 100644 index 0000000..a4e556e --- /dev/null +++ b/tabbed_admin/LICENSE.txt @@ -0,0 +1,27 @@ +Copyright (c) 2015, Guillaume Pousseo +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name of the nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/tabbed_admin/__init__.py b/tabbed_admin/__init__.py new file mode 100644 index 0000000..f2825c4 --- /dev/null +++ b/tabbed_admin/__init__.py @@ -0,0 +1,6 @@ +from .admin import TabbedModelAdmin + +__author__ = 'Guillaume Pousseo' +__all__ = [ + "TabbedModelAdmin" +] diff --git a/tabbed_admin/admin.py b/tabbed_admin/admin.py new file mode 100644 index 0000000..a5eae7c --- /dev/null +++ b/tabbed_admin/admin.py @@ -0,0 +1,154 @@ +from django.conf import settings +from django.contrib.admin.options import ModelAdmin +from django.utils.translation import gettext_lazy as _ + +from .settings import USE_JQUERY_UI, JQUERY_UI_CSS, JQUERY_UI_JS + + +class TabbedModelAdmin(ModelAdmin): + tabs = None + formatted_tabs = {} + + # Needs a specific template to display the tabs + change_form_template = 'tabbed_admin/change_form.html' + + def get_fieldsets(self, request, obj=None): + """ + Overwrites BaseModelAdmin fieldsets to add fieldsets passed by the + tabs. + If the tabs attribute is not set, use the default ModelAdmin method. + """ + tabs_fieldsets = self.get_formatted_tabs(request, obj)['fieldsets'] + if self.tabs is not None: + self.fieldsets = () + self.fieldsets = self.add_tabbed_item(tabs_fieldsets, self.fieldsets) + return super(TabbedModelAdmin, self).get_fieldsets(request, obj) + + def get_inline_instances(self, request, obj=None): + """ + Overwrites BaseModelAdmin fieldsets to add fieldsets passed by the + tabs. + If the tabs attribute is not set, use the default ModelAdmin method. + """ + if self.tabs is not None: + self.inlines = () + tabs_inlines = self.get_formatted_tabs(request, obj)['inlines'] + self.inlines = self.add_tabbed_item(tabs_inlines, self.inlines) + + try: + # django >=1.7 + return super(TabbedModelAdmin, self)\ + .get_inline_instances(request, obj) + except TypeError: + return super(TabbedModelAdmin, self).get_inline_instances(request) + + def add_tabbed_item(self, items_to_add, collection): + """ + Adds tabbed items (inlines or fieldsets) to their corresponding + attribute. + """ + if items_to_add: + for item in items_to_add: + if item not in collection: + if type(collection) == tuple: + collection = collection + (item, ) + elif type(collection) == list: + collection.append(item) + return collection + + def get_tabs(self, request, obj=None): + """ + Returns the tabs attribute. + """ + return self.tabs + + def get_formatted_tabs(self, request, obj=None): + """ + Returns the formated tabs attribute. + """ + if self.tabs: + self.parse_fieldsets_inlines_from_tabs(request, obj) + return self.formatted_tabs + + def parse_fieldsets_inlines_from_tabs(self, request, obj=None): + """ + Parses the self.tabs attribute. Checks its integrity and populates + self._tabs_fieldsets and self._tabs_inlines attributes. + """ + tabs_fieldsets = () + tabs_inlines = () + self.formatted_tabs['fields'] = [] + for tab in self.get_tabs(request, obj): + # Checks that each tab if formated with 2 arguments, verbose name + # of the tab and the tab configuration. + if type(tab) not in [tuple, list]: + raise TypeError( + _(u'Each tab entry must be either a list or a tuple')) + if len(tab) != 2: + raise ValueError( + _(u'Each tabs entry must contain 2 arguments: a verbose name and the tab setup.')) + if type(tab[1]) not in [tuple, list]: + raise TypeError( + _(u'A tab definition must be either a list or a tuple')) + # So far all went well, lets parse the tab configuration, we go + # through each item. If its a tuple or a list we consider its a + # fieldset, otherwise its a tuple. + formatted_tab = {'name': tab[0], 'entries': []} + for tab_entry in tab[1]: + formatted_tab_entry = {} + if type(tab_entry) in [tuple, list]: + tabs_fieldsets = tabs_fieldsets + (tab_entry, ) + formatted_tab_entry = {'type': 'fieldset', + 'name': tab_entry[0], + 'config': tab_entry[1]} + else: + tabs_inlines = tabs_inlines + (tab_entry, ) + formatted_tab_entry = {'type': 'inline', + 'name': tab_entry.__name__} + formatted_tab['entries'].append(formatted_tab_entry) + self.formatted_tabs['fields'].append(formatted_tab) + self.formatted_tabs['fieldsets'] = tabs_fieldsets + self.formatted_tabs['inlines'] = tabs_inlines + + def add_view(self, request, form_url='', extra_context=None): + """ + Overwrites add_view to insert the tabs config for the template. + """ + if extra_context is None: + extra_context = {} + extra_context.update({'tabs': self.get_formatted_tabs(request)}) + return super(TabbedModelAdmin, self)\ + .add_view(request, form_url=form_url, extra_context=extra_context) + + def change_view(self, request, object_id, form_url='', extra_context=None): + """ + Overwrites change_view to insert the tabs config for the template. + """ + try: + # django 1.4 + change_view = super(TabbedModelAdmin, self)\ + .change_view(request, object_id, form_url=form_url, + extra_context=extra_context) + except TypeError: + # django 1.3 + change_view = super(TabbedModelAdmin, self)\ + .change_view(request, object_id, extra_context=extra_context) + if hasattr(change_view, 'context_data'): + change_view.context_data.update( + {'tabs': self.get_formatted_tabs(request, + change_view.context_data.get('original'))} + ) + return change_view + + class Media: + """ + Extends media class to add custom jquery ui if + TABBED_ADMIN_USE_JQUERY_UI is set to True. + """ + if 'grappelli' in settings.INSTALLED_APPS: + css = {'all': ("tabbed_admin/css/tabbed_grappelli_admin.css", )} + + if USE_JQUERY_UI: + css = { + 'all': (JQUERY_UI_CSS, 'tabbed_admin/css/tabbed_admin.css', )} + js = (JQUERY_UI_JS,) diff --git a/db/tournamentpages/__init__.py b/tabbed_admin/models.py similarity index 100% rename from db/tournamentpages/__init__.py rename to tabbed_admin/models.py diff --git a/tabbed_admin/requirements.txt b/tabbed_admin/requirements.txt new file mode 100644 index 0000000..b5d1e98 --- /dev/null +++ b/tabbed_admin/requirements.txt @@ -0,0 +1,6 @@ +# No particular version to test anything + +Django +django-grappelli +django-tabbed-admin +django-gipsy diff --git a/tabbed_admin/settings.py b/tabbed_admin/settings.py new file mode 100644 index 0000000..60dc84a --- /dev/null +++ b/tabbed_admin/settings.py @@ -0,0 +1,18 @@ +# coding: utf-8 + +# DJANGO IMPORTS +from django.conf import settings + +# Activate the library jquery ui +USE_JQUERY_UI = getattr(settings, "TABBED_ADMIN_USE_JQUERY_UI", False) +USE_GRAPPELLI = getattr(settings, "TABBED_ADMIN_USE_GRAPPELLI", False) + +# Default jquery ui css and js +DEFAULT_JQUERY_UI_CSS = 'tabbed_admin/css/jquery-ui-1.11.4.min.css' +DEFAULT_JQUERY_UI_JS = 'tabbed_admin/js/jquery-ui-1.11.4.min.js' + +# User ability to override the default css and js +JQUERY_UI_CSS = getattr( + settings, "TABBED_ADMIN_JQUERY_UI_CSS", DEFAULT_JQUERY_UI_CSS) +JQUERY_UI_JS = getattr( + settings, "TABBED_ADMIN_JQUERY_UI_JS", DEFAULT_JQUERY_UI_JS) diff --git a/tabbed_admin/static/tabbed_admin/css/images/ui-bg_flat_0_aaaaaa_40x100.png b/tabbed_admin/static/tabbed_admin/css/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..352a197282fcb5eadd4a6ff6b18864956c574b20 GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F1SA+{?>A)!QcOwS?k)_>#w|r1Kptm-M`SUO z_5fqIli7AahM1>|V~EA+ zRdP`(kYX@0Ff`RQFxNFQ3o$UaGB&j`FxECOure?>Z=C%cMMG|WN@iLmZVmhLE=L13 OFnGH9xvX?t&Hpz19_YU9+AaB z+5?Q;PG;Ky8FHR3jv*e$lPlU;4SKlxP~aja2Dul`ryR1bKLV;$Epd$~Nl7e8wMs5Z z1yT$~28O1(2Ijg(W+4XVR>r1Q1}54D237_JTvI|bQ8eV{r(~v8;?_`o^6gci1_n=8 KKbLh*2~7ay@;8S7 literal 0 HcmV?d00001 diff --git a/tabbed_admin/static/tabbed_admin/css/images/ui-bg_flat_55_c0402a_40x100.png b/tabbed_admin/static/tabbed_admin/css/images/ui-bg_flat_55_c0402a_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..a36c8ec2a14cae03615a1837bb982539f8d343a0 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F$P6UUt$JVyq?iMILR=3xXvvD}dIGte1s;*b zK-vS0-A-oP0U7+BE{-7@=aUm8SQj_^Vqjp3U|=jYYbyszsg}4#l%ynUftDnm{ Hr-UW|AG$Gq literal 0 HcmV?d00001 diff --git a/tabbed_admin/static/tabbed_admin/css/images/ui-bg_flat_55_eeeeee_40x100.png b/tabbed_admin/static/tabbed_admin/css/images/ui-bg_flat_55_eeeeee_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..d49599a836abbb00e3cd4fb32a651267eb318137 GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F0wfqj{vTKlq?nSt-CY>?t&Hpz19_YU9+AaB z+5?Q;PG;Ky8FHR3jv*e$lPlU;4SKlxP~aja2Dul`ryR1bKLV;$Epd$~Nl7e8wMs5Z z1yT$~28O1(2Ijg(W+4XVR>r1Q1}54D237_JTvI|bQ8eV{r(~v8;?_`o^6gci1_n=8 KKbLh*2~7ay@;8S7 literal 0 HcmV?d00001 diff --git a/tabbed_admin/static/tabbed_admin/css/images/ui-bg_glass_100_f8f8f8_1x400.png b/tabbed_admin/static/tabbed_admin/css/images/ui-bg_glass_100_f8f8f8_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..18984c832c5d8f96fda80699dab195e9a3edf128 GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&0LWmFTHNUZq?nSt-Ch3w7g=q17Rci)@Q5r1 z(jH*!b~4)z#PD=+46!(!{G+xhQKVOC)na*jiMlR>KRk&)EV~~*=WdJF?)FK#IZ0z|d6Jz+BhJEX2Uv%GlJ(z(m`?z{?)FK#IZ0z|d6Jz+BhJEX2Uv%GlJ(z(m`?z{lg z;~K5>A79!Z77HJKzMm)llf=F`X+KV#{193p(yNptz~H}Xrrw0rvJ-)3s+PD$l%yn< zq*^5xr2;7iBLhQIT?2DnBeM_#b1P$0D+3d40|P4q1Fk8dnJ5}^^HVa@DsgM5KKb@4 PPy>UftDnm{r-UW|6Wmo2 literal 0 HcmV?d00001 diff --git a/tabbed_admin/static/tabbed_admin/css/images/ui-bg_inset-hard_75_999999_1x100.png b/tabbed_admin/static/tabbed_admin/css/images/ui-bg_inset-hard_75_999999_1x100.png new file mode 100644 index 0000000000000000000000000000000000000000..55347c6ec96d7f556628c022a04b4e9be4888935 GIT binary patch literal 253 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 DFxXs& literal 0 HcmV?d00001 diff --git a/tabbed_admin/static/tabbed_admin/css/images/ui-icons_444444_256x240.png b/tabbed_admin/static/tabbed_admin/css/images/ui-icons_444444_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..a802263b58990c806c1d1bc2a95c3847f01b138e GIT binary patch literal 6992 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 literal 0 HcmV?d00001 diff --git a/tabbed_admin/static/tabbed_admin/css/images/ui-icons_454545_256x240.png b/tabbed_admin/static/tabbed_admin/css/images/ui-icons_454545_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..d6169e8bf9389ab9b5b7d2c6f0c5fe3e4d363105 GIT binary patch literal 6992 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 DJqb9i literal 0 HcmV?d00001 diff --git a/tabbed_admin/static/tabbed_admin/css/images/ui-icons_777777_256x240.png b/tabbed_admin/static/tabbed_admin/css/images/ui-icons_777777_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..8e26ee4fd8c3d9f55b7495bd708181b8558c861c GIT binary patch literal 6999 zcmZ`;Wmp_rlWqq0;Q}+kB?L=w2_X>NHNfD5GkCBeI1KI*B)BEG6I=oW2tk7dG9gHS z0KwgDx!-=f&)$7@e{@%$?y9Fxy?v@q)!R{;>I%dJ)C2$k5GyIlY5@So{UxxEhjo9J z%XO2y7a$821zEt;YWqvo{RrPh(ZKy)D*o$`A9Q#D0Mtk&St%W_*_|9;M{5QDFA_HO zgjgLZ%#K9C>gSq3Fdb)lU7THy^ z1sQKqM+7pI9k|g%B@1aOF0<~`if#6Vp-^0AF{tiDw;cX>T7HaLj_%T6kcv;+=}PdE zT^6HMEtjY*Eduu;k0BAa0j%yy0B&v{a=QD_r!6C_SZA|QO&iKmY^*UB`yhByAc*OK zp=M-mkU`N~=b&m1*%5rAgOf4!2Ng394Tg&OcSTbI32Qkt{im@uOkrqkG=G!oQT-@9 zG5s*tTw;6A-Df)ECy(RwKrbZO(f&tPq1ZM5DcKDKH6Jg!T>p5<21G-`0}w|*QQ^IW zlD$jV`AhqtaThNPTajxYl;52BdSJv$ggEMFG?2xI=xL$vzQ%g)yIF}_o7MZiV~>N0 zqnW;Y6ojaj77t++T7*wE)h)igMC_Jp_>WcMuvg>qLY;>Vu)gsMu&c~lIr70eA74$E z{Zv)U%G_(GKJ)>659VYg>G~I5z-KViWxKhY+rBx`WygfidJJGOCf**`#-OUB;fABS z9Z!a1)tt7=y<=<-VR=5iqn{8l8Fu25@O!7Dp-7!5XJH(hM~m90(p~iVrmmhG*Rq=b z@aI3jJ@vobHHG9Vi1f9hE`3Xs*8>AT{=qB@HD6Rb%|eq~I6qUgVhDA8m7JL+!RDl_>M7 zeUv9Vj=k}Sk?ykw8zZBVBi4X5Zcu^DR$Z9eo3Hjxb8)RfGMlV8t%XL7II3#nkDPqz zDE?TRUMLN^a}*;5EtXqoc=tCjvqL=W6&Hy~DNfK7-ADvoqWm ziY?zzF>(!tVm}vbzn7#)ySkUgw4d2ij!WpM48L`6rsi$U9IbREFR~oYIy$yaFEz$A z=T1ZUxR-j9=EcbQO1stsGUuxdj|zppxO*j(@7pi?%6CV$3~hk#NL{)xbKHXi_jWJ! z;xfWmQ^on}>NH+e;d(-BX1W8`kCWoOM5t;YRr#JaiSjxyY7ZIU9h6JINGrk(x+F-v z;?X{+h?atU?+4(N-^gSxHdbxs>-F12U8X;Ys&aN3yi^A^bxTCdg>#w#sJ^lyY;k zG{7b6x6{w>qqmd<^b|vQDBs~`1}gKR?43UFmv^b$5ivlfa-tLWQ@(-)5q6~?bNE@J z-E)xhn`p+ha`!>2>GQRlixZ2V+Ow0nkY$ro(MIhvj@0GLI40(f5WIxqPyZ_*JAh-F zUO^i@$pCQ_F{^K?$^@JJY&&k;Wh>#6$4=R#LXjD&1+gpb^ z#Kme~1vU!kLl;vn6BA8I!PH!n)ev{>YhXS!=4U57S$x8zvEa?8A3Co}^AR&(fsneC zSB0{Y;yAo?j65bsa@nS8ul3W7O?9(koek7-vt|MB^N#;H@4CJ~H0z^f+5agDvfK!n$_y?hFWUU* z`(~3tLk1~yknB92U7qF1`xKl34D2q%3~VonrfpzIjojuQ8X%_W%Wmmc!avpzPEC)c z=~4XFc6Dc%5MgOTRSu2N*Eqec4857YI>=3KmH!;T=X`O^7W0Gul3o>aG`0zs6^s-$@&o^L#XD+5`vm@aP?nG{0{m0)@?#gKYG~HETK9s2M7uEgj(Ks zMWRpkHP>zdm#ey+80<$7Gou+>iKIbU28}W}Bm18qNw2o@hx|2cN%IO`g?~Rc(Xn=S zLmbUdsFZQnya`(Qh_$=>kQ(O<^PwYLHqeY7^P3dr*=@VoH(FUQ)*W8?G03mF_y4t@ z{0+CS5>Pyu5ndKl*p(M@uvki*PO46ZhBSrWG_Uei>pmtSACU^VDNKsGg2 z^&2OPVC$U!XP**b;M2>-C|XV=>YT@UW!C=Z{0dXDcMChT-d zcBsCRG-*eCL`uj&M`97e)d!_KV=j>BH9DsO5c+X=(~Gt-a zzzQGainOin@(!|(EAZ--1rsoeDQmo~{{VXf@FN&S9M5UJt{3(Q&fs#+HSehKKu8T< z9y3J$uTDL}f-f;;k%ZeCYZ&qv+TAq-U3pVPg*Y)_itRm{O|o#y(-%XO88`1)0D75E zCLgf9bWr~&yK0;FIbOiHgP#Cg5ph3!TCzJf!a0iM{0(cZp^Jw$_(femXm615)tSh@ zs#X*CguVrWiMAigxwW(q{L^obMo+BHR6z}6#(AU+k z%rnao=w{Z=e*0(j>$RHWmD{;pC&OZ#mapflO|}maY$Do`d-e&=m=k>(cNJ%+n>fINGRi2Y1MY!v_3^Xs;P*Xt{Th1j~@1{A2sn>RvL>>%^) zKQL4Orq&)?i6sTE?1X)hvxCUu;9`B7x2wTw8grLrKEZLHm@pPsb-7*1@A_)&{Ae3m zRTaArdQ?s2afyzh-f@_;u*u|2Q{b)gjF~iCb##aM2KfoEt2Emn$2tT1>y#Q~E^_Uc zm8eJDhH|`NUn9tVc*)7}Q06v{;UK%8Rpc|Zd-nHC>{06cs?=F%+~WGsY?dKo91~PMIZ5iG zS-)>>V&NCS-9=t6@k9Ivmk^{SPeY|kV)Q1AH{zKpu2<+IhzQhGi54>yoPeQ2Ft>n> zWhHK0TDUmG%63lQyf6NWL%)jrw8E%MB%zvGTb2aT))Sl}b~Egk$aVqNIArP^;)o-R z63*Z36}W_Tm={*8*!Vk#mbg2BpH~(ZMGvthfDE5i8PZ}#!WCbJ3LFSz)5jOAdStAK zMOaQ(nUa?FA`23dvAahCTJxJ8k%_O)ORRy<+{Dk^gaU^+qJ#$%R-9=LPV`MTsIJEB z4m+qlF_Z=miFTFXvTtsS5im&ljXn`xTyPfd#&eFI*Mfh5*IDfe7sPthY&79f@z=_P8`YaX{0GHsV0Tg zeTT5L-}KLxM^FP`u6I?C+9)iZqoJFe_;L95*5EVhvFr*S2nTk1)*7#uKno~*5zeoH{Obcb%S@K*75ZP={ixl9ewcZ zxb>eWNB3bAwXC{SaD27ZQJzi+U*>pg=l)DxA-AGAtC#%BM9)r9cBkz(L~k;0S&TP#_E=9P?bn0(W5w8a^olc58%W!PF!W4$Q**d0r*{5y&z@D166;0H zZ~0;j={1ot1Bivv(;AxzaT8f8@%-lnl6|gHPhixWm1Y+3Sz62?9WTv8J%wIPh%YD58Zb(4iWYYEj^ZD=M3wh zL9~>3MWEy}%)MxtjT5%+F-~beB9!%-{#v9oZm88ytr%i^f^+9zYNrS8V#6{MPA@T! zZ9l`BrAvB}cw(96AYvK0W>bLaFVe}q3lCTRD;Sa3SA{TB(xVSc8=M$1vwvuSj^b%R zlt-FLq40`{2P%jvm0Gtsl24Vf>7r&U^y^$vq_qk?p zUgBIOxwVT4iF0TPPiqNxSh+)#p5pxM2cFg@Y_;ZY1!X0J4WQtQu1J%l*@t#lMv;pk z?z)1~`>edU#J%tt|D81%GxKQ;^<-DyUyIlQQlA1)Jhej)D-R#QA(92yj9T@am4w6k z@sLx7vCmms^>^;A;3^#jmaZdk+F)tg2)o$BltvtqBcbtF$h^*h#AsCZw3y*8!qg#D z_-+DR|Aoxwz{Sn<>m#DM(WC1~E+?)qtc`%6Yu+Qqt{%e<7U#^sQ7*0=SY<&9{B%`@ zg6@*z2I}Qr8`*pW-bWQvjtP9#dZNp9o0i8BnU0qVL@p5F*6p@}{;nBE>#@BQ|Eq{R z1o2j!Km*v;wNxgby;spmfMa=sTSlI^bncT71oqjudG4;(_kQhA@QJp~~FT68%a~NDEINGDA@$Iod)$PJ^QXOEZA>(M#y=o)H$ee!OAAY0lepvXm(e`$|pa& zn@1yrjOw7bXXo!_plD4Ze)6Ik%dW>?r>5xbF&DqW1zIYtvq3WkHgq`1C)40WJjuz& zHe7Qv8WnZQX4dnn=6o`Jr>V2s5eA0gAvLeY?hUdz1HuQ;qS%ykHnHr?7=H@8jDj=x z+OJyf!FctBzn>J3!oeWvC_;7Hblfj(k9$Jx<37a()SCy_n+HnV*;JCv?kkVUQW9=g zdT=7{ry_N;Ge>{?frU8D1LP zeqkK%Lz<`8w^3`M^Q-s-tEuIEkT?gx-IDXe%Ya#|-}|#Krh=dwZ~Iz3WRMThxcO(Fx6RxO1QU*3XnC2X>I`os0#O~CfQeoy zkL?)}O^imMlHXEn$RGlSNM|a~r!xO42Hwpa6~9+QFYghZCJN=V0~M5ypGAGQ2+QdC zkO%`I^b4#N7k36>M{HM&n%Xw8u5$MJOMRhlLj6p-IZ3H1W{~f?|MdF3lMhv&HApSl zRlbLZo=%tOiLkaO)8DZZz*_s?eBR$<6M#Ct14utz@Y$BK0*yz*ix#?xsZFom#x)XAlCXTn`+M{|i^`Z2Z2ZgTRGb@V!vZ^+S(lGpEYZywcMQ3f@2K79=P+ zgo#7iwI#Y8XxY!FNLu6dTGU-ys*Ahcos=+4G_52IS$0K$-qioG?8Zi+W3I7hX&*P_ z3qP&v11Y4x9|k47^_l!R>AX4BRTCw#*}J|pdwwMR?eyFMb&&pIH)Ail11BULeoZe4ZyOz* z%ijp$UaZ|nCByH|xvmO6ebGrDSfSGVER$Bye|(ij_#@6cZpNc)o>y6-Mdz%{8eMET z%x!E6cc{b{(d`VHk7^2VDVOuK`t?%BbOZSAR#$3NXr_<{YDhk)eRYcL0?bkK{LvJQ zij1yrf!NQaZK~@SzWj3vDw7h&kiTFCd3#PrP)4y4h}Ugux5d-yOFlN4cA@(cu)6Z$ z!xZ+J+(X>dwFP@nT4_jV7OxEfzLyA$Qd0>jpDyYfL@p(I5sHB}mB7bv#=9GS*kF$( z(6{pkrUiDQgDpppxH=&|kkZ&bbyu++XrtH2M}Cx2%(&p&v9|&yGOT@?R7cl+unEAiFQPUpgL_pCqU7 zRH_E*T6A5OJ-WvZn*$S{o4qq?U`irQ_t(1HaSg%7`<5#h?2y_=pXnCc+7EW&xC%Wo z6%JVNh8c)5as&$LDKD3k13ZTe9TEzy5jBO2Ta$qUcPp)@s#GqIz{zXR=m^6E^~ zA#$~&wErCOjndL9xpYlG-xl*_^ zm`-0>A}F11=&65Wn-Rql(OQluCWs;bkXe}Unv3pZZxeEgDZfKw$HEll;+@nBOs*R7 z6BU#OLL`muOw)Gx+`!n~#fAzwyDu>Um`ne6BKUiLUv?=`_!3OtNC!Zgfw^2((TQb2 z>%PHithl!+IFb<5;JJV!+R(G_w#wYbo#+0>=(&I~+OXLskYTADLzx*wKmz9vp_S!0D@ImkedE?8DEBo%YHi@8;^LttDnJSXB;%y38YKG-aV$0V8B_&MDd`mk$tqf+0Dt`@K{d4*o7p5c=jj!nB*VBfF>fiX zJ!*2yRNP(~f~qF# z0r2zk332fXaPjf!@Ck|vJrm{Qf6U7(%FD}JW>@hK11D!IJB0WDZy0xA(Kx*=w!6emhqEl_DVli~s-t5GuWp*8~87_f5b782kRN zkmCWr7a&U&MR`ERV^i?>{S&_13j@!4`Qo3~^FBu@004$il9$o;o&WP8z{y52s7D%6 zt1>Boy&2WIwjVuV@+Toc!4rSahhV}B~*zZ z&QP&xnJM%k+*c&OYBZXb*@1D^pmMxWJq=H@TIb!_a$$(*)6fa&VaKg(zYm^!r>$oh zmEJ*nlI@WFu3LkyTO!}d=v2EyEf8p{#sko(n=delPo}rCN}xLH0K{M!#${fr z#5C#(qzb;uU?`*UgrMYEK}!7{JXZ9K5TpSx3X_XpfA%SnzFRGKG^$$inT2H?nf&g` zTLpC5k<>V8KHx+S_-gtEV{F#fj-w)SCI?$O^?Ub=dh}wW3jv=92skmA`9w%f zW2%#$@^|J66}CaP8MgIaMsh$c$Sbm#aK1Tl8)HkEsaZTDtZI^k@{p7iummfQU`LtT z$uRok+P*Vv!)Yoc;bZ0PoRNNJQD&HE&6d^Q_)Gnk3tb35)gdnk(XmjoSeWG>8WHx9 zvFyK!x^b%-!RR1d+N(?+6ED21`E28wa&#~-t9W7rI1}HA8Oe#r#di{I0SMBV0$@Zu z0K#Y}GO7at@A!$6_w(R4@W?&-!=1_Vj8lLM2gs=#g}?3(I40lSEv}_QyAUNFwN*wG zEcydPAgFHyrw=kG1ASB%x`T~&jJ}mhod(sy@*3&T#x2eWQuU6(JWlV_>MrfS6}x(0 zTm*!i?c4V4dw&CWyFAH(-c$isUIxVGWWa_NjAnzk8#l~hgpnKxzntjc1~sw2wijAB ztl<=>|5{zT#g*Tu7qoNLOJf`?6Z7cjCsQ2gZ z2sr&s)TgJ?s)i^|&AKqV;p;H%0ojn{7u;8uCx=+k1RiX%cC*)*ly)>cwQ@6uw9u%> zNywc0qXAM@#i>fjlI_kCx@s7>aVp|A0UzgTEhyRgqshdHVFJd)RqH0k`~#fE1ih|Jn46X_?UsT<5YqN1WGGinNz zLzVFQOl%RUKRVB289m_LrPZ^!`29FBc(m51}lBbr$8G_aeVA1H2mFaDNzc15dZq zkLjeK@n;chrg!r2^!Hhg;Go+j2l#nH?BdyctY&pB*{q;?YdI#8u<2+^{m`%;G??)q zdwo97NN;_I8r?R}SOp8$J}F1#Y@;k)oV?Aa;e~0nBx^d6f!r#@pi>HlbF;!VJ&JJ7 ziZ{R}_M*p8M-u}hO^9kQ@70oUZy1?9c=`SI+GNk~&JLyAZZW9ZU zzZ?;9WH9QVJM+Gx^tH&=aFIk7gEoK(#TQ$H8F6;Xa-5k#bLnw7-0YK68m)cy!IG%i z<_~lM>+ev$t!uziMEpXVNvhoJ0i%LX;pxut zlqcX`C%-9Sb%e!EQ(n=TaRZ5WVBiBl1|VkoD?7haZTH-pa&H|g20N0vsHDmgk{kQ3 z64u^%E9;YpSsZK0T7RW+d1JwwFzg9`0Mx2X+c<|Rn>{_y{Qnc&|dM9(%p+)^KYO<$wB%dwJ-gfazmt6Ea5oM;$ue2DujW9{{F!H2@T%c&K(ssnlgmCk~E!l~!`T zr%)0iK{z(msn(|BS>m$%eGz_dujT+ArrPM=#)Wv;d{+Vehzy;8g3Eve>a$@MH9cuF zQ;j6GuAw0L^`u!)4ZA=4eXijiU!)Pjxd~RE_F+`!{ECD2!X?5+@#W zCOjsStD5I%&(010_Rba1--0vyUT8kint!ZE%K-`|@Mj>&so04b{2gn3PD;mi{~ZO@ znaj?e3-meBEE#aLUiIY(ZN7?$`hJ538$rkDQ9S_fQFQAaH0zIXj`r8dMlBV<*{vx< zh3CISE0x3-^cs3oZ21l3r8*^ez?=~{!%FX(b0E?~&+(hG<#hJm9;cjKVe_c86MJH1 zB>Lf83TIff;`oNkJh>sK+;#`cAg-@eoq7_teyT@Ih z;mq@^<@JasTg8HnBFa?M^bv++p%|K_x9Jg!3SxsjE7l2*(b}BgrobOx!`9j=9n`ZB z3Z!aU%Gl-tZE*vigue7U5h4&LHjIv_h$#*^ZggpNpVTycoWry zncQCb;m?2Eu2{XK1kN0m#ocrfVAtly%@1=ZXR2a7VM0dTbgC&n>wT8oyycFf?_8U4YZW=;`SP8mihy#IQ)%bq*o!40i;(@F;E}{0|vchh84d%0zF`_SYz*Q zR4#o|xuINvt&TAX$*fe3%qo&op2`G*Gm!Kr|l z$8-7PY&CZyelnLj5eCeeJ%EY0nHGL8WW%qDzwB|{P&@;k7LaYY_2H{vlr8nf_w-0L zQV1txr8IJMeN(#==Zy6j@CnJbsu#J!V~495t^g)DI~OpsMx*d?^j?Firqh^qV>V#_SeM6x(NoAj2vf=*kfS|8x5s&CScV6`5XS z<(oZtaJ&nM%8l2yc145Zg(&?mm`ah~R)$(|Ol2rn(@U)1adm%77wJaelAQ!S`WpIW zx#r=_=E-csFHSrVw=DHRV%LHzvHQ=9TRB8d$>%!AIVskf=hqkDf`=0!{$wnGto&6{{^LHA3FZcKahA@yL5W)&vZNLoj&icj>(s?p*gv&%;Ah0vSCaN%@( zd{F}wW?&l`ddu(X7PGGGuXzJOd-TCx7R48TGbzYrqxuPbCs0~jR)zL!>Ie-fb;k%x@|PGbYz0F`m4OYw=cT&CTzPb%p- zuRUj^kDCKi{o491EoAVX?3&$&uL*Q}SGri&jA$1$4I<(KczN}h+#imnFuY_Wa-?h< zR7n^a+4QkIV{K+_{@e{ZKUTt=vwmwQ*?Ovo0VGxpf_^b^$66st*7%Uhp$pAOWLY%i z-AUHmnr_=r^Ize8ZvArdvr?mW(ZmXvmOPPd(~qz;i5rzbBM`L8^Ss}=b8xI+06(;}w=8zwxdz<2Wo9wp<6J*XQ^xZ4M>%U{$#s$uDCpP@J z_CP5qn~xS#n_`%*i~tglMdh+(&ymE-TOlz+Q>>VBQ8SFKJforeX}TFPIfe1a?FJV^ z=nj{;gtvwkXSiPy>SXuMa?pgQVEJD=}iQEmw;StN2)LUIEGx;L@XKBDR;^) z)-VR^x5wEwjPJdU{VA8$71GAAn#c*{vmbV9e*QR2z%p&K$3A*|_B9aF2kYQ7WtX_o zkRm|CXw@AU+^%V&Y)LN8 zspX-hSNod&1O%QdC65BUruM@IFw2cNHhA99f^xH=VD}-p;EEfi;LLeE)3s{Z>qPfZ z>)pJZDd~djP@k^klgr1e2nxpgp$R<8++KdflC5zr?!pzqxfVIlB0BJt7?B%u*1$Tk z>(XgZ{_-P*CxLO1QX(VAd;*ZWPCT*y*V~={O6P$@pJId=@o~vd3_CD>ep?OTD_08i zGL4XZt8^}B%4G-82$8RE^{_%_A@8tPqYeJpI#jC0)2Z6ghR4p8e%o)`E!S1_Co9FDiS3XRR}?kkK*EVG1YPhaoMI z9BI!kzHkutQ)#mQSYqpAHh#r(vRlGjIVzFRiY-2Mt?gTVoy~SB8(j z{!NTRNxmJ6k50w&;I>$GG2Os(a&%;S^5Pt_5uFkJmtuOI*>B?7(ZwE9W=Z&Yw}yv4 ze|uC7(~iyxS7>fy_swyCZ&mGZ*na&|rc=HM8-8Ld8sj}ev3k!z*yV7c<--1z zDU+c{gYx!+XQJtbDZ`IU^8I%id&AKbwxP$7KI#`%Qtz5Qd2;DqZ%OXRO#;5GO-m0H z8y7v(JVOY0{WbL&s|EX?eq83@o!yu+eh&a_|Nx$F3R zL9Z5_+69`_ZIpb{uL2&sZ;m*w&&keie{`FaPwtw?+z)^mK;7ahQ=JK$Kg4Tx*;zvO zW)UExxHnn+Db6WJoqt+3n2)oWa=1Dr2C~=eUDoqia73c_>dE%l?j6VBwA}Ztp9cBz z>!ZDVMwhf;=;?6!D}SA8Gt`-h6r+*QR?)-1|qJ;8d}U%p6A;^qvS2sD=2WP^lf&9QL3IHySNLE{_< zuElA!((32tHcKxp_~bgzrsj8}4Gg2gD_sWe0om+r^43lt!U*;RoKk_w-;&NwLB2~PS>}9PfjW^4u`^atQ?fYTU;~?| z9LAsqRz2u==WKzk#|u02kQ~@9)Fh7%%S*p5XR|!ML0NEtr+!Sm(b3j4C5&h)!|cRO zoi?BjOB>Dwa2%vc^q97I^T;-a-R?O`fHG|Xt^T4pJjj~xDFNEBOZnAWoxV+B z6{qzZ&L9#hwSQsBwSM^?tkFkMkTizke^(5h~^?h>I7PkAqSbBjnnroPtQ zEDj)BhM^Rrb+F=xCMCiDpz{6$wfC3@P}tf)cSVu`_-d(FJmcBgJrit=2vCzjbLEl%?^StLEXk5OOkEPE} zv~Rc^PRKmt%n@vcfM{mwWajJb$>aG~*BXAi=jsd|ltG|I07*b{J3Na#l5%qE`Fn#^ zDo-zi)iF&qf5%JJpv&{AL&cyA31jk*<+ype5FuW=i5|&gljIoy=_HH+|6BJ1gu!T& zoUS9%?0s;%zWUGb&jEJ#nTF2M3zaCMIx=Ca>dB;lrs1I3Wa}UbprG{QI}fnZ`^Ox^ z(c2OUs@!g@&XcUT)}=sOxCJGJ(Vf(STyqE`9rd~SHIr`+p5hT2oCri$;@vX{T=!h* zf73LAG#P-|VXPvR_BV=Jm!Amq-h>wtHwAVS>d7Bbnm;4X<6hdbbs0U8Nq3z+>5su) zCA!s>37|KNZ=d?SK%+{ODYbn>m}QEk0ZsC|g*K>u&P1^5O8S=EHaap@o$ISu;f5zSD-*qeQA84H0f=+qTLkOHfCY0w15OW!+t0i z-6$+D7yaOCR^yZEcAjk?C@*pLCx58AS=aAly_X*|2}C~c7s@!nl+UmKsX`26fML%M zW4V1=A>^#32_eU{QZM2}WAP@A-H%YRjN~qizpW&&{wV%054H4uO9>}!Qd)Z^ z2eW(EKA>eVaOFD*kx;A@XU5N_evE;hy)*CZ25*xq{oMTUCki* z$JA%(9v|P-*Vn&Y8_mo|Tt@Ls+AJnGI(WeLqW?K85k}iR@Q{`W62#C^Fc@L=+*1bq zquv<0$I+Hh^+fMy(+_v*7V};c(2*U1%&k_5o;~+p%aOsO#&YgyjHYnDp@VJUm_JB( zKw~xdB2mI?o7B>j*FyXNXBWaQp`1U9lc4iL;jQzlkEU03_(_UNz2R`9JG1mXJ`WNc zbfKZ*hdm8oFjLXLEzEy${5{JQNPKC=N#b6RdPokJbzD+$=&yheoNZcy{loVdcSIC-&{TJmm{-FQ> literal 0 HcmV?d00001 diff --git a/tabbed_admin/static/tabbed_admin/css/images/ui-icons_cc0000_256x240.png b/tabbed_admin/static/tabbed_admin/css/images/ui-icons_cc0000_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..28154300a67013332fb1ba53c629138ee31c8558 GIT binary patch literal 4549 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 E2bfitbN~PV literal 0 HcmV?d00001 diff --git a/tabbed_admin/static/tabbed_admin/css/images/ui-icons_ffffff_256x240.png b/tabbed_admin/static/tabbed_admin/css/images/ui-icons_ffffff_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..4d66f596e5967a460a37526e2130a55711eeca3c GIT binary patch literal 6299 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 literal 0 HcmV?d00001 diff --git a/tabbed_admin/static/tabbed_admin/css/jquery-ui-1.11.4.min.css b/tabbed_admin/static/tabbed_admin/css/jquery-ui-1.11.4.min.css new file mode 100644 index 0000000..f633b3a --- /dev/null +++ b/tabbed_admin/static/tabbed_admin/css/jquery-ui-1.11.4.min.css @@ -0,0 +1,7 @@ +/*! jQuery UI - v1.11.4 - 2016-12-04 +* http://jqueryui.com +* Includes: core.css, tabs.css, theme.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&fwDefault=normal&cornerRadius=3px&bgColorHeader=%2379aec8&bgTextureHeader=flat&borderColorHeader=%23dddddd&fcHeader=%23333333&iconColorHeader=%23444444&bgColorContent=%23fff&bgTextureContent=flat&borderColorContent=%23eee&fcContent=%23333333&iconColorContent=%23444444&bgColorDefault=%23205067&bgTextureDefault=flat&borderColorDefault=%23205067&fcDefault=%23f9f9f9&iconColorDefault=%23777777&bgColorHover=%2379aec8&bgTextureHover=flat&borderColorHover=%23205067&fcHover=%23fff&iconColorHover=%23555555&bgColorActive=%23fff&bgTextureActive=flat&borderColorActive=%23fff&fcActive=%23000&iconColorActive=%23ffffff&bgColorHighlight=%23fffa90&bgTextureHighlight=flat&borderColorHighlight=%23dad55e&fcHighlight=%23777620&iconColorHighlight=%23777620&bgColorError=%23fddfdf&bgTextureError=flat&borderColorError=%23f1a899&fcError=%235f3f3f&iconColorError=%23cc0000&bgColorOverlay=%23aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=%23666666&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=5px&offsetTopShadow=0px&offsetLeftShadow=0px&cornerRadiusShadow=8px&bgImgOpacityHeader=&bgImgOpacityContent=&bgImgOpacityDefault=&bgImgOpacityHover=&bgImgOpacityActive=&bgImgOpacityHighlight=&bgImgOpacityError= +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.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-content{border:1px solid #eee;background:#fff;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #ddd;background:#79aec8;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{border:1px solid #205067;background:#205067;font-weight:normal;color:#f9f9f9}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#f9f9f9;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{border:1px solid #205067;background:#79aec8;font-weight:normal;color:#fff}.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{color:#fff;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #fff;background:#fff;font-weight:normal;color:#000}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#000;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-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;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.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-default .ui-icon{background-image:url("images/ui-icons_777777_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_555555_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.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-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-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:-64px -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:-64px -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:0 -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;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:0 0 0 0;padding:5px;background:#666;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px} diff --git a/tabbed_admin/static/tabbed_admin/css/tabbed_admin.css b/tabbed_admin/static/tabbed_admin/css/tabbed_admin.css new file mode 100644 index 0000000..aa810b0 --- /dev/null +++ b/tabbed_admin/static/tabbed_admin/css/tabbed_admin.css @@ -0,0 +1 @@ +#tabs{clear:both}.ui-state-default a.errortab{background-color:red;color:white}.ui-tabs .ui-tabs-panel{overflow:hidden} diff --git a/tabbed_admin/static/tabbed_admin/css/tabbed_grappelli_admin.css b/tabbed_admin/static/tabbed_admin/css/tabbed_grappelli_admin.css new file mode 100644 index 0000000..97af0b2 --- /dev/null +++ b/tabbed_admin/static/tabbed_admin/css/tabbed_grappelli_admin.css @@ -0,0 +1 @@ +.ui-tabs{background-color:#fff;border:0;min-width:960px}.ui-widget textarea,.ui-widget input,.ui-widget select{font-family:Arial,sans-serif}.ui-widget{font-family:Arial,sans-serif;font-size:1em}.ui-tabs .ui-tabs-panel{background-color:#fff;padding:5px 4px 0}.ui-tabs .ui-tabs-anchor{font-size:9pt}.ui-widget-content{background:none}.ui-tabs .ui-widget-content a{color:#309BBF}.ui-tabs .ui-widget-content a:hover{color:#444}.ui-tabs .ui-widget-header{background-image:linear-gradient(#E5E5E5,#DBDBDB)}.ui-tabs .ui-state-default{background-image:linear-gradient(#CEE9F2,#E1F0F5)}.ui-tabs .ui-state-active{background-image:linear-gradient(#CEE9F2,#fff);border-color:#BBB}.ui-tabs .ui-state-active a{color:#444} diff --git a/tabbed_admin/static/tabbed_admin/js/jquery-ui-1.11.4.min.js b/tabbed_admin/static/tabbed_admin/js/jquery-ui-1.11.4.min.js new file mode 100644 index 0000000..0859952 --- /dev/null +++ b/tabbed_admin/static/tabbed_admin/js/jquery-ui-1.11.4.min.js @@ -0,0 +1,8 @@ +/*! jQuery UI - v1.11.4 - 2015-07-27 +* http://jqueryui.com +* Includes: core.js, widget.js, tabs.js +* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */ + +jQuery = jQuery || django.jQuery.noConflict(false); + +(function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){function t(t,s){var n,a,o,r=t.nodeName.toLowerCase();return"area"===r?(n=t.parentNode,a=n.name,t.href&&a&&"map"===n.nodeName.toLowerCase()?(o=e("img[usemap='#"+a+"']")[0],!!o&&i(o)):!1):(/^(input|select|textarea|button|object)$/.test(r)?!t.disabled:"a"===r?t.href||s:s)&&i(t)}function i(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}e.ui=e.ui||{},e.extend(e.ui,{version:"1.11.4",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({scrollParent:function(t){var i=this.css("position"),s="absolute"===i,n=t?/(auto|scroll|hidden)/:/(auto|scroll)/,a=this.parents().filter(function(){var t=e(this);return s&&"static"===t.css("position")?!1:n.test(t.css("overflow")+t.css("overflow-y")+t.css("overflow-x"))}).eq(0);return"fixed"!==i&&a.length?a:e(this[0].ownerDocument||document)},uniqueId:function(){var e=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++e)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(i){return t(i,!isNaN(e.attr(i,"tabindex")))},tabbable:function(i){var s=e.attr(i,"tabindex"),n=isNaN(s);return(n||s>=0)&&t(i,!n)}}),e("").outerWidth(1).jquery||e.each(["Width","Height"],function(t,i){function s(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],a=i.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+i]=function(t){return void 0===t?o["inner"+i].call(this):this.each(function(){e(this).css(a,s(this,t)+"px")})},e.fn["outer"+i]=function(t,n){return"number"!=typeof t?o["outer"+i].call(this,t):this.each(function(){e(this).css(a,s(this,t,!0,n)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),disableSelection:function(){var e="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.bind(e+".ui-disableSelection",function(e){e.preventDefault()})}}(),enableSelection:function(){return this.unbind(".ui-disableSelection")},zIndex:function(t){if(void 0!==t)return this.css("zIndex",t);if(this.length)for(var i,s,n=e(this[0]);n.length&&n[0]!==document;){if(i=n.css("position"),("absolute"===i||"relative"===i||"fixed"===i)&&(s=parseInt(n.css("zIndex"),10),!isNaN(s)&&0!==s))return s;n=n.parent()}return 0}}),e.ui.plugin={add:function(t,i,s){var n,a=e.ui[t].prototype;for(n in s)a.plugins[n]=a.plugins[n]||[],a.plugins[n].push([i,s[n]])},call:function(e,t,i,s){var n,a=e.plugins[t];if(a&&(s||e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType))for(n=0;a.length>n;n++)e.options[a[n][0]]&&a[n][1].apply(e.element,i)}};var s=0,n=Array.prototype.slice;e.cleanData=function(t){return function(i){var s,n,a;for(a=0;null!=(n=i[a]);a++)try{s=e._data(n,"events"),s&&s.remove&&e(n).triggerHandler("remove")}catch(o){}t(i)}}(e.cleanData),e.widget=function(t,i,s){var n,a,o,r,h={},l=t.split(".")[0];return t=t.split(".")[1],n=l+"-"+t,s||(s=i,i=e.Widget),e.expr[":"][n.toLowerCase()]=function(t){return!!e.data(t,n)},e[l]=e[l]||{},a=e[l][t],o=e[l][t]=function(e,t){return this._createWidget?(arguments.length&&this._createWidget(e,t),void 0):new o(e,t)},e.extend(o,a,{version:s.version,_proto:e.extend({},s),_childConstructors:[]}),r=new i,r.options=e.widget.extend({},r.options),e.each(s,function(t,s){return e.isFunction(s)?(h[t]=function(){var e=function(){return i.prototype[t].apply(this,arguments)},n=function(e){return i.prototype[t].apply(this,e)};return function(){var t,i=this._super,a=this._superApply;return this._super=e,this._superApply=n,t=s.apply(this,arguments),this._super=i,this._superApply=a,t}}(),void 0):(h[t]=s,void 0)}),o.prototype=e.widget.extend(r,{widgetEventPrefix:a?r.widgetEventPrefix||t:t},h,{constructor:o,namespace:l,widgetName:t,widgetFullName:n}),a?(e.each(a._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete a._childConstructors):i._childConstructors.push(o),e.widget.bridge(t,o),o},e.widget.extend=function(t){for(var i,s,a=n.call(arguments,1),o=0,r=a.length;r>o;o++)for(i in a[o])s=a[o][i],a[o].hasOwnProperty(i)&&void 0!==s&&(t[i]=e.isPlainObject(s)?e.isPlainObject(t[i])?e.widget.extend({},t[i],s):e.widget.extend({},s):s);return t},e.widget.bridge=function(t,i){var s=i.prototype.widgetFullName||t;e.fn[t]=function(a){var o="string"==typeof a,r=n.call(arguments,1),h=this;return o?this.each(function(){var i,n=e.data(this,s);return"instance"===a?(h=n,!1):n?e.isFunction(n[a])&&"_"!==a.charAt(0)?(i=n[a].apply(n,r),i!==n&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):e.error("no such method '"+a+"' for "+t+" widget instance"):e.error("cannot call methods on "+t+" prior to initialization; "+"attempted to call method '"+a+"'")}):(r.length&&(a=e.widget.extend.apply(null,[a].concat(r))),this.each(function(){var t=e.data(this,s);t?(t.option(a||{}),t._init&&t._init()):e.data(this,s,new i(a,this))})),h}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{disabled:!1,create:null},_createWidget:function(t,i){i=e(i||this.defaultElement||this)[0],this.element=e(i),this.uuid=s++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=e(),this.hoverable=e(),this.focusable=e(),i!==this&&(e.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===i&&this.destroy()}}),this.document=e(i.style?i.ownerDocument:i.document||i),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(t,i){var s,n,a,o=t;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof t)if(o={},s=t.split("."),t=s.shift(),s.length){for(n=o[t]=e.widget.extend({},this.options[t]),a=0;s.length-1>a;a++)n[s[a]]=n[s[a]]||{},n=n[s[a]];if(t=s.pop(),1===arguments.length)return void 0===n[t]?null:n[t];n[t]=i}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=i}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled",!!t),t&&(this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus"))),this},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_on:function(t,i,s){var n,a=this;"boolean"!=typeof t&&(s=i,i=t,t=!1),s?(i=n=e(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),e.each(s,function(s,o){function r(){return t||a.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?a[o]:o).apply(a,arguments):void 0}"string"!=typeof o&&(r.guid=o.guid=o.guid||r.guid||e.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+a.eventNamespace,u=h[2];u?n.delegate(u,l,r):i.bind(l,r)})},_off:function(t,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.unbind(i).undelegate(i),this.bindings=e(this.bindings.not(t).get()),this.focusable=e(this.focusable.not(t).get()),this.hoverable=e(this.hoverable.not(t).get())},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,o=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(o)&&o.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var o,r=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),o=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),o&&e.effects&&e.effects.effect[r]?s[t](n):r!==t&&s[r]?s[r](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}}),e.widget,e.widget("ui.tabs",{version:"1.11.4",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var e=/#.*$/;return function(t){var i,s;t=t.cloneNode(!1),i=t.href.replace(e,""),s=location.href.replace(e,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return t.hash.length>1&&i===s}}(),_create:function(){var t=this,i=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",i.collapsible),this._processTabs(),i.active=this._initialActive(),e.isArray(i.disabled)&&(i.disabled=e.unique(i.disabled.concat(e.map(this.tabs.filter(".ui-state-disabled"),function(e){return t.tabs.index(e)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):e(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var t=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===t&&(s&&this.tabs.each(function(i,n){return e(n).attr("aria-controls")===s?(t=i,!1):void 0}),null===t&&(t=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===t||-1===t)&&(t=this.tabs.length?0:!1)),t!==!1&&(t=this.tabs.index(this.tabs.eq(t)),-1===t&&(t=i?!1:0)),!i&&t===!1&&this.anchors.length&&(t=0),t},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):e()}},_tabKeydown:function(t){var i=e(this.document[0].activeElement).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(t)){switch(t.keyCode){case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:s++;break;case e.ui.keyCode.UP:case e.ui.keyCode.LEFT:n=!1,s--;break;case e.ui.keyCode.END:s=this.anchors.length-1;break;case e.ui.keyCode.HOME:s=0;break;case e.ui.keyCode.SPACE:return t.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case e.ui.keyCode.ENTER:return t.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}t.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),t.ctrlKey||t.metaKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(t){this._handlePageNav(t)||t.ctrlKey&&t.keyCode===e.ui.keyCode.UP&&(t.preventDefault(),this.active.focus())},_handlePageNav:function(t){return t.altKey&&t.keyCode===e.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):t.altKey&&t.keyCode===e.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(t,i){function s(){return t>n&&(t=0),0>t&&(t=n),t}for(var n=this.tabs.length-1;-1!==e.inArray(s(),this.options.disabled);)t=i?t+1:t-1;return t},_focusNextTab:function(e,t){return e=this._findNextTab(e,t),this.tabs.eq(e).focus(),e},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):"disabled"===e?(this._setupDisabled(t),void 0):(this._super(e,t),"collapsible"===e&&(this.element.toggleClass("ui-tabs-collapsible",t),t||this.options.active!==!1||this._activate(0)),"event"===e&&this._setupEvents(t),"heightStyle"===e&&this._setupHeightStyle(t),void 0)},_sanitizeSelector:function(e){return e?e.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var t=this.options,i=this.tablist.children(":has(a[href])");t.disabled=e.map(i.filter(".ui-state-disabled"),function(e){return i.index(e)}),this._processTabs(),t.active!==!1&&this.anchors.length?this.active.length&&!e.contains(this.tablist[0],this.active[0])?this.tabs.length===t.disabled.length?(t.active=!1,this.active=e()):this._activate(this._findNextTab(Math.max(0,t.active-1),!1)):t.active=this.tabs.index(this.active):(t.active=!1,this.active=e()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var t=this,i=this.tabs,s=this.anchors,n=this.panels;this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist").delegate("> li","mousedown"+this.eventNamespace,function(t){e(this).is(".ui-state-disabled")&&t.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){e(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return e("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=e(),this.anchors.each(function(i,s){var n,a,o,r=e(s).uniqueId().attr("id"),h=e(s).closest("li"),l=h.attr("aria-controls");t._isLocal(s)?(n=s.hash,o=n.substring(1),a=t.element.find(t._sanitizeSelector(n))):(o=h.attr("aria-controls")||e({}).uniqueId()[0].id,n="#"+o,a=t.element.find(n),a.length||(a=t._createPanel(o),a.insertAfter(t.panels[i-1]||t.tablist)),a.attr("aria-live","polite")),a.length&&(t.panels=t.panels.add(a)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":o,"aria-labelledby":r}),a.attr("aria-labelledby",r)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol,ul").eq(0)},_createPanel:function(t){return e("
").attr("id",t).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(t){e.isArray(t)&&(t.length?t.length===this.anchors.length&&(t=!0):t=!1);for(var i,s=0;i=this.tabs[s];s++)t===!0||-1!==e.inArray(s,t)?e(i).addClass("ui-state-disabled").attr("aria-disabled","true"):e(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=t},_setupEvents:function(t){var i={};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(e){e.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var i,s=this.element.parent();"fill"===t?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var t=e(this),s=t.css("position");"absolute"!==s&&"fixed"!==s&&(i-=t.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=e(this).outerHeight(!0)}),this.panels.each(function(){e(this).height(Math.max(0,i-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===t&&(i=0,this.panels.each(function(){i=Math.max(i,e(this).height("").height())}).height(i))},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n.closest("li"),o=a[0]===s[0],r=o&&i.collapsible,h=r?e():this._getPanelForTab(a),l=s.length?this._getPanelForTab(s):e(),u={oldTab:s,oldPanel:l,newTab:r?e():a,newPanel:h};t.preventDefault(),a.hasClass("ui-state-disabled")||a.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||this._trigger("beforeActivate",t,u)===!1||(i.active=r?!1:this.tabs.index(a),this.active=o?e():a,this.xhr&&this.xhr.abort(),l.length||h.length||e.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(a),t),this._toggle(t,u))},_toggle:function(t,i){function s(){a.running=!1,a._trigger("activate",t,i)}function n(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),o.length&&a.options.show?a._show(o,a.options.show,s):(o.show(),s())}var a=this,o=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),n()}):(i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),o.length&&r.length?i.oldTab.attr("tabIndex",-1):o.length&&this.tabs.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),o.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(t){var i,s=this._findActive(t);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return t===!1?e():this.tabs.eq(t)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+e+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tablist.unbind(this.eventNamespace),this.tabs.add(this.panels).each(function(){e.data(this,"ui-tabs-destroy")?e(this).remove():e(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var t=e(this),i=t.data("ui-tabs-aria-controls");i?t.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):t.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(t){var i=this.options.disabled;i!==!1&&(void 0===t?i=!1:(t=this._getIndex(t),i=e.isArray(i)?e.map(i,function(e){return e!==t?e:null}):e.map(this.tabs,function(e,i){return i!==t?i:null})),this._setupDisabled(i))},disable:function(t){var i=this.options.disabled;if(i!==!0){if(void 0===t)i=!0;else{if(t=this._getIndex(t),-1!==e.inArray(t,i))return;i=e.isArray(i)?e.merge([t],i).sort():[t]}this._setupDisabled(i)}},load:function(t,i){t=this._getIndex(t);var s=this,n=this.tabs.eq(t),a=n.find(".ui-tabs-anchor"),o=this._getPanelForTab(n),r={tab:n,panel:o},h=function(e,t){"abort"===t&&s.panels.stop(!1,!0),n.removeClass("ui-tabs-loading"),o.removeAttr("aria-busy"),e===s.xhr&&delete s.xhr};this._isLocal(a[0])||(this.xhr=e.ajax(this._ajaxSettings(a,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(n.addClass("ui-tabs-loading"),o.attr("aria-busy","true"),this.xhr.done(function(e,t,n){setTimeout(function(){o.html(e),s._trigger("load",i,r),h(n,t)},1)}).fail(function(e,t){setTimeout(function(){h(e,t)},1)})))},_ajaxSettings:function(t,i,s){var n=this;return{url:t.attr("href"),beforeSend:function(t,a){return n._trigger("beforeLoad",i,e.extend({jqXHR:t,ajaxSettings:a},s))}}},_getPanelForTab:function(t){var i=e(t).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}})}); diff --git a/tabbed_admin/templates/tabbed_admin/change_form.html b/tabbed_admin/templates/tabbed_admin/change_form.html new file mode 100644 index 0000000..d7d6be4 --- /dev/null +++ b/tabbed_admin/templates/tabbed_admin/change_form.html @@ -0,0 +1,104 @@ +{% extends "admin/change_form.html" %} +{% load i18n admin_modify admin_urls tabbed_admin_tags %} + +{% block content %} + +
+ {% block object-tools %}{{ block.super }}{% endblock %} +
{% csrf_token %}{% block form_top %}{% endblock %} +
+ {% if is_popup %}{% endif %} + {% if to_field %}{% endif %} + {% if save_on_top %}{% block submit_buttons_top %}{% submit_row %}{% endblock %}{% endif %} + {% if errors %} +

+ {% if errors|length == 1 %}{% trans "Please correct the error below." %}{% else %}{% trans "Please correct the errors below." %}{% endif %} +

+ {{ adminform.form.non_field_errors }} + {% endif %} + + +
+ + + + {% block after_field_sets %}{% endblock %} + + {% block after_related_objects %}{% endblock %} + + {% block submit_buttons_bottom %}{% submit_row %}{% endblock %} + + {% if adminform and add and adminform.first_field and adminform.first_field.id_for_label %} + + {% endif %} + + {% prepopulated_fields_js %} + +
+ +
+{% endblock %} diff --git a/db/tournamentpages/migrations/__init__.py b/tabbed_admin/templatetags/__init__.py similarity index 100% rename from db/tournamentpages/migrations/__init__.py rename to tabbed_admin/templatetags/__init__.py diff --git a/tabbed_admin/templatetags/tabbed_admin_tags.py b/tabbed_admin/templatetags/tabbed_admin_tags.py new file mode 100644 index 0000000..4c9e48c --- /dev/null +++ b/tabbed_admin/templatetags/tabbed_admin_tags.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +from django import template +from django.contrib.admin.helpers import Fieldset +from django.template.loader import render_to_string +from django.core.exceptions import ImproperlyConfigured + +register = template.Library() + + +@register.simple_tag(takes_context=True) +def render_tab_fieldsets_inlines(context, entry): + """ + Render the fieldsets and inlines for a tab. + """ + template = "admin/includes/fieldset.html" + admin_form = context['adminform'] + if 'request' not in context: + raise ImproperlyConfigured( + '"request" missing from context. Add django.core.context' + '_processors.request to your' + 'TEMPLATE_CONTEXT_PROCESSORS') + request = context['request'] + obj = context.get('original', None) + readonly_fields = admin_form.model_admin.get_readonly_fields(request, obj) + inline_matching = {} + if "inline_admin_formsets" in context: + inline_matching = dict((inline.opts.__class__.__name__, inline) + for inline in context["inline_admin_formsets"]) + + if entry['type'] == 'fieldset': + name = entry['name'] + f = Fieldset( + admin_form.form, + name, + readonly_fields=readonly_fields, + model_admin=admin_form.model_admin, + **entry['config'] + ) + context["fieldset"] = f + return render_to_string(template, context.flatten(), request=request) + elif entry['type'] == 'inline': + try: + inline_admin_formset = inline_matching[entry["name"]] + context["inline_admin_formset"] = inline_admin_formset + return render_to_string(inline_admin_formset.opts.template, + context.flatten(), request=request) + except KeyError: # The user does not have the permission + pass + return '' diff --git a/tabbed_admin/tests/__init__.py b/tabbed_admin/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tabbed_admin/tests/admin.py b/tabbed_admin/tests/admin.py new file mode 100644 index 0000000..fa3b1c7 --- /dev/null +++ b/tabbed_admin/tests/admin.py @@ -0,0 +1,42 @@ +from django.contrib import admin + +from tabbed_admin import TabbedModelAdmin +from tabbed_admin.tests.models import Band, Musician, Concert, Album, Interview + + +class MusicianInline(admin.StackedInline): + model = Musician + + +class ConcertInline(admin.TabularInline): + model = Concert + + +class AlbumInline(admin.TabularInline): + model = Album + + +class InterviewInline(admin.TabularInline): + model = Interview + + +class BandAdmin(TabbedModelAdmin): + model = Band + + tab_overview = ( + (None, { + 'fields': ('name', 'bio', 'style') + }), + MusicianInline, + ('Contact', { + 'fields': ('agent', 'phone', 'email') + }) + ) + tab_ressources = ( + ConcertInline, + AlbumInline + ) + tabs = [ + ('Overview', tab_overview), + ('Ressources', tab_ressources) + ] diff --git a/tabbed_admin/tests/models.py b/tabbed_admin/tests/models.py new file mode 100644 index 0000000..6122b01 --- /dev/null +++ b/tabbed_admin/tests/models.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +from django.db import models + + +class Band(models.Model): + STYLE_ROCK = 1 + STYLE_FUNK = 2 + STYLE_JAZZ = 3 + STYLE_OVERRIDE = 4 + + name = models.CharField(max_length=100) + bio = models.TextField(blank=True, null=True) + style = models.CharField(max_length=100, choices=( + (STYLE_ROCK, 'Rock'), + (STYLE_FUNK, 'Funk'), + (STYLE_JAZZ, 'Jazz'), + (STYLE_OVERRIDE, 'Override') + )) + agent = models.CharField(max_length=100, blank=True, null=True) + phone = models.CharField(max_length=100, blank=True, null=True) + email = models.CharField(max_length=100, blank=True, null=True) + address = models.CharField(max_length=100, blank=True, null=True) + website = models.CharField(max_length=100, blank=True, null=True) + twitter = models.CharField(max_length=100, blank=True, null=True) + facebook = models.CharField(max_length=100, blank=True, null=True) + + +class Musician(models.Model): + band = models.ForeignKey(Band) + first_name = models.CharField(max_length=100) + last_name = models.CharField(max_length=100) + specialty = models.CharField(max_length=100, choices=( + (1, 'Vocal'), + (2, 'Guitar'), + (3, 'Bass'), + (4, 'Drums') + )) + + +class Concert(models.Model): + band = models.ForeignKey(Band) + location = models.CharField(max_length=100) + date = models.DateField() + + +class Album(models.Model): + band = models.ForeignKey(Band) + name = models.CharField(max_length=100) + date = models.DateField() + + +class Interview(models.Model): + band = models.ForeignKey(Band) + media_name = models.CharField(max_length=100) + date = models.DateField() diff --git a/tabbed_admin/tests/runtests.py b/tabbed_admin/tests/runtests.py new file mode 100644 index 0000000..c080424 --- /dev/null +++ b/tabbed_admin/tests/runtests.py @@ -0,0 +1,74 @@ +import os +import sys + + +from django.conf import settings + +DIRNAME = os.path.dirname(__file__) +settings.configure( + DEBUG=True, + DATABASE_ENGINE='sqlite3', + DATABASE_NAME=os.path.join(DIRNAME, 'database.db'), + DATABASES={ + 'default': { + 'ENGINE': 'django.db.backends.sqlite3' + } + }, + ROOT_URLCONF='tabbed_admin.tests.urls', + MIDDLEWARE_CLASSES=(), + TEMPLATE_CONTEXT_PROCESSORS=[ + 'django.template.context_processors.request' + ], + TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth' + ], + }, + }, + ], + INSTALLED_APPS=( + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.admin', + + 'tabbed_admin', + 'tabbed_admin.tests' + ) +) + + +try: + # Django < 1.8 + from django.test.simple import DjangoTestSuiteRunner + test_runner = DjangoTestSuiteRunner(verbosity=1) +except ImportError: + # Django >= 1.8 + from django.test.runner import DiscoverRunner + test_runner = DiscoverRunner(verbosity=1) + +try: + # Django < 1.7 + from django.core.management import setup_environ + setup_environ(settings) + failures = test_runner.run_tests(['tabbed_admin']) +except: + # Django >= 1.7 + import django + django.setup() + +if __name__ == "__main__": + from django.test.utils import get_runner + os.environ['DJANGO_SETTINGS_MODULE'] = 'tabbed_admin.runtests' + TestRunner = get_runner(settings) + test_runner = TestRunner() + failures = test_runner.run_tests(['tabbed_admin']) + +if failures: + sys.exit(failures) diff --git a/tabbed_admin/tests/tests.py b/tabbed_admin/tests/tests.py new file mode 100644 index 0000000..1006560 --- /dev/null +++ b/tabbed_admin/tests/tests.py @@ -0,0 +1,240 @@ +from django.conf import settings +from django.contrib.admin.sites import AdminSite +from django.template import Context +from django.test import TestCase +from django.test.client import RequestFactory, Client +from django.test.utils import override_settings + +from tabbed_admin.settings import USE_JQUERY_UI +from tabbed_admin.templatetags.tabbed_admin_tags import render_tab_fieldsets_inlines +from tabbed_admin.tests.admin import BandAdmin, InterviewInline +from tabbed_admin.tests.models import Band + + +class MockRequest(object): + pass + + +class MockSuperUser(object): + is_active = True + is_staff = True + def has_perm(self, perm): + return True + +request = RequestFactory() +request.user = MockSuperUser() +request.csrf_processing_done = True + + +class TabbedModelAdminTest(TestCase): + + def setUp(self): + self.site = AdminSite() + + def test_fieldsets_inline_attribute_populated(self): + """ + Tests if self.inlines and self.fieldsets are correcly populated from + the self.tabs attribute. + """ + admin = BandAdmin(Band, self.site) + self.assertIsNone(admin.fieldsets) + self.assertEqual(0, len(admin.inlines)) + fieldsets = admin.get_fieldsets(request) + inlines = admin.get_inline_instances(request) + self.assertNotEqual(0, len(fieldsets)) + self.assertNotEqual(0, len(inlines)) + self.assertNotEqual(0, len(admin.fieldsets)) + self.assertNotEqual(0, len(admin.inlines)) + + def test_fieldsets_inlines_overriden_by_tabs(self): + """ + Tests if when set by default, fieldsets and inlines are properly + overriden. + """ + class TestBandAdmin(BandAdmin): + fieldsets = ( + ('Social', { + 'fields': ('website', 'twitter', 'facebook') + }) + ) + inlines = ( + InterviewInline, + ) + admin = TestBandAdmin(Band, self.site) + self.assertEqual(admin.get_fieldsets(request), + admin.formatted_tabs['fieldsets']) + inlines = admin.get_inline_instances(request) + inlines = admin.inlines + for inline in inlines: + self.assertIn(inline, admin.formatted_tabs['inlines']) + + def test_get_tabs_overrides_tabs_attribute(self): + """ + Tests if get_tabs method successfully overrides the self.tabs and returns it. + """ + single_tab = [('Overview', BandAdmin.tab_overview)] + class TestBandAdmin(BandAdmin): + def get_tabs(self, request, obj=None): + """ + Returns the tabs attribute. + """ + tabs = self.tabs + if obj is not None and obj.style == Band.STYLE_OVERRIDE: + tabs = single_tab + self.tabs = tabs + return super(TestBandAdmin, self).get_tabs(request, obj) + + admin = TestBandAdmin(Band, self.site) + band = Band.objects.create(name="Test band", style=Band.STYLE_JAZZ) + tabs = admin.get_tabs(request, band) + self.assertEqual(len(tabs), 2) + self.assertNotEqual(tabs, single_tab) + band.style = Band.STYLE_OVERRIDE + tabs = admin.get_tabs(request, band) + self.assertEqual(len(tabs), 1) + self.assertEqual(tabs, single_tab) + + def test_dynamically_add_fieldsets_inlines_to_tabs(self): + """ + Tests overriding dynamically tabs via get_tabs. + """ + added_fieldset = ('Social', { + 'fields': ('website', 'twitter', 'facebook') + }) + added_inline = InterviewInline + + class TestBandAdmin(BandAdmin): + def get_tabs(self, request, obj=None): + tabs = self.tabs + tab_overview = self.tab_overview + (added_fieldset, ) + tab_ressources = self.tab_ressources + (added_inline, ) + tabs = [ + ('Overview', tab_overview), + ('Ressources', tab_ressources) + ] + self.tabs = tabs + return super(TestBandAdmin, self).get_tabs(request, obj) + + original_admin = BandAdmin(Band, self.site) + self.assertNotIn(added_fieldset, original_admin.get_fieldsets(request)) + self.assertNotIn(added_inline, original_admin.tab_ressources) + admin = TestBandAdmin(Band, self.site) + inlines_classes = [] + inlines = admin.get_inline_instances(request) + for inline in inlines: + inlines_classes.append(inline.__class__) + self.assertIn(added_inline, inlines_classes) + + def test_version_previous_to_django(self): + """ + Tests overriding dynamically tabs via get_tabs. + """ + added_fieldset = ('Social', { + 'fields': ('website', 'twitter', 'facebook') + }) + added_inline = InterviewInline + + class TestBandAdmin(BandAdmin): + def get_tabs(self, request, obj=None): + tabs = self.tabs + tab_overview = self.tab_overview + (added_fieldset, ) + tab_ressources = self.tab_ressources + (added_inline, ) + tabs = [ + ('Overview', tab_overview), + ('Ressources', tab_ressources) + ] + self.tabs = tabs + return super(TestBandAdmin, self).get_tabs(request, obj) + + original_admin = BandAdmin(Band, self.site) + self.assertNotIn(added_fieldset, original_admin.get_fieldsets(request)) + self.assertNotIn(added_inline, original_admin.tab_ressources) + admin = TestBandAdmin(Band, self.site) + inlines_classes = [] + inlines = admin.get_inline_instances(request) + for inline in inlines: + inlines_classes.append(inline.__class__) + self.assertIn(added_inline, inlines_classes) + self.assertIn(added_fieldset, admin.get_fieldsets(request)) + self.assertIn(added_fieldset, admin.get_fieldsets(request)) + + def test_medias_method_with_default_settings(self): + """ + Tests that the media method is retrning the proper static files when settings.TABBED_ADMIN_USE_JQUERY_UI + is True or False. + """ + self.assertEqual(False, USE_JQUERY_UI) + admin = BandAdmin(Band, self.site) + medias = admin.media + self.assertEqual({}, medias._css) + for js in medias._js: + self.assertNotIn(js, 'tabbed_admin') + + def test_medias_method_with_grappelli(self): + """ + Tests if the right css ile is triggered when grappelli is installed. + """ + try: + import grappelli + except ImportError: + return + settings.INSTALLED_APPS += ('grappelli', ) + self.assertIn('grappelli', settings.INSTALLED_APPS) + admin = BandAdmin(Band, self.site) + medias = admin.media + self.assertTrue(len(medias._css) > 0) + self.assertIn('all', medias._css) + self.assertTrue(len(medias._css['all']) == 1) + self.assertIn('grappelli', medias._css['all'][0]) + + +class TabbedAdminTagsTest(TestCase): + + def setUp(self): + self.site = AdminSite() + self.admin = BandAdmin(Band, self.site) + self.req = request.get('/admin/tabbed_admin/tab/') + self.req.user = request.user + self.view = self.admin.add_view(self.req) + self.context = Context(self.view) + self.context.push() + self.context['adminform'] = self.view.context_data['adminform'] + self.context['request'] = self.req + self.context['inline_admin_formsets'] = self.view.context_data['inline_admin_formsets'] + + def test_request_not_in_context_raising_improperly_configured(self): + """ + Tests if an exception is thrown when no request is passed. + """ + from django.core.exceptions import ImproperlyConfigured + context = self.context + del context['request'] + self.assertRaises(ImproperlyConfigured, render_tab_fieldsets_inlines, self.context, []) + + def test_fieldset_passed_returns_fieldset_templated(self): + """ + Tests if the fieldset html is correctly generated when a fieldset is passed + """ + fieldset = self.view.context_data['tabs']['fields'][0]['entries'][0] + self.assertEqual('fieldset', fieldset['type']) + #tag = render_tab_fieldsets_inlines(self.context, fieldset) + #self.assertIn('fieldset', tag) + + def test_inline_passed_returns_inline_templated(self): + """ + Tests if an inline html is correctly generated when an inline is passed. + """ + inline = self.view.context_data['tabs']['fields'][0]['entries'][1] + self.assertEqual('inline', inline['type']) + #tag = render_tab_fieldsets_inlines(self.context, inline) + #self.assertIn('inline', tag) + + def test_wrong_inline_key_returns_nothing(self): + """ + Tests if a worng inline naming returns nothing. + """ + inline = self.view.context_data['tabs']['fields'][0]['entries'][1] + self.assertEqual('inline', inline['type']) + inline['name'] = 'Not exists' + tag = render_tab_fieldsets_inlines(self.context, inline) + self.assertEqual('', tag) diff --git a/tabbed_admin/tests/urls.py b/tabbed_admin/tests/urls.py new file mode 100644 index 0000000..eb91d28 --- /dev/null +++ b/tabbed_admin/tests/urls.py @@ -0,0 +1,6 @@ +from django.conf.urls import include, url +from django.contrib import admin + +urlpatterns = [ + url(r'^admin/', include(admin.site.urls)), +] diff --git a/theme/static/css/dist/styles.css b/theme/static/css/dist/styles.css index 4e6b3c1..dc30e55 100644 --- a/theme/static/css/dist/styles.css +++ b/theme/static/css/dist/styles.css @@ -1233,6 +1233,21 @@ select { padding-bottom: 7px; } +.tpage-nav ul li:hover { + font-weight: 700; + -webkit-text-decoration-line: underline; + text-decoration-line: underline; +} + +.tpage-nav ul li.active { + -webkit-text-decoration-line: none; + text-decoration-line: none; + } + +.tpage-nav ul li.active a { + font-weight: 600; + } + .sr-only { position: absolute; width: 1px; @@ -1406,6 +1421,10 @@ select { resize: both; } +.flex-row { + flex-direction: row; +} + .flex-col { flex-direction: column; } @@ -1505,6 +1524,11 @@ select { background-color: rgb(250 250 249 / var(--tw-bg-opacity)); } +.bg-green-100 { + --tw-bg-opacity: 1; + background-color: rgb(220 252 231 / var(--tw-bg-opacity)); +} + .bg-gray-50 { --tw-bg-opacity: 1; background-color: rgb(249 250 251 / var(--tw-bg-opacity)); @@ -1795,19 +1819,6 @@ h4 { font-size: 1.25em; } -#atu { - transition: all 0.2s ease, visibility 0s; - border-radius: 0px; - background: repeat padding-box border-box 0% 0% / auto auto scroll - linear-gradient(180deg, rgba(8, 50, 4, 0.5) 0%, rgba(8, 50, 4, 0.5) 100%), - no-repeat padding-box border-box 78% 59%/200% scroll url("/static/atu.jpg"); - display: block; -} - -.target\:block:target { - display: block; -} - .active\:ring-2:active { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); @@ -1818,6 +1829,10 @@ h4 { display: block; } +.prose-h1\:font-medium :is(:where(h1):not(:where([class~="not-prose"] *))) { + font-weight: 500; +} + .prose-h2\:mb-2 :is(:where(h2):not(:where([class~="not-prose"] *))) { margin-bottom: 0.5rem; } diff --git a/theme/static_src/src/styles.css b/theme/static_src/src/styles.css index 347b6d7..cd4f408 100644 --- a/theme/static_src/src/styles.css +++ b/theme/static_src/src/styles.css @@ -48,6 +48,17 @@ h4 { } } } + + .tpage-nav ul li { + @apply hover:font-bold hover:underline; + + &.active { + @apply no-underline; + a { + @apply font-semibold; + } + } + } } @layer utilities { @@ -77,12 +88,3 @@ h4 { } } } - -#atu { - transition: all 0.2s ease, visibility 0s; - border-radius: 0px; - background: repeat padding-box border-box 0% 0% / auto auto scroll - linear-gradient(180deg, rgba(8, 50, 4, 0.5) 0%, rgba(8, 50, 4, 0.5) 100%), - no-repeat padding-box border-box 78% 59%/200% scroll url("/static/atu.jpg"); - display: block; -} diff --git a/tournamentpages/__init__.py b/tournamentpages/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tournamentpages/admin.py b/tournamentpages/admin.py new file mode 100644 index 0000000..41e8d3e --- /dev/null +++ b/tournamentpages/admin.py @@ -0,0 +1,72 @@ +from django.contrib import admin + +from tabbed_admin import TabbedModelAdmin +from .models import TournamentPage + +# Register your models here. + + +@admin.register(TournamentPage) +class BandAdmin(TabbedModelAdmin): + model = TournamentPage + + list_display = ['name', 'link'] + + tab_general = ( + (None, { + 'fields': ('name', 'published', 'header', 'footer') + }), + ) + + tab_homepage = ( + (None, { + 'fields': ('homepage',) + }), + ) + + tab_schedule_and_results = ( + (None, { + 'fields': ('schedule_and_results', 'schedule_and_results_enabled') + }), + ) + + tab_registration = ( + (None, { + 'fields': ('registration', 'registration_enabled') + }), + ) + + tab_rules = ( + (None, { + 'fields': ('rules', 'rules_enabled') + }), + ) + + tab_fee_and_prizes = ( + (None, { + 'fields': ('fee_and_prizes', 'fee_and_prizes_enabled') + }), + ) + + tab_accomodation = ( + (None, { + 'fields': ('accomodation', 'accomodation_enabled') + }), + ) + + tab_contact = ( + (None, { + 'fields': ('contact', 'contact_enabled') + }), + ) + + tabs = [ + ('Ogólne ustawienia', tab_general), + ('Strona główna', tab_homepage), + ('Harmonogram i wyniki', tab_schedule_and_results), + ('Rejestracja', tab_registration), + ('Regulamin', tab_rules), + ('Wpisowe i nagrody', tab_fee_and_prizes), + ('Noclegi', tab_accomodation), + ('Kontakt', tab_contact), + ] diff --git a/db/tournamentpages/apps.py b/tournamentpages/apps.py similarity index 80% rename from db/tournamentpages/apps.py rename to tournamentpages/apps.py index 119fa77..a7a2241 100644 --- a/db/tournamentpages/apps.py +++ b/tournamentpages/apps.py @@ -4,3 +4,4 @@ from django.apps import AppConfig class TournamentpagesConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'tournamentpages' + verbose_name = 'Strony turniejów' diff --git a/tournamentpages/migrations/0001_initial.py b/tournamentpages/migrations/0001_initial.py new file mode 100644 index 0000000..34b4535 --- /dev/null +++ b/tournamentpages/migrations/0001_initial.py @@ -0,0 +1,42 @@ +# Generated by Django 4.0.5 on 2022-10-05 18:29 + +from django.db import migrations, models +import tinymce.models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='TournamentPage', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=250, verbose_name='Nazwa')), + ('published', models.BooleanField(default=False, verbose_name='Turniej opublikowany')), + ('header', tinymce.models.HTMLField(blank=True, default='', verbose_name='Nagłówek')), + ('footer', tinymce.models.HTMLField(blank=True, default='', verbose_name='Stopka')), + ('homepage', tinymce.models.HTMLField(blank=True, default='', verbose_name='Strona główna')), + ('schedule_and_results', tinymce.models.HTMLField(blank=True, default='', verbose_name='Harmonogram i wyniki')), + ('schedule_and_results_enabled', models.BooleanField(default=False, verbose_name='Strona włączona')), + ('registration', tinymce.models.HTMLField(blank=True, default='', verbose_name='Rejestracja')), + ('registration_enabled', models.BooleanField(default=False, verbose_name='Strona włączona')), + ('rules', tinymce.models.HTMLField(blank=True, default='', verbose_name='Regulamin')), + ('rules_enabled', models.BooleanField(default=False, verbose_name='Strona włączona')), + ('fee_and_prizes', tinymce.models.HTMLField(blank=True, default='', verbose_name='Wpisowe i nagrody')), + ('fee_and_prizes_enabled', models.BooleanField(default=False, verbose_name='Strona włączona')), + ('accomodation', tinymce.models.HTMLField(blank=True, default='', verbose_name='Noclegi')), + ('accomodation_enabled', models.BooleanField(default=False, verbose_name='Strona włączona')), + ('contact', tinymce.models.HTMLField(blank=True, default='', verbose_name='Kontakt')), + ('contact_enabled', models.BooleanField(default=False, verbose_name='Strona włączona')), + ], + options={ + 'verbose_name': 'Strona turnieju', + 'verbose_name_plural': 'Strony turniejów', + }, + ), + ] diff --git a/tournamentpages/migrations/__init__.py b/tournamentpages/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tournamentpages/models.py b/tournamentpages/models.py new file mode 100644 index 0000000..03c203e --- /dev/null +++ b/tournamentpages/models.py @@ -0,0 +1,52 @@ +from django.db import models +from django.urls.base import reverse_lazy +from django.utils.safestring import mark_safe +from tinymce.models import HTMLField + + +# Create your models here. + + +class TournamentPage(models.Model): + name = models.CharField('Nazwa', max_length=250) + published = models.BooleanField('Turniej opublikowany', default=False) + + header = HTMLField('Nagłówek', default='', blank=True) + footer = HTMLField('Stopka', default='', blank=True) + + homepage = HTMLField('Strona główna', default='', blank=True) + + schedule_and_results = HTMLField( + 'Harmonogram i wyniki', default='', blank=True) + schedule_and_results_enabled = models.BooleanField( + 'Strona włączona', default=False) + + registration = HTMLField('Rejestracja', default='', blank=True) + registration_enabled = models.BooleanField( + 'Strona włączona', default=False) + + rules = HTMLField('Regulamin', default='', blank=True) + rules_enabled = models.BooleanField('Strona włączona', default=False) + + fee_and_prizes = HTMLField('Wpisowe i nagrody', default='', blank=True) + fee_and_prizes_enabled = models.BooleanField( + 'Strona włączona', default=False) + + accomodation = HTMLField('Noclegi', default='', blank=True) + accomodation_enabled = models.BooleanField( + 'Strona włączona', default=False) + + contact = HTMLField('Kontakt', default='', blank=True) + contact_enabled = models.BooleanField('Strona włączona', default=False) + + class Meta: + verbose_name = 'Strona turnieju' + verbose_name_plural = 'Strony turniejów' + + @property + def link(self): + href = reverse_lazy('homepage', args=[self.id]) + return mark_safe(f'{href}') + + def __str__(self): + return self.name diff --git a/tournamentpages/templates/tournament.html b/tournamentpages/templates/tournament.html new file mode 100644 index 0000000..dfb4c82 --- /dev/null +++ b/tournamentpages/templates/tournament.html @@ -0,0 +1,76 @@ + + +{% load static tailwind_tags %} + + + + + + + + + + + + + + {% block title %}{{ t.name }}{% endblock %} + + + {% tailwind_css %} + + + +
{{ t.header | safe}}
+ +
+ {{ content | safe }} +
+
{{ t.footer | safe}}
+ + diff --git a/tournamentpages/urls.py b/tournamentpages/urls.py new file mode 100644 index 0000000..59fe5e7 --- /dev/null +++ b/tournamentpages/urls.py @@ -0,0 +1,14 @@ +from django.urls import path +from .views import * + + +urlpatterns = [ + path('', HomeView.as_view(), name='homepage'), + path('/wyniki', ScheduleAndResultsView.as_view(), + name='schedule_and_results'), + path('/rejestracja', RegistrationView.as_view(), name='registration'), + path('/regulamin', RulesView.as_view(), name='rules'), + path('/nagrody', FeeAndPrizesView.as_view(), name='fee_and_prizes'), + path('/noclegi', AccomodationView.as_view(), name='accomodation'), + path('/kontakt', ContactView.as_view(), name='contact'), +] diff --git a/tournamentpages/views.py b/tournamentpages/views.py new file mode 100644 index 0000000..97cc9ca --- /dev/null +++ b/tournamentpages/views.py @@ -0,0 +1,67 @@ +from django.shortcuts import render +from django.views.generic import TemplateView +from .models import TournamentPage + +# Create your views here. + + +class HomeView(TemplateView): + template_name = "tournament.html" + + def get_context_data(self, id, **kwargs): + t = TournamentPage.objects.get(id=id, published=True) + return {'t': t, 'content': t.homepage, 'homepage': True} + + +class ScheduleAndResultsView(TemplateView): + template_name = "tournament.html" + + def get_context_data(self, id, **kwargs): + t = TournamentPage.objects.get( + id=id, published=True, schedule_and_results_enabled=True) + return {'t': t, 'content': t.schedule_and_results, 'schedule_and_results': True} + + +class RegistrationView(TemplateView): + template_name = "tournament.html" + + def get_context_data(self, id, **kwargs): + t = TournamentPage.objects.get( + id=id, published=True, registration_enabled=True) + return {'t': t, 'content': t.registration, 'registration': True} + + +class RulesView(TemplateView): + template_name = "tournament.html" + + def get_context_data(self, id, **kwargs): + t = TournamentPage.objects.get( + id=id, published=True, rules_enabled=True) + return {'t': t, 'content': t.rules, 'rules': True} + + +class FeeAndPrizesView(TemplateView): + template_name = "tournament.html" + + def get_context_data(self, id, **kwargs): + t = TournamentPage.objects.get( + id=id, published=True, fee_and_prizes_enabled=True) + return {'t': t, 'content': t.fee_and_prizes, 'fee_and_prizes': True} + + +class AccomodationView(TemplateView): + template_name = "tournament.html" + + def get_context_data(self, id, **kwargs): + t = TournamentPage.objects.get( + id=id, published=True, accomodation_enabled=True) + return {'t': t, 'content': t.accomodation, 'accomodation': True} + + +class ContactView(TemplateView): + template_name = "tournament.html" + + def get_context_data(self, id, **kwargs): + t = TournamentPage.objects.get( + id=id, published=True, contact_enabled=True) + return {'t': t, 'content': t.contact, 'contact': True}