From 1697c5d5b5ded75fa0d00a90ba4a500d8657be93 Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Fri, 12 Nov 2021 10:10:39 +0530 Subject: [PATCH 1/2] feat: search bar on course list --- school/lms/doctype/lms_course/lms_course.py | 25 ++++++++++++++ school/lms/widgets/CourseCard.html | 2 +- school/public/css/style.css | 8 ----- school/templates/course_list.html | 14 ++++++++ .../search_course/search_course.html | 3 ++ .../templates/search_course/search_course.js | 33 +++++++++++++++++++ school/www/courses/index.html | 30 +++++++---------- 7 files changed, 87 insertions(+), 28 deletions(-) create mode 100644 school/templates/course_list.html create mode 100644 school/templates/search_course/search_course.html create mode 100644 school/templates/search_course/search_course.js diff --git a/school/lms/doctype/lms_course/lms_course.py b/school/lms/doctype/lms_course/lms_course.py index e14bc38e..a41921eb 100644 --- a/school/lms/doctype/lms_course/lms_course.py +++ b/school/lms/doctype/lms_course/lms_course.py @@ -362,3 +362,28 @@ def reindex_exercises(doc): course = frappe.get_doc("LMS Course", course_data['name']) course.reindex_exercises() frappe.msgprint("All exercises in this course have been re-indexed.") + +@frappe.whitelist() +def search_course(text): + search_courses = [] + courses = frappe.get_all("LMS Course", + filters= { + "is_published": True + }, + or_filters = { + "title": ["like", "%{0}%".format(text)], + "tags": ["like", "%{0}%".format(text)], + "short_introduction": ["like", "%{0}%".format(text)], + "description": ["like", "%{0}%".format(text)], + }) + + """ for course in courses: + search_courses.append(frappe.get_doc("LMS Course", course)) """ + + """ template = frappe.render_template("school/templates/course_list.html", { + "title": _("Search Results"), + "courses": search_courses, + "widgets": Widgets() + }) """ + + return courses diff --git a/school/lms/widgets/CourseCard.html b/school/lms/widgets/CourseCard.html index f6bcd26d..f826b9e0 100644 --- a/school/lms/widgets/CourseCard.html +++ b/school/lms/widgets/CourseCard.html @@ -1,6 +1,6 @@ {% set membership = course.get_membership(frappe.session.user) %} {% set progress = frappe.utils.cint(membership.progress) %} -
+
diff --git a/school/public/css/style.css b/school/public/css/style.css index a63db3b7..c0f3c1df 100644 --- a/school/public/css/style.css +++ b/school/public/css/style.css @@ -210,14 +210,6 @@ input[type=checkbox] { } } -.courses-header { - margin-bottom: 1.5rem; - color: var(--text-color); - font-weight: 600; - font-size: var(--text-3xl); - letter-spacing: -0.0175em -} - @media (min-width: 576px) and (max-width: 992px) { .container { padding-left: 1rem; diff --git a/school/templates/course_list.html b/school/templates/course_list.html new file mode 100644 index 00000000..9e90639a --- /dev/null +++ b/school/templates/course_list.html @@ -0,0 +1,14 @@ +
+ {% if courses | length %} +
+ {{ title }} +
+
+ {% for course in courses %} + {{ widgets.CourseCard(course=course, read_only=False) }} + {% endfor %} +
+{% endif %} +
+ +  \ No newline at end of file diff --git a/school/templates/search_course/search_course.html b/school/templates/search_course/search_course.html new file mode 100644 index 00000000..f158e8ec --- /dev/null +++ b/school/templates/search_course/search_course.html @@ -0,0 +1,3 @@ + + + diff --git a/school/templates/search_course/search_course.js b/school/templates/search_course/search_course.js new file mode 100644 index 00000000..a506428a --- /dev/null +++ b/school/templates/search_course/search_course.js @@ -0,0 +1,33 @@ +frappe.ready(() => { + $(".search-course").keyup((e) => { + search_course(e); + }); +}); + +const search_course = (e) => { + let input = $(e.currentTarget).val(); + console.log(input) + if (input.length < 3 || input.trim() == "") { + $(".course-card").removeClass("hide"); + return + } + + frappe.call({ + method: "school.lms.doctype.lms_course.lms_course.search_course", + args: { + "text": input + }, + callback: (data) => { + render_course_list(data.message); + } + }); +}; + +const render_course_list = (courses) => { + $(".course-card").addClass("hide"); + for (course in courses) { + console.log(courses[course]) + + } +} + diff --git a/school/www/courses/index.html b/school/www/courses/index.html index 07d5b5e7..71818348 100644 --- a/school/www/courses/index.html +++ b/school/www/courses/index.html @@ -10,27 +10,19 @@
- {% if live_courses | length %} -
- {{ _('Live Courses') }} -
-
- {% for course in live_courses %} - {{ widgets.CourseCard(course=course, read_only=False) }} - {% endfor %} -
- {% endif %} + {% include "school/templates/search_course/search_course.html" %} - {% if upcoming_courses | length %} -
- {{ _('Upcoming Courses') }} +
+ {% set title = _("Live Courses") %} + {% set courses = live_courses %} + {% set classes = "original-list" %} + {% include "school/templates/course_list.html" %} + + {% set title = _("Upcoming Courses") %} + {% set courses = upcoming_courses %} + {% set classes = "original-list mt-10" %} + {% include "school/templates/course_list.html" %}
-
- {% for course in upcoming_courses %} - {{ widgets.CourseCard(course=course, read_only=False) }} - {% endfor %} -
- {% endif %}
From 6cba6972bc3276c653a5a8ff2dd1ba7bb5cd2849 Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Mon, 15 Nov 2021 19:00:23 +0530 Subject: [PATCH 2/2] feat: search for courses --- school/public/css/style.css | 13 ++++++++++++ school/templates/course_list.html | 2 -- .../search_course/search_course.html | 2 +- .../templates/search_course/search_course.js | 21 +++++++++++++++---- school/www/courses/index.html | 5 ++--- 5 files changed, 33 insertions(+), 10 deletions(-) diff --git a/school/public/css/style.css b/school/public/css/style.css index 2feca386..0f9fa6af 100644 --- a/school/public/css/style.css +++ b/school/public/css/style.css @@ -1368,3 +1368,16 @@ pre { background-image: url("/assets/school/icons/blue-arrow.svg"); margin-left: 1.5rem; } + +.search-course { + background-image: url(/assets/frappe/icons/timeless/search.svg); + border: 1px solid #C8CFD5; + box-sizing: border-box; + border-radius: 6px; + font-size: 0.75rem; + padding: 0.625rem 0.75rem; + height: 36px; + background-repeat: no-repeat; + text-indent: 1.5rem; + background-position: 1rem 0.65rem; +} diff --git a/school/templates/course_list.html b/school/templates/course_list.html index 9e90639a..0b21160b 100644 --- a/school/templates/course_list.html +++ b/school/templates/course_list.html @@ -10,5 +10,3 @@
{% endif %}
- -  \ No newline at end of file diff --git a/school/templates/search_course/search_course.html b/school/templates/search_course/search_course.html index f158e8ec..c4cc9402 100644 --- a/school/templates/search_course/search_course.html +++ b/school/templates/search_course/search_course.html @@ -1,3 +1,3 @@ - + diff --git a/school/templates/search_course/search_course.js b/school/templates/search_course/search_course.js index a506428a..bc958522 100644 --- a/school/templates/search_course/search_course.js +++ b/school/templates/search_course/search_course.js @@ -6,10 +6,12 @@ frappe.ready(() => { const search_course = (e) => { let input = $(e.currentTarget).val(); - console.log(input) + if (input.length < 3 || input.trim() == "") { $(".course-card").removeClass("hide"); - return + $(".course-home-headings").parent().removeClass("hide"); + $(".upcoming-courses").addClass("mt-10"); + return; } frappe.call({ @@ -26,8 +28,19 @@ const search_course = (e) => { const render_course_list = (courses) => { $(".course-card").addClass("hide"); for (course in courses) { - console.log(courses[course]) - + $("[data-course=" + courses[course].name + "]").removeClass("hide"); + } + + const visible_live_courses = $(".live-courses .course-card").not(".hide"); + const visible_upcoming_courses = $(".upcoming-courses .course-card").not(".hide"); + + if (!visible_live_courses.length) { + $(".live-courses").addClass("hide"); + $(".upcoming-courses").removeClass("mt-10"); + } + + if (!visible_upcoming_courses.length) { + $(".upcoming-courses").addClass("hide"); } } diff --git a/school/www/courses/index.html b/school/www/courses/index.html index 71818348..78843b7e 100644 --- a/school/www/courses/index.html +++ b/school/www/courses/index.html @@ -15,15 +15,14 @@
{% set title = _("Live Courses") %} {% set courses = live_courses %} - {% set classes = "original-list" %} + {% set classes = "live-courses" %} {% include "school/templates/course_list.html" %} {% set title = _("Upcoming Courses") %} {% set courses = upcoming_courses %} - {% set classes = "original-list mt-10" %} + {% set classes = "upcoming-courses mt-10" %} {% include "school/templates/course_list.html" %}
-
{% endblock %}