Просмотр исходного кода

Merge pull request #5764 from ypid/feature/5503-ui-iso-date-with-tooltip

Closes #5503: ISO 8601 date in UI and alternative format as tooltip
Jeremy Stretch 4 лет назад
Родитель
Сommit
eaf0259c3d

+ 2 - 3
netbox/extras/models/models.py

@@ -431,9 +431,8 @@ class JournalEntry(ChangeLoggedModel):
         verbose_name_plural = 'journal entries'
         verbose_name_plural = 'journal entries'
 
 
     def __str__(self):
     def __str__(self):
-        created_date = timezone.localdate(self.created)
-        created_time = timezone.localtime(self.created)
-        return f"{date_format(created_date)} - {time_format(created_time)} ({self.get_kind_display()})"
+        created = timezone.localtime(self.created)
+        return f"{date_format(created, format='SHORT_DATETIME_FORMAT')} ({self.get_kind_display()})"
 
 
     def get_absolute_url(self):
     def get_absolute_url(self):
         return reverse('extras:journalentry', args=[self.pk])
         return reverse('extras:journalentry', args=[self.pk])

+ 1 - 1
netbox/templates/base.html

@@ -67,7 +67,7 @@
                     <p class="text-muted">{{ settings.HOSTNAME }} (v{{ settings.VERSION }})</p>
                     <p class="text-muted">{{ settings.HOSTNAME }} (v{{ settings.VERSION }})</p>
                 </div>
                 </div>
                 <div class="col-xs-4 text-center">
                 <div class="col-xs-4 text-center">
-                    <p class="text-muted">{% now 'Y-m-d H:i:s T' %}</p>
+                    <p class="text-muted">{% annotated_now %} {% now 'T' %}</p>
                 </div>
                 </div>
                 <div class="col-xs-4 text-right noprint">
                 <div class="col-xs-4 text-right noprint">
                     <p class="text-muted">
                     <p class="text-muted">

+ 1 - 1
netbox/templates/circuits/circuit.html

@@ -51,7 +51,7 @@
                 </tr>
                 </tr>
                 <tr>
                 <tr>
                     <td>Install Date</td>
                     <td>Install Date</td>
-                    <td>{{ object.install_date|placeholder }}</td>
+                    <td>{{ object.install_date|annotated_date|placeholder }}</td>
                 </tr>
                 </tr>
                 <tr>
                 <tr>
                     <td>Commit Rate</td>
                     <td>Commit Rate</td>

+ 1 - 1
netbox/templates/dcim/rack.html

@@ -268,7 +268,7 @@
                             </td>
                             </td>
                             <td>
                             <td>
                                 {{ resv.description }}<br />
                                 {{ resv.description }}<br />
-                                <small>{{ resv.user }} &middot; {{ resv.created }}</small>
+                                <small>{{ resv.user }} &middot; {{ resv.created|annotated_date }}</small>
                             </td>
                             </td>
                             <td class="text-right noprint">
                             <td class="text-right noprint">
                                 {% if perms.dcim.change_rackreservation %}
                                 {% if perms.dcim.change_rackreservation %}

+ 5 - 1
netbox/templates/dcim/site.html

@@ -80,7 +80,11 @@
                     <td>
                     <td>
                         {% if object.time_zone %}
                         {% if object.time_zone %}
                             {{ object.time_zone }} (UTC {{ object.time_zone|tzoffset }})<br />
                             {{ object.time_zone }} (UTC {{ object.time_zone|tzoffset }})<br />
-                            <small class="text-muted">Site time: {% timezone object.time_zone %}{% now "SHORT_DATETIME_FORMAT" %}{% endtimezone %}</small>
+                            <small class="text-muted">Site time:
+                                {% timezone object.time_zone %}
+                                    {% annotated_now %}
+                                {% endtimezone %}
+                            </small>
                         {% else %}
                         {% else %}
                             <span class="text-muted">&mdash;</span>
                             <span class="text-muted">&mdash;</span>
                         {% endif %}
                         {% endif %}

+ 1 - 1
netbox/templates/extras/journalentry.html

@@ -25,7 +25,7 @@
                     <tr>
                     <tr>
                         <td>Created</td>
                         <td>Created</td>
                         <td>
                         <td>
-                            {{ object.created }}
+                            {{ object.created|annotated_date }}
                         </td>
                         </td>
                     </tr>
                     </tr>
                     <tr>
                     <tr>

+ 1 - 1
netbox/templates/extras/objectchange.html

