From 2d21ab24342d6a678eb4ac7a35cb8a3c33230746 Mon Sep 17 00:00:00 2001 From: bkfox Date: Thu, 5 Sep 2019 23:05:04 +0200 Subject: [PATCH] work on admin ui --- aircox/admin/__init__.py | 1 + aircox/admin/program.py | 5 +- aircox/admin/sound.py | 2 +- aircox/apps.py | 9 +- aircox/forms.py | 20 +++++ aircox/models/__pycache__/log.cpython-37.pyc | Bin 8851 -> 8851 bytes .../models/__pycache__/program.cpython-37.pyc | Bin 16680 -> 16813 bytes aircox/models/program.py | 3 + aircox/static/aircox/admin.css | 18 ++++ aircox/static/aircox/admin.js | 26 ++++++ aircox/static/aircox/logo.png | Bin 0 -> 7275 bytes aircox/templates/admin/aircox/statistics.html | 13 +++ aircox/templates/admin/base.html | 39 +++++++-- aircox/templates/aircox/page_detail.html | 82 ++++++++++++++++++ aircox/urls.py | 2 + aircox/views/__init__.py | 2 +- aircox/views/admin.py | 64 ++++++++++++++ aircox/views/api.py | 1 - aircox/views/log.py | 5 +- 19 files changed, 274 insertions(+), 18 deletions(-) create mode 100644 aircox/forms.py create mode 100644 aircox/static/aircox/admin.css create mode 100644 aircox/static/aircox/admin.js create mode 100755 aircox/static/aircox/logo.png create mode 100644 aircox/templates/admin/aircox/statistics.html create mode 100644 aircox/templates/aircox/page_detail.html create mode 100644 aircox/views/admin.py diff --git a/aircox/admin/__init__.py b/aircox/admin/__init__.py index 21436bb..42af3f2 100644 --- a/aircox/admin/__init__.py +++ b/aircox/admin/__init__.py @@ -5,3 +5,4 @@ from .program import ProgramAdmin, ScheduleAdmin, StreamAdmin from .sound import SoundAdmin, TrackAdmin from .station import StationAdmin + diff --git a/aircox/admin/program.py b/aircox/admin/program.py index 92345bc..df732ea 100644 --- a/aircox/admin/program.py +++ b/aircox/admin/program.py @@ -3,7 +3,7 @@ from copy import deepcopy from django.contrib import admin from django.utils.translation import ugettext_lazy as _ -from aircox.models import Program, Schedule, Stream +from ..models import Program, Schedule, Stream from .page import PageAdmin @@ -26,7 +26,8 @@ class ProgramAdmin(PageAdmin): schedule.boolean = True schedule.short_description = _("Schedule") - list_display = PageAdmin.list_display + ('schedule', 'station') + list_display = PageAdmin.list_display + ('schedule', 'station', 'active') + list_filter = PageAdmin.list_filter + ('station', 'active') fieldsets = deepcopy(PageAdmin.fieldsets) + [ (_('Program Settings'), { 'fields': ['active', 'station', 'sync'], diff --git a/aircox/admin/sound.py b/aircox/admin/sound.py index 5aca87b..ca0f9f5 100644 --- a/aircox/admin/sound.py +++ b/aircox/admin/sound.py @@ -3,7 +3,7 @@ from django.utils.translation import ugettext as _, ugettext_lazy from adminsortable2.admin import SortableInlineAdminMixin -from aircox.models import Sound, Track +from ..models import Sound, Track class TracksInline(SortableInlineAdminMixin, admin.TabularInline): diff --git a/aircox/apps.py b/aircox/apps.py index 81a337b..d18dc5f 100755 --- a/aircox/apps.py +++ b/aircox/apps.py @@ -1,9 +1,14 @@ from django.apps import AppConfig +from django.contrib.admin.apps import AdminConfig class AircoxConfig(AppConfig): name = 'aircox' verbose_name = 'Aircox' - def ready(self): - pass + +class AircoxAdminConfig(AdminConfig): + default_site = 'aircox.views.admin.AdminSite' + + + diff --git a/aircox/forms.py b/aircox/forms.py new file mode 100644 index 0000000..cfc9f32 --- /dev/null +++ b/aircox/forms.py @@ -0,0 +1,20 @@ +from django import forms +from django.forms import ModelForm + +from .models import Comment + + +class CommentForm(ModelForm): + nickname = forms.CharField() + email = forms.EmailField(required=False) + content = forms.CharField(widget=forms.Textarea()) + + nickname.widget.attrs.update({'class': 'input'}) + email.widget.attrs.update({'class': 'input'}) + content.widget.attrs.update({'class': 'textarea'}) + + class Meta: + model = Comment + fields = ['nickname', 'email', 'content'] + + diff --git a/aircox/models/__pycache__/log.cpython-37.pyc b/aircox/models/__pycache__/log.cpython-37.pyc index 851957a3d9e0db3a8320519ef7c94ceaebaee386..4847670d745ac1ede2061e229153b602dbc87056 100644 GIT binary patch delta 20 acmbR2I@y)miIFL<d{pY}ZtV?9XZ*p4cU8R8t)d=9xjHSE3hA3!PxlpC zjZ&r>Xp}6jfI{{E7@Je?0$RwZ8AmHU(nPVBTC{UG!1UQE;4sTt*9DxW6G9k6Y+3jL z4AWw6RZemGv^5PjS}z_#5p|1WaI&loy}%gt>+a&Zj5cc4>oUYay$4rmRR0CHsNc|s zJG5eOXDBN2JQ!zfd4qt1-sJn$>BN$Qs*T4obQ8uh#A)963D0PzAcT1;Hg)0^4Vok@ zQpyy37nyK@w4Z@OjX5ceZ)z|Z~yQYTWwZCMrIBBJ!5M7}g1* MR<}(Y;08GHAI#asrvLx| delta 637 zcmY*VUr1AN6u#fRb8XI>SGU{dnl<&hxs91KDRtH$FnS0J2Vo-x+l&^$!Ym?^#Z;mg zVV(#lg_K1D8KFOcKq(uBY&!J9^m;oOAfj`Oe?W7}5!d2Sl-) zQ^l}(uD@(Syv|!qDjMQKh;Si3f(Sp(g@lL@o8X7k~NBt^us!jPjqwpSA3&0Hl?IKWxItm^VELlOTuRRHTr|G73bh9znaUjUn z+$VUPWS!n-V4OvpRg|GOEh~6JQ@#l-lBIPMNha^!1w5zjwntcExwc6jZ|Tb3+gPEh z_AK7B&+S3rCG&O~fE;!BJ;jHxnBNNgWH-9Hc=eIl{S(DmO4%GV8t@{|<^y?DYNc4U ODCw*BNpUXDN&f(OTeE@y diff --git a/aircox/models/program.py b/aircox/models/program.py index 3e3b777..d1ed23f 100644 --- a/aircox/models/program.py +++ b/aircox/models/program.py @@ -31,6 +31,9 @@ class ProgramQuerySet(PageQuerySet): # FIXME: reverse-lookup return self.filter(station=station) + def active(self): + return self.filter(active=True) + class Program(Page): """ diff --git a/aircox/static/aircox/admin.css b/aircox/static/aircox/admin.css new file mode 100644 index 0000000..37c8c40 --- /dev/null +++ b/aircox/static/aircox/admin.css @@ -0,0 +1,18 @@ +.navbar { + box-shadow: 0em 0em 0.6em rgba(0, 0, 0, 0.4); } + +.navbar .navbar-brand { + padding-right: 1em; } + +.navbar .navbar-brand img { + margin: 0em 0.4em; + margin-top: 0.3em; + max-height: 3em; } + +.breadcrumbs { + margin-bottom: 1em; } + +.results > #result_list { + width: 100%; + margin: 1em 0em; } + diff --git a/aircox/static/aircox/admin.js b/aircox/static/aircox/admin.js new file mode 100644 index 0000000..98df0aa --- /dev/null +++ b/aircox/static/aircox/admin.js @@ -0,0 +1,26 @@ +(window["webpackJsonp"] = window["webpackJsonp"] || []).push([["admin"],{ + +/***/ "./assets/admin/admin.scss": +/*!*********************************!*\ + !*** ./assets/admin/admin.scss ***! + \*********************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("// extracted by mini-css-extract-plugin\n\n//# sourceURL=webpack:///./assets/admin/admin.scss?"); + +/***/ }), + +/***/ "./assets/admin/index.js": +/*!*******************************!*\ + !*** ./assets/admin/index.js ***! + \*******************************/ +/*! no exports provided */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var _admin_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./admin.scss */ \"./assets/admin/admin.scss\");\n/* harmony import */ var _admin_scss__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_admin_scss__WEBPACK_IMPORTED_MODULE_0__);\n\n\n\n\n\n//# sourceURL=webpack:///./assets/admin/index.js?"); + +/***/ }) + +}]); \ No newline at end of file diff --git a/aircox/static/aircox/logo.png b/aircox/static/aircox/logo.png new file mode 100755 index 0000000000000000000000000000000000000000..4b71388a2944c533d77a4665ad9cbc7a459a3379 GIT binary patch literal 7275 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 + + + + +{% endblock %} + + diff --git a/aircox/templates/admin/base.html b/aircox/templates/admin/base.html index 564a27a..0d116ac 100644 --- a/aircox/templates/admin/base.html +++ b/aircox/templates/admin/base.html @@ -30,19 +30,44 @@ {% if not is_popup %} -