├── core ├── __init__.py ├── tests │ ├── __init__.py │ └── test_models.py ├── migrations │ ├── __init__.py │ └── 0001_initial.py ├── templatetags │ ├── __init__.py │ └── extra_filters.py ├── apps.py ├── templates │ └── core │ │ ├── home.html │ │ └── bucket.html ├── admin.py ├── tasks.py ├── serializers.py ├── models.py ├── urls.py ├── views.py └── api_views.py ├── accounts ├── __init__.py ├── tests │ ├── __init__.py │ ├── test_models.py │ ├── test_urls.py │ ├── test_forms.py │ └── test_views.py ├── migrations │ ├── __init__.py │ └── 0001_initial.py ├── admin.py ├── apps.py ├── templates │ └── accounts │ │ ├── register.html │ │ ├── dashboard.html │ │ └── login.html ├── models.py ├── forms.py ├── urls.py └── views.py ├── .gitignore ├── A ├── __init__.py ├── urls.py ├── asgi.py ├── wsgi.py ├── celery_conf.py └── settings.py ├── README.md ├── db.sqlite3 ├── static ├── rest_framework │ ├── img │ │ ├── grid.png │ │ ├── glyphicons-halflings.png │ │ └── glyphicons-halflings-white.png │ ├── docs │ │ ├── img │ │ │ ├── grid.png │ │ │ └── favicon.ico │ │ ├── css │ │ │ ├── jquery.json-view.min.css │ │ │ ├── highlight.css │ │ │ └── base.css │ │ └── js │ │ │ └── jquery.json-view.min.js │ ├── fonts │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.ttf │ │ ├── fontawesome-webfont.woff │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ └── glyphicons-halflings-regular.woff2 │ ├── css │ │ ├── prettify.css │ │ ├── default.css │ │ └── bootstrap-tweaks.css │ └── js │ │ ├── default.js │ │ ├── csrf.js │ │ └── ajax-form.js └── admin │ ├── fonts │ ├── Roboto-Bold-webfont.woff │ ├── Roboto-Light-webfont.woff │ ├── Roboto-Regular-webfont.woff │ └── README.txt │ ├── img │ ├── tooltag-arrowright.svg │ ├── README.txt │ ├── icon-addlink.svg │ ├── tooltag-add.svg │ ├── icon-changelink.svg │ ├── icon-deletelink.svg │ ├── icon-yes.svg │ ├── search.svg │ ├── icon-alert.svg │ ├── icon-no.svg │ ├── inline-delete.svg │ ├── icon-viewlink.svg │ ├── icon-unknown.svg │ ├── icon-unknown-alt.svg │ ├── icon-clock.svg │ ├── gis │ │ ├── move_vertex_on.svg │ │ └── move_vertex_off.svg │ ├── icon-calendar.svg │ ├── calendar-icons.svg │ ├── LICENSE │ ├── sorting-icons.svg │ └── selector-icons.svg │ ├── js │ ├── jquery.init.js │ ├── prepopulate.min.js │ ├── prepopulate_init.js │ ├── popup_response.js │ ├── vendor │ │ ├── select2 │ │ │ ├── i18n │ │ │ │ ├── zh-TW.js │ │ │ │ ├── zh-CN.js │ │ │ │ ├── ja.js │ │ │ │ ├── az.js │ │ │ │ ├── ko.js │ │ │ │ ├── vi.js │ │ │ │ ├── tk.js │ │ │ │ ├── id.js │ │ │ │ ├── tr.js │ │ │ │ ├── ar.js │ │ │ │ ├── th.js │ │ │ │ ├── nb.js │ │ │ │ ├── km.js │ │ │ │ ├── sv.js │ │ │ │ ├── fi.js │ │ │ │ ├── is.js │ │ │ │ ├── et.js │ │ │ │ ├── hu.js │ │ │ │ ├── ms.js │ │ │ │ ├── ka.js │ │ │ │ ├── bg.js │ │ │ │ ├── da.js │ │ │ │ ├── hy.js │ │ │ │ ├── fa.js │ │ │ │ ├── en.js │ │ │ │ ├── hi.js │ │ │ │ ├── he.js │ │ │ │ ├── hr.js │ │ │ │ ├── de.js │ │ │ │ ├── af.js │ │ │ │ ├── eu.js │ │ │ │ ├── mk.js │ │ │ │ ├── pt-BR.js │ │ │ │ ├── pt.js │ │ │ │ ├── bn.js │ │ │ │ ├── lv.js │ │ │ │ ├── ca.js │ │ │ │ ├── ps.js │ │ │ │ ├── sq.js │ │ │ │ ├── it.js │ │ │ │ ├── nl.js │ │ │ │ ├── ne.js │ │ │ │ ├── fr.js │ │ │ │ ├── es.js │ │ │ │ ├── gl.js │ │ │ │ ├── sl.js │ │ │ │ ├── ro.js │ │ │ │ ├── lt.js │ │ │ │ ├── pl.js │ │ │ │ ├── el.js │ │ │ │ ├── sr.js │ │ │ │ ├── uk.js │ │ │ │ ├── bs.js │ │ │ │ ├── sr-Cyrl.js │ │ │ │ ├── ru.js │ │ │ │ ├── hsb.js │ │ │ │ ├── dsb.js │ │ │ │ ├── cs.js │ │ │ │ └── sk.js │ │ │ └── LICENSE.md │ │ ├── jquery │ │ │ └── LICENSE.txt │ │ └── xregexp │ │ │ └── LICENSE.txt │ ├── change_form.js │ ├── collapse.min.js │ ├── cancel.js │ ├── autocomplete.js │ ├── nav_sidebar.js │ ├── prepopulate.js │ ├── collapse.js │ ├── actions.min.js │ ├── SelectBox.js │ ├── inlines.min.js │ ├── core.js │ ├── admin │ │ └── RelatedObjectLookups.js │ └── actions.js │ └── css │ ├── dashboard.css │ ├── fonts.css │ ├── vendor │ └── select2 │ │ └── LICENSE-SELECT2.md │ ├── login.css │ ├── responsive_rtl.css │ ├── nav_sidebar.css │ ├── rtl.css │ └── changelists.css ├── templates ├── 403.html ├── inc │ ├── messages.html │ └── navbar.html └── base.html ├── permissions.py ├── manage.py ├── nginx.conf ├── bucket.py └── requirements.txt /core/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /accounts/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /core/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /accounts/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /core/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /accounts/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /accounts/tests/test_models.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /core/templatetags/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__/ 2 | .idea/ 3 | -------------------------------------------------------------------------------- /A/__init__.py: -------------------------------------------------------------------------------- 1 | from A.celery_conf import celery_app -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | This is a README file for django-final project -------------------------------------------------------------------------------- /db.sqlite3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amirbigg/django-docker/HEAD/db.sqlite3 -------------------------------------------------------------------------------- /core/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class CoreConfig(AppConfig): 5 | name = 'core' 6 | -------------------------------------------------------------------------------- /accounts/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from .models import Profile 3 | 4 | 5 | admin.site.register(Profile) -------------------------------------------------------------------------------- /accounts/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class AccountsConfig(AppConfig): 5 | name = 'accounts' 6 | -------------------------------------------------------------------------------- /core/templates/core/home.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block content %} 4 |
permission denied
6 | {% endblock %} -------------------------------------------------------------------------------- /templates/inc/messages.html: -------------------------------------------------------------------------------- 1 | {% if messages %} 2 | {% for message in messages %} 3 | 4 | {% endfor %} 5 | {% endif %} -------------------------------------------------------------------------------- /core/templatetags/extra_filters.py: -------------------------------------------------------------------------------- 1 | from django import template 2 | from hurry.filesize import size 3 | 4 | 5 | 6 | register = template.Library() 7 | 8 | @register.filter 9 | def converter(value): 10 | return size(value) -------------------------------------------------------------------------------- /static/admin/fonts/README.txt: -------------------------------------------------------------------------------- 1 | Roboto webfont source: https://www.google.com/fonts/specimen/Roboto 2 | WOFF files extracted using https://github.com/majodev/google-webfonts-helper 3 | Weights used in this project: Light (300), Regular (400), Bold (700) 4 | -------------------------------------------------------------------------------- /accounts/templates/accounts/register.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block content %} 4 | 9 | {% endblock %} -------------------------------------------------------------------------------- /accounts/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | from django.contrib.auth.models import User 3 | 4 | 5 | class Profile(models.Model): 6 | user = models.OneToOneField(User, on_delete=models.CASCADE) 7 | image = models.ImageField(default='1.jpg') 8 | 9 | def __str__(self): 10 | return self.user.username -------------------------------------------------------------------------------- /static/admin/img/tooltag-arrowright.svg: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /static/admin/img/README.txt: -------------------------------------------------------------------------------- 1 | All icons are taken from Font Awesome (http://fontawesome.io/) project. 2 | The Font Awesome font is licensed under the SIL OFL 1.1: 3 | - https://scripts.sil.org/OFL 4 | 5 | SVG icons source: https://github.com/encharm/Font-Awesome-SVG-PNG 6 | Font-Awesome-SVG-PNG is licensed under the MIT license (see file license 7 | in current folder). 8 | -------------------------------------------------------------------------------- /static/admin/img/icon-addlink.svg: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /static/admin/img/tooltag-add.svg: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /A/urls.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from django.urls import path, include 3 | 4 | 5 | urlpatterns = [ 6 | path('admin/', admin.site.urls), 7 | path('', include('core.urls', namespace='core')), 8 | path('accounts/', include('accounts.urls', namespace='accounts')), 9 | path('o/', include('social_django.urls', namespace='social')), 10 | ] 11 | -------------------------------------------------------------------------------- /core/tasks.py: -------------------------------------------------------------------------------- 1 | from bucket import bucket 2 | from celery import shared_task 3 | 4 | 5 | # TODO: can be async? 6 | def all_bucket_objects_task(): 7 | result = bucket.get_objects() 8 | return result 9 | 10 | 11 | @shared_task 12 | def delete_object_task(key): 13 | bucket.delete_object(key) 14 | 15 | 16 | @shared_task 17 | def download_object_task(key): 18 | bucket.download_object(key) 19 | -------------------------------------------------------------------------------- /static/admin/js/jquery.init.js: -------------------------------------------------------------------------------- 1 | /*global jQuery:false*/ 2 | 'use strict'; 3 | /* Puts the included jQuery into our own namespace using noConflict and passing 4 | * it 'true'. This ensures that the included jQuery doesn't pollute the global 5 | * namespace (i.e. this preserves pre-existing values for both window.$ and 6 | * window.jQuery). 7 | */ 8 | window.django = {jQuery: jQuery.noConflict(true)}; 9 | -------------------------------------------------------------------------------- /static/admin/img/icon-changelink.svg: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /static/admin/js/prepopulate.min.js: -------------------------------------------------------------------------------- 1 | 'use strict';{const b=django.jQuery;b.fn.prepopulate=function(d,f,g){return this.each(function(){const a=b(this),h=function(){if(!a.data("_changed")){var e=[];b.each(d,function(a,c){c=b(c);0| # | 10 |Name | 11 |Size | 12 |Download | 13 |Delete | 14 |
|---|---|---|---|---|
| {{ forloop.counter }} | 20 |{{ obj.Key }} | 21 |{{ obj.Size|converter }} | 22 |download | 23 |delete | 24 |
to respect formatting
19 | }
20 |
21 | .main-container {
22 | padding-left: 30px;
23 | padding-right: 30px;
24 | }
25 |
26 | .btn:focus,
27 | .btn:focus:active {
28 | outline: none;
29 | }
30 |
31 | .sidebar {
32 | overflow: auto;
33 | font-family: verdana, sans-serif;
34 | font-size: 12px;
35 | font-weight: 200;
36 | background-color: #2e353d;
37 | position: fixed;
38 | top: 0px;
39 | width: 225px;
40 | height: 100%;
41 | color: #FFF;
42 | }
43 |
44 | .sidebar .brand {
45 | background-color: #23282e;
46 | display: block;
47 | text-align: center;
48 | padding: 25px 0;
49 | margin-top: 0;
50 | margin-bottom: 0;
51 | }
52 |
53 | .sidebar .brand a {
54 | color: #FFF;
55 | }
56 |
57 | .sidebar .brand a:hover,
58 | .sidebar .brand a:active,
59 | .sidebar .brand a:focus {
60 | text-decoration: none;
61 | }
62 |
63 | .sidebar .toggle-btn {
64 | display: none;
65 | }
66 |
67 | .sidebar .menu-list {
68 | width: inherit;
69 | }
70 |
71 | .sidebar .menu-list ul,
72 | .sidebar .menu-list li {
73 | background: #2e353d;
74 | list-style: none;
75 | padding: 0px;
76 | margin: 0px;
77 | line-height: 35px;
78 | cursor: pointer;
79 | }
80 |
81 | .sidebar .menu-list ul :not(collapsed) .arrow:before,
82 | .sidebar .menu-list li :not(collapsed) .arrow:before {
83 | font-family: FontAwesome;
84 | content: "\f078";
85 | display: inline-block;
86 | padding-left: 10px;
87 | padding-right: 10px;
88 | vertical-align: middle;
89 | float: right;
90 | }
91 |
92 | .sidebar .menu-list ul .active,
93 | .sidebar .menu-list li .active {
94 | border-left: 3px solid #d19b3d;
95 | background-color: #4f5b69;
96 | }
97 |
98 | .sidebar .menu-list ul .sub-menu li.active,
99 | .sidebar .menu-list li .sub-menu li.active {
100 | color: #d19b3d;
101 | }
102 |
103 | .sidebar .menu-list ul .sub-menu li.active a,
104 | .sidebar .menu-list li .sub-menu li.active a {
105 | color: #d19b3d;
106 | }
107 |
108 | .sidebar .menu-list ul .sub-menu li,
109 | .sidebar .menu-list li .sub-menu li {
110 | background-color: #181c20;
111 | border: none;
112 | border-bottom: 1px solid #23282e;
113 | margin-left: 0px;
114 | line-height: 1.4;
115 | padding-top: 10px;
116 | padding-bottom: 10px;
117 | padding-right: 10px;
118 | padding-left: 25px;
119 | }
120 |
121 | .sidebar .menu-list ul .sub-menu li:hover,
122 | .sidebar .menu-list li .sub-menu li:hover {
123 | background-color: #020203;
124 | }
125 |
126 |
127 | .sidebar .menu-list ul .sub-menu li a,
128 | .sidebar .menu-list li .sub-menu li a {
129 | display: block;
130 | }
131 |
132 | .sidebar .menu-list ul .sub-menu li a:before,
133 | .sidebar .menu-list li .sub-menu li a:before {
134 | font-family: FontAwesome;
135 | font-size: 14px;
136 | font-weight: bold;
137 | content: "\f105";
138 | display: inline;
139 | vertical-align: middle;
140 | padding-left: 0;
141 | padding-right: 7px;
142 | margin-left: -12px;
143 | }
144 |
145 | .sidebar .menu-list li {
146 | padding-left: 0px;
147 | border-left: 3px solid #2e353d;
148 | border-bottom: 1px solid #23282e;
149 | }
150 |
151 | .sidebar .menu-list li a {
152 | text-decoration: none;
153 | color: white;
154 | }
155 |
156 | .sidebar .menu-list li a i {
157 | padding-left: 10px;
158 | width: 20px;
159 | padding-right: 20px;
160 | }
161 |
162 | .sidebar .menu-list li:hover {
163 | border-left: 3px solid #d19b3d;
164 | background-color: #4f5b69;
165 | -webkit-transition: all 1s ease;
166 | -moz-transition: all 1s ease;
167 | -o-transition: all 1s ease;
168 | -ms-transition: all 1s ease;
169 | transition: all 1s ease;
170 | }
171 |
172 | .sidebar #menu-content {
173 | padding-bottom: 70px;
174 | }
175 |
176 | body {
177 | margin: 0px;
178 | padding: 0px;
179 | }
180 |
181 | .coredocs-section-title {
182 | margin-top: 20px;
183 | padding-bottom: 10px;
184 | border-bottom: 1px solid lightgrey;
185 | }
186 |
187 | .coredocs-link-title a,
188 | .coredocs-section-title a {
189 | display: none;
190 | }
191 |
192 | .coredocs-link-title a,
193 | .coredocs-section-title a {
194 | text-decoration: none;
195 | }
196 |
197 | .coredocs-link-title:hover a,
198 | .coredocs-section-title:hover a {
199 | display: inline;
200 | font-size: 20px;
201 | }
202 |
203 | .coredocs-section-title:last-child {
204 | margin-top: 0;
205 | }
206 |
207 |
208 | /* @group Language Switcher */
209 |
210 | .sidebar .menu-list.menu-list-bottom {
211 | margin-bottom: 0;
212 | position: fixed;
213 | width: inherit;
214 | bottom: 0;
215 | left: 0;
216 | right: 0;
217 | border-top: 1px solid #23282e;
218 | }
219 |
220 | .sidebar .menu-list-bottom li span {
221 | float: right;
222 | margin-right: 20px;
223 | color: #d19b3d;
224 | }
225 |
226 | /* @end Language Switcher */
227 |
228 |
229 | /* @group Docs Content */
230 |
231 | .docs-content .meta .label {
232 | vertical-align: middle;
233 | font-size: 14px;
234 | font-weight: normal;
235 | }
236 |
237 | .docs-content .meta code {
238 | vertical-align: middle;
239 | padding: .2em .6em .3em;
240 | font-size: 14px;
241 | }
242 |
243 | .docs-content .btn {
244 | font-size: inherit;
245 | }
246 |
247 | .code-samples pre {
248 | margin-top: 20px;
249 | }
250 |
251 | /* @end Docs Content */
252 |
253 |
254 | @media (max-width: 767px) {
255 | .main-container {
256 | padding-left: 15px;
257 | padding-right: 15px;
258 | }
259 |
260 | .sidebar {
261 | position: relative;
262 | width: 100%;
263 | margin-bottom: 10px;
264 | overflow: visible;
265 | }
266 |
267 | .sidebar .toggle-btn {
268 | display: block;
269 | cursor: pointer;
270 | position: absolute;
271 | right: 10px;
272 | top: 10px;
273 | z-index: 10 !important;
274 | padding: 3px;
275 | width: 40px;
276 | text-align: center;
277 | }
278 |
279 | .sidebar .menu-list.menu-list-bottom {
280 | position: static;
281 | }
282 |
283 | .sidebar .brand {
284 | margin-top: 0;
285 | margin-bottom: 0;
286 |
287 | text-align: left !important;
288 | font-size: 22px;
289 | padding: 0;
290 | padding-left: 20px;
291 | line-height: 50px !important;
292 | }
293 | }
294 |
295 | @media (min-width: 767px) {
296 | .sidebar .menu-list .menu-content {
297 | display: block;
298 | }
299 | #main {
300 | width:calc(100% - 225px);
301 | float: right;
302 | }
303 | }
304 |
305 | @media (min-width: 992px) {
306 | .modal-lg {
307 | width: 980px;
308 | }
309 | }
310 |
311 | .api-modal .modal-title .fa {
312 | color: #93c54b;
313 | }
314 |
315 | .api-modal .modal-body .request-awaiting {
316 | padding: 35px 10px;
317 | color: #7F8177;
318 | text-align: center;
319 | }
320 |
321 | .api-modal .modal-body .meta {
322 | margin-bottom: 20px;
323 | }
324 |
325 | .api-modal .modal-body .meta .label {
326 | vertical-align: middle;
327 | font-size: 14px;
328 | font-weight: normal;
329 | }
330 |
331 | .api-modal .modal-body .meta code {
332 | vertical-align: middle;
333 | padding: .2em .6em .3em;
334 | font-size: 14px;
335 | }
336 |
337 | .api-modal .modal-content .toggle-view {
338 | text-align: right;
339 | float: right;
340 | }
341 |
342 | .api-modal .modal-content .response .well {
343 | margin: 0;
344 | max-height: 550px;
345 | }
346 |
347 | .highlight {
348 | background-color: #f7f7f9
349 | }
350 |
351 | .checkbox label.control-label {
352 | font-weight: bold
353 | }
354 |
355 | @media (min-width: 768px) {
356 | .navbar-nav.navbar-right:last-child {
357 | margin-right: 0 !important;
358 | }
359 | }
360 |
--------------------------------------------------------------------------------
/static/admin/css/changelists.css:
--------------------------------------------------------------------------------
1 | /* CHANGELISTS */
2 |
3 | #changelist {
4 | display: flex;
5 | align-items: flex-start;
6 | justify-content: space-between;
7 | }
8 |
9 | #changelist .changelist-form-container {
10 | flex: 1 1 auto;
11 | min-width: 0;
12 | }
13 |
14 | #changelist table {
15 | width: 100%;
16 | }
17 |
18 | .change-list .hiddenfields { display:none; }
19 |
20 | .change-list .filtered table {
21 | border-right: none;
22 | }
23 |
24 | .change-list .filtered {
25 | min-height: 400px;
26 | }
27 |
28 | .change-list .filtered .results, .change-list .filtered .paginator,
29 | .filtered #toolbar, .filtered div.xfull {
30 | width: auto;
31 | }
32 |
33 | .change-list .filtered table tbody th {
34 | padding-right: 1em;
35 | }
36 |
37 | #changelist-form .results {
38 | overflow-x: auto;
39 | width: 100%;
40 | }
41 |
42 | #changelist .toplinks {
43 | border-bottom: 1px solid #ddd;
44 | }
45 |
46 | #changelist .paginator {
47 | color: #666;
48 | border-bottom: 1px solid #eee;
49 | background: #fff;
50 | overflow: hidden;
51 | }
52 |
53 | /* CHANGELIST TABLES */
54 |
55 | #changelist table thead th {
56 | padding: 0;
57 | white-space: nowrap;
58 | vertical-align: middle;
59 | }
60 |
61 | #changelist table thead th.action-checkbox-column {
62 | width: 1.5em;
63 | text-align: center;
64 | }
65 |
66 | #changelist table tbody td.action-checkbox {
67 | text-align: center;
68 | }
69 |
70 | #changelist table tfoot {
71 | color: #666;
72 | }
73 |
74 | /* TOOLBAR */
75 |
76 | #toolbar {
77 | padding: 8px 10px;
78 | margin-bottom: 15px;
79 | border-top: 1px solid #eee;
80 | border-bottom: 1px solid #eee;
81 | background: #f8f8f8;
82 | color: #666;
83 | }
84 |
85 | #toolbar form input {
86 | border-radius: 4px;
87 | font-size: 14px;
88 | padding: 5px;
89 | color: #333;
90 | }
91 |
92 | #toolbar #searchbar {
93 | height: 19px;
94 | border: 1px solid #ccc;
95 | padding: 2px 5px;
96 | margin: 0;
97 | vertical-align: top;
98 | font-size: 13px;
99 | max-width: 100%;
100 | }
101 |
102 | #toolbar #searchbar:focus {
103 | border-color: #999;
104 | }
105 |
106 | #toolbar form input[type="submit"] {
107 | border: 1px solid #ccc;
108 | font-size: 13px;
109 | padding: 4px 8px;
110 | margin: 0;
111 | vertical-align: middle;
112 | background: #fff;
113 | box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset;
114 | cursor: pointer;
115 | color: #333;
116 | }
117 |
118 | #toolbar form input[type="submit"]:focus,
119 | #toolbar form input[type="submit"]:hover {
120 | border-color: #999;
121 | }
122 |
123 | #changelist-search img {
124 | vertical-align: middle;
125 | margin-right: 4px;
126 | }
127 |
128 | /* FILTER COLUMN */
129 |
130 | #changelist-filter {
131 | order: 1;
132 | width: 240px;
133 | background: #f8f8f8;
134 | border-left: none;
135 | margin: 0 0 0 30px;
136 | }
137 |
138 | #changelist-filter h2 {
139 | font-size: 14px;
140 | text-transform: uppercase;
141 | letter-spacing: 0.5px;
142 | padding: 5px 15px;
143 | margin-bottom: 12px;
144 | border-bottom: none;
145 | }
146 |
147 | #changelist-filter h3 {
148 | font-weight: 400;
149 | font-size: 14px;
150 | padding: 0 15px;
151 | margin-bottom: 10px;
152 | }
153 |
154 | #changelist-filter ul {
155 | margin: 5px 0;
156 | padding: 0 15px 15px;
157 | border-bottom: 1px solid #eaeaea;
158 | }
159 |
160 | #changelist-filter ul:last-child {
161 | border-bottom: none;
162 | }
163 |
164 | #changelist-filter li {
165 | list-style-type: none;
166 | margin-left: 0;
167 | padding-left: 0;
168 | }
169 |
170 | #changelist-filter a {
171 | display: block;
172 | color: #999;
173 | text-overflow: ellipsis;
174 | overflow-x: hidden;
175 | }
176 |
177 | #changelist-filter li.selected {
178 | border-left: 5px solid #eaeaea;
179 | padding-left: 10px;
180 | margin-left: -15px;
181 | }
182 |
183 | #changelist-filter li.selected a {
184 | color: #5b80b2;
185 | }
186 |
187 | #changelist-filter a:focus, #changelist-filter a:hover,
188 | #changelist-filter li.selected a:focus,
189 | #changelist-filter li.selected a:hover {
190 | color: #036;
191 | }
192 |
193 | #changelist-filter #changelist-filter-clear a {
194 | font-size: 13px;
195 | padding-bottom: 10px;
196 | border-bottom: 1px solid #eaeaea;
197 | }
198 |
199 | /* DATE DRILLDOWN */
200 |
201 | .change-list ul.toplinks {
202 | display: block;
203 | float: left;
204 | padding: 0;
205 | margin: 0;
206 | width: 100%;
207 | }
208 |
209 | .change-list ul.toplinks li {
210 | padding: 3px 6px;
211 | font-weight: bold;
212 | list-style-type: none;
213 | display: inline-block;
214 | }
215 |
216 | .change-list ul.toplinks .date-back a {
217 | color: #999;
218 | }
219 |
220 | .change-list ul.toplinks .date-back a:focus,
221 | .change-list ul.toplinks .date-back a:hover {
222 | color: #036;
223 | }
224 |
225 | /* PAGINATOR */
226 |
227 | .paginator {
228 | font-size: 13px;
229 | padding-top: 10px;
230 | padding-bottom: 10px;
231 | line-height: 22px;
232 | margin: 0;
233 | border-top: 1px solid #ddd;
234 | width: 100%;
235 | }
236 |
237 | .paginator a:link, .paginator a:visited {
238 | padding: 2px 6px;
239 | background: #79aec8;
240 | text-decoration: none;
241 | color: #fff;
242 | }
243 |
244 | .paginator a.showall {
245 | border: none;
246 | background: none;
247 | color: #5b80b2;
248 | }
249 |
250 | .paginator a.showall:focus, .paginator a.showall:hover {
251 | background: none;
252 | color: #036;
253 | }
254 |
255 | .paginator .end {
256 | margin-right: 6px;
257 | }
258 |
259 | .paginator .this-page {
260 | padding: 2px 6px;
261 | font-weight: bold;
262 | font-size: 13px;
263 | vertical-align: top;
264 | }
265 |
266 | .paginator a:focus, .paginator a:hover {
267 | color: white;
268 | background: #036;
269 | }
270 |
271 | /* ACTIONS */
272 |
273 | .filtered .actions {
274 | border-right: none;
275 | }
276 |
277 | #changelist table input {
278 | margin: 0;
279 | vertical-align: baseline;
280 | }
281 |
282 | #changelist table tbody tr.selected {
283 | background-color: #FFFFCC;
284 | }
285 |
286 | #changelist .actions {
287 | padding: 10px;
288 | background: #fff;
289 | border-top: none;
290 | border-bottom: none;
291 | line-height: 24px;
292 | color: #999;
293 | width: 100%;
294 | }
295 |
296 | #changelist .actions.selected {
297 | background: #fffccf;
298 | border-top: 1px solid #fffee8;
299 | border-bottom: 1px solid #edecd6;
300 | }
301 |
302 | #changelist .actions span.all,
303 | #changelist .actions span.action-counter,
304 | #changelist .actions span.clear,
305 | #changelist .actions span.question {
306 | font-size: 13px;
307 | margin: 0 0.5em;
308 | display: none;
309 | }
310 |
311 | #changelist .actions:last-child {
312 | border-bottom: none;
313 | }
314 |
315 | #changelist .actions select {
316 | vertical-align: top;
317 | height: 24px;
318 | background: none;
319 | color: #000;
320 | border: 1px solid #ccc;
321 | border-radius: 4px;
322 | font-size: 14px;
323 | padding: 0 0 0 4px;
324 | margin: 0;
325 | margin-left: 10px;
326 | }
327 |
328 | #changelist .actions select:focus {
329 | border-color: #999;
330 | }
331 |
332 | #changelist .actions label {
333 | display: inline-block;
334 | vertical-align: middle;
335 | font-size: 13px;
336 | }
337 |
338 | #changelist .actions .button {
339 | font-size: 13px;
340 | border: 1px solid #ccc;
341 | border-radius: 4px;
342 | background: #fff;
343 | box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset;
344 | cursor: pointer;
345 | height: 24px;
346 | line-height: 1;
347 | padding: 4px 8px;
348 | margin: 0;
349 | color: #333;
350 | }
351 |
352 | #changelist .actions .button:focus, #changelist .actions .button:hover {
353 | border-color: #999;
354 | }
355 |
--------------------------------------------------------------------------------