@@ -44,7 +44,7 @@
                     <tr>
                     <tr>
                         <td>Time</td>
                         <td>Time</td>
                         <td>
                         <td>
-                            {{ object.time }}
+                            {{ object.time|annotated_date }}
                         </td>
                         </td>
                     </tr>
                     </tr>
                     <tr>
                     <tr>

+ 1 - 1
netbox/templates/extras/report.html

@@ -38,7 +38,7 @@
         <div class="col-md-12">
         <div class="col-md-12">
             {% if report.result %}
             {% if report.result %}
                 Last run: <a href="{% url 'extras:report_result' job_result_pk=report.result.pk %}">
                 Last run: <a href="{% url 'extras:report_result' job_result_pk=report.result.pk %}">
-                    <strong>{{ report.result.created }}</strong>
+                    <strong>{{ report.result.created|annotated_date }}</strong>
                 </a>
                 </a>
             {% endif %}
             {% endif %}
         </div>
         </div>

+ 1 - 1
netbox/templates/extras/report_list.html

@@ -32,7 +32,7 @@
                                     <td class="rendered-markdown">{{ report.description|render_markdown|placeholder }}</td>
                                     <td class="rendered-markdown">{{ report.description|render_markdown|placeholder }}</td>
                                     <td class="text-right">
                                     <td class="text-right">
                                         {% if report.result %}
                                         {% if report.result %}
-                                            <a href="{% url 'extras:report_result' job_result_pk=report.result.pk %}">{{ report.result.created }}</a>
+                                            <a href="{% url 'extras:report_result' job_result_pk=report.result.pk %}">{{ report.result.created|annotated_date }}</a>
                                         {% else %}
                                         {% else %}
                                             <span class="text-muted">Never</span>
                                             <span class="text-muted">Never</span>
                                         {% endif %}
                                         {% endif %}

+ 1 - 1
netbox/templates/extras/report_result.html

@@ -8,7 +8,7 @@
     <div class="row">
     <div class="row">
         <div class="col-md-12">
         <div class="col-md-12">
             <p>
             <p>
-                Run: <strong>{{ result.created }}</strong>
+                Run: <strong>{{ result.created|annotated_date }}</strong>
                 {% if result.completed %}
                 {% if result.completed %}
                     Duration: <strong>{{ result.duration }}</strong>
                     Duration: <strong>{{ result.duration }}</strong>
                 {% else %}
                 {% else %}

+ 1 - 1
netbox/templates/extras/script_list.html

@@ -29,7 +29,7 @@
                                     <td>{{ script.Meta.description|render_markdown }}</td>
                                     <td>{{ script.Meta.description|render_markdown }}</td>
                                     {% if script.result %}
                                     {% if script.result %}
                                         <td class="text-right">
                                         <td class="text-right">
-                                            <a href="{% url 'extras:script_result' job_result_pk=script.result.pk %}">{{ script.result.created }}</a>
+                                            <a href="{% url 'extras:script_result' job_result_pk=script.result.pk %}">{{ script.result.created|annotated_date }}</a>
                                         </td>
                                         </td>
                                     {% else %}
                                     {% else %}
                                         <td class="text-right text-muted">Never</td>
                                         <td class="text-right text-muted">Never</td>

+ 2 - 2
netbox/templates/extras/script_result.html

@@ -13,7 +13,7 @@
                 <li><a href="{% url 'extras:script_list' %}">Scripts</a></li>
                 <li><a href="{% url 'extras:script_list' %}">Scripts</a></li>
                 <li><a href="{% url 'extras:script_list' %}#module.{{ script.module }}">{{ script.module|bettertitle }}</a></li>
                 <li><a href="{% url 'extras:script_list' %}#module.{{ script.module }}">{{ script.module|bettertitle }}</a></li>
                 <li><a href="{% url 'extras:script' module=script.module name=class_name %}">{{ script }}</a></li>
                 <li><a href="{% url 'extras:script' module=script.module name=class_name %}">{{ script }}</a></li>
-                <li>{{ result.created }}</li>
+                <li>{{ result.created|annotated_date }}</li>
             </ol>
             </ol>
         </div>
         </div>
     </div>
     </div>
@@ -32,7 +32,7 @@
     </ul>
     </ul>
     <div class="tab-content">
     <div class="tab-content">
         <p>
         <p>
-            Run: <strong>{{ result.created }}</strong>
+            Run: <strong>{{ result.created|annotated_date }}</strong>
             {% if result.completed %}
             {% if result.completed %}
                 Duration: <strong>{{ result.duration }}</strong>
                 Duration: <strong>{{ result.duration }}</strong>
             {% else %}
             {% else %}

