diff --git a/scipost_django/journals/views.py b/scipost_django/journals/views.py index 8495bff7384e498275588c13ed4f5e99cde45475..37dad52a2453c8ed2f9eaa69c6b6b44ca84e2df6 100644 --- a/scipost_django/journals/views.py +++ b/scipost_django/journals/views.py @@ -10,9 +10,10 @@ import string import shutil import requests -from csp.decorators import csp_update -from plotly.offline import plot -from plotly.graph_objs import Bar +from csp.decorators import csp_update, csp_exempt +#from plotly.offline import plot +#from plotly.graph_objs import Bar +import plotly.graph_objects as pgo from django.contrib.auth.decorators import login_required from django.contrib.contenttypes.models import ContentType @@ -348,71 +349,16 @@ def about(request, doi_label): return render(request, 'journals/about.html', context) -def provide_plot(x, y, name): - return plot( - [ Bar(x=x, y=y, name=name) ], +def provide_plot(x, y, name, nonce=None): + fig = pgo.Figure([ pgo.Bar(x=x, y=y, name=name) ]).to_html( config={ 'modeBarButtonsToRemove': ['select2d', 'lasso2d', 'autoScale2d', 'toImage', 'zoom2d', 'zoomIn2d', 'zoomOut2d',], }, - output_type='div', include_plotlyjs=False, - show_link=False, link_text="") - - -def metrics_DEPREC(request, doi_label, specialty=None): - journal = get_object_or_404(Journal, doi_label=doi_label) - publications = journal.get_publications() - if specialty: - publications = publications.filter(specialties=specialty) - context = { - 'journal': journal, - 'specialty': specialty, - } - if not publications: - return render(request, 'journals/metrics.html', context) - pubyears = [year for year in range(publications.last().publication_date.year, # pubs ordered in -publication_date - timezone.now().year)] - nr_publications = [publications.filter(publication_date__year=year).count() for year in pubyears] - nr_citations = [journal.nr_citations(year, specialty) for year in pubyears] - citedby_citescore = [journal.citedby_citescore(year, specialty) for year in pubyears] - citedby_impact_factor = [journal.citedby_impact_factor(year, specialty) for year in pubyears] - nr_publications_plot = plot( - [ Bar(x=pubyears, y=nr_publications, name='publications') ], - config={ - 'modeBarButtonsToRemove': ['select2d', 'lasso2d', 'autoScale2d', - 'toImage', 'zoom2d', 'zoomIn2d', 'zoomOut2d',], - }, - output_type='div', include_plotlyjs=False, - show_link=False, link_text="") - nr_citations_plot = plot( - [ Bar(x=pubyears, y=nr_citations, name='citations') ], - config={ - 'modeBarButtonsToRemove': ['select2d', 'lasso2d', 'autoScale2d', - 'toImage', 'zoom2d', 'zoomIn2d', 'zoomOut2d',], - }, - output_type='div', include_plotlyjs=False, - show_link=False, link_text="") - citescore_plot = plot( - [ Bar(x=pubyears, y=citedby_citescore, name='citescore') ], - config={ - 'modeBarButtonsToRemove': ['select2d', 'lasso2d', 'autoScale2d', - 'toImage', 'zoom2d', 'zoomIn2d', 'zoomOut2d',], - }, - output_type='div', include_plotlyjs=False, - show_link=False, link_text="") - impact_factor_plot = plot( - [ Bar(x=pubyears, y=citedby_impact_factor, name='impactfactor') ], - config={ - 'modeBarButtonsToRemove': ['select2d', 'lasso2d', 'autoScale2d', - 'toImage', 'zoom2d', 'zoomIn2d', 'zoomOut2d',], - }, - output_type='div', include_plotlyjs=False, - show_link=False, link_text="") - context['nr_publications_plot'] = nr_publications_plot - context['nr_citations_plot'] = nr_citations_plot - context['citescore_plot'] = citescore_plot - context['impact_factor_plot'] = impact_factor_plot - return render(request, 'journals/metrics.html', context) + full_html=False, include_plotlyjs=False) + if nonce: + fig = fig.replace('<script ', f'<script nonce={nonce} ') + return fig @csp_update(SCRIPT_SRC=["'unsafe-eval'", "'unsafe-inline'"]) @@ -428,23 +374,28 @@ def metrics(request, doi_label, specialty=None): nr_publications_plot = provide_plot( x=journal.cf_metrics['nr_publications']['years'], y=journal.cf_metrics['nr_publications']['nr_publications'][key], - name='publications') + name='publications', + nonce=request.csp_nonce) nr_submissions_plot = provide_plot( x=journal.cf_metrics['nr_submissions']['years'], y=journal.cf_metrics['nr_submissions']['nr_submissions'][key], - name='submissions') + name='submissions', + nonce=request.csp_nonce) nr_citations_plot = provide_plot( x=journal.cf_metrics['nr_citations']['years'], y=journal.cf_metrics['nr_citations']['nr_citations'][key], - name='citations') + name='citations', + nonce=request.csp_nonce) citescore_plot = provide_plot( x=journal.cf_metrics['citedby_citescore']['years'], y=journal.cf_metrics['citedby_citescore']['citedby_citescore'][key], - name='citations') + name='citations', + nonce=request.csp_nonce) impact_factor_plot = provide_plot( x=journal.cf_metrics['citedby_impact_factor']['years'], y=journal.cf_metrics['citedby_impact_factor']['citedby_impact_factor'][key], - name='citations') + name='citations', + nonce=request.csp_nonce) context['nr_publications_plot'] = nr_publications_plot context['nr_submissions_plot'] = nr_submissions_plot context['nr_citations_plot'] = nr_citations_plot