Jet fork des offiziellen jet-admin projekts. Geupdated für Django4.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

419 lignes
23KB

  1. {% load i18n static jet_tags %}<!DOCTYPE html>
  2. {% get_current_language as LANGUAGE_CODE %}{% get_current_language_bidi as LANGUAGE_BIDI %}
  3. {% jet_get_current_theme as THEME %}
  4. {% jet_get_current_version as JET_VERSION %}
  5. {% block html %}<html lang="{{ LANGUAGE_CODE|default:"en-us" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
  6. <head>
  7. <title>{% block title %}{% endblock %}</title>
  8. <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
  9. <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
  10. <link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% static "admin/css/base.css" %}{% endblock %}" />
  11. <link rel="stylesheet" type="text/css" href="{% static "jet/css/vendor.css" as url %}{{ url|jet_append_version }}" />
  12. <link rel="stylesheet" type="text/css" href="{% static "jet/css/icons/style.css" as url %}{{ url|jet_append_version }}" />
  13. <link rel="stylesheet" type="text/css" href="{% static "jet/css/themes/"|add:THEME|add:"/base.css" as url %}{{ url|jet_append_version }}" class="base-stylesheet" />
  14. <link rel="stylesheet" type="text/css" href="{% static "jet/css/themes/"|add:THEME|add:"/select2.theme.css" as url %}{{ url|jet_append_version }}" class="select2-stylesheet" />
  15. <link rel="stylesheet" type="text/css" href="{% static "jet/css/themes/"|add:THEME|add:"/jquery-ui.theme.css" as url %}{{ url|jet_append_version }}" class="jquery-ui-stylesheet" />
  16. {% block extrastyle %}{% endblock %}
  17. {% if LANGUAGE_BIDI %}<link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% static "admin/css/rtl.css" %}{% endblock %}" />{% endif %}
  18. {% jet_get_date_format as date_format %}
  19. {% jet_get_time_format as time_format %}
  20. {% jet_get_datetime_format as datetime_format %}
  21. <script type="text/javascript" charset="utf-8">
  22. var DATE_FORMAT = "{{ date_format }}";
  23. var TIME_FORMAT = "{{ time_format }}";
  24. var DATETIME_FORMAT = "{{ datetime_format }}";
  25. </script>
  26. <script type="text/javascript" src="{% url 'jet:jsi18n' %}"></script>
  27. <script src="{% static "jet/js/build/bundle.min.js" as url %}{{ url|jet_append_version }}"></script>
  28. {% jet_static_translation_urls as translation_urls %}
  29. {% for url in translation_urls %}
  30. <script src="{% static url as url %}{{ url|jet_append_version }}"></script>
  31. {% endfor %}
  32. {% block extrahead %}{% endblock %}
  33. {% block blockbots %}<meta name="robots" content="NONE,NOARCHIVE" />{% endblock %}
  34. <!-- fixes some bug, see https://github.com/geex-arts/django-jet/issues/149 -->
  35. <script>
  36. django.gettext = window.gettext
  37. </script>
  38. </head>
  39. {% load i18n %}
  40. <body class="{% if request.COOKIES.sidebar_pinned != 'false' %}menu-pinned {% endif %}{% if is_popup %}popup {% endif %}{% block bodyclass %}{% endblock %}"
  41. data-admin-utc-offset="{% now "Z" %}">
  42. <!-- Container -->
  43. <div id="container">
  44. {% if not is_popup %}
  45. <!-- Header -->
  46. <div id="header">
  47. <div id="branding">
  48. <span id="branding-menu" class="sidebar-header-menu-icon icon-menu sidebar-toggle"></span>
  49. <span id="branding-pin" class="sidebar-link-icon icon-pin sidebar-pin"></span>
  50. {% block branding %}{% endblock %}
  51. </div>
  52. {% block usertools %}
  53. {% if user.is_active and user.is_staff or has_permission %}
  54. <div id="user-tools">
  55. {% block welcome-msg %}
  56. {% trans 'Welcome,' %}
  57. <strong>{% firstof user.get_short_name user.get_username %}</strong>.
  58. {% endblock %}
  59. {% block userlinks %}
  60. {% if site_url %}
  61. <a href="{{ site_url }}">{% trans 'View site' %}</a> /
  62. {% endif %}
  63. {% if user.is_active and user.is_staff %}
  64. {% url 'django-admindocs-docroot' as docsroot %}
  65. {% if docsroot %}
  66. <a href="{{ docsroot }}">{% trans 'Documentation' %}</a> /
  67. {% endif %}
  68. {% endif %}
  69. {% if user.has_usable_password %}
  70. <a href="{% url 'admin:password_change' %}">{% trans 'Change password' %}</a> /
  71. {% endif %}
  72. <a href="{% url 'admin:logout' %}">{% trans 'Log out' %}</a>
  73. {% endblock %}
  74. </div>
  75. {% endif %}
  76. {% endblock %}
  77. </div>
  78. <!-- END Header -->
  79. {% block breadcrumbs %}
  80. <div class="breadcrumbs">
  81. <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
  82. {% if title %} &rsaquo; {{ title }}{% endif %}
  83. </div>
  84. {% endblock %}
  85. {% endif %}
  86. {% block messages %}
  87. {% if messages %}
  88. <ul class="messagelist">{% for message in messages %}
  89. <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message|capfirst }}</li>
  90. {% endfor %}</ul>
  91. {% endif %}
  92. {% endblock messages %}
  93. <!-- Content -->
  94. <div id="content" class="{% block coltype %}colM{% endblock %}">
  95. {% block pretitle %}{% endblock %}
  96. {% block content_title %}{% if title %}<h1>{{ title }}</h1>{% endif %}{% endblock %}
  97. {% block content %}
  98. {% block object-tools %}{% endblock %}
  99. {{ content }}
  100. {% endblock %}
  101. {% block sidebar %}{% endblock %}
  102. <br class="clear" />
  103. </div>
  104. <!-- END Content -->
  105. {% block footer %}<div id="footer"></div>{% endblock %}
  106. {% jet_delete_confirmation_context as delete_confirmation_context %}
  107. {{ delete_confirmation_context }}
  108. {% jet_change_form_sibling_links_enabled as show_siblings %}
  109. {% if change and show_siblings %}
  110. <div class="changeform-navigation">
  111. {% spaceless %}
  112. {% jet_previous_object as sibling %}
  113. <a{% if sibling.url %} href="{{ sibling.url }}"{% endif %} class="changeform-navigation-button segmented-button left{% if not sibling %} disabled{% endif %}" title="{{ sibling.label }}">
  114. <span class="changeform-navigation-button-icon left icon-arrow-left"></span>
  115. <span class="changeform-navigation-button-label">
  116. {% if sibling %}
  117. {{ sibling.label }}
  118. {% else %}
  119. ---
  120. {% endif %}
  121. </span>
  122. </a>
  123. {% jet_next_object as sibling %}
  124. <a{% if sibling.url %} href="{{ sibling.url }}"{% endif %} class="changeform-navigation-button segmented-button right{% if not sibling %} disabled{% endif %}" title="{{ sibling.label }}">
  125. <span class="changeform-navigation-button-icon right icon-arrow-right"></span>
  126. <span class="changeform-navigation-button-label">
  127. {% if sibling %}
  128. {{ sibling.label }}
  129. {% else %}
  130. ---
  131. {% endif %}
  132. </span>
  133. </a>
  134. {% endspaceless %}
  135. </div>
  136. {% endif %}
  137. {% jet_get_side_menu_compact as SIDE_MENU_COMPACT %}
  138. {% if not is_popup %}
  139. <div class="related-popup-container scrollable">
  140. <a href="#" class="related-popup-back">
  141. <span class="related-popup-back-icon icon-arrow-left"></span>
  142. <span class="related-popup-back-label">{% trans "back" %}</span>
  143. </a>
  144. <span class="icon-refresh loading-indicator"></span>
  145. </div>
  146. <div class="sidebar-header-wrapper sidebar-dependent">
  147. <div class="sidebar-header sidebar-dependent">
  148. <a href="#" class="sidebar-header-menu sidebar-toggle">
  149. <span class="sidebar-header-menu-icon icon-menu"></span>
  150. <span class="sidebar-header-menu-icon icon-cross"></span>
  151. </a>
  152. </div>
  153. </div>
  154. <div class="sidebar sidebar-dependent">
  155. <div class="sidebar-wrapper scrollable">
  156. <div class="sidebar-section">
  157. {% if user.is_active and user.is_staff %}
  158. <a href="{% url 'admin:index' %}" class="sidebar-link icon">
  159. <span class="sidebar-link-label">
  160. <span class="sidebar-link-icon icon-data"></span>
  161. {% trans 'Home' %}
  162. </span>
  163. </a>
  164. {% endif %}
  165. {% if site_url %}
  166. <a href="{{ site_url }}" class="sidebar-link icon">
  167. <span class="sidebar-link-label">
  168. <span class="sidebar-link-icon icon-open-external"></span>
  169. {% trans 'View site' %}
  170. </span>
  171. </a>
  172. {% endif %}
  173. {% url 'django-admindocs-docroot' as docsroot %}
  174. {% if docsroot %}
  175. <a href="{{ docsroot }}" class="sidebar-link icon">
  176. <span class="sidebar-link-label">
  177. <span class="sidebar-link-icon icon-book"></span>
  178. {% trans 'Documentation' %}
  179. </span>
  180. </a>
  181. {% endif %}
  182. {% if user.is_active and user.is_staff %}
  183. {% if user.has_usable_password %}
  184. <a href="{% url 'admin:password_change' %}" class="sidebar-link icon">
  185. <span class="sidebar-link-label">
  186. <span class="sidebar-link-icon icon-settings"></span>
  187. {% trans 'Change password' %}
  188. </span>
  189. </a>
  190. {% endif %}
  191. <a href="{% url 'admin:logout' %}" class="sidebar-link icon">
  192. <span class="sidebar-link-label">
  193. <span class="sidebar-link-icon icon-cross"></span>
  194. {% trans 'Log out' %}
  195. </span>
  196. </a>
  197. {% endif %}
  198. {% block nav-global %}{% endblock %}
  199. </div>
  200. {% if user.is_active and user.is_staff %}
  201. {% jet_get_menu as app_list %}
  202. {% if SIDE_MENU_COMPACT %}
  203. {% for app in app_list %}
  204. {% if app.has_perms %}
  205. <div class="sidebar-section">
  206. <div class="sidebar-title">
  207. <a{% if app.url %} href="{{ app.url }}"{% endif %} class="sidebar-title-link"{% if app.url_blank %} target="_blank"{% endif %}>
  208. {{ app.label }}
  209. </a>
  210. </div>
  211. {% for model in app.items %}
  212. {% if model.has_perms %}
  213. <div>
  214. <a{% if model.url %} href="{{ model.url }}"{% endif %} class="sidebar-link"{% if model.url_blank %} target="_blank"{% endif %}>
  215. <span class="sidebar-right">
  216. <span class="sidebar-right-arrow icon-arrow-right"></span>
  217. </span>
  218. <span class="sidebar-link-label">{{ model.label }}</span>
  219. </a>
  220. </div>
  221. {% endif %}
  222. {% endfor %}
  223. </div>
  224. {% endif %}
  225. {% endfor %}
  226. {% else %}
  227. <form action="{% url "jet:toggle_application_pin" %}" method="POST" id="toggle-application-pin-form">
  228. {% csrf_token %}
  229. <input type="hidden" name="app_label">
  230. </form>
  231. <div class="sidebar-section">
  232. <div class="sidebar-title">
  233. <span class="sidebar-right">
  234. <a href="#" class="sidebar-right-edit edit-apps-list"><span class="icon-settings"></span></a>
  235. </span>
  236. {% trans 'Applications' %}
  237. </div>
  238. <div class="apps-list-pinned">
  239. {% for app in app_list %}
  240. {% if app.has_perms and app.pinned %}
  241. <a{% if app.url %} href="{{ app.url }}"{% endif %} class="sidebar-link popup-section-link app-item" data-app-label="{{ app.app_label }}" data-popup-section-class="sidebar-popup-section-{{ app.app_label }}" data-order="{{ forloop.counter }}"{% if app.url_blank %} target="_blank"{% endif %}>
  242. <span class="sidebar-left collapsible">
  243. <span class="sidebar-left-pin icon-star pin-toggle"></span>
  244. <span class="sidebar-left-unpin icon-cross pin-toggle"></span>
  245. </span>
  246. <span class="sidebar-right">
  247. <span class="sidebar-right-arrow icon-arrow-right"></span>
  248. </span>
  249. <span class="sidebar-link-label">
  250. {{ app.label }}
  251. </span>
  252. </a>
  253. {% endif %}
  254. {% endfor %}
  255. </div>
  256. <a href="#" class="sidebar-center-link apps-hide">
  257. <span class="apps-hide-label apps-visible">{% trans "Hide applications" %}</span>
  258. <span class="apps-hide-label apps-hidden">{% trans "Show hidden" %}</span>
  259. </a>
  260. <div class="apps-list">
  261. {% for app in app_list %}
  262. {% if app.has_perms and not app.pinned %}
  263. <a{% if app.url %} href="{{ app.url }}"{% endif %} class="sidebar-link popup-section-link app-item" data-app-label="{{ app.app_label }}" data-popup-section-class="sidebar-popup-section-{{ app.app_label }}" data-order="{{ forloop.counter }}"{% if app.url_blank %} target="_blank"{% endif %}>
  264. <span class="sidebar-left collapsible">
  265. <span class="sidebar-left-pin icon-star pin-toggle"></span>
  266. <span class="sidebar-left-unpin icon-cross pin-toggle"></span>
  267. </span>
  268. <span class="sidebar-right">
  269. <span class="sidebar-right-arrow icon-arrow-right"></span>
  270. </span>
  271. <span class="sidebar-link-label">
  272. {{ app.label }}
  273. </span>
  274. </a>
  275. {% endif %}
  276. {% endfor %}
  277. </div>
  278. </div>
  279. {% endif %}
  280. <div class="sidebar-section last">
  281. <div class="dialog-confirm" id="bookmarks-add-dialog" title="{% trans "Add bookmark" %}">
  282. <form action="{% url "jet:add_bookmark" %}" method="POST" id="bookmarks-add-form">
  283. {% csrf_token %}
  284. <p>{% trans "Title" %}:</p>
  285. <input type="text" name="title" class="fill_width">
  286. <p>{% trans "URL" %}:</p>
  287. <input type="text" name="url" class="fill_width">
  288. </form>
  289. </div>
  290. <form action="{% url "jet:remove_bookmark" %}" method="POST" id="bookmarks-remove-form">
  291. {% csrf_token %}
  292. <input type="hidden" name="id">
  293. </form>
  294. <div class="dialog-confirm" id="bookmarks-remove-dialog" title="{% trans "Delete bookmark" %}">
  295. <p>{% trans "Are you sure want to delete this bookmark?" %}</p>
  296. </div>
  297. <div class="sidebar-title">
  298. <span class="sidebar-right">
  299. <a href="#" class="sidebar-right-plus bookmarks-add" title="{% trans "Add bookmark" %}"{% if title %} data-title="{{ title }}"{% endif %}><span class="icon-add"></span></a>
  300. </span>
  301. {% trans 'bookmarks' %}
  302. </div>
  303. <div class="bookmarks-list">
  304. {% jet_get_bookmarks user as bookmarks %}
  305. {% for bookmark in bookmarks %}
  306. <a href="{{ bookmark.url }}" class="sidebar-link bookmark-item">
  307. <span class="sidebar-right collapsible">
  308. <span class="sidebar-right-remove bookmarks-remove" data-bookmark-id="{{ bookmark.pk }}">{% trans "Remove" %}</span>
  309. </span>
  310. <span class="sidebar-link-label">{{ bookmark.title }}</span>
  311. </a>
  312. {% endfor %}
  313. <a class="sidebar-link bookmark-item clone">
  314. <span class="sidebar-right collapsible">
  315. <span class="sidebar-right-remove bookmarks-remove">{% trans "Remove" %}</span>
  316. </span>
  317. <span class="sidebar-link-label"></span>
  318. </a>
  319. </div>
  320. </div>
  321. {% endif %}
  322. </div>
  323. {% if app_list and not SIDE_MENU_COMPACT %}
  324. <div class="sidebar-popup-container">
  325. <div class="sidebar-popup scrollable">
  326. <a href="#" class="sidebar-close sidebar-back">
  327. <span class="sidebar-close-icon icon-arrow-left"></span>
  328. </a>
  329. {% for app in app_list %}
  330. {% if app.has_perms %}
  331. <div class="sidebar-popup-section sidebar-popup-section-{{ app.app_label }}">
  332. <div class="sidebar-popup-title">
  333. {{ app.label }}
  334. </div>
  335. <input class="sidebar-popup-search" placeholder="{% trans "Search" %}...">
  336. <ul class="sidebar-popup-list">
  337. {% if app.url %}
  338. <li class="sidebar-popup-list-item app-{{ app.app_label }}{{ app.current|yesno:" current," }}">
  339. <a href="{{ app.url }}" class="sidebar-popup-list-item-link">{% trans 'Application page' %}</a>
  340. </li>
  341. {% endif %}
  342. {% for model in app.items %}
  343. {% if model.has_perms %}
  344. <li class="sidebar-popup-list-item{% if model.name %} model-{{ model.name }}{% endif %}{{ model.current|yesno:" current," }}">
  345. <a{% if model.url %} href="{{ model.url }}"{% endif %} class="sidebar-popup-list-item-link"{% if model.url_blank %} target="_blank"{% endif %}>
  346. {{ model.label }}
  347. </a>
  348. </li>
  349. {% endif %}
  350. {% endfor %}
  351. </ul>
  352. </div>
  353. {% endif %}
  354. {% endfor %}
  355. </div>
  356. </div>
  357. {% endif %}
  358. </div>
  359. {% endif %}
  360. {% jet_get_themes as THEMES %}
  361. {% if THEMES %}
  362. <li class="user-tools-contrast-block theme-chooser">
  363. <div class="user-tools-contrast-block-title">{% trans "current theme" %}</div>
  364. <div class="user-tools-theme-link-container">
  365. {% spaceless %}
  366. {% for conf_theme in THEMES %}
  367. {% if conf_theme.theme %}
  368. <a href="#"
  369. class="user-tools-theme-link choose-theme{% if conf_theme.theme == THEME %} selected{% endif %}"
  370. data-theme="{{ conf_theme.theme }}"
  371. data-base-stylesheet="{% static "jet/css/themes/"|add:conf_theme.theme|add:"/base.css" %}?v={{ JET_VERSION }}"
  372. data-select2-stylesheet="{% static "jet/css/themes/"|add:conf_theme.theme|add:"/select2.theme.css" %}?v={{ JET_VERSION }}"
  373. data-jquery-ui-stylesheet="{% static "jet/css/themes/"|add:conf_theme.theme|add:"/jquery-ui.theme.css" %}?v={{ JET_VERSION }}"
  374. {% if conf_theme.title %} title="{{ conf_theme.title }}"{% endif %}
  375. style="background-color: {{ conf_theme.color|default:"white" }};"
  376. ></a>
  377. {% endif %}
  378. {% endfor %}
  379. {% endspaceless %}
  380. </div>
  381. </li>
  382. {% endif %}
  383. </div>
  384. <!-- END Container -->
  385. </body>
  386. </html>{% endblock %}