+ 2 - 2
netbox/templates/generic/object.html

@@ -42,8 +42,8 @@
   <h1 class="title">{% block title %}{{ object }}{% endblock %}</h1>
   <h1 class="title">{% block title %}{{ object }}{% endblock %}</h1>
   <p>
   <p>
     <small class="text-muted">
     <small class="text-muted">
-      Created {{ object.created }} &middot;
-      Updated <span title="{{ object.last_updated }}">{{ object.last_updated|timesince }}</span> ago
+      Created {{ object.created|annotated_date }} &middot;
+      Updated {{ object.last_updated|annotated_date }} ({{ object.last_updated|timesince }} ago)
     </small>
     </small>
     <span class="label label-default">{{ object|meta:"app_label" }}.{{ object|meta:"model_name" }}:{{ object.pk }}</span>
     <span class="label label-default">{{ object|meta:"app_label" }}.{{ object|meta:"model_name" }}:{{ object.pk }}</span>
   </p>
   </p>

+ 1 - 1
netbox/templates/home.html

@@ -291,7 +291,7 @@
                     {% for result in report_results %}
                     {% for result in report_results %}
                         <tr>
                         <tr>
                             <td><a href="{% url 'extras:report_result' job_result_pk=result.pk %}">{{ result.name }}</a></td>
                             <td><a href="{% url 'extras:report_result' job_result_pk=result.pk %}">{{ result.name }}</a></td>
-                            <td class="text-right"><span title="{{ result.created }}">{% include 'extras/inc/job_label.html' %}</span></td>
+                            <td class="text-right"><span title="{{ result.created|date:'SHORT_DATETIME_FORMAT' }}">{% include 'extras/inc/job_label.html' %}</span></td>
                         </tr>
                         </tr>
                     {% endfor %}
                     {% endfor %}
                 </table>
                 </table>

+ 2 - 1
netbox/templates/inc/image_attachments.html

@@ -1,3 +1,4 @@
+{% load helpers %}
 {% if images %}
 {% if images %}
     <table class="table table-hover panel-body">
     <table class="table table-hover panel-body">
         <tr>
         <tr>
@@ -13,7 +14,7 @@
                     <a class="image-preview" href="{{ attachment.image.url }}" target="_blank">{{ attachment }}</a>
                     <a class="image-preview" href="{{ attachment.image.url }}" target="_blank">{{ attachment }}</a>
                 </td>
                 </td>
                 <td>{{ attachment.size|filesizeformat }}</td>
                 <td>{{ attachment.size|filesizeformat }}</td>
-                <td>{{ attachment.created }}</td>
+                <td>{{ attachment.created|annotated_date }}</td>
                 <td class="text-right noprint">
                 <td class="text-right noprint">
                     {% if perms.extras.change_imageattachment %}
                     {% if perms.extras.change_imageattachment %}
                         <a href="{% url 'extras:imageattachment_edit' pk=attachment.pk %}" class="btn btn-warning btn-xs" title="Edit image">
                         <a href="{% url 'extras:imageattachment_edit' pk=attachment.pk %}" class="btn btn-warning btn-xs" title="Edit image">

+ 1 - 1
netbox/templates/ipam/aggregate.html

@@ -54,7 +54,7 @@
                 </tr>
                 </tr>
                 <tr>
                 <tr>
                     <td>Date Added</td>
                     <td>Date Added</td>
-                    <td>{{ object.date_added|placeholder }}</td>
+                    <td>{{ object.date_added|annotated_date|placeholder }}</td>
                 </tr>
                 </tr>
                 <tr>
                 <tr>
                     <td>Description</td>
                     <td>Description</td>

+ 2 - 2
netbox/templates/users/api_tokens.html

@@ -24,12 +24,12 @@
                         <div class="row">
                         <div class="row">
                             <div class="col-md-4">
                             <div class="col-md-4">
                                 <small class="text-muted">Created</small><br />
                                 <small class="text-muted">Created</small><br />
-                                <span title="{{ token.created }}">{{ token.created|date }}</span>
+                                {{ token.created|annotated_date }}
                             </div>
                             </div>
                             <div class="col-md-4">
                             <div class="col-md-4">
                                 <small class="text-muted">Expires</small><br />
                                 <small class="text-muted">Expires</small><br />
                                 {% if token.expires %}
                                 {% if token.expires %}
