Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
J
jumpserver
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ops
jumpserver
Commits
27998792
Commit
27998792
authored
Aug 17, 2016
by
ibuler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Modify user detail of usergroup
parent
824b1c7f
Show whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
135 additions
and
87 deletions
+135
-87
default1.png
apps/media/avatar/default/default1.png
+0
-0
default2.png
apps/media/avatar/default/default2.png
+0
-0
default3.png
apps/media/avatar/default/default3.png
+0
-0
default4.png
apps/media/avatar/default/default4.png
+0
-0
default5.png
apps/media/avatar/default/default5.png
+0
-0
default6.png
apps/media/avatar/default/default6.png
+0
-0
chosen.css
apps/static/css/plugins/chosen/chosen.css
+46
-64
style.css
apps/static/css/style.css
+16
-0
_head_css_js.html
apps/templates/_head_css_js.html
+1
-2
base.html
apps/templates/base.html
+4
-1
0008_auto_20160817_2303.py
apps/users/migrations/0008_auto_20160817_2303.py
+20
-0
models.py
apps/users/models.py
+1
-1
_user.html
apps/users/templates/users/_user.html
+1
-2
user_detail.html
apps/users/templates/users/user_detail.html
+35
-10
users_tags.py
apps/users/templatetags/users_tags.py
+9
-6
views.py
apps/users/views.py
+2
-1
No files found.
apps/media/avatar/default/default1.png
0 → 100644
View file @
27998792
2.61 KB
apps/media/avatar/default/default2.png
0 → 100644
View file @
27998792
2.29 KB
apps/media/avatar/default/default3.png
0 → 100644
View file @
27998792
3.75 KB
apps/media/avatar/default/default4.png
0 → 100644
View file @
27998792
1.11 KB
apps/media/avatar/default/default5.png
0 → 100644
View file @
27998792
1.8 KB
apps/media/avatar/default/default6.png
0 → 100644
View file @
27998792
1.3 KB
apps/static/css/plugins/chosen/chosen.css
View file @
27998792
...
@@ -2,9 +2,9 @@
...
@@ -2,9 +2,9 @@
Chosen, a Select Box Enhancer for jQuery and Prototype
Chosen, a Select Box Enhancer for jQuery and Prototype
by Patrick Filler for Harvest, http://getharvest.com
by Patrick Filler for Harvest, http://getharvest.com
Version 1.
6.2
Version 1.
1.0
Full source at https://github.com/harvesthq/chosen
Full source at https://github.com/harvesthq/chosen
Copyright (c) 2011
-2016
Harvest http://getharvest.com
Copyright (c) 2011 Harvest http://getharvest.com
MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
This file is generated by `grunt build`, do not edit it by hand.
This file is generated by `grunt build`, do not edit it by hand.
...
@@ -16,20 +16,20 @@ This file is generated by `grunt build`, do not edit it by hand.
...
@@ -16,20 +16,20 @@ This file is generated by `grunt build`, do not edit it by hand.
display
:
inline-block
;
display
:
inline-block
;
vertical-align
:
middle
;
vertical-align
:
middle
;
font-size
:
13px
;
font-size
:
13px
;
zoom
:
1
;
*
display
:
inline
;
-webkit-user-select
:
none
;
-webkit-user-select
:
none
;
-moz-user-select
:
none
;
-moz-user-select
:
none
;
user-select
:
none
;
user-select
:
none
;
}
}
.chosen-container
*
{
-webkit-box-sizing
:
border-box
;
-moz-box-sizing
:
border-box
;
box-sizing
:
border-box
;
}
.chosen-container
.chosen-drop
{
.chosen-container
.chosen-drop
{
position
:
absolute
;
position
:
absolute
;
top
:
100%
;
top
:
100%
;
left
:
-9999px
;
left
:
-9999px
;
z-index
:
1010
;
z-index
:
1010
;
-webkit-box-sizing
:
border-box
;
-moz-box-sizing
:
border-box
;
box-sizing
:
border-box
;
width
:
100%
;
width
:
100%
;
border
:
1px
solid
#aaa
;
border
:
1px
solid
#aaa
;
border-top
:
0
;
border-top
:
0
;
...
@@ -42,19 +42,6 @@ This file is generated by `grunt build`, do not edit it by hand.
...
@@ -42,19 +42,6 @@ This file is generated by `grunt build`, do not edit it by hand.
.chosen-container
a
{
.chosen-container
a
{
cursor
:
pointer
;
cursor
:
pointer
;
}
}
.chosen-container
.search-choice
.group-name
,
.chosen-container
.chosen-single
.group-name
{
margin-right
:
4px
;
overflow
:
hidden
;
white-space
:
nowrap
;
text-overflow
:
ellipsis
;
font-weight
:
normal
;
color
:
#999999
;
}
.chosen-container
.search-choice
.group-name
:after
,
.chosen-container
.chosen-single
.group-name
:after
{
content
:
":"
;
padding-left
:
2px
;
vertical-align
:
top
;
}
/* @end */
/* @end */
/* @group Single Chosen */
/* @group Single Chosen */
...
@@ -63,15 +50,15 @@ This file is generated by `grunt build`, do not edit it by hand.
...
@@ -63,15 +50,15 @@ This file is generated by `grunt build`, do not edit it by hand.
display
:
block
;
display
:
block
;
overflow
:
hidden
;
overflow
:
hidden
;
padding
:
0
0
0
8px
;
padding
:
0
0
0
8px
;
height
:
25
px
;
height
:
23
px
;
border
:
1px
solid
#aaa
;
border
:
1px
solid
#aaa
;
border-radius
:
5px
;
border-radius
:
5px
;
background-color
:
#fff
;
background-color
:
#fff
;
background
:
-webkit-gradient
(
linear
,
50%
0%
,
50%
100%
,
color-stop
(
20%
,
#ffffff
),
color-stop
(
50%
,
#f6f6f6
),
color-stop
(
52%
,
#eeeeee
),
color-stop
(
100%
,
#f4f4f4
));
background
:
-webkit-gradient
(
linear
,
50%
0%
,
50%
100%
,
color-stop
(
20%
,
#ffffff
),
color-stop
(
50%
,
#f6f6f6
),
color-stop
(
52%
,
#eeeeee
),
color-stop
(
100%
,
#f4f4f4
));
background
:
-webkit-linear-gradient
(
#ffffff
20%
,
#f6f6f6
50%
,
#eeeeee
52%
,
#f4f4f4
100%
);
background
:
-webkit-linear-gradient
(
top
,
#ffffff
20%
,
#f6f6f6
50%
,
#eeeeee
52%
,
#f4f4f4
100%
);
background
:
-moz-linear-gradient
(
#ffffff
20%
,
#f6f6f6
50%
,
#eeeeee
52%
,
#f4f4f4
100%
);
background
:
-moz-linear-gradient
(
top
,
#ffffff
20%
,
#f6f6f6
50%
,
#eeeeee
52%
,
#f4f4f4
100%
);
background
:
-o-linear-gradient
(
#ffffff
20%
,
#f6f6f6
50%
,
#eeeeee
52%
,
#f4f4f4
100%
);
background
:
-o-linear-gradient
(
top
,
#ffffff
20%
,
#f6f6f6
50%
,
#eeeeee
52%
,
#f4f4f4
100%
);
background
:
linear-gradient
(
#ffffff
20%
,
#f6f6f6
50%
,
#eeeeee
52%
,
#f4f4f4
100%
);
background
:
linear-gradient
(
top
,
#ffffff
20%
,
#f6f6f6
50%
,
#eeeeee
52%
,
#f4f4f4
100%
);
background-clip
:
padding-box
;
background-clip
:
padding-box
;
box-shadow
:
0
0
3px
white
inset
,
0
1px
1px
rgba
(
0
,
0
,
0
,
0.1
);
box-shadow
:
0
0
3px
white
inset
,
0
1px
1px
rgba
(
0
,
0
,
0
,
0.1
);
color
:
#444
;
color
:
#444
;
...
@@ -99,7 +86,7 @@ This file is generated by `grunt build`, do not edit it by hand.
...
@@ -99,7 +86,7 @@ This file is generated by `grunt build`, do not edit it by hand.
display
:
block
;
display
:
block
;
width
:
12px
;
width
:
12px
;
height
:
12px
;
height
:
12px
;
background
:
url('../../../../../../../Downloads/chosen_v1.6.2/
chosen-sprite.png')
-42px
1px
no-repeat
;
background
:
url('
chosen-sprite.png')
-42px
1px
no-repeat
;
font-size
:
1px
;
font-size
:
1px
;
}
}
.chosen-container-single
.chosen-single
abbr
:hover
{
.chosen-container-single
.chosen-single
abbr
:hover
{
...
@@ -120,7 +107,7 @@ This file is generated by `grunt build`, do not edit it by hand.
...
@@ -120,7 +107,7 @@ This file is generated by `grunt build`, do not edit it by hand.
display
:
block
;
display
:
block
;
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
background
:
url('../../../../../../../Downloads/chosen_v1.6.2/
chosen-sprite.png')
no-repeat
0px
2px
;
background
:
url('
chosen-sprite.png')
no-repeat
0px
2px
;
}
}
.chosen-container-single
.chosen-search
{
.chosen-container-single
.chosen-search
{
position
:
relative
;
position
:
relative
;
...
@@ -130,14 +117,17 @@ This file is generated by `grunt build`, do not edit it by hand.
...
@@ -130,14 +117,17 @@ This file is generated by `grunt build`, do not edit it by hand.
white-space
:
nowrap
;
white-space
:
nowrap
;
}
}
.chosen-container-single
.chosen-search
input
[
type
=
"text"
]
{
.chosen-container-single
.chosen-search
input
[
type
=
"text"
]
{
-webkit-box-sizing
:
border-box
;
-moz-box-sizing
:
border-box
;
box-sizing
:
border-box
;
margin
:
1px
0
;
margin
:
1px
0
;
padding
:
4px
20px
4px
5px
;
padding
:
4px
20px
4px
5px
;
width
:
100%
;
width
:
100%
;
height
:
auto
;
height
:
auto
;
outline
:
0
;
outline
:
0
;
border
:
1px
solid
#aaa
;
border
:
1px
solid
#aaa
;
background
:
white
url('../../../../../../../Downloads/chosen_v1.6.2/
chosen-sprite.png')
no-repeat
100%
-20px
;
background
:
white
url('
chosen-sprite.png')
no-repeat
100%
-20px
;
background
:
url('../../../../../../../Downloads/chosen_v1.6.2/
chosen-sprite.png')
no-repeat
100%
-20px
;
background
:
url('
chosen-sprite.png')
no-repeat
100%
-20px
;
font-size
:
1em
;
font-size
:
1em
;
font-family
:
sans-serif
;
font-family
:
sans-serif
;
line-height
:
normal
;
line-height
:
normal
;
...
@@ -156,7 +146,6 @@ This file is generated by `grunt build`, do not edit it by hand.
...
@@ -156,7 +146,6 @@ This file is generated by `grunt build`, do not edit it by hand.
/* @end */
/* @end */
/* @group Results */
/* @group Results */
.chosen-container
.chosen-results
{
.chosen-container
.chosen-results
{
color
:
#444
;
position
:
relative
;
position
:
relative
;
overflow-x
:
hidden
;
overflow-x
:
hidden
;
overflow-y
:
auto
;
overflow-y
:
auto
;
...
@@ -171,7 +160,6 @@ This file is generated by `grunt build`, do not edit it by hand.
...
@@ -171,7 +160,6 @@ This file is generated by `grunt build`, do not edit it by hand.
padding
:
5px
6px
;
padding
:
5px
6px
;
list-style
:
none
;
list-style
:
none
;
line-height
:
15px
;
line-height
:
15px
;
word-wrap
:
break-word
;
-webkit-touch-callout
:
none
;
-webkit-touch-callout
:
none
;
}
}
.chosen-container
.chosen-results
li
.active-result
{
.chosen-container
.chosen-results
li
.active-result
{
...
@@ -193,7 +181,6 @@ This file is generated by `grunt build`, do not edit it by hand.
...
@@ -193,7 +181,6 @@ This file is generated by `grunt build`, do not edit it by hand.
color
:
#fff
;
color
:
#fff
;
}
}
.chosen-container
.chosen-results
li
.no-results
{
.chosen-container
.chosen-results
li
.no-results
{
color
:
#777
;
display
:
list-item
;
display
:
list-item
;
background
:
#f4f4f4
;
background
:
#f4f4f4
;
}
}
...
@@ -213,20 +200,18 @@ This file is generated by `grunt build`, do not edit it by hand.
...
@@ -213,20 +200,18 @@ This file is generated by `grunt build`, do not edit it by hand.
/* @end */
/* @end */
/* @group Multi Chosen */
/* @group Multi Chosen */
.chosen-container-multi
.chosen-choices
{
.chosen-container-multi
.chosen-choices
{
position
:
relative
;
-moz-box-sizing
:
border-box
;
overflow
:
hidden
;
background-color
:
#FFFFFF
;
border
:
1px
solid
#CBD5DD
;
border-radius
:
2px
;
cursor
:
text
;
height
:
auto
!important
;
margin
:
0
;
margin
:
0
;
padding
:
0
5px
;
min-height
:
30px
;
overflow
:
hidden
;
padding
:
2px
;
position
:
relative
;
width
:
100%
;
width
:
100%
;
height
:
auto
;
border
:
1px
solid
#aaa
;
background-color
:
#fff
;
background-image
:
-webkit-gradient
(
linear
,
50%
0%
,
50%
100%
,
color-stop
(
1%
,
#eeeeee
),
color-stop
(
15%
,
#ffffff
));
background-image
:
-webkit-linear-gradient
(
#eeeeee
1%
,
#ffffff
15%
);
background-image
:
-moz-linear-gradient
(
#eeeeee
1%
,
#ffffff
15%
);
background-image
:
-o-linear-gradient
(
#eeeeee
1%
,
#ffffff
15%
);
background-image
:
linear-gradient
(
#eeeeee
1%
,
#ffffff
15%
);
cursor
:
text
;
}
}
.chosen-container-multi
.chosen-choices
li
{
.chosen-container-multi
.chosen-choices
li
{
float
:
left
;
float
:
left
;
...
@@ -239,42 +224,39 @@ This file is generated by `grunt build`, do not edit it by hand.
...
@@ -239,42 +224,39 @@ This file is generated by `grunt build`, do not edit it by hand.
}
}
.chosen-container-multi
.chosen-choices
li
.search-field
input
[
type
=
"text"
]
{
.chosen-container-multi
.chosen-choices
li
.search-field
input
[
type
=
"text"
]
{
margin
:
1px
0
;
margin
:
1px
0
;
padding
:
0
;
padding
:
5px
;
height
:
25px
;
height
:
25px
;
outline
:
0
;
outline
:
0
;
border
:
0
!important
;
border
:
0
!important
;
background
:
transparent
!important
;
background
:
transparent
!important
;
box-shadow
:
none
;
box-shadow
:
none
;
color
:
#999
;
color
:
#666
;
font-size
:
100%
;
font-size
:
100%
;
font-family
:
sans-serif
;
font-family
:
sans-serif
;
line-height
:
normal
;
line-height
:
normal
;
border-radius
:
0
;
border-radius
:
0
;
}
}
.chosen-container-multi
.chosen-choices
li
.search-field
.default
{
color
:
#999
;
}
.chosen-container-multi
.chosen-choices
li
.search-choice
{
.chosen-container-multi
.chosen-choices
li
.search-choice
{
position
:
relative
;
position
:
relative
;
margin
:
3px
5px
3px
0
;
margin
:
3px
0
3px
5px
;
padding
:
3px
20px
3px
5px
;
padding
:
3px
20px
3px
5px
;
border
:
1px
solid
#aaa
;
border
:
1px
solid
#aaa
;
max-width
:
100%
;
border-radius
:
3px
;
border-radius
:
3px
;
background-color
:
#eeeeee
;
background-color
:
#e4e4e4
;
background-image
:
-webkit-gradient
(
linear
,
50%
0%
,
50%
100%
,
color-stop
(
20%
,
#f4f4f4
),
color-stop
(
50%
,
#f0f0f0
),
color-stop
(
52%
,
#e8e8e8
),
color-stop
(
100%
,
#eeeeee
));
background-image
:
-webkit-gradient
(
linear
,
50%
0%
,
50%
100%
,
color-stop
(
20%
,
#f4f4f4
),
color-stop
(
50%
,
#f0f0f0
),
color-stop
(
52%
,
#e8e8e8
),
color-stop
(
100%
,
#eeeeee
));
background-image
:
-webkit-linear-gradient
(
#f4f4f4
20%
,
#f0f0f0
50%
,
#e8e8e8
52%
,
#eeeeee
100%
);
background-image
:
-webkit-linear-gradient
(
#f4f4f4
20%
,
#f0f0f0
50%
,
#e8e8e8
52%
,
#eeeeee
100%
);
background-image
:
-moz-linear-gradient
(
#f4f4f4
20%
,
#f0f0f0
50%
,
#e8e8e8
52%
,
#eeeeee
100%
);
background-image
:
-moz-linear-gradient
(
#f4f4f4
20%
,
#f0f0f0
50%
,
#e8e8e8
52%
,
#eeeeee
100%
);
background-image
:
-o-linear-gradient
(
#f4f4f4
20%
,
#f0f0f0
50%
,
#e8e8e8
52%
,
#eeeeee
100%
);
background-image
:
-o-linear-gradient
(
#f4f4f4
20%
,
#f0f0f0
50%
,
#e8e8e8
52%
,
#eeeeee
100%
);
background-image
:
linear-gradient
(
#f4f4f4
20%
,
#f0f0f0
50%
,
#e8e8e8
52%
,
#eeeeee
100%
);
background-image
:
linear-gradient
(
#f4f4f4
20%
,
#f0f0f0
50%
,
#e8e8e8
52%
,
#eeeeee
100%
);
background-size
:
100%
19px
;
background-repeat
:
repeat-x
;
background-clip
:
padding-box
;
background-clip
:
padding-box
;
box-shadow
:
0
0
2px
white
inset
,
0
1px
0
rgba
(
0
,
0
,
0
,
0.05
);
box-shadow
:
0
0
2px
white
inset
,
0
1px
0
rgba
(
0
,
0
,
0
,
0.05
);
color
:
#333
;
color
:
#333
;
line-height
:
13px
;
line-height
:
13px
;
cursor
:
default
;
cursor
:
default
;
}
}
.chosen-container-multi
.chosen-choices
li
.search-choice
span
{
word-wrap
:
break-word
;
}
.chosen-container-multi
.chosen-choices
li
.search-choice
.search-choice-close
{
.chosen-container-multi
.chosen-choices
li
.search-choice
.search-choice-close
{
position
:
absolute
;
position
:
absolute
;
top
:
4px
;
top
:
4px
;
...
@@ -282,7 +264,7 @@ This file is generated by `grunt build`, do not edit it by hand.
...
@@ -282,7 +264,7 @@ This file is generated by `grunt build`, do not edit it by hand.
display
:
block
;
display
:
block
;
width
:
12px
;
width
:
12px
;
height
:
12px
;
height
:
12px
;
background
:
url('../../../../../../../Downloads/chosen_v1.6.2/
chosen-sprite.png')
-42px
1px
no-repeat
;
background
:
url('
chosen-sprite.png')
-42px
1px
no-repeat
;
font-size
:
1px
;
font-size
:
1px
;
}
}
.chosen-container-multi
.chosen-choices
li
.search-choice
.search-choice-close
:hover
{
.chosen-container-multi
.chosen-choices
li
.search-choice
.search-choice-close
:hover
{
...
@@ -293,10 +275,10 @@ This file is generated by `grunt build`, do not edit it by hand.
...
@@ -293,10 +275,10 @@ This file is generated by `grunt build`, do not edit it by hand.
border
:
1px
solid
#ccc
;
border
:
1px
solid
#ccc
;
background-color
:
#e4e4e4
;
background-color
:
#e4e4e4
;
background-image
:
-webkit-gradient
(
linear
,
50%
0%
,
50%
100%
,
color-stop
(
20%
,
#f4f4f4
),
color-stop
(
50%
,
#f0f0f0
),
color-stop
(
52%
,
#e8e8e8
),
color-stop
(
100%
,
#eeeeee
));
background-image
:
-webkit-gradient
(
linear
,
50%
0%
,
50%
100%
,
color-stop
(
20%
,
#f4f4f4
),
color-stop
(
50%
,
#f0f0f0
),
color-stop
(
52%
,
#e8e8e8
),
color-stop
(
100%
,
#eeeeee
));
background-image
:
-webkit-linear-gradient
(
#f4f4f4
20%
,
#f0f0f0
50%
,
#e8e8e8
52%
,
#eeeeee
100%
);
background-image
:
-webkit-linear-gradient
(
top
,
#f4f4f4
20%
,
#f0f0f0
50%
,
#e8e8e8
52%
,
#eeeeee
100%
);
background-image
:
-moz-linear-gradient
(
#f4f4f4
20%
,
#f0f0f0
50%
,
#e8e8e8
52%
,
#eeeeee
100%
);
background-image
:
-moz-linear-gradient
(
top
,
#f4f4f4
20%
,
#f0f0f0
50%
,
#e8e8e8
52%
,
#eeeeee
100%
);
background-image
:
-o-linear-gradient
(
#f4f4f4
20%
,
#f0f0f0
50%
,
#e8e8e8
52%
,
#eeeeee
100%
);
background-image
:
-o-linear-gradient
(
top
,
#f4f4f4
20%
,
#f0f0f0
50%
,
#e8e8e8
52%
,
#eeeeee
100%
);
background-image
:
linear-gradient
(
#f4f4f4
20%
,
#f0f0f0
50%
,
#e8e8e8
52%
,
#eeeeee
100%
);
background-image
:
linear-gradient
(
top
,
#f4f4f4
20%
,
#f0f0f0
50%
,
#e8e8e8
52%
,
#eeeeee
100%
);
color
:
#666
;
color
:
#666
;
}
}
.chosen-container-multi
.chosen-choices
li
.search-choice-focus
{
.chosen-container-multi
.chosen-choices
li
.search-choice-focus
{
...
@@ -346,7 +328,7 @@ This file is generated by `grunt build`, do not edit it by hand.
...
@@ -346,7 +328,7 @@ This file is generated by `grunt build`, do not edit it by hand.
box-shadow
:
0
0
5px
rgba
(
0
,
0
,
0
,
0.3
);
box-shadow
:
0
0
5px
rgba
(
0
,
0
,
0
,
0.3
);
}
}
.chosen-container-active
.chosen-choices
li
.search-field
input
[
type
=
"text"
]
{
.chosen-container-active
.chosen-choices
li
.search-field
input
[
type
=
"text"
]
{
color
:
#222
!important
;
color
:
#111
!important
;
}
}
/* @end */
/* @end */
...
@@ -418,8 +400,8 @@ This file is generated by `grunt build`, do not edit it by hand.
...
@@ -418,8 +400,8 @@ This file is generated by `grunt build`, do not edit it by hand.
}
}
.chosen-rtl
.chosen-search
input
[
type
=
"text"
]
{
.chosen-rtl
.chosen-search
input
[
type
=
"text"
]
{
padding
:
4px
5px
4px
20px
;
padding
:
4px
5px
4px
20px
;
background
:
white
url('../../../../../../../Downloads/chosen_v1.6.2/
chosen-sprite.png')
no-repeat
-30px
-20px
;
background
:
white
url('
chosen-sprite.png')
no-repeat
-30px
-20px
;
background
:
url('../../../../../../../Downloads/chosen_v1.6.2/
chosen-sprite.png')
no-repeat
-30px
-20px
;
background
:
url('
chosen-sprite.png')
no-repeat
-30px
-20px
;
direction
:
rtl
;
direction
:
rtl
;
}
}
.chosen-rtl.chosen-container-single
.chosen-single
div
b
{
.chosen-rtl.chosen-container-single
.chosen-single
div
b
{
...
@@ -431,7 +413,7 @@ This file is generated by `grunt build`, do not edit it by hand.
...
@@ -431,7 +413,7 @@ This file is generated by `grunt build`, do not edit it by hand.
/* @end */
/* @end */
/* @group Retina compatibility */
/* @group Retina compatibility */
@media
only
screen
and
(
-webkit-min-device-pixel-ratio
:
1.5
),
only
screen
and
(
min-resolution
:
144dpi
),
only
screen
and
(
min-resolution
:
1.5dppx
)
{
@media
only
screen
and
(
-webkit-min-device-pixel-ratio
:
2
),
only
screen
and
(
min-resolution
:
144dpi
)
{
.chosen-rtl
.chosen-search
input
[
type
=
"text"
],
.chosen-rtl
.chosen-search
input
[
type
=
"text"
],
.chosen-container-single
.chosen-single
abbr
,
.chosen-container-single
.chosen-single
abbr
,
.chosen-container-single
.chosen-single
div
b
,
.chosen-container-single
.chosen-single
div
b
,
...
@@ -439,7 +421,7 @@ This file is generated by `grunt build`, do not edit it by hand.
...
@@ -439,7 +421,7 @@ This file is generated by `grunt build`, do not edit it by hand.
.chosen-container-multi
.chosen-choices
.search-choice
.search-choice-close
,
.chosen-container-multi
.chosen-choices
.search-choice
.search-choice-close
,
.chosen-container
.chosen-results-scroll-down
span
,
.chosen-container
.chosen-results-scroll-down
span
,
.chosen-container
.chosen-results-scroll-up
span
{
.chosen-container
.chosen-results-scroll-up
span
{
background-image
:
url('../../../../../../../Downloads/chosen_v1.6.2/
chosen-sprite@2x.png')
!important
;
background-image
:
url('
chosen-sprite@2x.png')
!important
;
background-size
:
52px
37px
!important
;
background-size
:
52px
37px
!important
;
background-repeat
:
no-repeat
!important
;
background-repeat
:
no-repeat
!important
;
}
}
...
...
apps/static/css/style.css
View file @
27998792
...
@@ -981,6 +981,22 @@ button.dim:active:before {
...
@@ -981,6 +981,22 @@ button.dim:active:before {
padding
:
3px
20px
3px
5px
;
padding
:
3px
20px
3px
5px
;
position
:
relative
;
position
:
relative
;
}
}
.chosen-container
.chosen-results
li
.highlighted
{
background-color
:
#1ab394
;
background-image
:
-webkit-gradient
(
linear
,
50%
0%
,
50%
100%
,
color-stop
(
20%
,
#1ab394
),
color-stop
(
90%
,
#1ab394
));
/*background-image: -webkit-linear-gradient(#1ab394 20%, #2a62bc 100%);*/
/*background-image: -moz-linear-gradient(#1ab394 20%, #2a62bc 100%);*/
/*background-image: -o-linear-gradient(#1ab394 20%, #2a62bc 100%);*/
/*background-image: linear-gradient(#1ab394 20%, #2a62bc 100%);*/
color
:
#fff
;
}
.chosen-container-active
.chosen-choices
{
border
:
1px
solid
#1ab394
;
box-shadow
:
0
0
5px
rgba
(
0
,
0
,
0
,
0.3
);
}
/* PAGINATIN */
/* PAGINATIN */
.pagination
>
.active
>
a
,
.pagination
>
.active
>
a
,
.pagination
>
.active
>
span
,
.pagination
>
.active
>
span
,
...
...
apps/templates/_head_css_js.html
View file @
27998792
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
<link
href=
"{% static "
css
/
font-awesome
.
css
"
%}"
rel=
"stylesheet"
>
<link
href=
"{% static "
css
/
font-awesome
.
css
"
%}"
rel=
"stylesheet"
>
{#
<link
href=
"{% static "
css
/
plugins
/
iCheck
/
custom
.
css
"
%}"
rel=
"stylesheet"
>
#}
{#
<link
href=
"{% static "
css
/
plugins
/
iCheck
/
custom
.
css
"
%}"
rel=
"stylesheet"
>
#}
{#
<link
href=
"{% static "
css
/
animate
.
css
"
%}"
rel=
"stylesheet"
>
#}
{#
<link
href=
"{% static "
css
/
animate
.
css
"
%}"
rel=
"stylesheet"
>
#}
<link
href=
"{% static "
css
/
style
.
css
"
%}"
rel=
"stylesheet"
>
{#
<link
href=
"{% static "
css
/
colorbox
.
css
"
%}"
rel=
"stylesheet"
>
#}
{#
<link
href=
"{% static "
css
/
colorbox
.
css
"
%}"
rel=
"stylesheet"
>
#}
<link
href=
"{% static "
css
/
plugins
/
vaildator
/
jquery
.
validator
.
css
"
%}"
rel=
"stylesheet"
>
<link
href=
"{% static "
css
/
plugins
/
vaildator
/
jquery
.
validator
.
css
"
%}"
rel=
"stylesheet"
>
{#
<link
href=
"{% static "
css
/
magnific
/
magnific-popup
.
css
"
%}"
rel=
"stylesheet"
>
#}
{#
<link
href=
"{% static "
css
/
magnific
/
magnific-popup
.
css
"
%}"
rel=
"stylesheet"
>
#}
...
@@ -15,7 +15,6 @@
...
@@ -15,7 +15,6 @@
<!-- scripts -->
<!-- scripts -->
<script
src=
"{% static "
js
/
jquery-2
.
1
.
1
.
js
"
%}"
></script>
<script
src=
"{% static "
js
/
jquery-2
.
1
.
1
.
js
"
%}"
></script>
<script
src=
"{% static "
js
/
bootstrap
.
min
.
js
"
%}"
></script>
<script
src=
"{% static "
js
/
bootstrap
.
min
.
js
"
%}"
></script>
<script
src=
"{% static "
js
/
base
.
js
"
%}"
></script>
<!-- validator js -->
<!-- validator js -->
{#
<script
src=
"{% static "
js
/
validator
/
jquery
.
validator
.
js
"
%}"
></script>
#}
{#
<script
src=
"{% static "
js
/
validator
/
jquery
.
validator
.
js
"
%}"
></script>
#}
...
...
apps/templates/base.html
View file @
27998792
...
@@ -11,6 +11,8 @@
...
@@ -11,6 +11,8 @@
<link
rel=
"shortcut icon"
href=
{%
static
"
img
/
facio
.
ico
"
%}
type=
"image/x-icon"
>
<link
rel=
"shortcut icon"
href=
{%
static
"
img
/
facio
.
ico
"
%}
type=
"image/x-icon"
>
{% include '_head_css_js.html' %}
{% include '_head_css_js.html' %}
{% block custom_head_css_js %} {% endblock %}
{% block custom_head_css_js %} {% endblock %}
<link
href=
"{% static "
css
/
style
.
css
"
%}"
rel=
"stylesheet"
>
<script
src=
"{% static "
js
/
base
.
js
"
%}"
></script>
</head>
</head>
<body>
<body>
...
@@ -25,5 +27,5 @@
...
@@ -25,5 +27,5 @@
</body>
</body>
{% include '_foot_js.html' %}
{% include '_foot_js.html' %}
{% block custom_foot
er
_js %} {% endblock %}
{% block custom_foot_js %} {% endblock %}
</html>
</html>
\ No newline at end of file
apps/users/migrations/0008_auto_20160817_2303.py
0 → 100644
View file @
27998792
# -*- coding: utf-8 -*-
# Generated by Django 1.10 on 2016-08-17 15:03
from
__future__
import
unicode_literals
from
django.db
import
migrations
,
models
class
Migration
(
migrations
.
Migration
):
dependencies
=
[
(
'users'
,
'0007_auto_20160817_0032'
),
]
operations
=
[
migrations
.
AlterField
(
model_name
=
'user'
,
name
=
'avatar'
,
field
=
models
.
ImageField
(
upload_to
=
'avatar'
,
verbose_name
=
'
\u5934\u50cf
'
),
),
]
apps/users/models.py
View file @
27998792
...
@@ -60,7 +60,7 @@ class User(AbstractUser):
...
@@ -60,7 +60,7 @@ class User(AbstractUser):
username
=
models
.
CharField
(
max_length
=
20
,
unique
=
True
,
verbose_name
=
'用户名'
,
help_text
=
'* required'
)
username
=
models
.
CharField
(
max_length
=
20
,
unique
=
True
,
verbose_name
=
'用户名'
,
help_text
=
'* required'
)
name
=
models
.
CharField
(
max_length
=
20
,
verbose_name
=
'姓名'
,
help_text
=
'* required'
)
name
=
models
.
CharField
(
max_length
=
20
,
verbose_name
=
'姓名'
,
help_text
=
'* required'
)
email
=
models
.
EmailField
(
max_length
=
30
,
unique
=
True
,
verbose_name
=
'邮件'
,
help_text
=
'* required'
)
email
=
models
.
EmailField
(
max_length
=
30
,
unique
=
True
,
verbose_name
=
'邮件'
,
help_text
=
'* required'
)
groups
=
models
.
ManyToManyField
(
UserGroup
,
verbose_name
=
'用户组'
)
groups
=
models
.
ManyToManyField
(
UserGroup
,
verbose_name
=
'用户组'
,
help_text
=
'* required'
)
avatar
=
models
.
ImageField
(
upload_to
=
"avatar"
,
verbose_name
=
'头像'
)
avatar
=
models
.
ImageField
(
upload_to
=
"avatar"
,
verbose_name
=
'头像'
)
wechat
=
models
.
CharField
(
max_length
=
30
,
blank
=
True
,
verbose_name
=
'微信'
)
wechat
=
models
.
CharField
(
max_length
=
30
,
blank
=
True
,
verbose_name
=
'微信'
)
phone
=
models
.
CharField
(
max_length
=
20
,
blank
=
True
,
verbose_name
=
'手机号'
)
phone
=
models
.
CharField
(
max_length
=
20
,
blank
=
True
,
verbose_name
=
'手机号'
)
...
...
apps/users/templates/users/_user.html
View file @
27998792
...
@@ -49,7 +49,6 @@
...
@@ -49,7 +49,6 @@
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
<h3>
信息
</h3>
<h3>
信息
</h3>
{{ form.avatar|bootstrap_horizontal }}
{{ form.phone|bootstrap_horizontal }}
{{ form.phone|bootstrap_horizontal }}
{{ form.wechat|bootstrap_horizontal }}
{{ form.wechat|bootstrap_horizontal }}
{{ form.comment|bootstrap_horizontal }}
{{ form.comment|bootstrap_horizontal }}
...
@@ -67,7 +66,7 @@
...
@@ -67,7 +66,7 @@
</div>
</div>
</div>
</div>
{% endblock %}
{% endblock %}
{% block custom_foot
er
_js %}
{% block custom_foot_js %}
<script
type=
"text/javascript"
>
<script
type=
"text/javascript"
>
{
#
$
(
document
).
ready
(
function
()
{
#
}
{
#
$
(
document
).
ready
(
function
()
{
#
}
{
#
var
config
=
{
#
}
{
#
var
config
=
{
#
}
...
...
apps/users/templates/users/user_detail.html
View file @
27998792
...
@@ -3,6 +3,10 @@
...
@@ -3,6 +3,10 @@
{% load users_tags %}
{% load users_tags %}
{% load static %}
{% load static %}
{% block custom_head_css_js %}
<link
href=
"{% static "
css
/
plugins
/
chosen
/
chosen
.
css
"
%}"
rel=
"stylesheet"
>
<script
src=
"{% static "
js
/
plugins
/
chosen
/
chosen
.
jquery
.
min
.
js
"
%}"
></script>
{% endblock %}
{% block content %}
{% block content %}
<div
class=
"wrapper wrapper-content animated fadeInRight"
>
<div
class=
"wrapper wrapper-content animated fadeInRight"
>
<div
class=
"row"
>
<div
class=
"row"
>
...
@@ -177,28 +181,38 @@
...
@@ -177,28 +181,38 @@
</div>
</div>
<div
class=
"ibox float-e-margins"
>
<div
class=
"ibox float-e-margins"
>
<div
class=
"ibox-title bg-primary"
style=
"background: #
23c6c8
"
>
<div
class=
"ibox-title bg-primary"
style=
"background: #
1ab394
"
>
<span
style=
"color: white"
>
用户组
</span>
<span
style=
"color: white"
>
用户组
</span>
<div
class=
"ibox-tools"
>
<div
class=
"ibox-tools"
>
</div>
</div>
</div>
</div>
<div
class=
"ibox-content
info
-panel"
>
<div
class=
"ibox-content
primary
-panel"
>
<table
class=
"table"
>
<table
class=
"table"
>
<tbody>
<tbody>
<tr>
<form>
<td>
<tr>
<td
colspan=
"2"
class=
"no-borders"
>
<select
data-placeholder=
"选择用户组"
class=
"chosen-select"
style=
"width: 100%"
multiple=
""
tabindex=
"4"
>
{% for group in groups %}
<option
value=
"{{ group.id }}"
>
{{ group.name }}
</option>
{% endfor %}
</select>
</td>
</td>
</tr>
</tr>
<tr>
<tr>
<td
width=
"20%"
>
姓名:
</td>
<td
colspan=
"2"
class=
"no-borders"
>
<td>
{{ user.name }}
</td>
<button
type=
"button"
class=
"btn btn-primary btn-small"
>
添加到用户组
</button>
</td>
</tr>
</tr>
</form>
{% for group in user.groups.all %}
<tr>
<tr>
<td
>
描述:
</td>
<td
width=
"40%"
><b>
{{ group.name }}
</b>
</td>
<td>
{{ user.comment }}
</td>
<td></td>
</tr>
</tr>
{% endfor %}
</tbody>
</tbody>
</table>
</table>
</div>
</div>
...
@@ -212,9 +226,19 @@
...
@@ -212,9 +226,19 @@
</div>
</div>
{% endblock %}
{% endblock %}
{% block custom_foot
er
_js %}
{% block custom_foot_js %}
<script>
<script>
$
(
document
).
ready
(
function
()
{
$
(
document
).
ready
(
function
()
{
var
config
=
{
'.chosen-select'
:
{},
'.chosen-select-deselect'
:
{
allow_single_deselect
:
true
},
'.chosen-select-no-single'
:
{
disable_search_threshold
:
10
},
'.chosen-select-no-results'
:
{
no_results_text
:
'Oops, nothing found!'
},
'.chosen-select-width'
:
{
width
:
"95%"
}
};
for
(
var
selector
in
config
)
{
$
(
selector
).
chosen
(
config
[
selector
]);
}
})
})
</script>
</script>
{% endblock %}
{% endblock %}
\ No newline at end of file
apps/users/templatetags/users_tags.py
View file @
27998792
# ~*~ coding: utf-8 ~*~
# ~*~ coding: utf-8 ~*~
import
os
import
urllib
import
urllib
import
hashlib
import
hashlib
from
django
import
template
from
django
import
template
from
django.utils
import
timezone
from
django.utils
import
timezone
from
django.conf
import
settings
from
django.conf
import
settings
from
django.conf.urls.static
import
static
register
=
template
.
Library
()
register
=
template
.
Library
()
...
@@ -26,13 +26,16 @@ def is_expired(datetime):
...
@@ -26,13 +26,16 @@ def is_expired(datetime):
@register.filter
@register.filter
def
user_avatar_url
(
user
,
size
=
64
):
def
user_avatar_url
(
user
):
if
user
.
avatar
:
if
user
.
avatar
:
return
user
.
avatar
.
url
return
user
.
avatar
.
url
gravatar_url
=
"https://www.gravatar.com/avatar/"
\
else
:
+
hashlib
.
md5
(
user
.
email
.
lower
())
.
hexdigest
()
+
"?"
default_dir
=
os
.
path
.
join
(
settings
.
MEDIA_ROOT
,
'avatar'
,
'default'
)
gravatar_url
+=
urllib
.
urlencode
({
'd'
:
'identicon'
,
's'
:
str
(
size
)})
if
os
.
path
.
isdir
(
default_dir
):
return
gravatar_url
default_avatar_list
=
os
.
listdir
(
default_dir
)
default_avatar
=
default_avatar_list
[
len
(
user
.
username
)
%
len
(
default_avatar_list
)]
return
os
.
path
.
join
(
settings
.
MEDIA_URL
,
'avatar'
,
'default'
,
default_avatar
)
return
'https://www.gravatar.com/avatar/c6812ab450230979465d7bf288eadce2a?s=120&d=identicon'
apps/users/views.py
View file @
27998792
...
@@ -87,5 +87,6 @@ class UserDetailView(DetailView):
...
@@ -87,5 +87,6 @@ class UserDetailView(DetailView):
def
get_context_data
(
self
,
**
kwargs
):
def
get_context_data
(
self
,
**
kwargs
):
context
=
super
(
UserDetailView
,
self
)
.
get_context_data
(
**
kwargs
)
context
=
super
(
UserDetailView
,
self
)
.
get_context_data
(
**
kwargs
)
context
.
update
({
'path1'
:
'用户管理'
,
'path2'
:
'用户详情'
,
'title'
:
'用户详情'
})
groups
=
[
group
for
group
in
UserGroup
.
objects
.
iterator
()
if
group
not
in
self
.
object
.
groups
.
iterator
()]
context
.
update
({
'path1'
:
'用户管理'
,
'path2'
:
'用户详情'
,
'title'
:
'用户详情'
,
'groups'
:
groups
})
return
context
return
context
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment