Skip to content

Commit 8fc8d3b

Browse files
committed
Merge branch 'refs/heads/master' into docs-chinese
Conflicts: xadmin/views/base.py xadmin/views/edit.py xadmin/views/list.py
2 parents f5ef859 + cf74351 commit 8fc8d3b

File tree

172 files changed

+19506
-11306
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

172 files changed

+19506
-11306
lines changed

README.rst

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1-
django-xadmin |Build Status|
2-
============================
1+
django-xadmin |Build Status| |Build Status2|
2+
============================================
33

44
.. |Build Status| image:: https://travis-ci.org/sshwsfc/django-xadmin.png?branch=master
55
:target: https://travis-ci.org/sshwsfc/django-xadmin
66

7+
.. |Build Status2| image:: https://drone.io/github.com/sshwsfc/django-xadmin/status.png
8+
:target: https://drone.io/github.com/sshwsfc/django-xadmin/latest
9+
710
Drop-in replacement of Django admin comes with lots of goodies, fully extensible with plugin support, pretty UI based on Twitter Bootstrap.
811

912
Live Demo

setup.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,12 @@
1818
install_requires=[
1919
'setuptools',
2020
'django>=1.4',
21-
'xlwt',
2221
'django-crispy-forms>=1.2.3',
2322
'django-reversion',
2423
],
24+
extras_require={
25+
'Excel': ['xlwt'],
26+
},
2527
zip_safe=True,
2628
keywords=['admin', 'django', 'xadmin', 'bootstrap'],
2729
classifiers=[

xadmin/__init__.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@ def autodiscover():
1414
from django.utils.importlib import import_module
1515
from django.utils.module_loading import module_has_submodule
1616

17+
setattr(settings, 'CRISPY_TEMPLATE_PACK', 'bootstrap3')
18+
setattr(settings, 'CRISPY_CLASS_CONVERTERS', {
19+
"textinput": "textinput textInput form-control",
20+
"fileinput": "fileinput fileUpload form-control",
21+
"passwordinput": "textinput textInput form-control",
22+
})
23+
1724
from xadmin import views
1825
from xadmin import plugins
1926

xadmin/adminx.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@
66

77
class UserSettingsAdmin(object):
88
model_icon = 'cog'
9+
hidden_menu = True
910
xadmin.site.register(UserSettings, UserSettingsAdmin)

xadmin/layout.py

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from crispy_forms.utils import render_field, flatatt
55

66
from crispy_forms import layout
7+
from crispy_forms import bootstrap
78

89

910
class Fieldset(layout.Fieldset):
@@ -18,14 +19,14 @@ def __init__(self, legend, *fields, **kwargs):
1819
class Row(layout.Div):
1920

2021
def __init__(self, *fields, **kwargs):
21-
css_class = 'form-row num%d' % len(fields)
22+
css_class = 'form-row row num%d' % len(fields)
2223
super(Row, self).__init__(css_class=css_class, *fields, **kwargs)
2324

2425

2526
class Col(layout.Column):
2627

2728
def __init__(self, id, *fields, **kwargs):
28-
css_class = ['column', 'form-column', id, 'span%d' %
29+
css_class = ['column', 'form-column', id, 'col col-sm-%d' %
2930
kwargs.get('span', 6)]
3031
if kwargs.get('horizontal'):
3132
css_class.append('form-horizontal')
@@ -34,12 +35,48 @@ def __init__(self, id, *fields, **kwargs):
3435

3536

3637
class Main(layout.Column):
37-
css_class = "column form-column main span9 form-horizontal"
38+
css_class = "column form-column main col col-sm-9 form-horizontal"
3839

3940

4041
class Side(layout.Column):
41-
css_class = "column form-column sidebar span3"
42+
css_class = "column form-column sidebar col col-sm-3"
4243

4344

4445
class Container(layout.Div):
45-
css_class = "form-container row-fluid"
46+
css_class = "form-container row clearfix"
47+
48+
49+
# Override bootstrap3
50+
class InputGroup(layout.Field):
51+
52+
template = "bootstrap3/layout/input_group.html"
53+
54+
def __init__(self, field, *args, **kwargs):
55+
self.field = field
56+
self.inputs = list(args)
57+
if '@@' not in args:
58+
self.inputs.append('@@')
59+
60+
super(InputGroup, self).__init__(field, **kwargs)
61+
62+
def render(self, form, form_style, context, template_pack='bootstrap'):
63+
classes = form.fields[self.field].widget.attrs['class']
64+
context.update({'inputs': self.inputs, 'classes': classes.replace('form-control', '')})
65+
return render_field(self.field, form, form_style, context, template=self.template, attrs=self.attrs, template_pack=template_pack)
66+
67+
class PrependedText(InputGroup):
68+
69+
def __init__(self, field, text, **kwargs):
70+
super(PrependedText, self).__init__(field, text, '@@', **kwargs)
71+
72+
class AppendedText(InputGroup):
73+
74+
def __init__(self, field, text, **kwargs):
75+
super(AppendedText, self).__init__(field, '@@', text, **kwargs)
76+
77+
class PrependedAppendedText(InputGroup):
78+
79+
def __init__(self, field, prepended_text=None, appended_text=None, *args, **kwargs):
80+
super(PrependedAppendedText, self).__init__(field, prepended_text, '@@', appended_text, **kwargs)
81+
82+
3.9 KB
Binary file not shown.

0 commit comments

Comments
 (0)