diff options
| author | Étienne Loks <etienne.loks@proxience.com> | 2014-10-14 18:31:32 +0200 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@proxience.com> | 2014-10-14 18:31:32 +0200 | 
| commit | 65a99f54a4220bd18f5c4337e8d99ce5d24e665b (patch) | |
| tree | 03df566bff5fdd124f321a024a93867f8a07c299 | |
| parent | b0d0e07aae8bb2554e5224bf78976cf945d58d74 (diff) | |
| download | Ishtar-65a99f54a4220bd18f5c4337e8d99ce5d24e665b.tar.bz2 Ishtar-65a99f54a4220bd18f5c4337e8d99ce5d24e665b.zip | |
Re-arrange dashboard in tabs
| -rw-r--r-- | ishtar_common/static/media/style.css | 27 | ||||
| -rw-r--r-- | ishtar_common/templates/ishtar/dashboards/dashboard_main.html | 133 | ||||
| -rw-r--r-- | ishtar_common/templates/ishtar/dashboards/dashboard_main_detail.html | 88 | ||||
| -rw-r--r-- | ishtar_common/templates/ishtar/dashboards/dashboard_main_detail_users.html | 36 | ||||
| -rw-r--r-- | ishtar_common/urls.py | 2 | ||||
| -rw-r--r-- | ishtar_common/views.py | 43 | 
6 files changed, 206 insertions, 123 deletions
| diff --git a/ishtar_common/static/media/style.css b/ishtar_common/static/media/style.css index 4990fa111..32e957b74 100644 --- a/ishtar_common/static/media/style.css +++ b/ishtar_common/static/media/style.css @@ -573,6 +573,33 @@ table.confirm tr.spacer td:last-child{      right:135px;  } +.ui-widget-header { +    background:none; +} + +.ui-tabs .ui-tabs-nav li a{ +    color: #D14; +} + +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { +    background:none; +    background-color: #F1F2F6; +    border: 1px solid #CCC; +    border-radius-top: 4px; +} + +.ui-tabs .ui-tabs-nav li.ui-tabs-active a{ +    background-color:#fff; +} + +#dashboard{ +    padding-top: 20px; +} + +#dash-tabs .ui-tabs .ui-tabs-panel{ +    padding:0; +} +  .dashboard > div,  .dashboard h3{      width:760px; diff --git a/ishtar_common/templates/ishtar/dashboards/dashboard_main.html b/ishtar_common/templates/ishtar/dashboards/dashboard_main.html index 3242da9a3..06b671343 100644 --- a/ishtar_common/templates/ishtar/dashboards/dashboard_main.html +++ b/ishtar_common/templates/ishtar/dashboards/dashboard_main.html @@ -1,6 +1,6 @@  {% extends "base.html" %}  {% load i18n %} -{% load range %} +{% load url from future %}  {% block extra_head %}  {{form.media}}  <script language="javascript" type="text/javascript" src="{{STATIC_URL}}js/jqplot/jquery.jqplot.min.js"></script> @@ -11,128 +11,15 @@  <link rel="stylesheet" href="{{STATIC_URL}}js/jqplot/jquery.jqplot.min.css" />  {% endblock %}  {% block content %} -<div class='dashboard'> -{% for lbl, dashboard in items %} -<script language="javascript" type="text/javascript"> -$(document).ready(function(){ -var values{{forloop.counter0}} = []; - -{% for idx, lbl, values in dashboard.values %} {% for value in values %} -{% ifequal forloop.parentloop.counter0 0 %}values{{forloop.parentloop.parentloop.counter0}}.push([{{value}}, 0]); -{% else %}values{{forloop.parentloop.parentloop.counter0}}[{{forloop.counter0}}][1] = {{value}};{% endifequal %}{% endfor%}{% endfor%} - -var plot{{forloop.counter0}} = $.jqplot('chart{{forloop.counter0}}', -    [values{{forloop.counter0}}], { -      series:[{showMarker:false}], -      axes:{ -        xaxis:{ -          label:'{% trans "Year" %}' -        }, -        yaxis:{ -          label:'{% trans "Number"%}', -          min:0 -        } -      }, -      highlighter: { -        show: true, -        sizeAdjust: 7.5 -      } -  }); -}); + <script> +$(function() { $( "#dash-tabs" ).tabs(); });  </script> -  <h3>{{lbl}}</h3> -  <div> -    <h4>{% trans "Numbers" %}</h4> -    <p><strong>{% trans "Total:" %}</strong> {{dashboard.total_number}}</p> -    <div class='table'> -    <div id="chart{{forloop.counter0}}" style="height:400px; width:700px;"></div> -    {% comment %} -    <table> -    {% for idx, lbl, values in dashboard.values %} -      <tr class='idx {% if forloop.counter0|divisibleby:"2" %}even{%else%}odd{%endif%}'> -      <th>{{lbl}}</th> -      {% for value in values %}<td>{{value}}</td>{% endfor%} -      </tr> -    {% endfor%} -    </table>{% endcomment %} -    </div> -    {% if dashboard.years %} -    <h4>{% trans "By years" %}</h4> -    <ul> -      <li><strong>{% trans "Average:" %}</strong> {{dashboard.average}}</li> -      <li><strong>{% trans "Variance:" %}</strong> {{dashboard.variance}}</li> -      <li><strong>{% trans "Standard deviation:" %}</strong> {{dashboard.standard_deviation}}</li> -      <li><strong>{% trans "Median:" %}</strong> {{dashboard.median}}</li> -      <li><strong>{% trans "Mode:" %}</strong> {{dashboard.mode}}</li> -    </ul> -    {% endif %} -    {% if dashboard.operation_average %} -    <h4>{% trans "By operations" %}</h4> -    <ul> -      <li><strong>{% trans "Average:" %}</strong> {{dashboard.operation_average}}</li> -      <li><strong>{% trans "Variance:" %}</strong> {{dashboard.operation_variance}}</li> -      <li><strong>{% trans "Standard deviation:" %}</strong> {{dashboard.operation_standard_deviation}}</li> -      <li><strong>{% trans "Median:" %}</strong> {{dashboard.operation_median}}</li> -      <li><strong>{% trans "Mode:" %}</strong> {{dashboard.operation_mode}}</li> -    </ul> -    {% endif %} -    <h4>{% trans "Created last" %}</h4> -    <div class='table'> -    <table> -      <tr><th>{{lbl}}</th><th>{% trans "Created" %}</th><th></th></tr> -      {% for item in dashboard.lasts %}<tr> -        <td class='ref'>{{item}}</td> -        <td>{{item.history_date}}</td> -        <td>{% if item.get_show_url %}<a href="#" onclick='load_window("{{item.get_show_url}}")'>{%trans "Show"%}</a>{%endif%}</td> -      </tr>{% endfor %} -    </table> -    </div> -    <h4>{% trans "Recent changes" %}</h4> -    <div class='table'> -    <table> -      <tr><th>{{lbl}}</th><th>{% trans "Modified" %}</th><th></th></tr> -      {% for item in dashboard.recents %}<tr> -        <td class='ref'>{{item}}</td> -        <td>{{item.history_date}}</td> -        <td>{% if item.get_show_url %}<a href="#" onclick='load_window("{{item.get_show_url}}")'>{%trans "Show"%}</a>{%endif%}</td> -      </tr>{% endfor %} -    </table> -    </div> -  </div> -{% endfor%} - -  <h3>{% trans "Users" %}</h3> -  <div> -<script language="javascript" type="text/javascript"> -$(document).ready(function(){ -var values_users = []; -{% for user_type in ishtar_users.types %} -values_users.push(['{{user_type.person__person_types__label}}', {{user_type.number}}]); {% endfor%} - -var plot_users = jQuery.jqplot ('user_chart', [values_users], -    { -      seriesDefaults: { -        renderer: jQuery.jqplot.PieRenderer, -        rendererOptions: { -          showDataLabels: true -        } -      }, -      legend: { show:true, location: 's' } -    } - ); -}); -</script> -    <div id="user_chart" style="height:400px; width:700px;"></div> -    <div class='table'> -    <table> -      <tr><th>{% trans "User type" %}</th><th>{% trans "Number" %}</th></tr> -    {% for user_type in ishtar_users.types %} -      <tr> -        <td class='string'>{{user_type.person__person_types__label}}{#TODO: Display all#}</td> -        <td>{{user_type.number}}</td> -      </tr> -    {% endfor%} -    </table> -    </div> +<div id='dashboard'> + <div id="dash-tabs"> +  <ul> +    {% for label, app in app_list %} +   <li><a href="{% url 'dashboard-main-detail' app %}">{{label}}</a></li> +  {% endfor %}</ul> + </div>  </div>  {% endblock %} diff --git a/ishtar_common/templates/ishtar/dashboards/dashboard_main_detail.html b/ishtar_common/templates/ishtar/dashboards/dashboard_main_detail.html new file mode 100644 index 000000000..6a99c4fdd --- /dev/null +++ b/ishtar_common/templates/ishtar/dashboards/dashboard_main_detail.html @@ -0,0 +1,88 @@ +{% load i18n %} +<div class='dashboard'> +<script language="javascript" type="text/javascript"> +$(document).ready(function(){ +var values_{{item_name}} = []; + +{% for idx, lbl, values in dashboard.values %} {% for value in values %} +{% ifequal forloop.parentloop.counter0 0 %}values_{{item_name}}.push([{{value}}, 0]); +{% else %}values_{{item_name}}[{{forloop.counter0}}][1] = {{value}};{% endifequal %}{% endfor%}{% endfor%} + +var plot_{{item_name}} = $.jqplot('chart_{{item_name}}', +    [values_{{item_name}}], { +      series:[{showMarker:false}], +      axes:{ +        xaxis:{ +          label:'{% trans "Year" %}' +        }, +        yaxis:{ +          label:'{% trans "Number"%}', +          min:0 +        } +      }, +      highlighter: { +        show: true, +        sizeAdjust: 7.5 +      } +  }); +}); +</script> +  <h3>{{lbl}}</h3> +  <div> +    <h4>{% trans "Numbers" %}</h4> +    <p><strong>{% trans "Total:" %}</strong> {{dashboard.total_number}}</p> +    <div class='table'> +    <div id="chart_{{item_name}}" style="height:400px; width:700px;"></div> +    {% comment %} +    <table> +    {% for idx, lbl, values in dashboard.values %} +      <tr class='idx {% if forloop.counter0|divisibleby:"2" %}even{%else%}odd{%endif%}'> +      <th>{{lbl}}</th> +      {% for value in values %}<td>{{value}}</td>{% endfor%} +      </tr> +    {% endfor%} +    </table>{% endcomment %} +    </div> +    {% if dashboard.years %} +    <h4>{% trans "By years" %}</h4> +    <ul> +      <li><strong>{% trans "Average:" %}</strong> {{dashboard.average}}</li> +      <li><strong>{% trans "Variance:" %}</strong> {{dashboard.variance}}</li> +      <li><strong>{% trans "Standard deviation:" %}</strong> {{dashboard.standard_deviation}}</li> +      <li><strong>{% trans "Median:" %}</strong> {{dashboard.median}}</li> +      <li><strong>{% trans "Mode:" %}</strong> {{dashboard.mode}}</li> +    </ul> +    {% endif %} +    {% if dashboard.operation_average %} +    <h4>{% trans "By operations" %}</h4> +    <ul> +      <li><strong>{% trans "Average:" %}</strong> {{dashboard.operation_average}}</li> +      <li><strong>{% trans "Variance:" %}</strong> {{dashboard.operation_variance}}</li> +      <li><strong>{% trans "Standard deviation:" %}</strong> {{dashboard.operation_standard_deviation}}</li> +      <li><strong>{% trans "Median:" %}</strong> {{dashboard.operation_median}}</li> +      <li><strong>{% trans "Mode:" %}</strong> {{dashboard.operation_mode}}</li> +    </ul> +    {% endif %} +    <h4>{% trans "Created last" %}</h4> +    <div class='table'> +    <table> +      <tr><th>{{lbl}}</th><th>{% trans "Created" %}</th><th></th></tr> +      {% for item in dashboard.lasts %}<tr> +        <td class='ref'>{{item}}</td> +        <td>{{item.history_date}}</td> +        <td>{% if item.get_show_url %}<a href="#" onclick='load_window("{{item.get_show_url}}")'>{%trans "Show"%}</a>{%endif%}</td> +      </tr>{% endfor %} +    </table> +    </div> +    <h4>{% trans "Recent changes" %}</h4> +    <div class='table'> +    <table> +      <tr><th>{{lbl}}</th><th>{% trans "Modified" %}</th><th></th></tr> +      {% for item in dashboard.recents %}<tr> +        <td class='ref'>{{item}}</td> +        <td>{{item.history_date}}</td> +        <td>{% if item.get_show_url %}<a href="#" onclick='load_window("{{item.get_show_url}}")'>{%trans "Show"%}</a>{%endif%}</td> +      </tr>{% endfor %} +    </table> +    </div> +  </div> diff --git a/ishtar_common/templates/ishtar/dashboards/dashboard_main_detail_users.html b/ishtar_common/templates/ishtar/dashboards/dashboard_main_detail_users.html new file mode 100644 index 000000000..6602d5193 --- /dev/null +++ b/ishtar_common/templates/ishtar/dashboards/dashboard_main_detail_users.html @@ -0,0 +1,36 @@ +{% load i18n %} +  <h3>{% trans "Users" %}</h3> +  <div> +<script language="javascript" type="text/javascript"> +$(document).ready(function(){ +var values_users = []; +{% for user_type in ishtar_users.types %} +values_users.push(['{{user_type.person__person_types__label}}', {{user_type.number}}]); {% endfor%} + +var plot_users = jQuery.jqplot ('user_chart', [values_users], +    { +      seriesDefaults: { +        renderer: jQuery.jqplot.PieRenderer, +        rendererOptions: { +          showDataLabels: true +        } +      }, +      legend: { show:true, location: 's' } +    } + ); +}); +</script> +    <div id="user_chart" style="height:400px; width:700px;"></div> +    <div class='table'> +    <table> +      <tr><th>{% trans "User type" %}</th><th>{% trans "Number" %}</th></tr> +    {% for user_type in ishtar_users.types %} +      <tr> +        <td class='string'>{{user_type.person__person_types__label}}{#TODO: Display all#}</td> +        <td>{{user_type.number}}</td> +      </tr> +    {% endfor%} +    </table> +    </div> +</div> + diff --git a/ishtar_common/urls.py b/ishtar_common/urls.py index c46f555e9..8b148530e 100644 --- a/ishtar_common/urls.py +++ b/ishtar_common/urls.py @@ -63,6 +63,8 @@ urlpatterns += patterns('ishtar_common.views',       # General       url(r'dashboard-main/$', 'dashboard_main',             name='dashboard-main'), +     url(r'dashboard-main/(?P<item_name>[a-z-]+)/$', 'dashboard_main_detail', +           name='dashboard-main-detail'),       url(r'update-current-item/$', 'update_current_item',             name='update-current-item'),       url(r'new-person/(?:(?P<parent_name>[^/]+)/)?(?:(?P<limits>[^/]+)/)?$', diff --git a/ishtar_common/views.py b/ishtar_common/views.py index c3e6dbb33..9f193fdec 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -703,6 +703,7 @@ def dashboard_main(request, dct, obj_id=None, *args, **kwargs):      """      Main dashboard      """ +    """      items = []      if 'archaeological_files' in settings.INSTALLED_APPS:          from archaeological_files.models import File @@ -718,5 +719,47 @@ def dashboard_main(request, dct, obj_id=None, *args, **kwargs):          items.append((_(u"Finds"), models.Dashboard(Find)))      dct = {'items':items,             'ishtar_users':models.UserDashboard()} +    """ +    app_list = [] +    if 'archaeological_files' in settings.INSTALLED_APPS: +        app_list.append((_(u"Archaeological files"), 'files')) +    app_list.append((_(u"Operations"), 'operations')) +    if 'archaeological_context_records' in settings.INSTALLED_APPS: +        app_list.append((_(u"Context records"), 'context-records')) +    if 'archaeological_finds' in settings.INSTALLED_APPS: +        app_list.append((_(u"Finds"), 'finds')) +    dct = {'app_list':app_list}      return render_to_response('ishtar/dashboards/dashboard_main.html', dct,                                 context_instance=RequestContext(request)) + +def dashboard_main_detail(request, item_name): +    """ +    Specific tab of the main dashboard +    """ +    if item_name == 'users': +        dct = {'ishtar_users':models.UserDashboard()} +        return render_to_response( +                    'ishtar/dashboards/dashboard_main_detail_users.html', +                            dct, context_instance=RequestContext(request)) +    lbl, dashboard = None, None +    if item_name == 'files' and \ +      'archaeological_files' in settings.INSTALLED_APPS: +        from archaeological_files.models import File +        lbl, dashboard = (_(u"Archaeological files"), models.Dashboard(File)) +    if item_name == 'operations': +        from archaeological_operations.models import Operation +        lbl, dashboard = (_(u"Operations"), models.Dashboard(Operation)) +    if item_name == 'context-records' and \ +      'archaeological_context_records' in settings.INSTALLED_APPS: +        from archaeological_context_records.models import ContextRecord +        lbl, dashboard = (_(u"Context records"), models.Dashboard(ContextRecord)) +    if item_name == 'finds' and \ +       'archaeological_finds' in settings.INSTALLED_APPS: +        from archaeological_finds.models import Find +        lbl, dashboard = (_(u"Finds"), models.Dashboard(Find)) +    if not lbl: +        raise Http404 +    dct = {'lbl':lbl, 'dashboard':dashboard, +           'item_name':item_name.replace('-', '_')} +    return render_to_response('ishtar/dashboards/dashboard_main_detail.html', +                            dct, context_instance=RequestContext(request)) | 
