正在显示
46 个修改的文件
包含
4610 行增加
和
0 行删除
.gitignore
0 → 100644
.idea/.gitignore
0 → 100644
.idea/deployment.xml
0 → 100644
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<project version="4"> | ||
3 | + <component name="PublishConfigData"> | ||
4 | + <serverData> | ||
5 | + <paths name="10.1.10.113"> | ||
6 | + <serverdata> | ||
7 | + <mappings> | ||
8 | + <mapping local="$PROJECT_DIR$" web="/" /> | ||
9 | + </mappings> | ||
10 | + </serverdata> | ||
11 | + </paths> | ||
12 | + <paths name="192.168.26.59"> | ||
13 | + <serverdata> | ||
14 | + <mappings> | ||
15 | + <mapping local="$PROJECT_DIR$" web="/" /> | ||
16 | + </mappings> | ||
17 | + </serverdata> | ||
18 | + </paths> | ||
19 | + </serverData> | ||
20 | + </component> | ||
21 | +</project> |
.idea/dictionaries/a2.xml
0 → 100644
.idea/end.iml
0 → 100644
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<module type="PYTHON_MODULE" version="4"> | ||
3 | + <component name="FacetManager"> | ||
4 | + <facet type="django" name="Django"> | ||
5 | + <configuration> | ||
6 | + <option name="rootFolder" value="$MODULE_DIR$/wxProject" /> | ||
7 | + <option name="settingsModule" value="wxProject/settings.py" /> | ||
8 | + <option name="manageScript" value="manage.py" /> | ||
9 | + <option name="environment" value="<map/>" /> | ||
10 | + <option name="doNotUseTestRunner" value="false" /> | ||
11 | + <option name="trackFilePattern" value="" /> | ||
12 | + </configuration> | ||
13 | + </facet> | ||
14 | + </component> | ||
15 | + <component name="NewModuleRootManager"> | ||
16 | + <content url="file://$MODULE_DIR$" /> | ||
17 | + <orderEntry type="jdk" jdkName="Python 3.8 (end)" jdkType="Python SDK" /> | ||
18 | + <orderEntry type="sourceFolder" forTests="false" /> | ||
19 | + <orderEntry type="library" name="Django Lib" level="project" /> | ||
20 | + </component> | ||
21 | + <component name="TemplatesService"> | ||
22 | + <option name="TEMPLATE_CONFIGURATION" value="Django" /> | ||
23 | + <option name="TEMPLATE_FOLDERS"> | ||
24 | + <list> | ||
25 | + <option value="$MODULE_DIR$/venv/Lib/site-packages/django/forms/templates" /> | ||
26 | + </list> | ||
27 | + </option> | ||
28 | + </component> | ||
29 | +</module> |
.idea/libraries/Django_Lib.xml
0 → 100644
.idea/misc.xml
0 → 100644
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<project version="4"> | ||
3 | + <component name="JavaScriptSettings"> | ||
4 | + <option name="languageLevel" value="ES6" /> | ||
5 | + </component> | ||
6 | + <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.8 (end)" project-jdk-type="Python SDK" /> | ||
7 | +</project> |
.idea/modules.xml
0 → 100644
.idea/vcs.xml
0 → 100644
.idea/wxProject.iml
0 → 100644
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<module type="PYTHON_MODULE" version="4"> | ||
3 | + <component name="FacetManager"> | ||
4 | + <facet type="django" name="Django"> | ||
5 | + <configuration> | ||
6 | + <option name="rootFolder" value="$MODULE_DIR$" /> | ||
7 | + <option name="settingsModule" value="wxProject/settings.py" /> | ||
8 | + <option name="manageScript" value="$MODULE_DIR$/manage.py" /> | ||
9 | + <option name="environment" value="<map/>" /> | ||
10 | + <option name="doNotUseTestRunner" value="false" /> | ||
11 | + <option name="trackFilePattern" value="migrations" /> | ||
12 | + </configuration> | ||
13 | + </facet> | ||
14 | + </component> | ||
15 | + <component name="NewModuleRootManager"> | ||
16 | + <content url="file://$MODULE_DIR$" /> | ||
17 | + <orderEntry type="inheritedJdk" /> | ||
18 | + <orderEntry type="sourceFolder" forTests="false" /> | ||
19 | + <orderEntry type="library" name="Django Lib" level="project" /> | ||
20 | + </component> | ||
21 | + <component name="PyDocumentationSettings"> | ||
22 | + <option name="format" value="PLAIN" /> | ||
23 | + <option name="myDocStringFormat" value="Plain" /> | ||
24 | + </component> | ||
25 | + <component name="TemplatesService"> | ||
26 | + <option name="TEMPLATE_CONFIGURATION" value="Django" /> | ||
27 | + <option name="TEMPLATE_FOLDERS"> | ||
28 | + <list> | ||
29 | + <option value="$MODULE_DIR$/venv/Lib/site-packages/django/forms/templates" /> | ||
30 | + </list> | ||
31 | + </option> | ||
32 | + </component> | ||
33 | +</module> |
libs/qywx/AbstractApi.py
0 → 100644
1 | +#!/usr/bin/env python | ||
2 | +# -*- coding:utf-8 -*- | ||
3 | +## | ||
4 | +# Copyright (C) 2018 All rights reserved. | ||
5 | +# | ||
6 | +# @File AbstractApi.py | ||
7 | +# @Brief | ||
8 | +# @Author abelzhu, abelzhu@tencent.com | ||
9 | +# @Version 1.0 | ||
10 | +# @Date 2018-02-24 | ||
11 | +# | ||
12 | +# | ||
13 | + | ||
14 | +import sys | ||
15 | +import os | ||
16 | +import re | ||
17 | + | ||
18 | +import json | ||
19 | +import requests | ||
20 | + | ||
21 | + | ||
22 | +from .conf import DEBUG | ||
23 | + | ||
24 | + | ||
25 | +class ApiException(Exception): | ||
26 | + def __init__(self, errCode, errMsg): | ||
27 | + self.errCode = errCode | ||
28 | + self.errMsg = errMsg | ||
29 | + | ||
30 | + | ||
31 | +class AbstractApi(object): | ||
32 | + def __init__(self): | ||
33 | + return | ||
34 | + | ||
35 | + def getAccessToken(self): | ||
36 | + raise NotImplementedError | ||
37 | + | ||
38 | + def refreshAccessToken(self): | ||
39 | + raise NotImplementedError | ||
40 | + | ||
41 | + def getSuiteAccessToken(self): | ||
42 | + raise NotImplementedError | ||
43 | + | ||
44 | + def refreshSuiteAccessToken(self): | ||
45 | + raise NotImplementedError | ||
46 | + | ||
47 | + def getProviderAccessToken(self): | ||
48 | + raise NotImplementedError | ||
49 | + | ||
50 | + def refreshProviderAccessToken(self): | ||
51 | + raise NotImplementedError | ||
52 | + | ||
53 | + def httpCall(self, urlType, args=None): | ||
54 | + shortUrl = urlType[0] | ||
55 | + method = urlType[1] | ||
56 | + response = {} | ||
57 | + for retryCnt in range(0, 3): | ||
58 | + if 'POST' == method: | ||
59 | + url = self.__makeUrl(shortUrl) | ||
60 | + response = self.__httpPost(url, args) | ||
61 | + elif 'GET' == method: | ||
62 | + url = self.__makeUrl(shortUrl) | ||
63 | + url = self.__appendArgs(url, args) | ||
64 | + response = self.__httpGet(url) | ||
65 | + else: | ||
66 | + raise ApiException(-1, "unknown method type") | ||
67 | + | ||
68 | + # check if token expired | ||
69 | + if self.__tokenExpired(response.get('errcode')): | ||
70 | + self.__refreshToken(shortUrl) | ||
71 | + retryCnt += 1 | ||
72 | + continue | ||
73 | + else: | ||
74 | + break | ||
75 | + | ||
76 | + return self.__checkResponse(response) | ||
77 | + | ||
78 | + @staticmethod | ||
79 | + def __appendArgs(url, args): | ||
80 | + if args is None: | ||
81 | + return url | ||
82 | + | ||
83 | + for key, value in args.items(): | ||
84 | + if '?' in url: | ||
85 | + url += ('&' + key + '=' + value) | ||
86 | + else: | ||
87 | + url += ('?' + key + '=' + value) | ||
88 | + return url | ||
89 | + | ||
90 | + @staticmethod | ||
91 | + def __makeUrl(shortUrl): | ||
92 | + base = "https://qyapi.weixin.qq.com" | ||
93 | + if shortUrl[0] == '/': | ||
94 | + return base + shortUrl | ||
95 | + else: | ||
96 | + return base + '/' + shortUrl | ||
97 | + | ||
98 | + def __appendToken(self, url): | ||
99 | + if 'SUITE_ACCESS_TOKEN' in url: | ||
100 | + return url.replace('SUITE_ACCESS_TOKEN', self.getSuiteAccessToken()) | ||
101 | + elif 'PROVIDER_ACCESS_TOKEN' in url: | ||
102 | + return url.replace('PROVIDER_ACCESS_TOKEN', self.getProviderAccessToken()) | ||
103 | + elif 'ACCESS_TOKEN' in url: | ||
104 | + return url.replace('ACCESS_TOKEN', self.getAccessToken()) | ||
105 | + else: | ||
106 | + return url | ||
107 | + | ||
108 | + def __httpPost(self, url, args): | ||
109 | + realUrl = self.__appendToken(url) | ||
110 | + | ||
111 | + if DEBUG is True: | ||
112 | + print(realUrl, args) | ||
113 | + | ||
114 | + return requests.post(realUrl, data=json.dumps(args, ensure_ascii=False).encode('utf-8'), verify=False).json() | ||
115 | + | ||
116 | + def __httpGet(self, url): | ||
117 | + realUrl = self.__appendToken(url) | ||
118 | + | ||
119 | + if DEBUG is True: | ||
120 | + print(realUrl) | ||
121 | + | ||
122 | + return requests.get(realUrl, verify=False).json() | ||
123 | + | ||
124 | + def __post_file(self, url, media_file): | ||
125 | + return requests.post(url, file=media_file).json() | ||
126 | + | ||
127 | + @staticmethod | ||
128 | + def __checkResponse(response): | ||
129 | + errCode = response.get('errcode') | ||
130 | + errMsg = response.get('errmsg') | ||
131 | + | ||
132 | + if errCode is 0: | ||
133 | + return response | ||
134 | + else: | ||
135 | + raise ApiException(errCode, errMsg) | ||
136 | + | ||
137 | + @staticmethod | ||
138 | + def __tokenExpired(errCode): | ||
139 | + if errCode == 40014 or errCode == 42001 or errCode == 42007 or errCode == 42009: | ||
140 | + return True | ||
141 | + else: | ||
142 | + return False | ||
143 | + | ||
144 | + def __refreshToken(self, url): | ||
145 | + if 'SUITE_ACCESS_TOKEN' in url: | ||
146 | + self.refreshSuiteAccessToken() | ||
147 | + elif 'PROVIDER_ACCESS_TOKEN' in url: | ||
148 | + self.refreshProviderAccessToken() | ||
149 | + elif 'ACCESS_TOKEN' in url: | ||
150 | + self.refreshAccessToken() |
libs/qywx/CorpApi.py
0 → 100644
1 | +#!/usr/bin/env python | ||
2 | +# -*- coding:utf-8 -*- | ||
3 | +## | ||
4 | +# Copyright (C) 2018 All rights reserved. | ||
5 | +# | ||
6 | +# @File CorpApi.py | ||
7 | +# @Brief | ||
8 | +# @Author abelzhu, abelzhu@tencent.com | ||
9 | +# @Version 1.0 | ||
10 | +# @Date 2018-02-24 | ||
11 | +# | ||
12 | +# | ||
13 | +from abc import ABC | ||
14 | + | ||
15 | +from .AbstractApi import * | ||
16 | + | ||
17 | +CORP_API_TYPE = { | ||
18 | + 'GET_ACCESS_TOKEN': ['/cgi-bin/gettoken', 'GET'], | ||
19 | + 'USER_CREATE': ['/cgi-bin/user/create?access_token=ACCESS_TOKEN', 'POST'], | ||
20 | + 'USER_GET': ['/cgi-bin/user/get?access_token=ACCESS_TOKEN', 'GET'], | ||
21 | + 'USER_UPDATE': ['/cgi-bin/user/update?access_token=ACCESS_TOKEN', 'POST'], | ||
22 | + 'USER_DELETE': ['/cgi-bin/user/delete?access_token=ACCESS_TOKEN', 'GET'], | ||
23 | + 'USER_BATCH_DELETE': ['/cgi-bin/user/batchdelete?access_token=ACCESS_TOKEN', 'POST'], | ||
24 | + 'USER_SIMPLE_LIST ': ['/cgi-bin/user/simplelist?access_token=ACCESS_TOKEN', 'GET'], | ||
25 | + 'USER_LIST': ['/cgi-bin/user/list?access_token=ACCESS_TOKEN', 'GET'], | ||
26 | + 'USERID_TO_OPENID': ['/cgi-bin/user/convert_to_openid?access_token=ACCESS_TOKEN', 'POST'], | ||
27 | + 'OPENID_TO_USERID': ['/cgi-bin/user/convert_to_userid?access_token=ACCESS_TOKEN', 'POST'], | ||
28 | + 'USER_AUTH_SUCCESS': ['/cgi-bin/user/authsucc?access_token=ACCESS_TOKEN', 'GET'], | ||
29 | + | ||
30 | + 'DEPARTMENT_CREATE': ['/cgi-bin/department/create?access_token=ACCESS_TOKEN', 'POST'], | ||
31 | + 'DEPARTMENT_UPDATE': ['/cgi-bin/department/update?access_token=ACCESS_TOKEN', 'POST'], | ||
32 | + 'DEPARTMENT_DELETE': ['/cgi-bin/department/delete?access_token=ACCESS_TOKEN', 'GET'], | ||
33 | + 'DEPARTMENT_LIST': ['/cgi-bin/department/list?access_token=ACCESS_TOKEN', 'GET'], | ||
34 | + | ||
35 | + 'TAG_CREATE': ['/cgi-bin/tag/create?access_token=ACCESS_TOKEN', 'POST'], | ||
36 | + 'TAG_UPDATE': ['/cgi-bin/tag/update?access_token=ACCESS_TOKEN', 'POST'], | ||
37 | + 'TAG_DELETE': ['/cgi-bin/tag/delete?access_token=ACCESS_TOKEN', 'GET'], | ||
38 | + 'TAG_GET_USER': ['/cgi-bin/tag/get?access_token=ACCESS_TOKEN', 'GET'], | ||
39 | + 'TAG_ADD_USER': ['/cgi-bin/tag/addtagusers?access_token=ACCESS_TOKEN', 'POST'], | ||
40 | + 'TAG_DELETE_USER': ['/cgi-bin/tag/deltagusers?access_token=ACCESS_TOKEN', 'POST'], | ||
41 | + 'TAG_GET_LIST': ['/cgi-bin/tag/list?access_token=ACCESS_TOKEN', 'GET'], | ||
42 | + | ||
43 | + 'BATCH_JOB_GET_RESULT': ['/cgi-bin/batch/getresult?access_token=ACCESS_TOKEN', 'GET'], | ||
44 | + | ||
45 | + 'BATCH_INVITE': ['/cgi-bin/batch/invite?access_token=ACCESS_TOKEN', 'POST'], | ||
46 | + | ||
47 | + 'AGENT_GET': ['/cgi-bin/agent/get?access_token=ACCESS_TOKEN', 'GET'], | ||
48 | + 'AGENT_SET': ['/cgi-bin/agent/set?access_token=ACCESS_TOKEN', 'POST'], | ||
49 | + 'AGENT_GET_LIST': ['/cgi-bin/agent/list?access_token=ACCESS_TOKEN', 'GET'], | ||
50 | + | ||
51 | + 'MENU_CREATE': ['/cgi-bin/menu/create?access_token=ACCESS_TOKEN', 'POST'], ## TODO | ||
52 | + 'MENU_GET': ['/cgi-bin/menu/get?access_token=ACCESS_TOKEN', 'GET'], | ||
53 | + 'MENU_DELETE': ['/cgi-bin/menu/delete?access_token=ACCESS_TOKEN', 'GET'], | ||
54 | + | ||
55 | + 'MESSAGE_SEND': ['/cgi-bin/message/send?access_token=ACCESS_TOKEN', 'POST'], | ||
56 | + 'MESSAGE_REVOKE': ['/cgi-bin/message/revoke?access_token=ACCESS_TOKEN', 'POST'], | ||
57 | + | ||
58 | + 'MEDIA_GET': ['/cgi-bin/media/get?access_token=ACCESS_TOKEN', 'GET'], | ||
59 | + | ||
60 | + 'GET_USER_INFO_BY_CODE': ['/cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN', 'GET'], | ||
61 | + 'GET_USER_DETAIL': ['/cgi-bin/user/getuserdetail?access_token=ACCESS_TOKEN', 'POST'], | ||
62 | + | ||
63 | + 'GET_TICKET': ['/cgi-bin/ticket/get?access_token=ACCESS_TOKEN', 'GET'], | ||
64 | + 'GET_JSAPI_TICKET': ['/cgi-bin/get_jsapi_ticket?access_token=ACCESS_TOKEN', 'GET'], | ||
65 | + | ||
66 | + 'GET_CHECKIN_OPTION': ['/cgi-bin/checkin/getcheckinoption?access_token=ACCESS_TOKEN', 'POST'], | ||
67 | + 'GET_CHECKIN_DATA': ['/cgi-bin/checkin/getcheckindata?access_token=ACCESS_TOKEN', 'POST'], | ||
68 | + 'GET_APPROVAL_DATA': ['/cgi-bin/corp/getapprovaldata?access_token=ACCESS_TOKEN', 'POST'], | ||
69 | + | ||
70 | + 'GET_INVOICE_INFO': ['/cgi-bin/card/invoice/reimburse/getinvoiceinfo?access_token=ACCESS_TOKEN', 'POST'], | ||
71 | + 'UPDATE_INVOICE_STATUS': | ||
72 | + ['/cgi-bin/card/invoice/reimburse/updateinvoicestatus?access_token=ACCESS_TOKEN', 'POST'], | ||
73 | + 'BATCH_UPDATE_INVOICE_STATUS': | ||
74 | + ['/cgi-bin/card/invoice/reimburse/updatestatusbatch?access_token=ACCESS_TOKEN', 'POST'], | ||
75 | + 'BATCH_GET_INVOICE_INFO': | ||
76 | + ['/cgi-bin/card/invoice/reimburse/getinvoiceinfobatch?access_token=ACCESS_TOKEN', 'POST'], | ||
77 | + | ||
78 | + 'APP_CHAT_CREATE': ['/cgi-bin/appchat/create?access_token=ACCESS_TOKEN', 'POST'], | ||
79 | + 'APP_CHAT_GET': ['/cgi-bin/appchat/get?access_token=ACCESS_TOKEN', 'GET'], | ||
80 | + 'APP_CHAT_UPDATE': ['/cgi-bin/appchat/update?access_token=ACCESS_TOKEN', 'POST'], | ||
81 | + 'APP_CHAT_SEND': ['/cgi-bin/appchat/send?access_token=ACCESS_TOKEN', 'POST'], | ||
82 | + | ||
83 | + 'MINIPROGRAM_CODE_TO_SESSION_KEY': ['/cgi-bin/miniprogram/jscode2session?access_token=ACCESS_TOKEN', 'GET'], | ||
84 | +} | ||
85 | + | ||
86 | + | ||
87 | +class CorpApi(AbstractApi, ABC): | ||
88 | + def __init__(self, corpid, secret): | ||
89 | + super().__init__() | ||
90 | + self.corpid = corpid | ||
91 | + self.secret = secret | ||
92 | + self.access_token = None | ||
93 | + | ||
94 | + def getAccessToken(self): | ||
95 | + if self.access_token is None: | ||
96 | + self.refreshAccessToken() | ||
97 | + return self.access_token | ||
98 | + | ||
99 | + def refreshAccessToken(self): | ||
100 | + response = self.httpCall( | ||
101 | + CORP_API_TYPE['GET_ACCESS_TOKEN'], | ||
102 | + { | ||
103 | + 'corpid': self.corpid, | ||
104 | + 'corpsecret': self.secret, | ||
105 | + }) | ||
106 | + self.access_token = response.get('access_token') |
libs/qywx/ServiceCorpApi.py
0 → 100644
1 | +#!/usr/bin/env python | ||
2 | +# -*- coding:utf-8 -*- | ||
3 | +## | ||
4 | +# Copyright (C) 2018 All rights reserved. | ||
5 | +# | ||
6 | +# @File ServiceCorp.py | ||
7 | +# @Brief | ||
8 | +# @Author abelzhu, abelzhu@tencent.com | ||
9 | +# @Version 1.0 | ||
10 | +# @Date 2018-02-24 | ||
11 | +# | ||
12 | +# | ||
13 | + | ||
14 | +from .CorpApi import * | ||
15 | + | ||
16 | +SERVICE_CORP_API_TYPE = { | ||
17 | + 'GET_CORP_TOKEN': ['/cgi-bin/service/get_corp_token?suite_access_token=SUITE_ACCESS_TOKEN', 'POST'], | ||
18 | + 'GET_SUITE_TOKEN': ['/cgi-bin/service/get_suite_token', 'POST'], | ||
19 | + 'GET_PRE_AUTH_CODE': ['/cgi-bin/service/get_pre_auth_code?suite_access_token=SUITE_ACCESS_TOKEN', 'GET'], | ||
20 | + 'SET_SESSION_INFO': ['/cgi-bin/service/set_session_info?suite_access_token=SUITE_ACCESS_TOKEN', 'POST'], | ||
21 | + 'GET_PERMANENT_CODE': ['/cgi-bin/service/get_permanent_code?suite_access_token=SUITE_ACCESS_TOKEN', 'POST'], | ||
22 | + 'GET_AUTH_INFO': ['/cgi-bin/service/get_auth_info?suite_access_token=SUITE_ACCESS_TOKEN', 'POST'], | ||
23 | + 'GET_ADMIN_LIST': ['/cgi-bin/service/get_admin_list?suite_access_token=SUITE_ACCESS_TOKEN', 'POST'], | ||
24 | + 'GET_USER_INFO_BY_3RD': ['/cgi-bin/service/getuserinfo3rd?suite_access_token=SUITE_ACCESS_TOKEN', 'GET'], | ||
25 | + 'GET_USER_DETAIL_BY_3RD': ['/cgi-bin/service/getuserdetail3rd?suite_access_token=SUITE_ACCESS_TOKEN', 'POST'], | ||
26 | +} | ||
27 | + | ||
28 | + | ||
29 | +class ServiceCorpApi(CorpApi): | ||
30 | + def __init__(self, suite_id, suite_secret, suite_ticket, auth_corpid=None, permanent_code=None): | ||
31 | + self.suite_id = suite_id | ||
32 | + self.suite_secret = suite_secret | ||
33 | + self.suite_ticket = suite_ticket | ||
34 | + | ||
35 | + # 调用 CorpAPI 的function, 需要设置这两个参数 | ||
36 | + self.auth_corpid = auth_corpid | ||
37 | + self.permanent_code = permanent_code | ||
38 | + | ||
39 | + self.access_token = None | ||
40 | + self.suite_access_token = None | ||
41 | + | ||
42 | + ## override CorpApi 的 refreshAccessToken, 使用第三方服务商的方法 | ||
43 | + def getAccessToken(self): | ||
44 | + if self.access_token is None: | ||
45 | + self.refreshAccessToken() | ||
46 | + return self.access_token | ||
47 | + | ||
48 | + def refreshAccessToken(self): | ||
49 | + response = self.httpCall( | ||
50 | + SERVICE_CORP_API_TYPE['GET_CORP_TOKEN'], | ||
51 | + { | ||
52 | + "auth_corpid": self.auth_corpid, | ||
53 | + "permanent_code": self.permanent_code, | ||
54 | + }) | ||
55 | + self.access_token = response.get('access_token') | ||
56 | + | ||
57 | + ## | ||
58 | + | ||
59 | + def getSuiteAccessToken(self): | ||
60 | + if self.suite_access_token is None: | ||
61 | + self.refreshSuiteAccessToken() | ||
62 | + return self.suite_access_token | ||
63 | + | ||
64 | + def refreshSuiteAccessToken(self): | ||
65 | + response = self.httpCall( | ||
66 | + SERVICE_CORP_API_TYPE['GET_SUITE_TOKEN'], | ||
67 | + { | ||
68 | + "suite_id": self.suite_id, | ||
69 | + "suite_secret": self.suite_secret, | ||
70 | + "suite_ticket": self.suite_ticket, | ||
71 | + }) | ||
72 | + self.suite_access_token = response.get('suite_access_token') |
libs/qywx/ServiceProviderApi.py
0 → 100644
1 | +#!/usr/bin/env python | ||
2 | +# -*- coding:utf-8 -*- | ||
3 | +## | ||
4 | +# Copyright (C) 2018 All rights reserved. | ||
5 | +# | ||
6 | +# @File ServiceProviderApi.py | ||
7 | +# @Brief | ||
8 | +# @Author abelzhu, abelzhu@tencent.com | ||
9 | +# @Version 1.0 | ||
10 | +# @Date 2018-02-26 | ||
11 | +# | ||
12 | +# | ||
13 | + | ||
14 | +from .AbstractApi import * | ||
15 | + | ||
16 | +SERVICE_PROVIDER_API_TYPE = { | ||
17 | + 'GET_PROVIDER_TOKEN': ['/cgi-bin/service/get_provider_token', 'POST'], | ||
18 | + 'GET_LOGIN_INFO': ['/cgi-bin/service/get_login_info?access_token=PROVIDER_ACCESS_TOKEN', 'POST'], | ||
19 | + 'GET_REGISTER_CODE': ['/cgi-bin/service/get_register_code?provider_access_token=PROVIDER_ACCESS_TOKEN', 'POST'], | ||
20 | + 'GET_REGISTER_INFO': ['/cgi-bin/service/get_register_info?provider_access_token=PROVIDER_ACCESS_TOKEN', 'POST'], | ||
21 | + 'SET_AGENT_SCOPE': ['/cgi-bin/agent/set_scope', 'POST'], ### TODO | ||
22 | + 'SET_CONTACT_SYNC_SUCCESS': ['/cgi-bin/sync/contact_sync_success', 'GET'], | ||
23 | +} | ||
24 | + | ||
25 | + | ||
26 | +class ServiceProviderApi(AbstractApi): | ||
27 | + def __init__(self, corpid, provider_secret): | ||
28 | + self.corpid = corpid | ||
29 | + self.provider_secret = provider_secret | ||
30 | + | ||
31 | + self.provider_access_token = None | ||
32 | + | ||
33 | + def getProviderAccessToken(self): | ||
34 | + if self.provider_access_token is None: | ||
35 | + self.refreshProviderAccessToken() | ||
36 | + return self.provider_access_token | ||
37 | + | ||
38 | + def refreshProviderAccessToken(self): | ||
39 | + response = self.httpCall( | ||
40 | + SERVICE_PROVIDER_API_TYPE['GET_PROVIDER_TOKEN'], | ||
41 | + { | ||
42 | + 'corpid': self.corpid, | ||
43 | + 'provider_secret': self.provider_secret, | ||
44 | + }) | ||
45 | + self.provider_access_token = response.get('provider_access_token') |
libs/qywx/conf.py
0 → 100644
1 | +# -*- coding:utf-8 -*- | ||
2 | +# Copyright (C) 2018 All rights reserved. | ||
3 | +# | ||
4 | +# @File conf.py | ||
5 | +# @Brief | ||
6 | +# @Author abelzhu, abelzhu@tencent.com | ||
7 | +# @Version 1.0 | ||
8 | +# @Date 2018-02-23 | ||
9 | + | ||
10 | +# 设置为true会打印一些调试信息 | ||
11 | +from wxProject.wxProject.settings import DEBUG | ||
12 | + | ||
13 | +DEBUG = DEBUG | ||
14 | + | ||
15 | + | ||
16 | +# 企业微信的一些配置项 | ||
17 | +Conf = { | ||
18 | + # 企业的id,在管理端->"我的企业" 可以看到 | ||
19 | + "CORP_ID": "ww0f3efc2873ad11c3", | ||
20 | + | ||
21 | + # "通讯录同步"应用的secret, 开启api接口同步后,可以在管理端->"通讯录同步"看到 | ||
22 | + "CONTACT_SYNC_SECRET": "xWPfryWX7Fv1BcJSpivflpPQXC_v5iH0HY2zfu1soTA", | ||
23 | + | ||
24 | + # 运维组ID | ||
25 | + "OPS_DEP_ID": '346', | ||
26 | + | ||
27 | + # 某个自建应用的id及secret, 在管理端 -> 企业应用 -> 自建应用, 点进相应应用可以看到 | ||
28 | + "APP_ID": '1000078', | ||
29 | + "APP_SECRET": "7MHpdQICiegx9rIc4iZrEPunb1aYUqdJYKSW9v7a1A8", | ||
30 | + | ||
31 | + # 打卡应用的 id 及secrete, 在管理端 -> 企业应用 -> 基础应用 -> 打卡, | ||
32 | + # 点进去,有个"api"按钮,点开后,会看到 | ||
33 | + "CHECKIN_APP_ID": 0, | ||
34 | + "CHECKIN_APP_SECRET": "", | ||
35 | + | ||
36 | + # 审批应用的 id 及secrete, 在管理端 -> 企业应用 -> 基础应用 -> 审批, | ||
37 | + # 点进去,有个"api"按钮,点开后,会看到 | ||
38 | + "APPROVAL_APP_ID": 0, | ||
39 | + "APPROVAL_APP_SECRET": "", | ||
40 | +} |
manage.py
0 → 100644
1 | +#!/usr/bin/env python | ||
2 | +"""Django's command-line utility for administrative tasks.""" | ||
3 | +import os | ||
4 | +import sys | ||
5 | + | ||
6 | + | ||
7 | +def main(): | ||
8 | + """Run administrative tasks.""" | ||
9 | + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'wxProject.settings') | ||
10 | + try: | ||
11 | + from django.core.management import execute_from_command_line | ||
12 | + except ImportError as exc: | ||
13 | + raise ImportError( | ||
14 | + "Couldn't import Django. Are you sure it's installed and " | ||
15 | + "available on your PYTHONPATH environment variable? Did you " | ||
16 | + "forget to activate a virtual environment?" | ||
17 | + ) from exc | ||
18 | + execute_from_command_line(sys.argv) | ||
19 | + | ||
20 | + | ||
21 | +if __name__ == '__main__': | ||
22 | + main() |
project/.gitignore
0 → 100644
1 | +__pycache__ |
project/__init__.py
0 → 100644
project/admin.py
0 → 100644
project/apps.py
0 → 100644
project/migrations/0001_initial.py
0 → 100644
1 | +# Generated by Django 3.1.1 on 2020-09-30 07:38 | ||
2 | + | ||
3 | +from django.db import migrations, models | ||
4 | +import django.db.models.deletion | ||
5 | + | ||
6 | + | ||
7 | +class Migration(migrations.Migration): | ||
8 | + | ||
9 | + initial = True | ||
10 | + | ||
11 | + dependencies = [ | ||
12 | + ] | ||
13 | + | ||
14 | + operations = [ | ||
15 | + migrations.CreateModel( | ||
16 | + name='Auditor', | ||
17 | + fields=[ | ||
18 | + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | ||
19 | + ('leader', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='p', to='project.auditor', verbose_name='上级领导')), | ||
20 | + ], | ||
21 | + ), | ||
22 | + migrations.CreateModel( | ||
23 | + name='Program', | ||
24 | + fields=[ | ||
25 | + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | ||
26 | + ('category', models.CharField(default='', max_length=100, verbose_name='产品类目')), | ||
27 | + ('model_type', models.CharField(default='', max_length=50, verbose_name='产品型号')), | ||
28 | + ('market_share_analysis', models.TextField(default='', verbose_name='产品市场占有率分析')), | ||
29 | + ('context_analysis', models.TextField(default='', verbose_name='产品场景分析')), | ||
30 | + ('attachments', models.CharField(default='', max_length=800, verbose_name='附件地址')), | ||
31 | + ('create_time', models.DateTimeField(auto_now_add=True)), | ||
32 | + ('auditor', models.ManyToManyField(related_name='auditor', to='project.Auditor', verbose_name='审核人员')), | ||
33 | + ], | ||
34 | + options={ | ||
35 | + 'ordering': ('-create_time',), | ||
36 | + }, | ||
37 | + ), | ||
38 | + ] |
project/migrations/0002_auditor_user.py
0 → 100644
1 | +# Generated by Django 3.1.1 on 2020-09-30 07:38 | ||
2 | + | ||
3 | +from django.conf import settings | ||
4 | +from django.db import migrations, models | ||
5 | +import django.db.models.deletion | ||
6 | + | ||
7 | + | ||
8 | +class Migration(migrations.Migration): | ||
9 | + | ||
10 | + initial = True | ||
11 | + | ||
12 | + dependencies = [ | ||
13 | + ('project', '0001_initial'), | ||
14 | + migrations.swappable_dependency(settings.AUTH_USER_MODEL), | ||
15 | + ] | ||
16 | + | ||
17 | + operations = [ | ||
18 | + migrations.AddField( | ||
19 | + model_name='auditor', | ||
20 | + name='user', | ||
21 | + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='aud', to=settings.AUTH_USER_MODEL, verbose_name='审批人员'), | ||
22 | + ), | ||
23 | + ] |
1 | +# Generated by Django 3.1.1 on 2020-09-30 08:07 | ||
2 | + | ||
3 | +from django.db import migrations, models | ||
4 | + | ||
5 | + | ||
6 | +class Migration(migrations.Migration): | ||
7 | + | ||
8 | + dependencies = [ | ||
9 | + ('project', '0002_auditor_user'), | ||
10 | + ] | ||
11 | + | ||
12 | + operations = [ | ||
13 | + migrations.AlterField( | ||
14 | + model_name='program', | ||
15 | + name='auditor', | ||
16 | + field=models.ManyToManyField(related_name='project_auditor', to='project.Auditor', verbose_name='审核人员'), | ||
17 | + ), | ||
18 | + ] |
1 | +# Generated by Django 3.1.1 on 2020-09-30 08:43 | ||
2 | + | ||
3 | +from django.db import migrations, models | ||
4 | + | ||
5 | + | ||
6 | +class Migration(migrations.Migration): | ||
7 | + | ||
8 | + dependencies = [ | ||
9 | + ('project', '0003_auto_20200930_1607'), | ||
10 | + ] | ||
11 | + | ||
12 | + operations = [ | ||
13 | + migrations.AlterField( | ||
14 | + model_name='auditor', | ||
15 | + name='user', | ||
16 | + field=models.CharField(choices=[('admin', 'admin')], max_length=100, verbose_name='审批人员'), | ||
17 | + ), | ||
18 | + ] |
1 | +# Generated by Django 3.1.1 on 2020-09-30 09:21 | ||
2 | + | ||
3 | +from django.conf import settings | ||
4 | +from django.db import migrations, models | ||
5 | +import django.db.models.deletion | ||
6 | + | ||
7 | + | ||
8 | +class Migration(migrations.Migration): | ||
9 | + | ||
10 | + dependencies = [ | ||
11 | + migrations.swappable_dependency(settings.AUTH_USER_MODEL), | ||
12 | + ('project', '0004_auto_20200930_1643'), | ||
13 | + ] | ||
14 | + | ||
15 | + operations = [ | ||
16 | + migrations.AlterField( | ||
17 | + model_name='auditor', | ||
18 | + name='user', | ||
19 | + field=models.ForeignKey(choices=[{'id': 1, 'username': 'admin'}, {'id': 2, 'username': 'wanweibin'}, {'id': 3, 'username': 'wanweibin1'}], on_delete=django.db.models.deletion.CASCADE, related_name='aud', to=settings.AUTH_USER_MODEL, verbose_name='审批人员'), | ||
20 | + ), | ||
21 | + ] |
1 | +# Generated by Django 3.1.1 on 2020-09-30 09:45 | ||
2 | + | ||
3 | +from django.conf import settings | ||
4 | +from django.db import migrations, models | ||
5 | +import django.db.models.deletion | ||
6 | + | ||
7 | + | ||
8 | +class Migration(migrations.Migration): | ||
9 | + | ||
10 | + dependencies = [ | ||
11 | + migrations.swappable_dependency(settings.AUTH_USER_MODEL), | ||
12 | + ('project', '0005_auto_20200930_1721'), | ||
13 | + ] | ||
14 | + | ||
15 | + operations = [ | ||
16 | + migrations.AlterField( | ||
17 | + model_name='auditor', | ||
18 | + name='user', | ||
19 | + field=models.ForeignKey(choices=[(1, 'admin'), (2, 'wanweibin'), (3, 'wanweibin1')], on_delete=django.db.models.deletion.CASCADE, related_name='aud', to=settings.AUTH_USER_MODEL, verbose_name='审批人员'), | ||
20 | + ), | ||
21 | + migrations.RenameModel( | ||
22 | + old_name='Program', | ||
23 | + new_name='Project', | ||
24 | + ), | ||
25 | + migrations.CreateModel( | ||
26 | + name='Result', | ||
27 | + fields=[ | ||
28 | + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | ||
29 | + ('is_accept', models.CharField(choices=[('accept', '通过'), ('reject', '否决')], max_length=10, null=True, verbose_name='审核项目')), | ||
30 | + ('memo', models.CharField(blank=True, default='', max_length=300, verbose_name='审核结果陈述')), | ||
31 | + ('create_time', models.DateTimeField(auto_now_add=True)), | ||
32 | + ('auditor', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='result_auditor', to='project.auditor', verbose_name='审核人员')), | ||
33 | + ('program', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='result_project', to='project.project', verbose_name='审核项目')), | ||
34 | + ], | ||
35 | + options={ | ||
36 | + 'ordering': ('-create_time',), | ||
37 | + }, | ||
38 | + ), | ||
39 | + ] |
project/migrations/__init__.py
0 → 100644
project/models.py
0 → 100644
1 | +from django.db import models | ||
2 | +from usercenter.models import User | ||
3 | + | ||
4 | +users = User.objects.filter(is_active=True).values('username', 'id').all() | ||
5 | +AUDITOR_CHOICE = [(i['id'], i['username']) for i in users] | ||
6 | + | ||
7 | + | ||
8 | +class Auditor(models.Model): | ||
9 | + # user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="aud", verbose_name="审批人员") | ||
10 | + user = models.ForeignKey( | ||
11 | + User, | ||
12 | + on_delete=models.CASCADE, | ||
13 | + related_name="aud", | ||
14 | + choices=AUDITOR_CHOICE, | ||
15 | + verbose_name="审批人员") | ||
16 | + leader = models.ForeignKey( | ||
17 | + 'self', | ||
18 | + on_delete=models.CASCADE, | ||
19 | + related_name="p", | ||
20 | + null=True, | ||
21 | + blank=True, | ||
22 | + verbose_name="上级领导") | ||
23 | + | ||
24 | + def __str__(self): | ||
25 | + return self.user.username | ||
26 | + | ||
27 | + | ||
28 | +class Project(models.Model): | ||
29 | + category = models.CharField(max_length=100, default="", verbose_name="产品类目") | ||
30 | + model_type = models.CharField(max_length=50, default="", verbose_name="产品型号") | ||
31 | + market_share_analysis = models.TextField(default="", verbose_name="产品市场占有率分析") | ||
32 | + context_analysis = models.TextField(default="", verbose_name="产品场景分析") | ||
33 | + attachments = models.CharField(max_length=800, default="", verbose_name="附件地址") | ||
34 | + auditor = models.ManyToManyField(Auditor, related_name="project_auditor", verbose_name="审核人员") | ||
35 | + create_time = models.DateTimeField(auto_now_add=True) | ||
36 | + | ||
37 | + def __str__(self): | ||
38 | + return self.category + '-' + self.model_type | ||
39 | + | ||
40 | + class Meta: | ||
41 | + ordering = ('-create_time',) | ||
42 | + | ||
43 | + | ||
44 | +class Result(models.Model): | ||
45 | + ACCEPT_CHOICES = ( | ||
46 | + ('accept', '通过'), | ||
47 | + ('reject', '否决') | ||
48 | + ) | ||
49 | + | ||
50 | + auditor = models.ForeignKey(Auditor, on_delete=models.CASCADE, related_name="result_auditor", verbose_name="审核人员") | ||
51 | + program = models.ForeignKey(Project, on_delete=models.CASCADE, related_name="result_project", verbose_name="审核项目") | ||
52 | + is_accept = models.CharField(max_length=10, null=True, choices=ACCEPT_CHOICES, verbose_name="审核项目") | ||
53 | + memo = models.CharField(max_length=300, blank=True, default="", verbose_name="审核结果陈述") | ||
54 | + create_time = models.DateTimeField(auto_now_add=True) | ||
55 | + | ||
56 | + def __str__(self): | ||
57 | + return self.is_accept | ||
58 | + | ||
59 | + class Meta: | ||
60 | + ordering = ('-create_time', ) | ||
61 | + |
project/serializers.py
0 → 100644
1 | +# _*_ coding: utf-8 _*_ | ||
2 | +# @Time : 2020/9/30 11:02 | ||
3 | +# @Author vanwhebin | ||
4 | +from rest_framework import serializers | ||
5 | + | ||
6 | +from .models import Auditor, Project | ||
7 | +from usercenter.serializers import UserSerializer | ||
8 | + | ||
9 | + | ||
10 | +class AuditorSerializer(serializers.ModelSerializer): | ||
11 | + | ||
12 | + class Meta: | ||
13 | + model = Auditor | ||
14 | + # fields = ("user", "leader") | ||
15 | + fields = '__all__' | ||
16 | + depth = 1 | ||
17 | + | ||
18 | + | ||
19 | +class ProgramSerializer(serializers.ModelSerializer): | ||
20 | + class Meta: | ||
21 | + model = Project | ||
22 | + fields = '__all__' | ||
23 | + | ||
24 | + |
project/tests.py
0 → 100644
project/urls.py
0 → 100644
1 | +# _*_ coding: utf-8 _*_ | ||
2 | +# @Time : 2020/9/30 11:18 | ||
3 | +# @Author vanwhebin | ||
4 | + | ||
5 | +from django.urls import re_path, include | ||
6 | +from rest_framework import routers | ||
7 | + | ||
8 | +from .views import AuditorViewSet, ProgramViewSet, AuditorListView | ||
9 | + | ||
10 | +router = routers.DefaultRouter() | ||
11 | +router.register(r'auditor', AuditorViewSet, basename="auditor") | ||
12 | +router.register(r'program', ProgramViewSet, basename="program") | ||
13 | + | ||
14 | +app_name = "project" | ||
15 | + | ||
16 | +urlpatterns = [ | ||
17 | + re_path('', include(router.urls)), | ||
18 | + # re_path(r'auditor', AuditorListView.as_view()), | ||
19 | + # re_path(r'auditor/<int:pk>', AuditorListView.as_view()), | ||
20 | +] |
project/views.py
0 → 100644
1 | +# _*_ coding: utf-8 _*_ | ||
2 | +# @Time : 2020/9/30 11:02 | ||
3 | +# @Author vanwhebin | ||
4 | +from rest_framework import viewsets, generics, views | ||
5 | +from .models import Auditor, Project | ||
6 | +from .serializers import AuditorSerializer, ProgramSerializer | ||
7 | +from rest_framework.permissions import IsAuthenticated, IsAuthenticatedOrReadOnly | ||
8 | + | ||
9 | + | ||
10 | +class AuditorViewSet(viewsets.ModelViewSet): | ||
11 | + queryset = Auditor.objects.all() | ||
12 | + serializer_class = AuditorSerializer | ||
13 | + permission_classes = (IsAuthenticated,) | ||
14 | + | ||
15 | + | ||
16 | +class AuditorListView(generics.ListCreateAPIView): | ||
17 | + queryset = Auditor.objects.all() | ||
18 | + serializer_class = AuditorSerializer | ||
19 | + permission_classes = (IsAuthenticated,) | ||
20 | + | ||
21 | + def perform_create(self, serializer): | ||
22 | + serializer.save(user=self.request.user) | ||
23 | + | ||
24 | + # def create(self, request, *args, **kwargs): | ||
25 | + # pass | ||
26 | + | ||
27 | + | ||
28 | +class AuditorDetailView(generics.RetrieveDestroyAPIView): | ||
29 | + def get(self, request, *args, **kwargs): | ||
30 | + pass | ||
31 | + | ||
32 | + def destroy(self, request, *args, **kwargs): | ||
33 | + pass | ||
34 | + | ||
35 | + | ||
36 | +class ProgramViewSet(viewsets.ModelViewSet): | ||
37 | + queryset = Project.objects.all() | ||
38 | + serializer_class = ProgramSerializer | ||
39 | + permission_classes = (IsAuthenticated, ) | ||
40 | + |
requirements.txt
0 → 100644
static/admin/css/autocomplete.css
0 → 100644
1 | +select.admin-autocomplete { | ||
2 | + width: 20em; | ||
3 | +} | ||
4 | + | ||
5 | +.select2-container--admin-autocomplete.select2-container { | ||
6 | + min-height: 30px; | ||
7 | +} | ||
8 | + | ||
9 | +.select2-container--admin-autocomplete .select2-selection--single, | ||
10 | +.select2-container--admin-autocomplete .select2-selection--multiple { | ||
11 | + min-height: 30px; | ||
12 | + padding: 0; | ||
13 | +} | ||
14 | + | ||
15 | +.select2-container--admin-autocomplete.select2-container--focus .select2-selection, | ||
16 | +.select2-container--admin-autocomplete.select2-container--open .select2-selection { | ||
17 | + border-color: #999; | ||
18 | + min-height: 30px; | ||
19 | +} | ||
20 | + | ||
21 | +.select2-container--admin-autocomplete.select2-container--focus .select2-selection.select2-selection--single, | ||
22 | +.select2-container--admin-autocomplete.select2-container--open .select2-selection.select2-selection--single { | ||
23 | + padding: 0; | ||
24 | +} | ||
25 | + | ||
26 | +.select2-container--admin-autocomplete.select2-container--focus .select2-selection.select2-selection--multiple, | ||
27 | +.select2-container--admin-autocomplete.select2-container--open .select2-selection.select2-selection--multiple { | ||
28 | + padding: 0; | ||
29 | +} | ||
30 | + | ||
31 | +.select2-container--admin-autocomplete .select2-selection--single { | ||
32 | + background-color: #fff; | ||
33 | + border: 1px solid #ccc; | ||
34 | + border-radius: 4px; | ||
35 | +} | ||
36 | + | ||
37 | +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__rendered { | ||
38 | + color: #444; | ||
39 | + line-height: 30px; | ||
40 | +} | ||
41 | + | ||
42 | +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__clear { | ||
43 | + cursor: pointer; | ||
44 | + float: right; | ||
45 | + font-weight: bold; | ||
46 | +} | ||
47 | + | ||
48 | +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__placeholder { | ||
49 | + color: #999; | ||
50 | +} | ||
51 | + | ||
52 | +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow { | ||
53 | + height: 26px; | ||
54 | + position: absolute; | ||
55 | + top: 1px; | ||
56 | + right: 1px; | ||
57 | + width: 20px; | ||
58 | +} | ||
59 | + | ||
60 | +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow b { | ||
61 | + border-color: #888 transparent transparent transparent; | ||
62 | + border-style: solid; | ||
63 | + border-width: 5px 4px 0 4px; | ||
64 | + height: 0; | ||
65 | + left: 50%; | ||
66 | + margin-left: -4px; | ||
67 | + margin-top: -2px; | ||
68 | + position: absolute; | ||
69 | + top: 50%; | ||
70 | + width: 0; | ||
71 | +} | ||
72 | + | ||
73 | +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--single .select2-selection__clear { | ||
74 | + float: left; | ||
75 | +} | ||
76 | + | ||
77 | +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--single .select2-selection__arrow { | ||
78 | + left: 1px; | ||
79 | + right: auto; | ||
80 | +} | ||
81 | + | ||
82 | +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single { | ||
83 | + background-color: #eee; | ||
84 | + cursor: default; | ||
85 | +} | ||
86 | + | ||
87 | +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single .select2-selection__clear { | ||
88 | + display: none; | ||
89 | +} | ||
90 | + | ||
91 | +.select2-container--admin-autocomplete.select2-container--open .select2-selection--single .select2-selection__arrow b { | ||
92 | + border-color: transparent transparent #888 transparent; | ||
93 | + border-width: 0 4px 5px 4px; | ||
94 | +} | ||
95 | + | ||
96 | +.select2-container--admin-autocomplete .select2-selection--multiple { | ||
97 | + background-color: white; | ||
98 | + border: 1px solid #ccc; | ||
99 | + border-radius: 4px; | ||
100 | + cursor: text; | ||
101 | +} | ||
102 | + | ||
103 | +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered { | ||
104 | + box-sizing: border-box; | ||
105 | + list-style: none; | ||
106 | + margin: 0; | ||
107 | + padding: 0 5px; | ||
108 | + width: 100%; | ||
109 | +} | ||
110 | + | ||
111 | +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered li { | ||
112 | + list-style: none; | ||
113 | +} | ||
114 | + | ||
115 | +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__placeholder { | ||
116 | + color: #999; | ||
117 | + margin-top: 5px; | ||
118 | + float: left; | ||
119 | +} | ||
120 | + | ||
121 | +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__clear { | ||
122 | + cursor: pointer; | ||
123 | + float: right; | ||
124 | + font-weight: bold; | ||
125 | + margin: 5px; | ||
126 | +} | ||
127 | + | ||
128 | +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice { | ||
129 | + background-color: #e4e4e4; | ||
130 | + border: 1px solid #ccc; | ||
131 | + border-radius: 4px; | ||
132 | + cursor: default; | ||
133 | + float: left; | ||
134 | + margin-right: 5px; | ||
135 | + margin-top: 5px; | ||
136 | + padding: 0 5px; | ||
137 | +} | ||
138 | + | ||
139 | +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove { | ||
140 | + color: #999; | ||
141 | + cursor: pointer; | ||
142 | + display: inline-block; | ||
143 | + font-weight: bold; | ||
144 | + margin-right: 2px; | ||
145 | +} | ||
146 | + | ||
147 | +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove:hover { | ||
148 | + color: #333; | ||
149 | +} | ||
150 | + | ||
151 | +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-search--inline { | ||
152 | + float: right; | ||
153 | +} | ||
154 | + | ||
155 | +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice { | ||
156 | + margin-left: 5px; | ||
157 | + margin-right: auto; | ||
158 | +} | ||
159 | + | ||
160 | +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { | ||
161 | + margin-left: 2px; | ||
162 | + margin-right: auto; | ||
163 | +} | ||
164 | + | ||
165 | +.select2-container--admin-autocomplete.select2-container--focus .select2-selection--multiple { | ||
166 | + border: solid #999 1px; | ||
167 | + outline: 0; | ||
168 | +} | ||
169 | + | ||
170 | +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--multiple { | ||
171 | + background-color: #eee; | ||
172 | + cursor: default; | ||
173 | +} | ||
174 | + | ||
175 | +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection__choice__remove { | ||
176 | + display: none; | ||
177 | +} | ||
178 | + | ||
179 | +.select2-container--admin-autocomplete.select2-container--open.select2-container--above .select2-selection--single, .select2-container--admin-autocomplete.select2-container--open.select2-container--above .select2-selection--multiple { | ||
180 | + border-top-left-radius: 0; | ||
181 | + border-top-right-radius: 0; | ||
182 | +} | ||
183 | + | ||
184 | +.select2-container--admin-autocomplete.select2-container--open.select2-container--below .select2-selection--single, .select2-container--admin-autocomplete.select2-container--open.select2-container--below .select2-selection--multiple { | ||
185 | + border-bottom-left-radius: 0; | ||
186 | + border-bottom-right-radius: 0; | ||
187 | +} | ||
188 | + | ||
189 | +.select2-container--admin-autocomplete .select2-search--dropdown .select2-search__field { | ||
190 | + border: 1px solid #ccc; | ||
191 | +} | ||
192 | + | ||
193 | +.select2-container--admin-autocomplete .select2-search--inline .select2-search__field { | ||
194 | + background: transparent; | ||
195 | + border: none; | ||
196 | + outline: 0; | ||
197 | + box-shadow: none; | ||
198 | + -webkit-appearance: textfield; | ||
199 | +} | ||
200 | + | ||
201 | +.select2-container--admin-autocomplete .select2-results > .select2-results__options { | ||
202 | + max-height: 200px; | ||
203 | + overflow-y: auto; | ||
204 | +} | ||
205 | + | ||
206 | +.select2-container--admin-autocomplete .select2-results__option[role=group] { | ||
207 | + padding: 0; | ||
208 | +} | ||
209 | + | ||
210 | +.select2-container--admin-autocomplete .select2-results__option[aria-disabled=true] { | ||
211 | + color: #999; | ||
212 | +} | ||
213 | + | ||
214 | +.select2-container--admin-autocomplete .select2-results__option[aria-selected=true] { | ||
215 | + background-color: #ddd; | ||
216 | +} | ||
217 | + | ||
218 | +.select2-container--admin-autocomplete .select2-results__option .select2-results__option { | ||
219 | + padding-left: 1em; | ||
220 | +} | ||
221 | + | ||
222 | +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__group { | ||
223 | + padding-left: 0; | ||
224 | +} | ||
225 | + | ||
226 | +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option { | ||
227 | + margin-left: -1em; | ||
228 | + padding-left: 2em; | ||
229 | +} | ||
230 | + | ||
231 | +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option { | ||
232 | + margin-left: -2em; | ||
233 | + padding-left: 3em; | ||
234 | +} | ||
235 | + | ||
236 | +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { | ||
237 | + margin-left: -3em; | ||
238 | + padding-left: 4em; | ||
239 | +} | ||
240 | + | ||
241 | +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { | ||
242 | + margin-left: -4em; | ||
243 | + padding-left: 5em; | ||
244 | +} | ||
245 | + | ||
246 | +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { | ||
247 | + margin-left: -5em; | ||
248 | + padding-left: 6em; | ||
249 | +} | ||
250 | + | ||
251 | +.select2-container--admin-autocomplete .select2-results__option--highlighted[aria-selected] { | ||
252 | + background-color: #79aec8; | ||
253 | + color: white; | ||
254 | +} | ||
255 | + | ||
256 | +.select2-container--admin-autocomplete .select2-results__group { | ||
257 | + cursor: default; | ||
258 | + display: block; | ||
259 | + padding: 6px; | ||
260 | +} |
static/admin/css/base.css
0 → 100644
1 | +/* | ||
2 | + DJANGO Admin styles | ||
3 | +*/ | ||
4 | + | ||
5 | +@import url(fonts.css); | ||
6 | + | ||
7 | +html, body { | ||
8 | + height: 100%; | ||
9 | +} | ||
10 | + | ||
11 | +body { | ||
12 | + margin: 0; | ||
13 | + padding: 0; | ||
14 | + font-size: 14px; | ||
15 | + font-family: "Roboto","Lucida Grande","DejaVu Sans","Bitstream Vera Sans",Verdana,Arial,sans-serif; | ||
16 | + color: #333; | ||
17 | + background: #fff; | ||
18 | +} | ||
19 | + | ||
20 | +/* LINKS */ | ||
21 | + | ||
22 | +a:link, a:visited { | ||
23 | + color: #447e9b; | ||
24 | + text-decoration: none; | ||
25 | +} | ||
26 | + | ||
27 | +a:focus, a:hover { | ||
28 | + color: #036; | ||
29 | +} | ||
30 | + | ||
31 | +a:focus { | ||
32 | + text-decoration: underline; | ||
33 | +} | ||
34 | + | ||
35 | +a img { | ||
36 | + border: none; | ||
37 | +} | ||
38 | + | ||
39 | +a.section:link, a.section:visited { | ||
40 | + color: #fff; | ||
41 | + text-decoration: none; | ||
42 | +} | ||
43 | + | ||
44 | +a.section:focus, a.section:hover { | ||
45 | + text-decoration: underline; | ||
46 | +} | ||
47 | + | ||
48 | +/* GLOBAL DEFAULTS */ | ||
49 | + | ||
50 | +p, ol, ul, dl { | ||
51 | + margin: .2em 0 .8em 0; | ||
52 | +} | ||
53 | + | ||
54 | +p { | ||
55 | + padding: 0; | ||
56 | + line-height: 140%; | ||
57 | +} | ||
58 | + | ||
59 | +h1,h2,h3,h4,h5 { | ||
60 | + font-weight: bold; | ||
61 | +} | ||
62 | + | ||
63 | +h1 { | ||
64 | + margin: 0 0 20px; | ||
65 | + font-weight: 300; | ||
66 | + font-size: 20px; | ||
67 | + color: #666; | ||
68 | +} | ||
69 | + | ||
70 | +h2 { | ||
71 | + font-size: 16px; | ||
72 | + margin: 1em 0 .5em 0; | ||
73 | +} | ||
74 | + | ||
75 | +h2.subhead { | ||
76 | + font-weight: normal; | ||
77 | + margin-top: 0; | ||
78 | +} | ||
79 | + | ||
80 | +h3 { | ||
81 | + font-size: 14px; | ||
82 | + margin: .8em 0 .3em 0; | ||
83 | + color: #666; | ||
84 | + font-weight: bold; | ||
85 | +} | ||
86 | + | ||
87 | +h4 { | ||
88 | + font-size: 12px; | ||
89 | + margin: 1em 0 .8em 0; | ||
90 | + padding-bottom: 3px; | ||
91 | +} | ||
92 | + | ||
93 | +h5 { | ||
94 | + font-size: 10px; | ||
95 | + margin: 1.5em 0 .5em 0; | ||
96 | + color: #666; | ||
97 | + text-transform: uppercase; | ||
98 | + letter-spacing: 1px; | ||
99 | +} | ||
100 | + | ||
101 | +ul > li { | ||
102 | + list-style-type: square; | ||
103 | + padding: 1px 0; | ||
104 | +} | ||
105 | + | ||
106 | +li ul { | ||
107 | + margin-bottom: 0; | ||
108 | +} | ||
109 | + | ||
110 | +li, dt, dd { | ||
111 | + font-size: 13px; | ||
112 | + line-height: 20px; | ||
113 | +} | ||
114 | + | ||
115 | +dt { | ||
116 | + font-weight: bold; | ||
117 | + margin-top: 4px; | ||
118 | +} | ||
119 | + | ||
120 | +dd { | ||
121 | + margin-left: 0; | ||
122 | +} | ||
123 | + | ||
124 | +form { | ||
125 | + margin: 0; | ||
126 | + padding: 0; | ||
127 | +} | ||
128 | + | ||
129 | +fieldset { | ||
130 | + margin: 0; | ||
131 | + min-width: 0; | ||
132 | + padding: 0; | ||
133 | + border: none; | ||
134 | + border-top: 1px solid #eee; | ||
135 | +} | ||
136 | + | ||
137 | +blockquote { | ||
138 | + font-size: 11px; | ||
139 | + color: #777; | ||
140 | + margin-left: 2px; | ||
141 | + padding-left: 10px; | ||
142 | + border-left: 5px solid #ddd; | ||
143 | +} | ||
144 | + | ||
145 | +code, pre { | ||
146 | + font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace; | ||
147 | + color: #666; | ||
148 | + font-size: 12px; | ||
149 | + overflow-x: auto; | ||
150 | +} | ||
151 | + | ||
152 | +pre.literal-block { | ||
153 | + margin: 10px; | ||
154 | + background: #eee; | ||
155 | + padding: 6px 8px; | ||
156 | +} | ||
157 | + | ||
158 | +code strong { | ||
159 | + color: #930; | ||
160 | +} | ||
161 | + | ||
162 | +hr { | ||
163 | + clear: both; | ||
164 | + color: #eee; | ||
165 | + background-color: #eee; | ||
166 | + height: 1px; | ||
167 | + border: none; | ||
168 | + margin: 0; | ||
169 | + padding: 0; | ||
170 | + font-size: 1px; | ||
171 | + line-height: 1px; | ||
172 | +} | ||
173 | + | ||
174 | +/* TEXT STYLES & MODIFIERS */ | ||
175 | + | ||
176 | +.small { | ||
177 | + font-size: 11px; | ||
178 | +} | ||
179 | + | ||
180 | +.mini { | ||
181 | + font-size: 10px; | ||
182 | +} | ||
183 | + | ||
184 | +.help, p.help, form p.help, div.help, form div.help, div.help li { | ||
185 | + font-size: 11px; | ||
186 | + color: #999; | ||
187 | +} | ||
188 | + | ||
189 | +div.help ul { | ||
190 | + margin-bottom: 0; | ||
191 | +} | ||
192 | + | ||
193 | +.help-tooltip { | ||
194 | + cursor: help; | ||
195 | +} | ||
196 | + | ||
197 | +p img, h1 img, h2 img, h3 img, h4 img, td img { | ||
198 | + vertical-align: middle; | ||
199 | +} | ||
200 | + | ||
201 | +.quiet, a.quiet:link, a.quiet:visited { | ||
202 | + color: #999; | ||
203 | + font-weight: normal; | ||
204 | +} | ||
205 | + | ||
206 | +.clear { | ||
207 | + clear: both; | ||
208 | +} | ||
209 | + | ||
210 | +.nowrap { | ||
211 | + white-space: nowrap; | ||
212 | +} | ||
213 | + | ||
214 | +/* TABLES */ | ||
215 | + | ||
216 | +table { | ||
217 | + border-collapse: collapse; | ||
218 | + border-color: #ccc; | ||
219 | +} | ||
220 | + | ||
221 | +td, th { | ||
222 | + font-size: 13px; | ||
223 | + line-height: 16px; | ||
224 | + border-bottom: 1px solid #eee; | ||
225 | + vertical-align: top; | ||
226 | + padding: 8px; | ||
227 | + font-family: "Roboto", "Lucida Grande", Verdana, Arial, sans-serif; | ||
228 | +} | ||
229 | + | ||
230 | +th { | ||
231 | + font-weight: 600; | ||
232 | + text-align: left; | ||
233 | +} | ||
234 | + | ||
235 | +thead th, | ||
236 | +tfoot td { | ||
237 | + color: #666; | ||
238 | + padding: 5px 10px; | ||
239 | + font-size: 11px; | ||
240 | + background: #fff; | ||
241 | + border: none; | ||
242 | + border-top: 1px solid #eee; | ||
243 | + border-bottom: 1px solid #eee; | ||
244 | +} | ||
245 | + | ||
246 | +tfoot td { | ||
247 | + border-bottom: none; | ||
248 | + border-top: 1px solid #eee; | ||
249 | +} | ||
250 | + | ||
251 | +thead th.required { | ||
252 | + color: #000; | ||
253 | +} | ||
254 | + | ||
255 | +tr.alt { | ||
256 | + background: #f6f6f6; | ||
257 | +} | ||
258 | + | ||
259 | +tr:nth-child(odd), .row-form-errors { | ||
260 | + background: #fff; | ||
261 | +} | ||
262 | + | ||
263 | +tr:nth-child(even), | ||
264 | +tr:nth-child(even) .errorlist, | ||
265 | +tr:nth-child(odd) + .row-form-errors, | ||
266 | +tr:nth-child(odd) + .row-form-errors .errorlist { | ||
267 | + background: #f9f9f9; | ||
268 | +} | ||
269 | + | ||
270 | +/* SORTABLE TABLES */ | ||
271 | + | ||
272 | +thead th { | ||
273 | + padding: 5px 10px; | ||
274 | + line-height: normal; | ||
275 | + text-transform: uppercase; | ||
276 | + background: #f6f6f6; | ||
277 | +} | ||
278 | + | ||
279 | +thead th a:link, thead th a:visited { | ||
280 | + color: #666; | ||
281 | +} | ||
282 | + | ||
283 | +thead th.sorted { | ||
284 | + background: #eee; | ||
285 | +} | ||
286 | + | ||
287 | +thead th.sorted .text { | ||
288 | + padding-right: 42px; | ||
289 | +} | ||
290 | + | ||
291 | +table thead th .text span { | ||
292 | + padding: 8px 10px; | ||
293 | + display: block; | ||
294 | +} | ||
295 | + | ||
296 | +table thead th .text a { | ||
297 | + display: block; | ||
298 | + cursor: pointer; | ||
299 | + padding: 8px 10px; | ||
300 | +} | ||
301 | + | ||
302 | +table thead th .text a:focus, table thead th .text a:hover { | ||
303 | + background: #eee; | ||
304 | +} | ||
305 | + | ||
306 | +thead th.sorted a.sortremove { | ||
307 | + visibility: hidden; | ||
308 | +} | ||
309 | + | ||
310 | +table thead th.sorted:hover a.sortremove { | ||
311 | + visibility: visible; | ||
312 | +} | ||
313 | + | ||
314 | +table thead th.sorted .sortoptions { | ||
315 | + display: block; | ||
316 | + padding: 9px 5px 0 5px; | ||
317 | + float: right; | ||
318 | + text-align: right; | ||
319 | +} | ||
320 | + | ||
321 | +table thead th.sorted .sortpriority { | ||
322 | + font-size: .8em; | ||
323 | + min-width: 12px; | ||
324 | + text-align: center; | ||
325 | + vertical-align: 3px; | ||
326 | + margin-left: 2px; | ||
327 | + margin-right: 2px; | ||
328 | +} | ||
329 | + | ||
330 | +table thead th.sorted .sortoptions a { | ||
331 | + position: relative; | ||
332 | + width: 14px; | ||
333 | + height: 14px; | ||
334 | + display: inline-block; | ||
335 | + background: url(../img/sorting-icons.svg) 0 0 no-repeat; | ||
336 | + background-size: 14px auto; | ||
337 | +} | ||
338 | + | ||
339 | +table thead th.sorted .sortoptions a.sortremove { | ||
340 | + background-position: 0 0; | ||
341 | +} | ||
342 | + | ||
343 | +table thead th.sorted .sortoptions a.sortremove:after { | ||
344 | + content: '\\'; | ||
345 | + position: absolute; | ||
346 | + top: -6px; | ||
347 | + left: 3px; | ||
348 | + font-weight: 200; | ||
349 | + font-size: 18px; | ||
350 | + color: #999; | ||
351 | +} | ||
352 | + | ||
353 | +table thead th.sorted .sortoptions a.sortremove:focus:after, | ||
354 | +table thead th.sorted .sortoptions a.sortremove:hover:after { | ||
355 | + color: #447e9b; | ||
356 | +} | ||
357 | + | ||
358 | +table thead th.sorted .sortoptions a.sortremove:focus, | ||
359 | +table thead th.sorted .sortoptions a.sortremove:hover { | ||
360 | + background-position: 0 -14px; | ||
361 | +} | ||
362 | + | ||
363 | +table thead th.sorted .sortoptions a.ascending { | ||
364 | + background-position: 0 -28px; | ||
365 | +} | ||
366 | + | ||
367 | +table thead th.sorted .sortoptions a.ascending:focus, | ||
368 | +table thead th.sorted .sortoptions a.ascending:hover { | ||
369 | + background-position: 0 -42px; | ||
370 | +} | ||
371 | + | ||
372 | +table thead th.sorted .sortoptions a.descending { | ||
373 | + top: 1px; | ||
374 | + background-position: 0 -56px; | ||
375 | +} | ||
376 | + | ||
377 | +table thead th.sorted .sortoptions a.descending:focus, | ||
378 | +table thead th.sorted .sortoptions a.descending:hover { | ||
379 | + background-position: 0 -70px; | ||
380 | +} | ||
381 | + | ||
382 | +/* FORM DEFAULTS */ | ||
383 | + | ||
384 | +input, textarea, select, .form-row p, form .button { | ||
385 | + margin: 2px 0; | ||
386 | + padding: 2px 3px; | ||
387 | + vertical-align: middle; | ||
388 | + font-family: "Roboto", "Lucida Grande", Verdana, Arial, sans-serif; | ||
389 | + font-weight: normal; | ||
390 | + font-size: 13px; | ||
391 | +} | ||
392 | +.form-row div.help { | ||
393 | + padding: 2px 3px; | ||
394 | +} | ||
395 | + | ||
396 | +textarea { | ||
397 | + vertical-align: top; | ||
398 | +} | ||
399 | + | ||
400 | +input[type=text], input[type=password], input[type=email], input[type=url], | ||
401 | +input[type=number], input[type=tel], textarea, select, .vTextField { | ||
402 | + border: 1px solid #ccc; | ||
403 | + border-radius: 4px; | ||
404 | + padding: 5px 6px; | ||
405 | + margin-top: 0; | ||
406 | +} | ||
407 | + | ||
408 | +input[type=text]:focus, input[type=password]:focus, input[type=email]:focus, | ||
409 | +input[type=url]:focus, input[type=number]:focus, input[type=tel]:focus, | ||
410 | +textarea:focus, select:focus, .vTextField:focus { | ||
411 | + border-color: #999; | ||
412 | +} | ||
413 | + | ||
414 | +select { | ||
415 | + height: 30px; | ||
416 | +} | ||
417 | + | ||
418 | +select[multiple] { | ||
419 | + /* Allow HTML size attribute to override the height in the rule above. */ | ||
420 | + height: auto; | ||
421 | + min-height: 150px; | ||
422 | +} | ||
423 | + | ||
424 | +/* FORM BUTTONS */ | ||
425 | + | ||
426 | +.button, input[type=submit], input[type=button], .submit-row input, a.button { | ||
427 | + background: #79aec8; | ||
428 | + padding: 10px 15px; | ||
429 | + border: none; | ||
430 | + border-radius: 4px; | ||
431 | + color: #fff; | ||
432 | + cursor: pointer; | ||
433 | +} | ||
434 | + | ||
435 | +a.button { | ||
436 | + padding: 4px 5px; | ||
437 | +} | ||
438 | + | ||
439 | +.button:active, input[type=submit]:active, input[type=button]:active, | ||
440 | +.button:focus, input[type=submit]:focus, input[type=button]:focus, | ||
441 | +.button:hover, input[type=submit]:hover, input[type=button]:hover { | ||
442 | + background: #609ab6; | ||
443 | +} | ||
444 | + | ||
445 | +.button[disabled], input[type=submit][disabled], input[type=button][disabled] { | ||
446 | + opacity: 0.4; | ||
447 | +} | ||
448 | + | ||
449 | +.button.default, input[type=submit].default, .submit-row input.default { | ||
450 | + float: right; | ||
451 | + border: none; | ||
452 | + font-weight: 400; | ||
453 | + background: #417690; | ||
454 | +} | ||
455 | + | ||
456 | +.button.default:active, input[type=submit].default:active, | ||
457 | +.button.default:focus, input[type=submit].default:focus, | ||
458 | +.button.default:hover, input[type=submit].default:hover { | ||
459 | + background: #205067; | ||
460 | +} | ||
461 | + | ||
462 | +.button[disabled].default, | ||
463 | +input[type=submit][disabled].default, | ||
464 | +input[type=button][disabled].default { | ||
465 | + opacity: 0.4; | ||
466 | +} | ||
467 | + | ||
468 | + | ||
469 | +/* MODULES */ | ||
470 | + | ||
471 | +.module { | ||
472 | + border: none; | ||
473 | + margin-bottom: 30px; | ||
474 | + background: #fff; | ||
475 | +} | ||
476 | + | ||
477 | +.module p, .module ul, .module h3, .module h4, .module dl, .module pre { | ||
478 | + padding-left: 10px; | ||
479 | + padding-right: 10px; | ||
480 | +} | ||
481 | + | ||
482 | +.module blockquote { | ||
483 | + margin-left: 12px; | ||
484 | +} | ||
485 | + | ||
486 | +.module ul, .module ol { | ||
487 | + margin-left: 1.5em; | ||
488 | +} | ||
489 | + | ||
490 | +.module h3 { | ||
491 | + margin-top: .6em; | ||
492 | +} | ||
493 | + | ||
494 | +.module h2, .module caption, .inline-group h2 { | ||
495 | + margin: 0; | ||
496 | + padding: 8px; | ||
497 | + font-weight: 400; | ||
498 | + font-size: 13px; | ||
499 | + text-align: left; | ||
500 | + background: #79aec8; | ||
501 | + color: #fff; | ||
502 | +} | ||
503 | + | ||
504 | +.module caption, | ||
505 | +.inline-group h2 { | ||
506 | + font-size: 12px; | ||
507 | + letter-spacing: 0.5px; | ||
508 | + text-transform: uppercase; | ||
509 | +} | ||
510 | + | ||
511 | +.module table { | ||
512 | + border-collapse: collapse; | ||
513 | +} | ||
514 | + | ||
515 | +/* MESSAGES & ERRORS */ | ||
516 | + | ||
517 | +ul.messagelist { | ||
518 | + padding: 0; | ||
519 | + margin: 0; | ||
520 | +} | ||
521 | + | ||
522 | +ul.messagelist li { | ||
523 | + display: block; | ||
524 | + font-weight: 400; | ||
525 | + font-size: 13px; | ||
526 | + padding: 10px 10px 10px 65px; | ||
527 | + margin: 0 0 10px 0; | ||
528 | + background: #dfd url(../img/icon-yes.svg) 40px 12px no-repeat; | ||
529 | + background-size: 16px auto; | ||
530 | + color: #333; | ||
531 | +} | ||
532 | + | ||
533 | +ul.messagelist li.warning { | ||
534 | + background: #ffc url(../img/icon-alert.svg) 40px 14px no-repeat; | ||
535 | + background-size: 14px auto; | ||
536 | +} | ||
537 | + | ||
538 | +ul.messagelist li.error { | ||
539 | + background: #ffefef url(../img/icon-no.svg) 40px 12px no-repeat; | ||
540 | + background-size: 16px auto; | ||
541 | +} | ||
542 | + | ||
543 | +.errornote { | ||
544 | + font-size: 14px; | ||
545 | + font-weight: 700; | ||
546 | + display: block; | ||
547 | + padding: 10px 12px; | ||
548 | + margin: 0 0 10px 0; | ||
549 | + color: #ba2121; | ||
550 | + border: 1px solid #ba2121; | ||
551 | + border-radius: 4px; | ||
552 | + background-color: #fff; | ||
553 | + background-position: 5px 12px; | ||
554 | +} | ||
555 | + | ||
556 | +ul.errorlist { | ||
557 | + margin: 0 0 4px; | ||
558 | + padding: 0; | ||
559 | + color: #ba2121; | ||
560 | + background: #fff; | ||
561 | +} | ||
562 | + | ||
563 | +ul.errorlist li { | ||
564 | + font-size: 13px; | ||
565 | + display: block; | ||
566 | + margin-bottom: 4px; | ||
567 | +} | ||
568 | + | ||
569 | +ul.errorlist li:first-child { | ||
570 | + margin-top: 0; | ||
571 | +} | ||
572 | + | ||
573 | +ul.errorlist li a { | ||
574 | + color: inherit; | ||
575 | + text-decoration: underline; | ||
576 | +} | ||
577 | + | ||
578 | +td ul.errorlist { | ||
579 | + margin: 0; | ||
580 | + padding: 0; | ||
581 | +} | ||
582 | + | ||
583 | +td ul.errorlist li { | ||
584 | + margin: 0; | ||
585 | +} | ||
586 | + | ||
587 | +.form-row.errors { | ||
588 | + margin: 0; | ||
589 | + border: none; | ||
590 | + border-bottom: 1px solid #eee; | ||
591 | + background: none; | ||
592 | +} | ||
593 | + | ||
594 | +.form-row.errors ul.errorlist li { | ||
595 | + padding-left: 0; | ||
596 | +} | ||
597 | + | ||
598 | +.errors input, .errors select, .errors textarea, | ||
599 | +td ul.errorlist + input, td ul.errorlist + select, td ul.errorlist + textarea { | ||
600 | + border: 1px solid #ba2121; | ||
601 | +} | ||
602 | + | ||
603 | +.description { | ||
604 | + font-size: 12px; | ||
605 | + padding: 5px 0 0 12px; | ||
606 | +} | ||
607 | + | ||
608 | +/* BREADCRUMBS */ | ||
609 | + | ||
610 | +div.breadcrumbs { | ||
611 | + background: #79aec8; | ||
612 | + padding: 10px 40px; | ||
613 | + border: none; | ||
614 | + font-size: 14px; | ||
615 | + color: #c4dce8; | ||
616 | + text-align: left; | ||
617 | +} | ||
618 | + | ||
619 | +div.breadcrumbs a { | ||
620 | + color: #fff; | ||
621 | +} | ||
622 | + | ||
623 | +div.breadcrumbs a:focus, div.breadcrumbs a:hover { | ||
624 | + color: #c4dce8; | ||
625 | +} | ||
626 | + | ||
627 | +/* ACTION ICONS */ | ||
628 | + | ||
629 | +.viewlink, .inlineviewlink { | ||
630 | + padding-left: 16px; | ||
631 | + background: url(../img/icon-viewlink.svg) 0 1px no-repeat; | ||
632 | +} | ||
633 | + | ||
634 | +.addlink { | ||
635 | + padding-left: 16px; | ||
636 | + background: url(../img/icon-addlink.svg) 0 1px no-repeat; | ||
637 | +} | ||
638 | + | ||
639 | +.changelink, .inlinechangelink { | ||
640 | + padding-left: 16px; | ||
641 | + background: url(../img/icon-changelink.svg) 0 1px no-repeat; | ||
642 | +} | ||
643 | + | ||
644 | +.deletelink { | ||
645 | + padding-left: 16px; | ||
646 | + background: url(../img/icon-deletelink.svg) 0 1px no-repeat; | ||
647 | +} | ||
648 | + | ||
649 | +a.deletelink:link, a.deletelink:visited { | ||
650 | + color: #CC3434; | ||
651 | +} | ||
652 | + | ||
653 | +a.deletelink:focus, a.deletelink:hover { | ||
654 | + color: #993333; | ||
655 | + text-decoration: none; | ||
656 | +} | ||
657 | + | ||
658 | +/* OBJECT TOOLS */ | ||
659 | + | ||
660 | +.object-tools { | ||
661 | + font-size: 10px; | ||
662 | + font-weight: bold; | ||
663 | + padding-left: 0; | ||
664 | + float: right; | ||
665 | + position: relative; | ||
666 | + margin-top: -48px; | ||
667 | +} | ||
668 | + | ||
669 | +.form-row .object-tools { | ||
670 | + margin-top: 5px; | ||
671 | + margin-bottom: 5px; | ||
672 | + float: none; | ||
673 | + height: 2em; | ||
674 | + padding-left: 3.5em; | ||
675 | +} | ||
676 | + | ||
677 | +.object-tools li { | ||
678 | + display: block; | ||
679 | + float: left; | ||
680 | + margin-left: 5px; | ||
681 | + height: 16px; | ||
682 | +} | ||
683 | + | ||
684 | +.object-tools a { | ||
685 | + border-radius: 15px; | ||
686 | +} | ||
687 | + | ||
688 | +.object-tools a:link, .object-tools a:visited { | ||
689 | + display: block; | ||
690 | + float: left; | ||
691 | + padding: 3px 12px; | ||
692 | + background: #999; | ||
693 | + font-weight: 400; | ||
694 | + font-size: 11px; | ||
695 | + text-transform: uppercase; | ||
696 | + letter-spacing: 0.5px; | ||
697 | + color: #fff; | ||
698 | +} | ||
699 | + | ||
700 | +.object-tools a:focus, .object-tools a:hover { | ||
701 | + background-color: #417690; | ||
702 | +} | ||
703 | + | ||
704 | +.object-tools a:focus{ | ||
705 | + text-decoration: none; | ||
706 | +} | ||
707 | + | ||
708 | +.object-tools a.viewsitelink, .object-tools a.golink,.object-tools a.addlink { | ||
709 | + background-repeat: no-repeat; | ||
710 | + background-position: right 7px center; | ||
711 | + padding-right: 26px; | ||
712 | +} | ||
713 | + | ||
714 | +.object-tools a.viewsitelink, .object-tools a.golink { | ||
715 | + background-image: url(../img/tooltag-arrowright.svg); | ||
716 | +} | ||
717 | + | ||
718 | +.object-tools a.addlink { | ||
719 | + background-image: url(../img/tooltag-add.svg); | ||
720 | +} | ||
721 | + | ||
722 | +/* OBJECT HISTORY */ | ||
723 | + | ||
724 | +table#change-history { | ||
725 | + width: 100%; | ||
726 | +} | ||
727 | + | ||
728 | +table#change-history tbody th { | ||
729 | + width: 16em; | ||
730 | +} | ||
731 | + | ||
732 | +/* PAGE STRUCTURE */ | ||
733 | + | ||
734 | +#container { | ||
735 | + position: relative; | ||
736 | + width: 100%; | ||
737 | + min-width: 980px; | ||
738 | + padding: 0; | ||
739 | + display: flex; | ||
740 | + flex-direction: column; | ||
741 | + height: 100%; | ||
742 | +} | ||
743 | + | ||
744 | +#container > div { | ||
745 | + flex-shrink: 0; | ||
746 | +} | ||
747 | + | ||
748 | +#container > .main { | ||
749 | + display: flex; | ||
750 | + flex: 1 0 auto; | ||
751 | +} | ||
752 | + | ||
753 | +.main > .content { | ||
754 | + flex: 1 0; | ||
755 | + max-width: 100%; | ||
756 | +} | ||
757 | + | ||
758 | +#content { | ||
759 | + padding: 20px 40px; | ||
760 | +} | ||
761 | + | ||
762 | +.dashboard #content { | ||
763 | + width: 600px; | ||
764 | +} | ||
765 | + | ||
766 | +#content-main { | ||
767 | + float: left; | ||
768 | + width: 100%; | ||
769 | +} | ||
770 | + | ||
771 | +#content-related { | ||
772 | + float: right; | ||
773 | + width: 260px; | ||
774 | + position: relative; | ||
775 | + margin-right: -300px; | ||
776 | +} | ||
777 | + | ||
778 | +#footer { | ||
779 | + clear: both; | ||
780 | + padding: 10px; | ||
781 | +} | ||
782 | + | ||
783 | +/* COLUMN TYPES */ | ||
784 | + | ||
785 | +.colMS { | ||
786 | + margin-right: 300px; | ||
787 | +} | ||
788 | + | ||
789 | +.colSM { | ||
790 | + margin-left: 300px; | ||
791 | +} | ||
792 | + | ||
793 | +.colSM #content-related { | ||
794 | + float: left; | ||
795 | + margin-right: 0; | ||
796 | + margin-left: -300px; | ||
797 | +} | ||
798 | + | ||
799 | +.colSM #content-main { | ||
800 | + float: right; | ||
801 | +} | ||
802 | + | ||
803 | +.popup .colM { | ||
804 | + width: auto; | ||
805 | +} | ||
806 | + | ||
807 | +/* HEADER */ | ||
808 | + | ||
809 | +#header { | ||
810 | + width: auto; | ||
811 | + height: auto; | ||
812 | + display: flex; | ||
813 | + justify-content: space-between; | ||
814 | + align-items: center; | ||
815 | + padding: 10px 40px; | ||
816 | + background: #417690; | ||
817 | + color: #ffc; | ||
818 | + overflow: hidden; | ||
819 | +} | ||
820 | + | ||
821 | +#header a:link, #header a:visited { | ||
822 | + color: #fff; | ||
823 | +} | ||
824 | + | ||
825 | +#header a:focus , #header a:hover { | ||
826 | + text-decoration: underline; | ||
827 | +} | ||
828 | + | ||
829 | +#branding { | ||
830 | + float: left; | ||
831 | +} | ||
832 | + | ||
833 | +#branding h1 { | ||
834 | + padding: 0; | ||
835 | + margin: 0 20px 0 0; | ||
836 | + font-weight: 300; | ||
837 | + font-size: 24px; | ||
838 | + color: #f5dd5d; | ||
839 | +} | ||
840 | + | ||
841 | +#branding h1, #branding h1 a:link, #branding h1 a:visited { | ||
842 | + color: #f5dd5d; | ||
843 | +} | ||
844 | + | ||
845 | +#branding h2 { | ||
846 | + padding: 0 10px; | ||
847 | + font-size: 14px; | ||
848 | + margin: -8px 0 8px 0; | ||
849 | + font-weight: normal; | ||
850 | + color: #ffc; | ||
851 | +} | ||
852 | + | ||
853 | +#branding a:hover { | ||
854 | + text-decoration: none; | ||
855 | +} | ||
856 | + | ||
857 | +#user-tools { | ||
858 | + float: right; | ||
859 | + padding: 0; | ||
860 | + margin: 0 0 0 20px; | ||
861 | + font-weight: 300; | ||
862 | + font-size: 11px; | ||
863 | + letter-spacing: 0.5px; | ||
864 | + text-transform: uppercase; | ||
865 | + text-align: right; | ||
866 | +} | ||
867 | + | ||
868 | +#user-tools a { | ||
869 | + border-bottom: 1px solid rgba(255, 255, 255, 0.25); | ||
870 | +} | ||
871 | + | ||
872 | +#user-tools a:focus, #user-tools a:hover { | ||
873 | + text-decoration: none; | ||
874 | + border-bottom-color: #79aec8; | ||
875 | + color: #79aec8; | ||
876 | +} | ||
877 | + | ||
878 | +/* SIDEBAR */ | ||
879 | + | ||
880 | +#content-related { | ||
881 | + background: #f8f8f8; | ||
882 | +} | ||
883 | + | ||
884 | +#content-related .module { | ||
885 | + background: none; | ||
886 | +} | ||
887 | + | ||
888 | +#content-related h3 { | ||
889 | + font-size: 14px; | ||
890 | + color: #666; | ||
891 | + padding: 0 16px; | ||
892 | + margin: 0 0 16px; | ||
893 | +} | ||
894 | + | ||
895 | +#content-related h4 { | ||
896 | + font-size: 13px; | ||
897 | +} | ||
898 | + | ||
899 | +#content-related p { | ||
900 | + padding-left: 16px; | ||
901 | + padding-right: 16px; | ||
902 | +} | ||
903 | + | ||
904 | +#content-related .actionlist { | ||
905 | + padding: 0; | ||
906 | + margin: 16px; | ||
907 | +} | ||
908 | + | ||
909 | +#content-related .actionlist li { | ||
910 | + line-height: 1.2; | ||
911 | + margin-bottom: 10px; | ||
912 | + padding-left: 18px; | ||
913 | +} | ||
914 | + | ||
915 | +#content-related .module h2 { | ||
916 | + background: none; | ||
917 | + padding: 16px; | ||
918 | + margin-bottom: 16px; | ||
919 | + border-bottom: 1px solid #eaeaea; | ||
920 | + font-size: 18px; | ||
921 | + color: #333; | ||
922 | +} | ||
923 | + | ||
924 | +.delete-confirmation form input[type="submit"] { | ||
925 | + background: #ba2121; | ||
926 | + border-radius: 4px; | ||
927 | + padding: 10px 15px; | ||
928 | + color: #fff; | ||
929 | +} | ||
930 | + | ||
931 | +.delete-confirmation form input[type="submit"]:active, | ||
932 | +.delete-confirmation form input[type="submit"]:focus, | ||
933 | +.delete-confirmation form input[type="submit"]:hover { | ||
934 | + background: #a41515; | ||
935 | +} | ||
936 | + | ||
937 | +.delete-confirmation form .cancel-link { | ||
938 | + display: inline-block; | ||
939 | + vertical-align: middle; | ||
940 | + height: 15px; | ||
941 | + line-height: 15px; | ||
942 | + background: #ddd; | ||
943 | + border-radius: 4px; | ||
944 | + padding: 10px 15px; | ||
945 | + color: #333; | ||
946 | + margin: 0 0 0 10px; | ||
947 | +} | ||
948 | + | ||
949 | +.delete-confirmation form .cancel-link:active, | ||
950 | +.delete-confirmation form .cancel-link:focus, | ||
951 | +.delete-confirmation form .cancel-link:hover { | ||
952 | + background: #ccc; | ||
953 | +} | ||
954 | + | ||
955 | +/* POPUP */ | ||
956 | +.popup #content { | ||
957 | + padding: 20px; | ||
958 | +} | ||
959 | + | ||
960 | +.popup #container { | ||
961 | + min-width: 0; | ||
962 | +} | ||
963 | + | ||
964 | +.popup #header { | ||
965 | + padding: 10px 20px; | ||
966 | +} |
static/admin/css/changelists.css
0 → 100644
1 | +/* CHANGELISTS */ | ||
2 | + | ||
3 | +#changelist { | ||
4 | + position: relative; | ||
5 | + width: 100%; | ||
6 | +} | ||
7 | + | ||
8 | +#changelist table { | ||
9 | + width: 100%; | ||
10 | +} | ||
11 | + | ||
12 | +.change-list .hiddenfields { display:none; } | ||
13 | + | ||
14 | +.change-list .filtered table { | ||
15 | + border-right: none; | ||
16 | +} | ||
17 | + | ||
18 | +.change-list .filtered { | ||
19 | + min-height: 400px; | ||
20 | +} | ||
21 | + | ||
22 | +.change-list .filtered .results, .change-list .filtered .paginator, | ||
23 | +.filtered #toolbar, .filtered div.xfull { | ||
24 | + margin-right: 280px; | ||
25 | + width: auto; | ||
26 | +} | ||
27 | + | ||
28 | +.change-list .filtered table tbody th { | ||
29 | + padding-right: 1em; | ||
30 | +} | ||
31 | + | ||
32 | +#changelist-form .results { | ||
33 | + overflow-x: auto; | ||
34 | +} | ||
35 | + | ||
36 | +#changelist .toplinks { | ||
37 | + border-bottom: 1px solid #ddd; | ||
38 | +} | ||
39 | + | ||
40 | +#changelist .paginator { | ||
41 | + color: #666; | ||
42 | + border-bottom: 1px solid #eee; | ||
43 | + background: #fff; | ||
44 | + overflow: hidden; | ||
45 | +} | ||
46 | + | ||
47 | +/* CHANGELIST TABLES */ | ||
48 | + | ||
49 | +#changelist table thead th { | ||
50 | + padding: 0; | ||
51 | + white-space: nowrap; | ||
52 | + vertical-align: middle; | ||
53 | +} | ||
54 | + | ||
55 | +#changelist table thead th.action-checkbox-column { | ||
56 | + width: 1.5em; | ||
57 | + text-align: center; | ||
58 | +} | ||
59 | + | ||
60 | +#changelist table tbody td.action-checkbox { | ||
61 | + text-align: center; | ||
62 | +} | ||
63 | + | ||
64 | +#changelist table tfoot { | ||
65 | + color: #666; | ||
66 | +} | ||
67 | + | ||
68 | +/* TOOLBAR */ | ||
69 | + | ||
70 | +#changelist #toolbar { | ||
71 | + padding: 8px 10px; | ||
72 | + margin-bottom: 15px; | ||
73 | + border-top: 1px solid #eee; | ||
74 | + border-bottom: 1px solid #eee; | ||
75 | + background: #f8f8f8; | ||
76 | + color: #666; | ||
77 | +} | ||
78 | + | ||
79 | +#changelist #toolbar form input { | ||
80 | + border-radius: 4px; | ||
81 | + font-size: 14px; | ||
82 | + padding: 5px; | ||
83 | + color: #333; | ||
84 | +} | ||
85 | + | ||
86 | +#changelist #toolbar form #searchbar { | ||
87 | + height: 19px; | ||
88 | + border: 1px solid #ccc; | ||
89 | + padding: 2px 5px; | ||
90 | + margin: 0; | ||
91 | + vertical-align: top; | ||
92 | + font-size: 13px; | ||
93 | + max-width: 230px; | ||
94 | +} | ||
95 | + | ||
96 | +#changelist #toolbar form #searchbar:focus { | ||
97 | + border-color: #999; | ||
98 | +} | ||
99 | + | ||
100 | +#changelist #toolbar form input[type="submit"] { | ||
101 | + border: 1px solid #ccc; | ||
102 | + font-size: 13px; | ||
103 | + padding: 4px 8px; | ||
104 | + margin: 0; | ||
105 | + vertical-align: middle; | ||
106 | + background: #fff; | ||
107 | + box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; | ||
108 | + cursor: pointer; | ||
109 | + color: #333; | ||
110 | +} | ||
111 | + | ||
112 | +#changelist #toolbar form input[type="submit"]:focus, | ||
113 | +#changelist #toolbar form input[type="submit"]:hover { | ||
114 | + border-color: #999; | ||
115 | +} | ||
116 | + | ||
117 | +#changelist #changelist-search img { | ||
118 | + vertical-align: middle; | ||
119 | + margin-right: 4px; | ||
120 | +} | ||
121 | + | ||
122 | +/* FILTER COLUMN */ | ||
123 | + | ||
124 | +#changelist-filter { | ||
125 | + position: absolute; | ||
126 | + top: 0; | ||
127 | + right: 0; | ||
128 | + z-index: 1000; | ||
129 | + width: 240px; | ||
130 | + background: #f8f8f8; | ||
131 | + border-left: none; | ||
132 | + margin: 0; | ||
133 | +} | ||
134 | + | ||
135 | +#changelist-filter h2 { | ||
136 | + font-size: 14px; | ||
137 | + text-transform: uppercase; | ||
138 | + letter-spacing: 0.5px; | ||
139 | + padding: 5px 15px; | ||
140 | + margin-bottom: 12px; | ||
141 | + border-bottom: none; | ||
142 | +} | ||
143 | + | ||
144 | +#changelist-filter h3 { | ||
145 | + font-weight: 400; | ||
146 | + font-size: 14px; | ||
147 | + padding: 0 15px; | ||
148 | + margin-bottom: 10px; | ||
149 | +} | ||
150 | + | ||
151 | +#changelist-filter ul { | ||
152 | + margin: 5px 0; | ||
153 | + padding: 0 15px 15px; | ||
154 | + border-bottom: 1px solid #eaeaea; | ||
155 | +} | ||
156 | + | ||
157 | +#changelist-filter ul:last-child { | ||
158 | + border-bottom: none; | ||
159 | +} | ||
160 | + | ||
161 | +#changelist-filter li { | ||
162 | + list-style-type: none; | ||
163 | + margin-left: 0; | ||
164 | + padding-left: 0; | ||
165 | +} | ||
166 | + | ||
167 | +#changelist-filter a { | ||
168 | + display: block; | ||
169 | + color: #999; | ||
170 | + text-overflow: ellipsis; | ||
171 | + overflow-x: hidden; | ||
172 | +} | ||
173 | + | ||
174 | +#changelist-filter li.selected { | ||
175 | + border-left: 5px solid #eaeaea; | ||
176 | + padding-left: 10px; | ||
177 | + margin-left: -15px; | ||
178 | +} | ||
179 | + | ||
180 | +#changelist-filter li.selected a { | ||
181 | + color: #5b80b2; | ||
182 | +} | ||
183 | + | ||
184 | +#changelist-filter a:focus, #changelist-filter a:hover, | ||
185 | +#changelist-filter li.selected a:focus, | ||
186 | +#changelist-filter li.selected a:hover { | ||
187 | + color: #036; | ||
188 | +} | ||
189 | + | ||
190 | +#changelist-filter #changelist-filter-clear a { | ||
191 | + font-size: 13px; | ||
192 | + padding-bottom: 10px; | ||
193 | + border-bottom: 1px solid #eaeaea; | ||
194 | +} | ||
195 | + | ||
196 | +/* DATE DRILLDOWN */ | ||
197 | + | ||
198 | +.change-list ul.toplinks { | ||
199 | + display: block; | ||
200 | + float: left; | ||
201 | + padding: 0; | ||
202 | + margin: 0; | ||
203 | + width: 100%; | ||
204 | +} | ||
205 | + | ||
206 | +.change-list ul.toplinks li { | ||
207 | + padding: 3px 6px; | ||
208 | + font-weight: bold; | ||
209 | + list-style-type: none; | ||
210 | + display: inline-block; | ||
211 | +} | ||
212 | + | ||
213 | +.change-list ul.toplinks .date-back a { | ||
214 | + color: #999; | ||
215 | +} | ||
216 | + | ||
217 | +.change-list ul.toplinks .date-back a:focus, | ||
218 | +.change-list ul.toplinks .date-back a:hover { | ||
219 | + color: #036; | ||
220 | +} | ||
221 | + | ||
222 | +/* PAGINATOR */ | ||
223 | + | ||
224 | +.paginator { | ||
225 | + font-size: 13px; | ||
226 | + padding-top: 10px; | ||
227 | + padding-bottom: 10px; | ||
228 | + line-height: 22px; | ||
229 | + margin: 0; | ||
230 | + border-top: 1px solid #ddd; | ||
231 | +} | ||
232 | + | ||
233 | +.paginator a:link, .paginator a:visited { | ||
234 | + padding: 2px 6px; | ||
235 | + background: #79aec8; | ||
236 | + text-decoration: none; | ||
237 | + color: #fff; | ||
238 | +} | ||
239 | + | ||
240 | +.paginator a.showall { | ||
241 | + border: none; | ||
242 | + background: none; | ||
243 | + color: #5b80b2; | ||
244 | +} | ||
245 | + | ||
246 | +.paginator a.showall:focus, .paginator a.showall:hover { | ||
247 | + background: none; | ||
248 | + color: #036; | ||
249 | +} | ||
250 | + | ||
251 | +.paginator .end { | ||
252 | + margin-right: 6px; | ||
253 | +} | ||
254 | + | ||
255 | +.paginator .this-page { | ||
256 | + padding: 2px 6px; | ||
257 | + font-weight: bold; | ||
258 | + font-size: 13px; | ||
259 | + vertical-align: top; | ||
260 | +} | ||
261 | + | ||
262 | +.paginator a:focus, .paginator a:hover { | ||
263 | + color: white; | ||
264 | + background: #036; | ||
265 | +} | ||
266 | + | ||
267 | +/* ACTIONS */ | ||
268 | + | ||
269 | +.filtered .actions { | ||
270 | + margin-right: 280px; | ||
271 | + border-right: none; | ||
272 | +} | ||
273 | + | ||
274 | +#changelist table input { | ||
275 | + margin: 0; | ||
276 | + vertical-align: baseline; | ||
277 | +} | ||
278 | + | ||
279 | +#changelist table tbody tr.selected { | ||
280 | + background-color: #FFFFCC; | ||
281 | +} | ||
282 | + | ||
283 | +#changelist .actions { | ||
284 | + padding: 10px; | ||
285 | + background: #fff; | ||
286 | + border-top: none; | ||
287 | + border-bottom: none; | ||
288 | + line-height: 24px; | ||
289 | + color: #999; | ||
290 | +} | ||
291 | + | ||
292 | +#changelist .actions.selected { | ||
293 | + background: #fffccf; | ||
294 | + border-top: 1px solid #fffee8; | ||
295 | + border-bottom: 1px solid #edecd6; | ||
296 | +} | ||
297 | + | ||
298 | +#changelist .actions span.all, | ||
299 | +#changelist .actions span.action-counter, | ||
300 | +#changelist .actions span.clear, | ||
301 | +#changelist .actions span.question { | ||
302 | + font-size: 13px; | ||
303 | + margin: 0 0.5em; | ||
304 | + display: none; | ||
305 | +} | ||
306 | + | ||
307 | +#changelist .actions:last-child { | ||
308 | + border-bottom: none; | ||
309 | +} | ||
310 | + | ||
311 | +#changelist .actions select { | ||
312 | + vertical-align: top; | ||
313 | + height: 24px; | ||
314 | + background: none; | ||
315 | + color: #000; | ||
316 | + border: 1px solid #ccc; | ||
317 | + border-radius: 4px; | ||
318 | + font-size: 14px; | ||
319 | + padding: 0 0 0 4px; | ||
320 | + margin: 0; | ||
321 | + margin-left: 10px; | ||
322 | +} | ||
323 | + | ||
324 | +#changelist .actions select:focus { | ||
325 | + border-color: #999; | ||
326 | +} | ||
327 | + | ||
328 | +#changelist .actions label { | ||
329 | + display: inline-block; | ||
330 | + vertical-align: middle; | ||
331 | + font-size: 13px; | ||
332 | +} | ||
333 | + | ||
334 | +#changelist .actions .button { | ||
335 | + font-size: 13px; | ||
336 | + border: 1px solid #ccc; | ||
337 | + border-radius: 4px; | ||
338 | + background: #fff; | ||
339 | + box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; | ||
340 | + cursor: pointer; | ||
341 | + height: 24px; | ||
342 | + line-height: 1; | ||
343 | + padding: 4px 8px; | ||
344 | + margin: 0; | ||
345 | + color: #333; | ||
346 | +} | ||
347 | + | ||
348 | +#changelist .actions .button:focus, #changelist .actions .button:hover { | ||
349 | + border-color: #999; | ||
350 | +} |
static/admin/css/dashboard.css
0 → 100644
1 | +/* DASHBOARD */ | ||
2 | + | ||
3 | +.dashboard .module table th { | ||
4 | + width: 100%; | ||
5 | +} | ||
6 | + | ||
7 | +.dashboard .module table td { | ||
8 | + white-space: nowrap; | ||
9 | +} | ||
10 | + | ||
11 | +.dashboard .module table td a { | ||
12 | + display: block; | ||
13 | + padding-right: .6em; | ||
14 | +} | ||
15 | + | ||
16 | +/* RECENT ACTIONS MODULE */ | ||
17 | + | ||
18 | +.module ul.actionlist { | ||
19 | + margin-left: 0; | ||
20 | +} | ||
21 | + | ||
22 | +ul.actionlist li { | ||
23 | + list-style-type: none; | ||
24 | + overflow: hidden; | ||
25 | + text-overflow: ellipsis; | ||
26 | +} |
static/admin/css/fonts.css
0 → 100644
1 | +@font-face { | ||
2 | + font-family: 'Roboto'; | ||
3 | + src: url('../fonts/Roboto-Bold-webfont.woff'); | ||
4 | + font-weight: 700; | ||
5 | + font-style: normal; | ||
6 | +} | ||
7 | + | ||
8 | +@font-face { | ||
9 | + font-family: 'Roboto'; | ||
10 | + src: url('../fonts/Roboto-Regular-webfont.woff'); | ||
11 | + font-weight: 400; | ||
12 | + font-style: normal; | ||
13 | +} | ||
14 | + | ||
15 | +@font-face { | ||
16 | + font-family: 'Roboto'; | ||
17 | + src: url('../fonts/Roboto-Light-webfont.woff'); | ||
18 | + font-weight: 300; | ||
19 | + font-style: normal; | ||
20 | +} |
static/admin/css/forms.css
0 → 100644
1 | +@import url('widgets.css'); | ||
2 | + | ||
3 | +/* FORM ROWS */ | ||
4 | + | ||
5 | +.form-row { | ||
6 | + overflow: hidden; | ||
7 | + padding: 10px; | ||
8 | + font-size: 13px; | ||
9 | + border-bottom: 1px solid #eee; | ||
10 | +} | ||
11 | + | ||
12 | +.form-row img, .form-row input { | ||
13 | + vertical-align: middle; | ||
14 | +} | ||
15 | + | ||
16 | +.form-row label input[type="checkbox"] { | ||
17 | + margin-top: 0; | ||
18 | + vertical-align: 0; | ||
19 | +} | ||
20 | + | ||
21 | +form .form-row p { | ||
22 | + padding-left: 0; | ||
23 | +} | ||
24 | + | ||
25 | +.hidden { | ||
26 | + display: none; | ||
27 | +} | ||
28 | + | ||
29 | +/* FORM LABELS */ | ||
30 | + | ||
31 | +label { | ||
32 | + font-weight: normal; | ||
33 | + color: #666; | ||
34 | + font-size: 13px; | ||
35 | +} | ||
36 | + | ||
37 | +.required label, label.required { | ||
38 | + font-weight: bold; | ||
39 | + color: #333; | ||
40 | +} | ||
41 | + | ||
42 | +/* RADIO BUTTONS */ | ||
43 | + | ||
44 | +form ul.radiolist li { | ||
45 | + list-style-type: none; | ||
46 | +} | ||
47 | + | ||
48 | +form ul.radiolist label { | ||
49 | + float: none; | ||
50 | + display: inline; | ||
51 | +} | ||
52 | + | ||
53 | +form ul.radiolist input[type="radio"] { | ||
54 | + margin: -2px 4px 0 0; | ||
55 | + padding: 0; | ||
56 | +} | ||
57 | + | ||
58 | +form ul.inline { | ||
59 | + margin-left: 0; | ||
60 | + padding: 0; | ||
61 | +} | ||
62 | + | ||
63 | +form ul.inline li { | ||
64 | + float: left; | ||
65 | + padding-right: 7px; | ||
66 | +} | ||
67 | + | ||
68 | +/* ALIGNED FIELDSETS */ | ||
69 | + | ||
70 | +.aligned label { | ||
71 | + display: block; | ||
72 | + padding: 4px 10px 0 0; | ||
73 | + float: left; | ||
74 | + width: 160px; | ||
75 | + word-wrap: break-word; | ||
76 | + line-height: 1; | ||
77 | +} | ||
78 | + | ||
79 | +.aligned label:not(.vCheckboxLabel):after { | ||
80 | + content: ''; | ||
81 | + display: inline-block; | ||
82 | + vertical-align: middle; | ||
83 | + height: 26px; | ||
84 | +} | ||
85 | + | ||
86 | +.aligned label + p, .aligned label + div.help, .aligned label + div.readonly { | ||
87 | + padding: 6px 0; | ||
88 | + margin-top: 0; | ||
89 | + margin-bottom: 0; | ||
90 | + margin-left: 170px; | ||
91 | +} | ||
92 | + | ||
93 | +.aligned ul label { | ||
94 | + display: inline; | ||
95 | + float: none; | ||
96 | + width: auto; | ||
97 | +} | ||
98 | + | ||
99 | +.aligned .form-row input { | ||
100 | + margin-bottom: 0; | ||
101 | +} | ||
102 | + | ||
103 | +.colMS .aligned .vLargeTextField, .colMS .aligned .vXMLLargeTextField { | ||
104 | + width: 350px; | ||
105 | +} | ||
106 | + | ||
107 | +form .aligned ul { | ||
108 | + margin-left: 160px; | ||
109 | + padding-left: 10px; | ||
110 | +} | ||
111 | + | ||
112 | +form .aligned ul.radiolist { | ||
113 | + display: inline-block; | ||
114 | + margin: 0; | ||
115 | + padding: 0; | ||
116 | +} | ||
117 | + | ||
118 | +form .aligned p.help, | ||
119 | +form .aligned div.help { | ||
120 | + clear: left; | ||
121 | + margin-top: 0; | ||
122 | + margin-left: 160px; | ||
123 | + padding-left: 10px; | ||
124 | +} | ||
125 | + | ||
126 | +form .aligned label + p.help, | ||
127 | +form .aligned label + div.help { | ||
128 | + margin-left: 0; | ||
129 | + padding-left: 0; | ||
130 | +} | ||
131 | + | ||
132 | +form .aligned p.help:last-child, | ||
133 | +form .aligned div.help:last-child { | ||
134 | + margin-bottom: 0; | ||
135 | + padding-bottom: 0; | ||
136 | +} | ||
137 | + | ||
138 | +form .aligned input + p.help, | ||
139 | +form .aligned textarea + p.help, | ||
140 | +form .aligned select + p.help, | ||
141 | +form .aligned input + div.help, | ||
142 | +form .aligned textarea + div.help, | ||
143 | +form .aligned select + div.help { | ||
144 | + margin-left: 160px; | ||
145 | + padding-left: 10px; | ||
146 | +} | ||
147 | + | ||
148 | +form .aligned ul li { | ||
149 | + list-style: none; | ||
150 | +} | ||
151 | + | ||
152 | +form .aligned table p { | ||
153 | + margin-left: 0; | ||
154 | + padding-left: 0; | ||
155 | +} | ||
156 | + | ||
157 | +.aligned .vCheckboxLabel { | ||
158 | + float: none; | ||
159 | + width: auto; | ||
160 | + display: inline-block; | ||
161 | + vertical-align: -3px; | ||
162 | + padding: 0 0 5px 5px; | ||
163 | +} | ||
164 | + | ||
165 | +.aligned .vCheckboxLabel + p.help, | ||
166 | +.aligned .vCheckboxLabel + div.help { | ||
167 | + margin-top: -4px; | ||
168 | +} | ||
169 | + | ||
170 | +.colM .aligned .vLargeTextField, .colM .aligned .vXMLLargeTextField { | ||
171 | + width: 610px; | ||
172 | +} | ||
173 | + | ||
174 | +.checkbox-row p.help, | ||
175 | +.checkbox-row div.help { | ||
176 | + margin-left: 0; | ||
177 | + padding-left: 0; | ||
178 | +} | ||
179 | + | ||
180 | +fieldset .fieldBox { | ||
181 | + float: left; | ||
182 | + margin-right: 20px; | ||
183 | +} | ||
184 | + | ||
185 | +/* WIDE FIELDSETS */ | ||
186 | + | ||
187 | +.wide label { | ||
188 | + width: 200px; | ||
189 | +} | ||
190 | + | ||
191 | +form .wide p, | ||
192 | +form .wide input + p.help, | ||
193 | +form .wide input + div.help { | ||
194 | + margin-left: 200px; | ||
195 | +} | ||
196 | + | ||
197 | +form .wide p.help, | ||
198 | +form .wide div.help { | ||
199 | + padding-left: 38px; | ||
200 | +} | ||
201 | + | ||
202 | +form div.help ul { | ||
203 | + padding-left: 0; | ||
204 | + margin-left: 0; | ||
205 | +} | ||
206 | + | ||
207 | +.colM fieldset.wide .vLargeTextField, .colM fieldset.wide .vXMLLargeTextField { | ||
208 | + width: 450px; | ||
209 | +} | ||
210 | + | ||
211 | +/* COLLAPSED FIELDSETS */ | ||
212 | + | ||
213 | +fieldset.collapsed * { | ||
214 | + display: none; | ||
215 | +} | ||
216 | + | ||
217 | +fieldset.collapsed h2, fieldset.collapsed { | ||
218 | + display: block; | ||
219 | +} | ||
220 | + | ||
221 | +fieldset.collapsed { | ||
222 | + border: 1px solid #eee; | ||
223 | + border-radius: 4px; | ||
224 | + overflow: hidden; | ||
225 | +} | ||
226 | + | ||
227 | +fieldset.collapsed h2 { | ||
228 | + background: #f8f8f8; | ||
229 | + color: #666; | ||
230 | +} | ||
231 | + | ||
232 | +fieldset .collapse-toggle { | ||
233 | + color: #fff; | ||
234 | +} | ||
235 | + | ||
236 | +fieldset.collapsed .collapse-toggle { | ||
237 | + background: transparent; | ||
238 | + display: inline; | ||
239 | + color: #447e9b; | ||
240 | +} | ||
241 | + | ||
242 | +/* MONOSPACE TEXTAREAS */ | ||
243 | + | ||
244 | +fieldset.monospace textarea { | ||
245 | + font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace; | ||
246 | +} | ||
247 | + | ||
248 | +/* SUBMIT ROW */ | ||
249 | + | ||
250 | +.submit-row { | ||
251 | + padding: 12px 14px; | ||
252 | + margin: 0 0 20px; | ||
253 | + background: #f8f8f8; | ||
254 | + border: 1px solid #eee; | ||
255 | + border-radius: 4px; | ||
256 | + text-align: right; | ||
257 | + overflow: hidden; | ||
258 | +} | ||
259 | + | ||
260 | +body.popup .submit-row { | ||
261 | + overflow: auto; | ||
262 | +} | ||
263 | + | ||
264 | +.submit-row input { | ||
265 | + height: 35px; | ||
266 | + line-height: 15px; | ||
267 | + margin: 0 0 0 5px; | ||
268 | +} | ||
269 | + | ||
270 | +.submit-row input.default { | ||
271 | + margin: 0 0 0 8px; | ||
272 | + text-transform: uppercase; | ||
273 | +} | ||
274 | + | ||
275 | +.submit-row p { | ||
276 | + margin: 0.3em; | ||
277 | +} | ||
278 | + | ||
279 | +.submit-row p.deletelink-box { | ||
280 | + float: left; | ||
281 | + margin: 0; | ||
282 | +} | ||
283 | + | ||
284 | +.submit-row a.deletelink { | ||
285 | + display: block; | ||
286 | + background: #ba2121; | ||
287 | + border-radius: 4px; | ||
288 | + padding: 10px 15px; | ||
289 | + height: 15px; | ||
290 | + line-height: 15px; | ||
291 | + color: #fff; | ||
292 | +} | ||
293 | + | ||
294 | +.submit-row a.closelink { | ||
295 | + display: inline-block; | ||
296 | + background: #bbbbbb; | ||
297 | + border-radius: 4px; | ||
298 | + padding: 10px 15px; | ||
299 | + height: 15px; | ||
300 | + line-height: 15px; | ||
301 | + margin: 0 0 0 5px; | ||
302 | + color: #fff; | ||
303 | +} | ||
304 | + | ||
305 | +.submit-row a.deletelink:focus, | ||
306 | +.submit-row a.deletelink:hover, | ||
307 | +.submit-row a.deletelink:active { | ||
308 | + background: #a41515; | ||
309 | +} | ||
310 | + | ||
311 | +.submit-row a.closelink:focus, | ||
312 | +.submit-row a.closelink:hover, | ||
313 | +.submit-row a.closelink:active { | ||
314 | + background: #aaaaaa; | ||
315 | +} | ||
316 | + | ||
317 | +/* CUSTOM FORM FIELDS */ | ||
318 | + | ||
319 | +.vSelectMultipleField { | ||
320 | + vertical-align: top; | ||
321 | +} | ||
322 | + | ||
323 | +.vCheckboxField { | ||
324 | + border: none; | ||
325 | +} | ||
326 | + | ||
327 | +.vDateField, .vTimeField { | ||
328 | + margin-right: 2px; | ||
329 | + margin-bottom: 4px; | ||
330 | +} | ||
331 | + | ||
332 | +.vDateField { | ||
333 | + min-width: 6.85em; | ||
334 | +} | ||
335 | + | ||
336 | +.vTimeField { | ||
337 | + min-width: 4.7em; | ||
338 | +} | ||
339 | + | ||
340 | +.vURLField { | ||
341 | + width: 30em; | ||
342 | +} | ||
343 | + | ||
344 | +.vLargeTextField, .vXMLLargeTextField { | ||
345 | + width: 48em; | ||
346 | +} | ||
347 | + | ||
348 | +.flatpages-flatpage #id_content { | ||
349 | + height: 40.2em; | ||
350 | +} | ||
351 | + | ||
352 | +.module table .vPositiveSmallIntegerField { | ||
353 | + width: 2.2em; | ||
354 | +} | ||
355 | + | ||
356 | +.vTextField, .vUUIDField { | ||
357 | + width: 20em; | ||
358 | +} | ||
359 | + | ||
360 | +.vIntegerField { | ||
361 | + width: 5em; | ||
362 | +} | ||
363 | + | ||
364 | +.vBigIntegerField { | ||
365 | + width: 10em; | ||
366 | +} | ||
367 | + | ||
368 | +.vForeignKeyRawIdAdminField { | ||
369 | + width: 5em; | ||
370 | +} | ||
371 | + | ||
372 | +/* INLINES */ | ||
373 | + | ||
374 | +.inline-group { | ||
375 | + padding: 0; | ||
376 | + margin: 0 0 30px; | ||
377 | +} | ||
378 | + | ||
379 | +.inline-group thead th { | ||
380 | + padding: 8px 10px; | ||
381 | +} | ||
382 | + | ||
383 | +.inline-group .aligned label { | ||
384 | + width: 160px; | ||
385 | +} | ||
386 | + | ||
387 | +.inline-related { | ||
388 | + position: relative; | ||
389 | +} | ||
390 | + | ||
391 | +.inline-related h3 { | ||
392 | + margin: 0; | ||
393 | + color: #666; | ||
394 | + padding: 5px; | ||
395 | + font-size: 13px; | ||
396 | + background: #f8f8f8; | ||
397 | + border-top: 1px solid #eee; | ||
398 | + border-bottom: 1px solid #eee; | ||
399 | +} | ||
400 | + | ||
401 | +.inline-related h3 span.delete { | ||
402 | + float: right; | ||
403 | +} | ||
404 | + | ||
405 | +.inline-related h3 span.delete label { | ||
406 | + margin-left: 2px; | ||
407 | + font-size: 11px; | ||
408 | +} | ||
409 | + | ||
410 | +.inline-related fieldset { | ||
411 | + margin: 0; | ||
412 | + background: #fff; | ||
413 | + border: none; | ||
414 | + width: 100%; | ||
415 | +} | ||
416 | + | ||
417 | +.inline-related fieldset.module h3 { | ||
418 | + margin: 0; | ||
419 | + padding: 2px 5px 3px 5px; | ||
420 | + font-size: 11px; | ||
421 | + text-align: left; | ||
422 | + font-weight: bold; | ||
423 | + background: #bcd; | ||
424 | + color: #fff; | ||
425 | +} | ||
426 | + | ||
427 | +.inline-group .tabular fieldset.module { | ||
428 | + border: none; | ||
429 | +} | ||
430 | + | ||
431 | +.inline-related.tabular fieldset.module table { | ||
432 | + width: 100%; | ||
433 | +} | ||
434 | + | ||
435 | +.last-related fieldset { | ||
436 | + border: none; | ||
437 | +} | ||
438 | + | ||
439 | +.inline-group .tabular tr.has_original td { | ||
440 | + padding-top: 2em; | ||
441 | +} | ||
442 | + | ||
443 | +.inline-group .tabular tr td.original { | ||
444 | + padding: 2px 0 0 0; | ||
445 | + width: 0; | ||
446 | + _position: relative; | ||
447 | +} | ||
448 | + | ||
449 | +.inline-group .tabular th.original { | ||
450 | + width: 0px; | ||
451 | + padding: 0; | ||
452 | +} | ||
453 | + | ||
454 | +.inline-group .tabular td.original p { | ||
455 | + position: absolute; | ||
456 | + left: 0; | ||
457 | + height: 1.1em; | ||
458 | + padding: 2px 9px; | ||
459 | + overflow: hidden; | ||
460 | + font-size: 9px; | ||
461 | + font-weight: bold; | ||
462 | + color: #666; | ||
463 | + _width: 700px; | ||
464 | +} | ||
465 | + | ||
466 | +.inline-group ul.tools { | ||
467 | + padding: 0; | ||
468 | + margin: 0; | ||
469 | + list-style: none; | ||
470 | +} | ||
471 | + | ||
472 | +.inline-group ul.tools li { | ||
473 | + display: inline; | ||
474 | + padding: 0 5px; | ||
475 | +} | ||
476 | + | ||
477 | +.inline-group div.add-row, | ||
478 | +.inline-group .tabular tr.add-row td { | ||
479 | + color: #666; | ||
480 | + background: #f8f8f8; | ||
481 | + padding: 8px 10px; | ||
482 | + border-bottom: 1px solid #eee; | ||
483 | +} | ||
484 | + | ||
485 | +.inline-group .tabular tr.add-row td { | ||
486 | + padding: 8px 10px; | ||
487 | + border-bottom: 1px solid #eee; | ||
488 | +} | ||
489 | + | ||
490 | +.inline-group ul.tools a.add, | ||
491 | +.inline-group div.add-row a, | ||
492 | +.inline-group .tabular tr.add-row td a { | ||
493 | + background: url(../img/icon-addlink.svg) 0 1px no-repeat; | ||
494 | + padding-left: 16px; | ||
495 | + font-size: 12px; | ||
496 | +} | ||
497 | + | ||
498 | +.empty-form { | ||
499 | + display: none; | ||
500 | +} | ||
501 | + | ||
502 | +/* RELATED FIELD ADD ONE / LOOKUP */ | ||
503 | + | ||
504 | +.related-lookup { | ||
505 | + margin-left: 5px; | ||
506 | + display: inline-block; | ||
507 | + vertical-align: middle; | ||
508 | + background-repeat: no-repeat; | ||
509 | + background-size: 14px; | ||
510 | +} | ||
511 | + | ||
512 | +.related-lookup { | ||
513 | + width: 16px; | ||
514 | + height: 16px; | ||
515 | + background-image: url(../img/search.svg); | ||
516 | +} | ||
517 | + | ||
518 | +form .related-widget-wrapper ul { | ||
519 | + display: inline-block; | ||
520 | + margin-left: 0; | ||
521 | + padding-left: 0; | ||
522 | +} | ||
523 | + | ||
524 | +.clearable-file-input input { | ||
525 | + margin-top: 0; | ||
526 | +} |
static/admin/css/login.css
0 → 100644
1 | +/* LOGIN FORM */ | ||
2 | + | ||
3 | +.login { | ||
4 | + background: #f8f8f8; | ||
5 | + height: auto; | ||
6 | +} | ||
7 | + | ||
8 | +.login #header { | ||
9 | + height: auto; | ||
10 | + padding: 15px 16px; | ||
11 | + justify-content: center; | ||
12 | +} | ||
13 | + | ||
14 | +.login #header h1 { | ||
15 | + font-size: 18px; | ||
16 | +} | ||
17 | + | ||
18 | +.login #header h1 a { | ||
19 | + color: #fff; | ||
20 | +} | ||
21 | + | ||
22 | +.login #content { | ||
23 | + padding: 20px 20px 0; | ||
24 | +} | ||
25 | + | ||
26 | +.login #container { | ||
27 | + background: #fff; | ||
28 | + border: 1px solid #eaeaea; | ||
29 | + border-radius: 4px; | ||
30 | + overflow: hidden; | ||
31 | + width: 28em; | ||
32 | + min-width: 300px; | ||
33 | + margin: 100px auto; | ||
34 | + height: auto; | ||
35 | +} | ||
36 | + | ||
37 | +.login #content-main { | ||
38 | + width: 100%; | ||
39 | +} | ||
40 | + | ||
41 | +.login .form-row { | ||
42 | + padding: 4px 0; | ||
43 | + float: left; | ||
44 | + width: 100%; | ||
45 | + border-bottom: none; | ||
46 | +} | ||
47 | + | ||
48 | +.login .form-row label { | ||
49 | + padding-right: 0.5em; | ||
50 | + line-height: 2em; | ||
51 | + font-size: 1em; | ||
52 | + clear: both; | ||
53 | + color: #333; | ||
54 | +} | ||
55 | + | ||
56 | +.login .form-row #id_username, .login .form-row #id_password { | ||
57 | + clear: both; | ||
58 | + padding: 8px; | ||
59 | + width: 100%; | ||
60 | + box-sizing: border-box; | ||
61 | +} | ||
62 | + | ||
63 | +.login span.help { | ||
64 | + font-size: 10px; | ||
65 | + display: block; | ||
66 | +} | ||
67 | + | ||
68 | +.login .submit-row { | ||
69 | + clear: both; | ||
70 | + padding: 1em 0 0 9.4em; | ||
71 | + margin: 0; | ||
72 | + border: none; | ||
73 | + background: none; | ||
74 | + text-align: left; | ||
75 | +} | ||
76 | + | ||
77 | +.login .password-reset-link { | ||
78 | + text-align: center; | ||
79 | +} |
static/admin/css/nav_sidebar.css
0 → 100644
1 | +.sticky { | ||
2 | + position: sticky; | ||
3 | + top: 0; | ||
4 | + max-height: 100vh; | ||
5 | +} | ||
6 | + | ||
7 | +.toggle-nav-sidebar { | ||
8 | + z-index: 20; | ||
9 | + left: 0; | ||
10 | + display: flex; | ||
11 | + align-items: center; | ||
12 | + justify-content: center; | ||
13 | + flex: 0 0 23px; | ||
14 | + width: 23px; | ||
15 | + border-right: 1px solid #eaeaea; | ||
16 | + background-color: #ffffff; | ||
17 | + cursor: pointer; | ||
18 | + font-size: 20px; | ||
19 | + color: #447e9b; | ||
20 | + padding: 0; | ||
21 | +} | ||
22 | + | ||
23 | +[dir="rtl"] .toggle-nav-sidebar { | ||
24 | + border-left: 1px solid #eaeaea; | ||
25 | + border-right: 0; | ||
26 | +} | ||
27 | + | ||
28 | +.toggle-nav-sidebar:hover, | ||
29 | +.toggle-nav-sidebar:focus { | ||
30 | + background-color: #f6f6f6; | ||
31 | +} | ||
32 | + | ||
33 | +#nav-sidebar { | ||
34 | + z-index: 15; | ||
35 | + flex: 0 0 275px; | ||
36 | + left: -276px; | ||
37 | + margin-left: -276px; | ||
38 | + border-top: 1px solid transparent; | ||
39 | + border-right: 1px solid #eaeaea; | ||
40 | + background-color: #ffffff; | ||
41 | + overflow: auto; | ||
42 | +} | ||
43 | + | ||
44 | +[dir="rtl"] #nav-sidebar { | ||
45 | + border-left: 1px solid #eaeaea; | ||
46 | + border-right: 0; | ||
47 | + left: 0; | ||
48 | + margin-left: 0; | ||
49 | + right: -276px; | ||
50 | + margin-right: -276px; | ||
51 | +} | ||
52 | + | ||
53 | +.toggle-nav-sidebar::before { | ||
54 | + content: '\00BB'; | ||
55 | +} | ||
56 | + | ||
57 | +.main.shifted .toggle-nav-sidebar::before { | ||
58 | + content: '\00AB'; | ||
59 | +} | ||
60 | + | ||
61 | +.main.shifted > #nav-sidebar { | ||
62 | + left: 24px; | ||
63 | + margin-left: 0; | ||
64 | +} | ||
65 | + | ||
66 | +[dir="rtl"] .main.shifted > #nav-sidebar { | ||
67 | + left: 0; | ||
68 | + right: 24px; | ||
69 | + margin-right: 0; | ||
70 | +} | ||
71 | + | ||
72 | +#nav-sidebar .module th { | ||
73 | + width: 100%; | ||
74 | + overflow-wrap: anywhere; | ||
75 | +} | ||
76 | + | ||
77 | +#nav-sidebar .module th, | ||
78 | +#nav-sidebar .module caption { | ||
79 | + padding-left: 16px; | ||
80 | +} | ||
81 | + | ||
82 | +#nav-sidebar .module td { | ||
83 | + white-space: nowrap; | ||
84 | +} | ||
85 | + | ||
86 | +[dir="rtl"] #nav-sidebar .module th, | ||
87 | +[dir="rtl"] #nav-sidebar .module caption { | ||
88 | + padding-left: 8px; | ||
89 | + padding-right: 16px; | ||
90 | +} | ||
91 | + | ||
92 | +#nav-sidebar .current-app .section:link, | ||
93 | +#nav-sidebar .current-app .section:visited { | ||
94 | + color: #ffc; | ||
95 | + font-weight: bold; | ||
96 | +} | ||
97 | + | ||
98 | +#nav-sidebar .current-model { | ||
99 | + background: #ffc; | ||
100 | +} | ||
101 | + | ||
102 | +@media (max-width: 767px) { | ||
103 | + #nav-sidebar, #toggle-nav-sidebar { | ||
104 | + display: none; | ||
105 | + } | ||
106 | +} | ||
107 | + | ||
108 | +.change-list .main > #nav-sidebar+.content { | ||
109 | + overflow: hidden; | ||
110 | +} |
static/admin/css/responsive.css
0 → 100644
1 | +/* Tablets */ | ||
2 | + | ||
3 | +input[type="submit"], button { | ||
4 | + -webkit-appearance: none; | ||
5 | + appearance: none; | ||
6 | +} | ||
7 | + | ||
8 | +@media (max-width: 1024px) { | ||
9 | + /* Basic */ | ||
10 | + | ||
11 | + html { | ||
12 | + -webkit-text-size-adjust: 100%; | ||
13 | + } | ||
14 | + | ||
15 | + td, th { | ||
16 | + padding: 10px; | ||
17 | + font-size: 14px; | ||
18 | + } | ||
19 | + | ||
20 | + .small { | ||
21 | + font-size: 12px; | ||
22 | + } | ||
23 | + | ||
24 | + /* Layout */ | ||
25 | + | ||
26 | + #container { | ||
27 | + min-width: 0; | ||
28 | + } | ||
29 | + | ||
30 | + #content { | ||
31 | + padding: 20px 30px 30px; | ||
32 | + } | ||
33 | + | ||
34 | + div.breadcrumbs { | ||
35 | + padding: 10px 30px; | ||
36 | + } | ||
37 | + | ||
38 | + /* Header */ | ||
39 | + | ||
40 | + #header { | ||
41 | + flex-direction: column; | ||
42 | + padding: 15px 30px; | ||
43 | + justify-content: flex-start; | ||
44 | + } | ||
45 | + | ||
46 | + #branding h1 { | ||
47 | + margin: 0 0 8px; | ||
48 | + font-size: 20px; | ||
49 | + line-height: 1.2; | ||
50 | + } | ||
51 | + | ||
52 | + #user-tools { | ||
53 | + margin: 0; | ||
54 | + font-weight: 400; | ||
55 | + line-height: 1.85; | ||
56 | + text-align: left; | ||
57 | + } | ||
58 | + | ||
59 | + #user-tools a { | ||
60 | + display: inline-block; | ||
61 | + line-height: 1.4; | ||
62 | + } | ||
63 | + | ||
64 | + /* Dashboard */ | ||
65 | + | ||
66 | + .dashboard #content { | ||
67 | + width: auto; | ||
68 | + } | ||
69 | + | ||
70 | + #content-related { | ||
71 | + margin-right: -290px; | ||
72 | + } | ||
73 | + | ||
74 | + .colSM #content-related { | ||
75 | + margin-left: -290px; | ||
76 | + } | ||
77 | + | ||
78 | + .colMS { | ||
79 | + margin-right: 290px; | ||
80 | + } | ||
81 | + | ||
82 | + .colSM { | ||
83 | + margin-left: 290px; | ||
84 | + } | ||
85 | + | ||
86 | + .dashboard .module table td a { | ||
87 | + padding-right: 0; | ||
88 | + } | ||
89 | + | ||
90 | + td .changelink, td .addlink { | ||
91 | + font-size: 13px; | ||
92 | + } | ||
93 | + | ||
94 | + /* Changelist */ | ||
95 | + | ||
96 | + #changelist #toolbar { | ||
97 | + border: none; | ||
98 | + padding: 15px; | ||
99 | + } | ||
100 | + | ||
101 | + #changelist-search > div { | ||
102 | + display: flex; | ||
103 | + flex-wrap: wrap; | ||
104 | + max-width: 480px; | ||
105 | + } | ||
106 | + | ||
107 | + #changelist-search label { | ||
108 | + line-height: 22px; | ||
109 | + } | ||
110 | + | ||
111 | + #changelist #toolbar form #searchbar { | ||
112 | + flex: 1 0 auto; | ||
113 | + width: 0; | ||
114 | + height: 22px; | ||
115 | + margin: 0 10px 0 6px; | ||
116 | + } | ||
117 | + | ||
118 | + #changelist-search .quiet { | ||
119 | + width: 100%; | ||
120 | + margin: 5px 0 0 25px; | ||
121 | + } | ||
122 | + | ||
123 | + #changelist .actions { | ||
124 | + display: flex; | ||
125 | + flex-wrap: wrap; | ||
126 | + padding: 15px 0; | ||
127 | + } | ||
128 | + | ||
129 | + #changelist .actions.selected { | ||
130 | + border: none; | ||
131 | + } | ||
132 | + | ||
133 | + #changelist .actions label { | ||
134 | + display: flex; | ||
135 | + } | ||
136 | + | ||
137 | + #changelist .actions select { | ||
138 | + background: #fff; | ||
139 | + } | ||
140 | + | ||
141 | + #changelist .actions .button { | ||
142 | + min-width: 48px; | ||
143 | + margin: 0 10px; | ||
144 | + } | ||
145 | + | ||
146 | + #changelist .actions span.all, | ||
147 | + #changelist .actions span.clear, | ||
148 | + #changelist .actions span.question, | ||
149 | + #changelist .actions span.action-counter { | ||
150 | + font-size: 11px; | ||
151 | + margin: 0 10px 0 0; | ||
152 | + } | ||
153 | + | ||
154 | + #changelist-filter { | ||
155 | + width: 200px; | ||
156 | + } | ||
157 | + | ||
158 | + .change-list .filtered .results, | ||
159 | + .change-list .filtered .paginator, | ||
160 | + .filtered #toolbar, | ||
161 | + .filtered .actions, | ||
162 | + .filtered div.xfull { | ||
163 | + margin-right: 230px; | ||
164 | + } | ||
165 | + | ||
166 | + #changelist .paginator { | ||
167 | + border-top-color: #eee; | ||
168 | + } | ||
169 | + | ||
170 | + #changelist .results + .paginator { | ||
171 | + border-top: none; | ||
172 | + } | ||
173 | + | ||
174 | + /* Forms */ | ||
175 | + | ||
176 | + label { | ||
177 | + font-size: 14px; | ||
178 | + } | ||
179 | + | ||
180 | + .form-row input[type=text], | ||
181 | + .form-row input[type=password], | ||
182 | + .form-row input[type=email], | ||
183 | + .form-row input[type=url], | ||
184 | + .form-row input[type=tel], | ||
185 | + .form-row input[type=number], | ||
186 | + .form-row textarea, | ||
187 | + .form-row select, | ||
188 | + .form-row .vTextField { | ||
189 | + box-sizing: border-box; | ||
190 | + margin: 0; | ||
191 | + padding: 6px 8px; | ||
192 | + min-height: 36px; | ||
193 | + font-size: 14px; | ||
194 | + } | ||
195 | + | ||
196 | + .form-row select { | ||
197 | + height: 36px; | ||
198 | + } | ||
199 | + | ||
200 | + .form-row select[multiple] { | ||
201 | + height: auto; | ||
202 | + min-height: 0; | ||
203 | + } | ||
204 | + | ||
205 | + fieldset .fieldBox { | ||
206 | + float: none; | ||
207 | + margin: 0 -10px; | ||
208 | + padding: 0 10px; | ||
209 | + } | ||
210 | + | ||
211 | + fieldset .fieldBox + .fieldBox { | ||
212 | + margin-top: 10px; | ||
213 | + padding-top: 10px; | ||
214 | + border-top: 1px solid #eee; | ||
215 | + } | ||
216 | + | ||
217 | + textarea { | ||
218 | + max-width: 518px; | ||
219 | + max-height: 120px; | ||
220 | + } | ||
221 | + | ||
222 | + .aligned label { | ||
223 | + padding-top: 6px; | ||
224 | + } | ||
225 | + | ||
226 | + .aligned .related-lookup, | ||
227 | + .aligned .datetimeshortcuts, | ||
228 | + .aligned .related-lookup + strong { | ||
229 | + align-self: center; | ||
230 | + margin-left: 15px; | ||
231 | + } | ||
232 | + | ||
233 | + form .aligned ul.radiolist { | ||
234 | + margin-left: 2px; | ||
235 | + } | ||
236 | + | ||
237 | + /* Related widget */ | ||
238 | + | ||
239 | + .related-widget-wrapper { | ||
240 | + float: none; | ||
241 | + } | ||
242 | + | ||
243 | + .related-widget-wrapper-link + .selector { | ||
244 | + max-width: calc(100% - 30px); | ||
245 | + margin-right: 15px; | ||
246 | + } | ||
247 | + | ||
248 | + select + .related-widget-wrapper-link, | ||
249 | + .related-widget-wrapper-link + .related-widget-wrapper-link { | ||
250 | + margin-left: 10px; | ||
251 | + } | ||
252 | + | ||
253 | + /* Selector */ | ||
254 | + | ||
255 | + .selector { | ||
256 | + display: flex; | ||
257 | + width: 100%; | ||
258 | + } | ||
259 | + | ||
260 | + .selector .selector-filter { | ||
261 | + display: flex; | ||
262 | + align-items: center; | ||
263 | + } | ||
264 | + | ||
265 | + .selector .selector-filter label { | ||
266 | + margin: 0 8px 0 0; | ||
267 | + } | ||
268 | + | ||
269 | + .selector .selector-filter input { | ||
270 | + width: auto; | ||
271 | + min-height: 0; | ||
272 | + flex: 1 1; | ||
273 | + } | ||
274 | + | ||
275 | + .selector-available, .selector-chosen { | ||
276 | + width: auto; | ||
277 | + flex: 1 1; | ||
278 | + display: flex; | ||
279 | + flex-direction: column; | ||
280 | + } | ||
281 | + | ||
282 | + .selector select { | ||
283 | + width: 100%; | ||
284 | + flex: 1 0 auto; | ||
285 | + margin-bottom: 5px; | ||
286 | + } | ||
287 | + | ||
288 | + .selector ul.selector-chooser { | ||
289 | + width: 26px; | ||
290 | + height: 52px; | ||
291 | + padding: 2px 0; | ||
292 | + margin: auto 15px; | ||
293 | + border-radius: 20px; | ||
294 | + transform: translateY(-10px); | ||
295 | + } | ||
296 | + | ||
297 | + .selector-add, .selector-remove { | ||
298 | + width: 20px; | ||
299 | + height: 20px; | ||
300 | + background-size: 20px auto; | ||
301 | + } | ||
302 | + | ||
303 | + .selector-add { | ||
304 | + background-position: 0 -120px; | ||
305 | + } | ||
306 | + | ||
307 | + .selector-remove { | ||
308 | + background-position: 0 -80px; | ||
309 | + } | ||
310 | + | ||
311 | + a.selector-chooseall, a.selector-clearall { | ||
312 | + align-self: center; | ||
313 | + } | ||
314 | + | ||
315 | + .stacked { | ||
316 | + flex-direction: column; | ||
317 | + max-width: 480px; | ||
318 | + } | ||
319 | + | ||
320 | + .stacked > * { | ||
321 | + flex: 0 1 auto; | ||
322 | + } | ||
323 | + | ||
324 | + .stacked select { | ||
325 | + margin-bottom: 0; | ||
326 | + } | ||
327 | + | ||
328 | + .stacked .selector-available, .stacked .selector-chosen { | ||
329 | + width: auto; | ||
330 | + } | ||
331 | + | ||
332 | + .stacked ul.selector-chooser { | ||
333 | + width: 52px; | ||
334 | + height: 26px; | ||
335 | + padding: 0 2px; | ||
336 | + margin: 15px auto; | ||
337 | + transform: none; | ||
338 | + } | ||
339 | + | ||
340 | + .stacked .selector-chooser li { | ||
341 | + padding: 3px; | ||
342 | + } | ||
343 | + | ||
344 | + .stacked .selector-add, .stacked .selector-remove { | ||
345 | + background-size: 20px auto; | ||
346 | + } | ||
347 | + | ||
348 | + .stacked .selector-add { | ||
349 | + background-position: 0 -40px; | ||
350 | + } | ||
351 | + | ||
352 | + .stacked .active.selector-add { | ||
353 | + background-position: 0 -40px; | ||
354 | + } | ||
355 | + | ||
356 | + .active.selector-add:focus, .active.selector-add:hover { | ||
357 | + background-position: 0 -140px; | ||
358 | + } | ||
359 | + | ||
360 | + .stacked .active.selector-add:focus, .stacked .active.selector-add:hover { | ||
361 | + background-position: 0 -60px; | ||
362 | + } | ||
363 | + | ||
364 | + .stacked .selector-remove { | ||
365 | + background-position: 0 0; | ||
366 | + } | ||
367 | + | ||
368 | + .stacked .active.selector-remove { | ||
369 | + background-position: 0 0; | ||
370 | + } | ||
371 | + | ||
372 | + .active.selector-remove:focus, .active.selector-remove:hover { | ||
373 | + background-position: 0 -100px; | ||
374 | + } | ||
375 | + | ||
376 | + .stacked .active.selector-remove:focus, .stacked .active.selector-remove:hover { | ||
377 | + background-position: 0 -20px; | ||
378 | + } | ||
379 | + | ||
380 | + .help-tooltip, .selector .help-icon { | ||
381 | + display: none; | ||
382 | + } | ||
383 | + | ||
384 | + form .form-row p.datetime { | ||
385 | + width: 100%; | ||
386 | + } | ||
387 | + | ||
388 | + .datetime input { | ||
389 | + width: 50%; | ||
390 | + max-width: 120px; | ||
391 | + } | ||
392 | + | ||
393 | + .datetime span { | ||
394 | + font-size: 13px; | ||
395 | + } | ||
396 | + | ||
397 | + .datetime .timezonewarning { | ||
398 | + display: block; | ||
399 | + font-size: 11px; | ||
400 | + color: #999; | ||
401 | + } | ||
402 | + | ||
403 | + .datetimeshortcuts { | ||
404 | + color: #ccc; | ||
405 | + } | ||
406 | + | ||
407 | + .form-row .datetime input.vDateField, .form-row .datetime input.vTimeField { | ||
408 | + width: 75%; | ||
409 | + } | ||
410 | + | ||
411 | + .inline-group { | ||
412 | + overflow: auto; | ||
413 | + } | ||
414 | + | ||
415 | + /* Messages */ | ||
416 | + | ||
417 | + ul.messagelist li { | ||
418 | + padding-left: 55px; | ||
419 | + background-position: 30px 12px; | ||
420 | + } | ||
421 | + | ||
422 | + ul.messagelist li.error { | ||
423 | + background-position: 30px 12px; | ||
424 | + } | ||
425 | + | ||
426 | + ul.messagelist li.warning { | ||
427 | + background-position: 30px 14px; | ||
428 | + } | ||
429 | + | ||
430 | + /* Login */ | ||
431 | + | ||
432 | + .login #header { | ||
433 | + padding: 15px 20px; | ||
434 | + } | ||
435 | + | ||
436 | + .login #branding h1 { | ||
437 | + margin: 0; | ||
438 | + } | ||
439 | + | ||
440 | + /* GIS */ | ||
441 | + | ||
442 | + div.olMap { | ||
443 | + max-width: calc(100vw - 30px); | ||
444 | + max-height: 300px; | ||
445 | + } | ||
446 | + | ||
447 | + .olMap + .clear_features { | ||
448 | + display: block; | ||
449 | + margin-top: 10px; | ||
450 | + } | ||
451 | + | ||
452 | + /* Docs */ | ||
453 | + | ||
454 | + .module table.xfull { | ||
455 | + width: 100%; | ||
456 | + } | ||
457 | + | ||
458 | + pre.literal-block { | ||
459 | + overflow: auto; | ||
460 | + } | ||
461 | +} | ||
462 | + | ||
463 | +/* Mobile */ | ||
464 | + | ||
465 | +@media (max-width: 767px) { | ||
466 | + /* Layout */ | ||
467 | + | ||
468 | + #header, #content, #footer { | ||
469 | + padding: 15px; | ||
470 | + } | ||
471 | + | ||
472 | + #footer:empty { | ||
473 | + padding: 0; | ||
474 | + } | ||
475 | + | ||
476 | + div.breadcrumbs { | ||
477 | + padding: 10px 15px; | ||
478 | + } | ||
479 | + | ||
480 | + /* Dashboard */ | ||
481 | + | ||
482 | + .colMS, .colSM { | ||
483 | + margin: 0; | ||
484 | + } | ||
485 | + | ||
486 | + #content-related, .colSM #content-related { | ||
487 | + width: 100%; | ||
488 | + margin: 0; | ||
489 | + } | ||
490 | + | ||
491 | + #content-related .module { | ||
492 | + margin-bottom: 0; | ||
493 | + } | ||
494 | + | ||
495 | + #content-related .module h2 { | ||
496 | + padding: 10px 15px; | ||
497 | + font-size: 16px; | ||
498 | + } | ||
499 | + | ||
500 | + /* Changelist */ | ||
501 | + | ||
502 | + #changelist { | ||
503 | + display: flex; | ||
504 | + flex-direction: column; | ||
505 | + } | ||
506 | + | ||
507 | + #changelist #toolbar { | ||
508 | + order: 1; | ||
509 | + padding: 10px; | ||
510 | + } | ||
511 | + | ||
512 | + #changelist .xfull { | ||
513 | + order: 2; | ||
514 | + } | ||
515 | + | ||
516 | + #changelist-form { | ||
517 | + order: 3; | ||
518 | + } | ||
519 | + | ||
520 | + #changelist-filter { | ||
521 | + order: 4; | ||
522 | + } | ||
523 | + | ||
524 | + #changelist .actions label { | ||
525 | + flex: 1 1; | ||
526 | + } | ||
527 | + | ||
528 | + #changelist .actions select { | ||
529 | + flex: 1 0; | ||
530 | + width: 100%; | ||
531 | + } | ||
532 | + | ||
533 | + #changelist .actions span { | ||
534 | + flex: 1 0 100%; | ||
535 | + } | ||
536 | + | ||
537 | + .change-list .filtered .results, .change-list .filtered .paginator, | ||
538 | + .filtered #toolbar, .filtered .actions, .filtered div.xfull { | ||
539 | + margin-right: 0; | ||
540 | + } | ||
541 | + | ||
542 | + #changelist-filter { | ||
543 | + position: static; | ||
544 | + width: auto; | ||
545 | + margin-top: 30px; | ||
546 | + } | ||
547 | + | ||
548 | + .object-tools { | ||
549 | + float: none; | ||
550 | + margin: 0 0 15px; | ||
551 | + padding: 0; | ||
552 | + overflow: hidden; | ||
553 | + } | ||
554 | + | ||
555 | + .object-tools li { | ||
556 | + height: auto; | ||
557 | + margin-left: 0; | ||
558 | + } | ||
559 | + | ||
560 | + .object-tools li + li { | ||
561 | + margin-left: 15px; | ||
562 | + } | ||
563 | + | ||
564 | + /* Forms */ | ||
565 | + | ||
566 | + .form-row { | ||
567 | + padding: 15px 0; | ||
568 | + } | ||
569 | + | ||
570 | + .aligned .form-row, | ||
571 | + .aligned .form-row > div { | ||
572 | + display: flex; | ||
573 | + flex-wrap: wrap; | ||
574 | + max-width: 100vw; | ||
575 | + } | ||
576 | + | ||
577 | + .aligned .form-row > div { | ||
578 | + width: calc(100vw - 30px); | ||
579 | + } | ||
580 | + | ||
581 | + textarea { | ||
582 | + max-width: none; | ||
583 | + } | ||
584 | + | ||
585 | + .vURLField { | ||
586 | + width: auto; | ||
587 | + } | ||
588 | + | ||
589 | + fieldset .fieldBox + .fieldBox { | ||
590 | + margin-top: 15px; | ||
591 | + padding-top: 15px; | ||
592 | + } | ||
593 | + | ||
594 | + fieldset.collapsed .form-row { | ||
595 | + display: none; | ||
596 | + } | ||
597 | + | ||
598 | + .aligned label { | ||
599 | + width: 100%; | ||
600 | + padding: 0 0 10px; | ||
601 | + } | ||
602 | + | ||
603 | + .aligned label:after { | ||
604 | + max-height: 0; | ||
605 | + } | ||
606 | + | ||
607 | + .aligned .form-row input, | ||
608 | + .aligned .form-row select, | ||
609 | + .aligned .form-row textarea { | ||
610 | + flex: 1 1 auto; | ||
611 | + max-width: 100%; | ||
612 | + } | ||
613 | + | ||
614 | + .aligned .checkbox-row { | ||
615 | + align-items: center; | ||
616 | + } | ||
617 | + | ||
618 | + .aligned .checkbox-row input { | ||
619 | + flex: 0 1 auto; | ||
620 | + margin: 0; | ||
621 | + } | ||
622 | + | ||
623 | + .aligned .vCheckboxLabel { | ||
624 | + flex: 1 0; | ||
625 | + padding: 1px 0 0 5px; | ||
626 | + } | ||
627 | + | ||
628 | + .aligned label + p, | ||
629 | + .aligned label + div.help, | ||
630 | + .aligned label + div.readonly { | ||
631 | + padding: 0; | ||
632 | + margin-left: 0; | ||
633 | + } | ||
634 | + | ||
635 | + .aligned p.file-upload { | ||
636 | + margin-left: 0; | ||
637 | + font-size: 13px; | ||
638 | + } | ||
639 | + | ||
640 | + span.clearable-file-input { | ||
641 | + margin-left: 15px; | ||
642 | + } | ||
643 | + | ||
644 | + span.clearable-file-input label { | ||
645 | + font-size: 13px; | ||
646 | + padding-bottom: 0; | ||
647 | + } | ||
648 | + | ||
649 | + .aligned .timezonewarning { | ||
650 | + flex: 1 0 100%; | ||
651 | + margin-top: 5px; | ||
652 | + } | ||
653 | + | ||
654 | + form .aligned .form-row div.help { | ||
655 | + width: 100%; | ||
656 | + margin: 5px 0 0; | ||
657 | + padding: 0; | ||
658 | + } | ||
659 | + | ||
660 | + form .aligned ul { | ||
661 | + margin-left: 0; | ||
662 | + padding-left: 0; | ||
663 | + } | ||
664 | + | ||
665 | + form .aligned ul.radiolist { | ||
666 | + margin-right: 15px; | ||
667 | + margin-bottom: -3px; | ||
668 | + } | ||
669 | + | ||
670 | + form .aligned ul.radiolist li + li { | ||
671 | + margin-top: 5px; | ||
672 | + } | ||
673 | + | ||
674 | + /* Related widget */ | ||
675 | + | ||
676 | + .related-widget-wrapper { | ||
677 | + width: 100%; | ||
678 | + display: flex; | ||
679 | + align-items: flex-start; | ||
680 | + } | ||
681 | + | ||
682 | + .related-widget-wrapper .selector { | ||
683 | + order: 1; | ||
684 | + } | ||
685 | + | ||
686 | + .related-widget-wrapper > a { | ||
687 | + order: 2; | ||
688 | + } | ||
689 | + | ||
690 | + .related-widget-wrapper .radiolist ~ a { | ||
691 | + align-self: flex-end; | ||
692 | + } | ||
693 | + | ||
694 | + .related-widget-wrapper > select ~ a { | ||
695 | + align-self: center; | ||
696 | + } | ||
697 | + | ||
698 | + select + .related-widget-wrapper-link, | ||
699 | + .related-widget-wrapper-link + .related-widget-wrapper-link { | ||
700 | + margin-left: 15px; | ||
701 | + } | ||
702 | + | ||
703 | + /* Selector */ | ||
704 | + | ||
705 | + .selector { | ||
706 | + flex-direction: column; | ||
707 | + } | ||
708 | + | ||
709 | + .selector > * { | ||
710 | + float: none; | ||
711 | + } | ||
712 | + | ||
713 | + .selector-available, .selector-chosen { | ||
714 | + margin-bottom: 0; | ||
715 | + flex: 1 1 auto; | ||
716 | + } | ||
717 | + | ||
718 | + .selector select { | ||
719 | + max-height: 96px; | ||
720 | + } | ||
721 | + | ||
722 | + .selector ul.selector-chooser { | ||
723 | + display: block; | ||
724 | + float: none; | ||
725 | + width: 52px; | ||
726 | + height: 26px; | ||
727 | + padding: 0 2px; | ||
728 | + margin: 15px auto 20px; | ||
729 | + transform: none; | ||
730 | + } | ||
731 | + | ||
732 | + .selector ul.selector-chooser li { | ||
733 | + float: left; | ||
734 | + } | ||
735 | + | ||
736 | + .selector-remove { | ||
737 | + background-position: 0 0; | ||
738 | + } | ||
739 | + | ||
740 | + .active.selector-remove:focus, .active.selector-remove:hover { | ||
741 | + background-position: 0 -20px; | ||
742 | + } | ||
743 | + | ||
744 | + .selector-add { | ||
745 | + background-position: 0 -40px; | ||
746 | + } | ||
747 | + | ||
748 | + .active.selector-add:focus, .active.selector-add:hover { | ||
749 | + background-position: 0 -60px; | ||
750 | + } | ||
751 | + | ||
752 | + /* Inlines */ | ||
753 | + | ||
754 | + .inline-group[data-inline-type="stacked"] .inline-related { | ||
755 | + border: 2px solid #eee; | ||
756 | + border-radius: 4px; | ||
757 | + margin-top: 15px; | ||
758 | + overflow: auto; | ||
759 | + } | ||
760 | + | ||
761 | + .inline-group[data-inline-type="stacked"] .inline-related > * { | ||
762 | + box-sizing: border-box; | ||
763 | + } | ||
764 | + | ||
765 | + .inline-group[data-inline-type="stacked"] .inline-related + .inline-related { | ||
766 | + margin-top: 30px; | ||
767 | + } | ||
768 | + | ||
769 | + .inline-group[data-inline-type="stacked"] .inline-related .module { | ||
770 | + padding: 0 10px; | ||
771 | + } | ||
772 | + | ||
773 | + .inline-group[data-inline-type="stacked"] .inline-related .module .form-row:last-child { | ||
774 | + border-bottom: none; | ||
775 | + } | ||
776 | + | ||
777 | + .inline-group[data-inline-type="stacked"] .inline-related h3 { | ||
778 | + padding: 10px; | ||
779 | + border-top-width: 0; | ||
780 | + border-bottom-width: 2px; | ||
781 | + display: flex; | ||
782 | + flex-wrap: wrap; | ||
783 | + align-items: center; | ||
784 | + } | ||
785 | + | ||
786 | + .inline-group[data-inline-type="stacked"] .inline-related h3 .inline_label { | ||
787 | + margin-right: auto; | ||
788 | + } | ||
789 | + | ||
790 | + .inline-group[data-inline-type="stacked"] .inline-related h3 span.delete { | ||
791 | + float: none; | ||
792 | + flex: 1 1 100%; | ||
793 | + margin-top: 5px; | ||
794 | + } | ||
795 | + | ||
796 | + .inline-group[data-inline-type="stacked"] .aligned .form-row > div:not([class]) { | ||
797 | + width: 100%; | ||
798 | + } | ||
799 | + | ||
800 | + .inline-group[data-inline-type="stacked"] .aligned label { | ||
801 | + width: 100%; | ||
802 | + } | ||
803 | + | ||
804 | + .inline-group[data-inline-type="stacked"] div.add-row { | ||
805 | + margin-top: 15px; | ||
806 | + border: 1px solid #eee; | ||
807 | + border-radius: 4px; | ||
808 | + } | ||
809 | + | ||
810 | + .inline-group div.add-row, | ||
811 | + .inline-group .tabular tr.add-row td { | ||
812 | + padding: 0; | ||
813 | + } | ||
814 | + | ||
815 | + .inline-group div.add-row a, | ||
816 | + .inline-group .tabular tr.add-row td a { | ||
817 | + display: block; | ||
818 | + padding: 8px 10px 8px 26px; | ||
819 | + background-position: 8px 9px; | ||
820 | + } | ||
821 | + | ||
822 | + /* Submit row */ | ||
823 | + | ||
824 | + .submit-row { | ||
825 | + padding: 10px 10px 0; | ||
826 | + margin: 0 0 15px; | ||
827 | + display: flex; | ||
828 | + flex-direction: column; | ||
829 | + } | ||
830 | + | ||
831 | + .submit-row > * { | ||
832 | + width: 100%; | ||
833 | + } | ||
834 | + | ||
835 | + .submit-row input, .submit-row input.default, .submit-row a, .submit-row a.closelink { | ||
836 | + float: none; | ||
837 | + margin: 0 0 10px; | ||
838 | + text-align: center; | ||
839 | + } | ||
840 | + | ||
841 | + .submit-row a.closelink { | ||
842 | + padding: 10px 0; | ||
843 | + } | ||
844 | + | ||
845 | + .submit-row p.deletelink-box { | ||
846 | + order: 4; | ||
847 | + } | ||
848 | + | ||
849 | + /* Messages */ | ||
850 | + | ||
851 | + ul.messagelist li { | ||
852 | + padding-left: 40px; | ||
853 | + background-position: 15px 12px; | ||
854 | + } | ||
855 | + | ||
856 | + ul.messagelist li.error { | ||
857 | + background-position: 15px 12px; | ||
858 | + } | ||
859 | + | ||
860 | + ul.messagelist li.warning { | ||
861 | + background-position: 15px 14px; | ||
862 | + } | ||
863 | + | ||
864 | + /* Paginator */ | ||
865 | + | ||
866 | + .paginator .this-page, .paginator a:link, .paginator a:visited { | ||
867 | + padding: 4px 10px; | ||
868 | + } | ||
869 | + | ||
870 | + /* Login */ | ||
871 | + | ||
872 | + body.login { | ||
873 | + padding: 0 15px; | ||
874 | + } | ||
875 | + | ||
876 | + .login #container { | ||
877 | + width: auto; | ||
878 | + max-width: 480px; | ||
879 | + margin: 50px auto; | ||
880 | + } | ||
881 | + | ||
882 | + .login #header, | ||
883 | + .login #content { | ||
884 | + padding: 15px; | ||
885 | + } | ||
886 | + | ||
887 | + .login #content-main { | ||
888 | + float: none; | ||
889 | + } | ||
890 | + | ||
891 | + .login .form-row { | ||
892 | + padding: 0; | ||
893 | + } | ||
894 | + | ||
895 | + .login .form-row + .form-row { | ||
896 | + margin-top: 15px; | ||
897 | + } | ||
898 | + | ||
899 | + .login .form-row label { | ||
900 | + display: block; | ||
901 | + margin: 0 0 5px; | ||
902 | + padding: 0; | ||
903 | + line-height: 1.2; | ||
904 | + } | ||
905 | + | ||
906 | + .login .submit-row { | ||
907 | + padding: 15px 0 0; | ||
908 | + } | ||
909 | + | ||
910 | + .login br, .login .submit-row label { | ||
911 | + display: none; | ||
912 | + } | ||
913 | + | ||
914 | + .login .submit-row input { | ||
915 | + margin: 0; | ||
916 | + text-transform: uppercase; | ||
917 | + } | ||
918 | + | ||
919 | + .errornote { | ||
920 | + margin: 0 0 20px; | ||
921 | + padding: 8px 12px; | ||
922 | + font-size: 13px; | ||
923 | + } | ||
924 | + | ||
925 | + /* Calendar and clock */ | ||
926 | + | ||
927 | + .calendarbox, .clockbox { | ||
928 | + position: fixed !important; | ||
929 | + top: 50% !important; | ||
930 | + left: 50% !important; | ||
931 | + transform: translate(-50%, -50%); | ||
932 | + margin: 0; | ||
933 | + border: none; | ||
934 | + overflow: visible; | ||
935 | + } | ||
936 | + | ||
937 | + .calendarbox:before, .clockbox:before { | ||
938 | + content: ''; | ||
939 | + position: fixed; | ||
940 | + top: 50%; | ||
941 | + left: 50%; | ||
942 | + width: 100vw; | ||
943 | + height: 100vh; | ||
944 | + background: rgba(0, 0, 0, 0.75); | ||
945 | + transform: translate(-50%, -50%); | ||
946 | + } | ||
947 | + | ||
948 | + .calendarbox > *, .clockbox > * { | ||
949 | + position: relative; | ||
950 | + z-index: 1; | ||
951 | + } | ||
952 | + | ||
953 | + .calendarbox > div:first-child { | ||
954 | + z-index: 2; | ||
955 | + } | ||
956 | + | ||
957 | + .calendarbox .calendar, .clockbox h2 { | ||
958 | + border-radius: 4px 4px 0 0; | ||
959 | + overflow: hidden; | ||
960 | + } | ||
961 | + | ||
962 | + .calendarbox .calendar-cancel, .clockbox .calendar-cancel { | ||
963 | + border-radius: 0 0 4px 4px; | ||
964 | + overflow: hidden; | ||
965 | + } | ||
966 | + | ||
967 | + .calendar-shortcuts { | ||
968 | + padding: 10px 0; | ||
969 | + font-size: 12px; | ||
970 | + line-height: 12px; | ||
971 | + } | ||
972 | + | ||
973 | + .calendar-shortcuts a { | ||
974 | + margin: 0 4px; | ||
975 | + } | ||
976 | + | ||
977 | + .timelist a { | ||
978 | + background: #fff; | ||
979 | + padding: 4px; | ||
980 | + } | ||
981 | + | ||
982 | + .calendar-cancel { | ||
983 | + padding: 8px 10px; | ||
984 | + } | ||
985 | + | ||
986 | + .clockbox h2 { | ||
987 | + padding: 8px 15px; | ||
988 | + } | ||
989 | + | ||
990 | + .calendar caption { | ||
991 | + padding: 10px; | ||
992 | + } | ||
993 | + | ||
994 | + .calendarbox .calendarnav-previous, .calendarbox .calendarnav-next { | ||
995 | + z-index: 1; | ||
996 | + top: 10px; | ||
997 | + } | ||
998 | + | ||
999 | + /* History */ | ||
1000 | + | ||
1001 | + table#change-history tbody th, table#change-history tbody td { | ||
1002 | + font-size: 13px; | ||
1003 | + word-break: break-word; | ||
1004 | + } | ||
1005 | + | ||
1006 | + table#change-history tbody th { | ||
1007 | + width: auto; | ||
1008 | + } | ||
1009 | + | ||
1010 | + /* Docs */ | ||
1011 | + | ||
1012 | + table.model tbody th, table.model tbody td { | ||
1013 | + font-size: 13px; | ||
1014 | + word-break: break-word; | ||
1015 | + } | ||
1016 | +} |
static/admin/css/responsive_rtl.css
0 → 100644
1 | +/* TABLETS */ | ||
2 | + | ||
3 | +@media (max-width: 1024px) { | ||
4 | + [dir="rtl"] .colMS { | ||
5 | + margin-right: 0; | ||
6 | + } | ||
7 | + | ||
8 | + [dir="rtl"] #user-tools { | ||
9 | + text-align: right; | ||
10 | + } | ||
11 | + | ||
12 | + [dir="rtl"] #changelist .actions label { | ||
13 | + padding-left: 10px; | ||
14 | + padding-right: 0; | ||
15 | + } | ||
16 | + | ||
17 | + [dir="rtl"] #changelist .actions select { | ||
18 | + margin-left: 0; | ||
19 | + margin-right: 15px; | ||
20 | + } | ||
21 | + | ||
22 | + [dir="rtl"] .change-list .filtered .results, | ||
23 | + [dir="rtl"] .change-list .filtered .paginator, | ||
24 | + [dir="rtl"] .filtered #toolbar, | ||
25 | + [dir="rtl"] .filtered div.xfull, | ||
26 | + [dir="rtl"] .filtered .actions { | ||
27 | + margin-right: 0; | ||
28 | + margin-left: 230px; | ||
29 | + } | ||
30 | + | ||
31 | + [dir="rtl"] .inline-group ul.tools a.add, | ||
32 | + [dir="rtl"] .inline-group div.add-row a, | ||
33 | + [dir="rtl"] .inline-group .tabular tr.add-row td a { | ||
34 | + padding: 8px 26px 8px 10px; | ||
35 | + background-position: calc(100% - 8px) 9px; | ||
36 | + } | ||
37 | + | ||
38 | + [dir="rtl"] .related-widget-wrapper-link + .selector { | ||
39 | + margin-right: 0; | ||
40 | + margin-left: 15px; | ||
41 | + } | ||
42 | + | ||
43 | + [dir="rtl"] .selector .selector-filter label { | ||
44 | + margin-right: 0; | ||
45 | + margin-left: 8px; | ||
46 | + } | ||
47 | + | ||
48 | + [dir="rtl"] .object-tools li { | ||
49 | + float: right; | ||
50 | + } | ||
51 | + | ||
52 | + [dir="rtl"] .object-tools li + li { | ||
53 | + margin-left: 0; | ||
54 | + margin-right: 15px; | ||
55 | + } | ||
56 | + | ||
57 | + [dir="rtl"] .dashboard .module table td a { | ||
58 | + padding-left: 0; | ||
59 | + padding-right: 16px; | ||
60 | + } | ||
61 | +} | ||
62 | + | ||
63 | +/* MOBILE */ | ||
64 | + | ||
65 | +@media (max-width: 767px) { | ||
66 | + [dir="rtl"] .change-list .filtered .results, | ||
67 | + [dir="rtl"] .change-list .filtered .paginator, | ||
68 | + [dir="rtl"] .filtered #toolbar, | ||
69 | + [dir="rtl"] .filtered div.xfull, | ||
70 | + [dir="rtl"] .filtered .actions { | ||
71 | + margin-left: 0; | ||
72 | + } | ||
73 | + | ||
74 | + [dir="rtl"] .aligned .related-lookup, | ||
75 | + [dir="rtl"] .aligned .datetimeshortcuts { | ||
76 | + margin-left: 0; | ||
77 | + margin-right: 15px; | ||
78 | + } | ||
79 | + | ||
80 | + [dir="rtl"] .aligned ul { | ||
81 | + margin-right: 0; | ||
82 | + } | ||
83 | +} |
static/admin/css/rtl.css
0 → 100644
1 | +body { | ||
2 | + direction: rtl; | ||
3 | +} | ||
4 | + | ||
5 | +/* LOGIN */ | ||
6 | + | ||
7 | +.login .form-row { | ||
8 | + float: right; | ||
9 | +} | ||
10 | + | ||
11 | +.login .form-row label { | ||
12 | + float: right; | ||
13 | + padding-left: 0.5em; | ||
14 | + padding-right: 0; | ||
15 | + text-align: left; | ||
16 | +} | ||
17 | + | ||
18 | +.login .submit-row { | ||
19 | + clear: both; | ||
20 | + padding: 1em 9.4em 0 0; | ||
21 | +} | ||
22 | + | ||
23 | +/* GLOBAL */ | ||
24 | + | ||
25 | +th { | ||
26 | + text-align: right; | ||
27 | +} | ||
28 | + | ||
29 | +.module h2, .module caption { | ||
30 | + text-align: right; | ||
31 | +} | ||
32 | + | ||
33 | +.module ul, .module ol { | ||
34 | + margin-left: 0; | ||
35 | + margin-right: 1.5em; | ||
36 | +} | ||
37 | + | ||
38 | +.viewlink, .addlink, .changelink { | ||
39 | + padding-left: 0; | ||
40 | + padding-right: 16px; | ||
41 | + background-position: 100% 1px; | ||
42 | +} | ||
43 | + | ||
44 | +.deletelink { | ||
45 | + padding-left: 0; | ||
46 | + padding-right: 16px; | ||
47 | + background-position: 100% 1px; | ||
48 | +} | ||
49 | + | ||
50 | +.object-tools { | ||
51 | + float: left; | ||
52 | +} | ||
53 | + | ||
54 | +thead th:first-child, | ||
55 | +tfoot td:first-child { | ||
56 | + border-left: none; | ||
57 | +} | ||
58 | + | ||
59 | +/* LAYOUT */ | ||
60 | + | ||
61 | +#user-tools { | ||
62 | + right: auto; | ||
63 | + left: 0; | ||
64 | + text-align: left; | ||
65 | +} | ||
66 | + | ||
67 | +div.breadcrumbs { | ||
68 | + text-align: right; | ||
69 | +} | ||
70 | + | ||
71 | +#content-main { | ||
72 | + float: right; | ||
73 | +} | ||
74 | + | ||
75 | +#content-related { | ||
76 | + float: left; | ||
77 | + margin-left: -300px; | ||
78 | + margin-right: auto; | ||
79 | +} | ||
80 | + | ||
81 | +.colMS { | ||
82 | + margin-left: 300px; | ||
83 | + margin-right: 0; | ||
84 | +} | ||
85 | + | ||
86 | +/* SORTABLE TABLES */ | ||
87 | + | ||
88 | +table thead th.sorted .sortoptions { | ||
89 | + float: left; | ||
90 | +} | ||
91 | + | ||
92 | +thead th.sorted .text { | ||
93 | + padding-right: 0; | ||
94 | + padding-left: 42px; | ||
95 | +} | ||
96 | + | ||
97 | +/* dashboard styles */ | ||
98 | + | ||
99 | +.dashboard .module table td a { | ||
100 | + padding-left: .6em; | ||
101 | + padding-right: 16px; | ||
102 | +} | ||
103 | + | ||
104 | +/* changelists styles */ | ||
105 | + | ||
106 | +.change-list .filtered table { | ||
107 | + border-left: none; | ||
108 | + border-right: 0px none; | ||
109 | +} | ||
110 | + | ||
111 | +#changelist-filter { | ||
112 | + right: auto; | ||
113 | + left: 0; | ||
114 | + border-left: none; | ||
115 | + border-right: none; | ||
116 | +} | ||
117 | + | ||
118 | +.change-list .filtered .results, .change-list .filtered .paginator, .filtered #toolbar, .filtered div.xfull { | ||
119 | + margin-right: 0; | ||
120 | + margin-left: 280px; | ||
121 | +} | ||
122 | + | ||
123 | +#changelist-filter li.selected { | ||
124 | + border-left: none; | ||
125 | + padding-left: 10px; | ||
126 | + margin-left: 0; | ||
127 | + border-right: 5px solid #eaeaea; | ||
128 | + padding-right: 10px; | ||
129 | + margin-right: -15px; | ||
130 | +} | ||
131 | + | ||
132 | +.filtered .actions { | ||
133 | + margin-left: 280px; | ||
134 | + margin-right: 0; | ||
135 | +} | ||
136 | + | ||
137 | +#changelist table tbody td:first-child, #changelist table tbody th:first-child { | ||
138 | + border-right: none; | ||
139 | + border-left: none; | ||
140 | +} | ||
141 | + | ||
142 | +/* FORMS */ | ||
143 | + | ||
144 | +.aligned label { | ||
145 | + padding: 0 0 3px 1em; | ||
146 | + float: right; | ||
147 | +} | ||
148 | + | ||
149 | +.submit-row { | ||
150 | + text-align: left | ||
151 | +} | ||
152 | + | ||
153 | +.submit-row p.deletelink-box { | ||
154 | + float: right; | ||
155 | +} | ||
156 | + | ||
157 | +.submit-row input.default { | ||
158 | + margin-left: 0; | ||
159 | +} | ||
160 | + | ||
161 | +.vDateField, .vTimeField { | ||
162 | + margin-left: 2px; | ||
163 | +} | ||
164 | + | ||
165 | +.aligned .form-row input { | ||
166 | + margin-left: 5px; | ||
167 | +} | ||
168 | + | ||
169 | +form .aligned p.help, form .aligned div.help { | ||
170 | + clear: right; | ||
171 | +} | ||
172 | + | ||
173 | +form .aligned ul { | ||
174 | + margin-right: 163px; | ||
175 | + margin-left: 0; | ||
176 | +} | ||
177 | + | ||
178 | +form ul.inline li { | ||
179 | + float: right; | ||
180 | + padding-right: 0; | ||
181 | + padding-left: 7px; | ||
182 | +} | ||
183 | + | ||
184 | +input[type=submit].default, .submit-row input.default { | ||
185 | + float: left; | ||
186 | +} | ||
187 | + | ||
188 | +fieldset .fieldBox { | ||
189 | + float: right; | ||
190 | + margin-left: 20px; | ||
191 | + margin-right: 0; | ||
192 | +} | ||
193 | + | ||
194 | +.errorlist li { | ||
195 | + background-position: 100% 12px; | ||
196 | + padding: 0; | ||
197 | +} | ||
198 | + | ||
199 | +.errornote { | ||
200 | + background-position: 100% 12px; | ||
201 | + padding: 10px 12px; | ||
202 | +} | ||
203 | + | ||
204 | +/* WIDGETS */ | ||
205 | + | ||
206 | +.calendarnav-previous { | ||
207 | + top: 0; | ||
208 | + left: auto; | ||
209 | + right: 10px; | ||
210 | +} | ||
211 | + | ||
212 | +.calendarnav-next { | ||
213 | + top: 0; | ||
214 | + right: auto; | ||
215 | + left: 10px; | ||
216 | +} | ||
217 | + | ||
218 | +.calendar caption, .calendarbox h2 { | ||
219 | + text-align: center; | ||
220 | +} | ||
221 | + | ||
222 | +.selector { | ||
223 | + float: right; | ||
224 | +} | ||
225 | + | ||
226 | +.selector .selector-filter { | ||
227 | + text-align: right; | ||
228 | +} | ||
229 | + | ||
230 | +.inline-deletelink { | ||
231 | + float: left; | ||
232 | +} | ||
233 | + | ||
234 | +form .form-row p.datetime { | ||
235 | + overflow: hidden; | ||
236 | +} | ||
237 | + | ||
238 | +.related-widget-wrapper { | ||
239 | + float: right; | ||
240 | +} | ||
241 | + | ||
242 | +/* MISC */ | ||
243 | + | ||
244 | +.inline-related h2, .inline-group h2 { | ||
245 | + text-align: right | ||
246 | +} | ||
247 | + | ||
248 | +.inline-related h3 span.delete { | ||
249 | + padding-right: 20px; | ||
250 | + padding-left: inherit; | ||
251 | + left: 10px; | ||
252 | + right: inherit; | ||
253 | + float:left; | ||
254 | +} | ||
255 | + | ||
256 | +.inline-related h3 span.delete label { | ||
257 | + margin-left: inherit; | ||
258 | + margin-right: 2px; | ||
259 | +} |
1 | +The MIT License (MIT) | ||
2 | + | ||
3 | +Copyright (c) 2012-2017 Kevin Brown, Igor Vaynberg, and Select2 contributors | ||
4 | + | ||
5 | +Permission is hereby granted, free of charge, to any person obtaining a copy | ||
6 | +of this software and associated documentation files (the "Software"), to deal | ||
7 | +in the Software without restriction, including without limitation the rights | ||
8 | +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
9 | +copies of the Software, and to permit persons to whom the Software is | ||
10 | +furnished to do so, subject to the following conditions: | ||
11 | + | ||
12 | +The above copyright notice and this permission notice shall be included in | ||
13 | +all copies or substantial portions of the Software. | ||
14 | + | ||
15 | +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
16 | +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
17 | +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
18 | +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
19 | +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
20 | +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
21 | +THE SOFTWARE. |
-
请 注册 或 登录 后发表评论