diff --git a/backend/apps/owasp/api/search/project.py b/backend/apps/owasp/api/search/project.py
index 815219261..ba7054371 100644
--- a/backend/apps/owasp/api/search/project.py
+++ b/backend/apps/owasp/api/search/project.py
@@ -13,7 +13,6 @@ def get_projects(query, attributes=None, limit=25):
"attributesToRetrieve": attributes
or [
"idx_contributors_count",
- "idx_created_at",
"idx_forks_count",
"idx_leaders",
"idx_level",
@@ -22,6 +21,7 @@ def get_projects(query, attributes=None, limit=25):
"idx_summary",
"idx_topics",
"idx_type",
+ "idx_updated_at",
"idx_url",
],
"hitsPerPage": limit,
diff --git a/backend/apps/owasp/index/project.py b/backend/apps/owasp/index/project.py
index 93fe594c3..0be2271cb 100644
--- a/backend/apps/owasp/index/project.py
+++ b/backend/apps/owasp/index/project.py
@@ -15,7 +15,6 @@ class ProjectIndex(AlgoliaIndex):
fields = (
"idx_companies",
"idx_contributors_count",
- "idx_created_at",
"idx_description",
"idx_forks_count",
"idx_languages",
@@ -41,7 +40,6 @@ class ProjectIndex(AlgoliaIndex):
"desc(idx_contributors_count)",
"desc(idx_forks_count)",
"desc(idx_updated_at)",
- "desc(idx_create_at)",
],
"ranking": [
"typo",
diff --git a/backend/apps/owasp/models/mixins/project.py b/backend/apps/owasp/models/mixins/project.py
index 24fa1c1be..c213b848a 100644
--- a/backend/apps/owasp/models/mixins/project.py
+++ b/backend/apps/owasp/models/mixins/project.py
@@ -11,11 +11,6 @@ def idx_companies(self):
"""Return companies for indexing."""
return join_values(fields=(o.company for o in self.organizations.all()))
- @property
- def idx_created_at(self):
- """Return created at for indexing."""
- return self.created_at
-
@property
def idx_contributors_count(self):
"""Return contributors count for indexing."""
diff --git a/backend/apps/owasp/templates/search/issue.html b/backend/apps/owasp/templates/search/issue.html
index 5872b56c1..ff8818823 100644
--- a/backend/apps/owasp/templates/search/issue.html
+++ b/backend/apps/owasp/templates/search/issue.html
@@ -179,6 +179,8 @@
How to tackle it
},
methods: {
async getIssues() {
+ this.removeTooltips();
+
const response = await fetch(`/api/v1/owasp/search/issue?q=${this.searchQuery}`)
.then(res => res.json())
.then(json => {
@@ -194,12 +196,22 @@ How to tackle it
this.issues = json;
})
.catch(err => console.error("There was an error! ", err));
- this.reinitializeTooltips();
+
+ this.addTooltips();
+ },
+ addTooltips() {
+ const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
+ tooltipTriggerList.forEach(function(tooltipTriggerEl) {
+ new bootstrap.Tooltip(tooltipTriggerEl);
+ });
},
- reinitializeTooltips() {
+ removeTooltips() {
const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
- tooltipTriggerList.map(function(tooltipTriggerEl) {
- return new bootstrap.Tooltip(tooltipTriggerEl);
+ tooltipTriggerList.forEach(function(tooltipTriggerEl) {
+ const tooltipInstance = bootstrap.Tooltip.getInstance(tooltipTriggerEl);
+ if (tooltipInstance) {
+ tooltipInstance.dispose();
+ }
});
},
showIssueDetails(issue) {
diff --git a/backend/apps/owasp/templates/search/project.html b/backend/apps/owasp/templates/search/project.html
index 5e9b489db..681f4e99d 100644
--- a/backend/apps/owasp/templates/search/project.html
+++ b/backend/apps/owasp/templates/search/project.html
@@ -34,12 +34,12 @@
-
${project.created_at} ago
+
${project.updated_at} ago
-
+
},
methods: {
async getProjects() {
+ this.removeTooltips();
+
const response = await fetch(`/api/v1/owasp/search/project?q=${this.searchQuery}`)
.then(res => res.json())
.then(json => {
json.forEach(project => {
- project.created_at = dayjs.unix(project.idx_created_at || '').fromNow(true);
project.level = project.idx_level.charAt(0).toUpperCase() + project.idx_level.slice(1).toLowerCase();
project.summary = marked.parse(project.idx_summary || '');
project.topics = project.idx_topics ? project.idx_topics.sort(() => Math.random() - 0.5).slice(0, 20) : [];
+ project.updated_at = dayjs.unix(project.idx_updated_at || '').fromNow(true);
});
this.projects = json;
})
.catch(err => console.error("There was an error! ", err));
- this.reinitializeTooltips();
+
+ this.addTooltips();
+ },
+ addTooltips() {
+ const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
+ tooltipTriggerList.forEach(function(tooltipTriggerEl) {
+ new bootstrap.Tooltip(tooltipTriggerEl);
+ });
},
- reinitializeTooltips() {
+ removeTooltips() {
const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
- tooltipTriggerList.map(function(tooltipTriggerEl) {
- return new bootstrap.Tooltip(tooltipTriggerEl);
+ tooltipTriggerList.forEach(function(tooltipTriggerEl) {
+ const tooltipInstance = bootstrap.Tooltip.getInstance(tooltipTriggerEl);
+ if (tooltipInstance) {
+ tooltipInstance.dispose();
+ }
});
},
showProjectDetails(project) {
diff --git a/backend/apps/slack/commands/projects.py b/backend/apps/slack/commands/projects.py
index 117f819da..d9f0a5deb 100644
--- a/backend/apps/slack/commands/projects.py
+++ b/backend/apps/slack/commands/projects.py
@@ -31,13 +31,13 @@ def handler(ack, command, client):
attributes = [
"idx_contributors_count",
- "idx_created_at",
"idx_forks_count",
"idx_leaders",
"idx_level",
"idx_name",
"idx_stars_count",
"idx_summary",
+ "idx_updated_at",
"idx_url",
]
if projects := get_projects(search_query, attributes=attributes, limit=10):
@@ -79,7 +79,7 @@ def handler(ack, command, client):
blocks.append(
markdown(
f"\n*{idx + 1}.* <{project['idx_url']}|*{name_truncated}*>\n"
- f"_Created {natural_date(project['idx_created_at'])}"
+ f"_Updated {natural_date(project['idx_updated_at'])}"
f"{stars_count}{forks_count}{contributors_count}_\n"
f"_{project['idx_level'].capitalize()} project. "
f"Leader{pluralize(len(leaders))}: {', '.join(leaders)}_\n"