Spaces:
Running
Running
Commit
·
db2cacc
1
Parent(s):
3bd1ac2
Add loader component and enhance detail views for domains, fields, subfields, topics, and authors
Browse files- core/static/base.css +18 -0
- core/static/base.js +6 -0
- core/templates/author/detail.html +18 -0
- core/templates/base.html +8 -1
- core/templates/domain/detail.html +8 -3
- core/templates/field/detail.html +7 -2
- core/templates/subfield/detail.html +7 -2
- core/templates/topic/detail.html +7 -2
- core/urls.py +6 -4
- core/views.py +22 -8
core/static/base.css
CHANGED
@@ -10,4 +10,22 @@ body {
|
|
10 |
|
11 |
main {
|
12 |
flex: 1;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
}
|
|
|
10 |
|
11 |
main {
|
12 |
flex: 1;
|
13 |
+
}
|
14 |
+
|
15 |
+
#loader {
|
16 |
+
position: fixed;
|
17 |
+
top: 0;
|
18 |
+
left: 0;
|
19 |
+
width: 100%;
|
20 |
+
height: 100%;
|
21 |
+
background: rgba(255, 255, 255, 0.8);
|
22 |
+
display: flex;
|
23 |
+
justify-content: center;
|
24 |
+
align-items: center;
|
25 |
+
z-index: 9999;
|
26 |
+
}
|
27 |
+
|
28 |
+
.spinner-border {
|
29 |
+
width: 3rem;
|
30 |
+
height: 3rem;
|
31 |
}
|
core/static/base.js
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
window.addEventListener('load', function () {
|
2 |
+
const loader = document.getElementById('loader');
|
3 |
+
if (loader) {
|
4 |
+
loader.style.display = 'none';
|
5 |
+
}
|
6 |
+
});
|
core/templates/author/detail.html
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{% extends "base.html" %}
|
2 |
+
{% block title %}{{ item.name }}{% endblock %}
|
3 |
+
{% block content %}
|
4 |
+
<h2>{{ item.name }}</h2>
|
5 |
+
<p><strong>ORCID:</strong> {{ item.orcid }}</p>
|
6 |
+
<p><strong>H-Index:</strong> {{ item.h_index }}</p>
|
7 |
+
<p><strong>I10-Index:</strong> {{ item.i10_index }}</p>
|
8 |
+
<p><strong>Cited By Count:</strong> {{ item.cited_by_count }}</p>
|
9 |
+
<p><strong>Works Count:</strong> {{ item.works_count }}</p>
|
10 |
+
<p><strong>Mean 2-Year Citedness:</strong> {{ item.mean_2yr_citedness }}</p>
|
11 |
+
|
12 |
+
<h3>Topics Associated with {{ item.name }}:</h3>
|
13 |
+
<ul>
|
14 |
+
{% for author_topic in topics %}
|
15 |
+
<li><a href="{% url 'topic_detail' author_topic.topic.id %}">{{ author_topic.topic.name }}</a></li>
|
16 |
+
{% endfor %}
|
17 |
+
</ul>
|
18 |
+
{% endblock %}
|
core/templates/base.html
CHANGED
@@ -11,6 +11,13 @@
|
|
11 |
</head>
|
12 |
|
13 |
<body>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
<!-- Navbar -->
|
15 |
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
|
16 |
<div class="container-fluid">
|
@@ -55,9 +62,9 @@
|
|
55 |
</div>
|
56 |
</footer>
|
57 |
|
58 |
-
<!-- Scripts -->
|
59 |
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
|
60 |
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
|
|
|
61 |
{% block js %}{% endblock %}
|
62 |
</body>
|
63 |
|
|
|
11 |
</head>
|
12 |
|
13 |
<body>
|
14 |
+
<!-- Loader -->
|
15 |
+
<div id="loader">
|
16 |
+
<div class="spinner-border text-primary" role="status">
|
17 |
+
<span class="visually-hidden">Loading...</span>
|
18 |
+
</div>
|
19 |
+
</div>
|
20 |
+
|
21 |
<!-- Navbar -->
|
22 |
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
|
23 |
<div class="container-fluid">
|
|
|
62 |
</div>
|
63 |
</footer>
|
64 |
|
|
|
65 |
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
|
66 |
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
|
67 |
+
<script src="{% static 'base.js' %}"></script>
|
68 |
{% block js %}{% endblock %}
|
69 |
</body>
|
70 |
|
core/templates/domain/detail.html
CHANGED
@@ -1,6 +1,11 @@
|
|
1 |
{% extends "base.html" %}
|
2 |
{% block title %}{{ item.name }}{% endblock %}
|
3 |
{% block content %}
|
4 |
-
<h2>
|
5 |
-
<
|
6 |
-
|
|
|
|
|
|
|
|
|
|
|
|
1 |
{% extends "base.html" %}
|
2 |
{% block title %}{{ item.name }}{% endblock %}
|
3 |
{% block content %}
|
4 |
+
<h2>{{ item.name }}</h2>
|
5 |
+
<h3>Fields under this Domain:</h3>
|
6 |
+
<ul>
|
7 |
+
{% for field in fields %}
|
8 |
+
<li><a href="{% url 'field_detail' field.id %}">{{ field.name }}</a></li>
|
9 |
+
{% endfor %}
|
10 |
+
</ul>
|
11 |
+
{% endblock %}
|
core/templates/field/detail.html
CHANGED
@@ -1,6 +1,11 @@
|
|
1 |
{% extends "base.html" %}
|
2 |
{% block title %}{{ item.name }}{% endblock %}
|
3 |
{% block content %}
|
4 |
-
<h2>
|
5 |
-
<
|
|
|
|
|
|
|
|
|
|
|
6 |
{% endblock %}
|
|
|
1 |
{% extends "base.html" %}
|
2 |
{% block title %}{{ item.name }}{% endblock %}
|
3 |
{% block content %}
|
4 |
+
<h2>{{ item.name }}</h2>
|
5 |
+
<h3>Subfields under this Field:</h3>
|
6 |
+
<ul>
|
7 |
+
{% for subfield in subfields %}
|
8 |
+
<li><a href="{% url 'subfield_detail' subfield.id %}">{{ subfield.name }}</a></li>
|
9 |
+
{% endfor %}
|
10 |
+
</ul>
|
11 |
{% endblock %}
|
core/templates/subfield/detail.html
CHANGED
@@ -1,6 +1,11 @@
|
|
1 |
{% extends "base.html" %}
|
2 |
{% block title %}{{ item.name }}{% endblock %}
|
3 |
{% block content %}
|
4 |
-
<h2>
|
5 |
-
<
|
|
|
|
|
|
|
|
|
|
|
6 |
{% endblock %}
|
|
|
1 |
{% extends "base.html" %}
|
2 |
{% block title %}{{ item.name }}{% endblock %}
|
3 |
{% block content %}
|
4 |
+
<h2>{{ item.name }}</h2>
|
5 |
+
<h3>Topics under this Subfield:</h3>
|
6 |
+
<ul>
|
7 |
+
{% for topic in topics %}
|
8 |
+
<li><a href="{% url 'topic_detail' topic.id %}">{{ topic.name }}</a></li>
|
9 |
+
{% endfor %}
|
10 |
+
</ul>
|
11 |
{% endblock %}
|
core/templates/topic/detail.html
CHANGED
@@ -1,6 +1,11 @@
|
|
1 |
{% extends "base.html" %}
|
2 |
{% block title %}{{ item.name }}{% endblock %}
|
3 |
{% block content %}
|
4 |
-
<h2>
|
5 |
-
<
|
|
|
|
|
|
|
|
|
|
|
6 |
{% endblock %}
|
|
|
1 |
{% extends "base.html" %}
|
2 |
{% block title %}{{ item.name }}{% endblock %}
|
3 |
{% block content %}
|
4 |
+
<h2>{{ item.name }}</h2>
|
5 |
+
<h3>Researchers in this Topic:</h3>
|
6 |
+
<ul>
|
7 |
+
{% for author_topic in authors %}
|
8 |
+
<li><a href="{% url 'author_detail' author_topic.author.id %}">{{ author_topic.author.name }}</a></li>
|
9 |
+
{% endfor %}
|
10 |
+
</ul>
|
11 |
{% endblock %}
|
core/urls.py
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
from django.urls import path
|
2 |
from .views import home_page, search_hierarchy, refresh_author_db_view, domain_list, domain_detail
|
3 |
from .views import field_list, field_detail, subfield_list, subfield_detail
|
4 |
-
from .views import topic_list, topic_detail
|
5 |
|
6 |
|
7 |
urlpatterns = [
|
@@ -10,14 +10,16 @@ urlpatterns = [
|
|
10 |
path("refresh_author_db", refresh_author_db_view, name="refresh-author-db"),
|
11 |
|
12 |
path('domain/', domain_list, name='domain_list'),
|
13 |
-
path('domain/<
|
14 |
|
15 |
path('field/', field_list, name='field_list'),
|
16 |
-
path('field/<
|
17 |
|
18 |
path('subfield/', subfield_list, name='subfield_list'),
|
19 |
-
path('subfield/<
|
20 |
|
21 |
path('topic/', topic_list, name='topic_list'),
|
22 |
path('topic/<str:pk>/', topic_detail, name='topic_detail'),
|
|
|
|
|
23 |
]
|
|
|
1 |
from django.urls import path
|
2 |
from .views import home_page, search_hierarchy, refresh_author_db_view, domain_list, domain_detail
|
3 |
from .views import field_list, field_detail, subfield_list, subfield_detail
|
4 |
+
from .views import topic_list, topic_detail, author_detail
|
5 |
|
6 |
|
7 |
urlpatterns = [
|
|
|
10 |
path("refresh_author_db", refresh_author_db_view, name="refresh-author-db"),
|
11 |
|
12 |
path('domain/', domain_list, name='domain_list'),
|
13 |
+
path('domain/<int:pk>/', domain_detail, name='domain_detail'),
|
14 |
|
15 |
path('field/', field_list, name='field_list'),
|
16 |
+
path('field/<int:pk>/', field_detail, name='field_detail'),
|
17 |
|
18 |
path('subfield/', subfield_list, name='subfield_list'),
|
19 |
+
path('subfield/<int:pk>/', subfield_detail, name='subfield_detail'),
|
20 |
|
21 |
path('topic/', topic_list, name='topic_list'),
|
22 |
path('topic/<str:pk>/', topic_detail, name='topic_detail'),
|
23 |
+
|
24 |
+
path('author/<str:pk>/', author_detail, name='author_detail'),
|
25 |
]
|
core/views.py
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
from django.shortcuts import render, get_object_or_404
|
2 |
-
|
|
|
3 |
from django.http import JsonResponse, HttpResponse
|
4 |
-
from django.shortcuts import render
|
5 |
|
6 |
from BridgeMentor.utils import refresh_author_db
|
7 |
|
@@ -50,7 +50,9 @@ def domain_list(request):
|
|
50 |
|
51 |
def domain_detail(request, pk):
|
52 |
domain = get_object_or_404(Domain, pk=pk)
|
53 |
-
|
|
|
|
|
54 |
|
55 |
# Field views
|
56 |
|
@@ -62,7 +64,9 @@ def field_list(request):
|
|
62 |
|
63 |
def field_detail(request, pk):
|
64 |
field = get_object_or_404(Field.objects.select_related("domain"), pk=pk)
|
65 |
-
|
|
|
|
|
66 |
|
67 |
# Subfield views
|
68 |
|
@@ -75,7 +79,9 @@ def subfield_list(request):
|
|
75 |
def subfield_detail(request, pk):
|
76 |
subfield = get_object_or_404(
|
77 |
Subfield.objects.select_related("field__domain"), pk=pk)
|
78 |
-
|
|
|
|
|
79 |
|
80 |
# Topic views
|
81 |
|
@@ -86,6 +92,14 @@ def topic_list(request):
|
|
86 |
|
87 |
|
88 |
def topic_detail(request, pk):
|
89 |
-
topic = get_object_or_404(Topic
|
90 |
-
|
91 |
-
return render(request,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
from django.shortcuts import render, get_object_or_404
|
2 |
+
# Import Author model
|
3 |
+
from .models import Domain, Field, Subfield, Topic, AuthorTopic, Author
|
4 |
from django.http import JsonResponse, HttpResponse
|
|
|
5 |
|
6 |
from BridgeMentor.utils import refresh_author_db
|
7 |
|
|
|
50 |
|
51 |
def domain_detail(request, pk):
|
52 |
domain = get_object_or_404(Domain, pk=pk)
|
53 |
+
# Get all fields under this domain
|
54 |
+
fields = Field.objects.filter(domain=domain)
|
55 |
+
return render(request, "domain/detail.html", {"item": domain, "fields": fields})
|
56 |
|
57 |
# Field views
|
58 |
|
|
|
64 |
|
65 |
def field_detail(request, pk):
|
66 |
field = get_object_or_404(Field.objects.select_related("domain"), pk=pk)
|
67 |
+
# Get all subfields under this field
|
68 |
+
subfields = Subfield.objects.filter(field=field)
|
69 |
+
return render(request, "field/detail.html", {"item": field, "subfields": subfields})
|
70 |
|
71 |
# Subfield views
|
72 |
|
|
|
79 |
def subfield_detail(request, pk):
|
80 |
subfield = get_object_or_404(
|
81 |
Subfield.objects.select_related("field__domain"), pk=pk)
|
82 |
+
# Get all topics under this subfield
|
83 |
+
topics = Topic.objects.filter(subfield=subfield)
|
84 |
+
return render(request, "subfield/detail.html", {"item": subfield, "topics": topics})
|
85 |
|
86 |
# Topic views
|
87 |
|
|
|
92 |
|
93 |
|
94 |
def topic_detail(request, pk):
|
95 |
+
topic = get_object_or_404(Topic, id=pk)
|
96 |
+
authors = AuthorTopic.objects.filter(topic=topic).select_related('author')
|
97 |
+
return render(request, 'topic/detail.html', {'item': topic, 'authors': authors})
|
98 |
+
|
99 |
+
# Author views
|
100 |
+
|
101 |
+
|
102 |
+
def author_detail(request, pk):
|
103 |
+
author = get_object_or_404(Author, pk=pk)
|
104 |
+
topics = AuthorTopic.objects.filter(author=author).select_related('topic')
|
105 |
+
return render(request, 'author/detail.html', {'item': author, 'topics': topics})
|