-                                    <span title="{{ token.expires }}">{{ token.expires|date }}</span>
+                                    {{ token.expires|annotated_date }}
                                 {% else %}
                                 {% else %}
                                     <span>Never</span>
                                     <span>Never</span>
                                 {% endif %}
                                 {% endif %}

+ 1 - 1
netbox/templates/users/profile.html

@@ -11,7 +11,7 @@
     <small class="text-muted">Email</small>
     <small class="text-muted">Email</small>
     <h5>{{ request.user.email }}</h5>
     <h5>{{ request.user.email }}</h5>
     <small class="text-muted">Registered</small>
     <small class="text-muted">Registered</small>
-    <h5>{{ request.user.date_joined }}</h5>
+    <h5>{{ request.user.date_joined|annotated_date }}</h5>
     <small class="text-muted">Groups</small>
     <small class="text-muted">Groups</small>
     <h5>{{ request.user.groups.all|join:', ' }}</h5>
     <h5>{{ request.user.groups.all|join:', ' }}</h5>
     <small class="text-muted">Admin access</small>
     <small class="text-muted">Admin access</small>

+ 5 - 2
netbox/templates/users/userkey.html

@@ -1,4 +1,5 @@
 {% extends 'users/base.html' %}
 {% extends 'users/base.html' %}
+{% load helpers %}
 
 
 {% block title %}User Key{% endblock %}
 {% block title %}User Key{% endblock %}
 
 
@@ -19,7 +20,9 @@
             {% endif %}
             {% endif %}
         </h4>
         </h4>
         <p>
         <p>
-            <small class="text-muted">Created {{ object.created }} &middot; Updated <span title="{{ object.last_updated }}">{{ object.last_updated|timesince }}</span> ago</small>
+            <small class="text-muted">
+              Created {{ object.created|annotated_date }} &middot;
+              Updated {{ object.last_updated|annotated_date }} ({{ object.last_updated|timesince }} ago)
         </p>
         </p>
         {% if not object.is_active %}
         {% if not object.is_active %}
             <div class="alert alert-warning" role="alert">
             <div class="alert alert-warning" role="alert">
@@ -37,7 +40,7 @@
                 </a>
                 </a>
             </div>
             </div>
             <h4>Session key: <span class="label label-success">Active</span></h4>
             <h4>Session key: <span class="label label-success">Active</span></h4>
-            <small class="text-muted">Created {{ object.session_key.created }}</small>
+            <small class="text-muted">Created {{ object.session_key.created|annotated_date }}</small>
         {% else %}
         {% else %}
             <h4>No active session key</h4>
             <h4>No active session key</h4>
         {% endif %}
         {% endif %}

+ 32 - 0
netbox/utilities/templatetags/helpers.py

@@ -4,8 +4,10 @@ import re
 
 
 import yaml
 import yaml
 from django import template
 from django import template
+from django.template.defaultfilters import date
 from django.conf import settings
 from django.conf import settings
 from django.urls import NoReverseMatch, reverse
 from django.urls import NoReverseMatch, reverse
+from django.utils import timezone
 from django.utils.html import strip_tags
 from django.utils.html import strip_tags
 from django.utils.safestring import mark_safe
 from django.utils.safestring import mark_safe
 from markdown import markdown
 from markdown import markdown
@@ -151,6 +153,36 @@ def tzoffset(value):
     return datetime.datetime.now(value).strftime('%z')
     return datetime.datetime.now(value).strftime('%z')
 
 
 
 
+@register.filter(expects_localtime=True)
+def annotated_date(date_value):
+    """
+    Returns date as HTML span with short date format as the content and the
+    (long) date format as the title.
+    """
+    if not date_value:
+        return ''
+
+    if type(date_value) == datetime.date:
+        long_ts = date(date_value, 'DATE_FORMAT')
+        short_ts = date(date_value, 'SHORT_DATE_FORMAT')
+    else:
+        long_ts = date(date_value, 'DATETIME_FORMAT')
+        short_ts = date(date_value, 'SHORT_DATETIME_FORMAT')
+
+    span = f'<span title="{long_ts}">{short_ts}</span>'
+
+    return mark_safe(span)
+
+
+@register.simple_tag
+def annotated_now():
+    """
+    Returns the current date piped through the annotated_date filter.
+    """
+    tzinfo = timezone.get_current_timezone() if settings.USE_TZ else None
+    return annotated_date(datetime.datetime.now(tz=tzinfo))
+
+
 @register.filter()
 @register.filter()
 def fgcolor(value):
 def fgcolor(value):
     """
     """