From 952ce4939b5d4b9ce659c6b2af02610f79034825 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Mon, 30 Sep 2019 09:05:49 +0200 Subject: [PATCH] MOBILE-2491 filter: Apply filters to all views that need it --- .../pages/issued-badge/issued-badge.html | 36 ++- .../badges/pages/user-badges/user-badges.html | 2 +- .../addon-block-activitymodules.html | 2 +- .../addon-block-recentlyaccesseditems.html | 4 +- .../addon-block-sitemainmenu.html | 2 +- .../components/sitemainmenu/sitemainmenu.ts | 1 + .../events/addon-block-timeline-events.html | 4 +- .../entries/addon-blog-entries.html | 4 +- src/addon/blog/components/entries/entries.ts | 30 +++ .../addon-calendar-upcoming-events.html | 4 +- src/addon/calendar/pages/day/day.html | 4 +- .../calendar/pages/edit-event/edit-event.ts | 7 +- src/addon/calendar/pages/event/event.html | 14 +- src/addon/calendar/pages/event/event.ts | 3 + src/addon/calendar/pages/list/list.html | 2 +- src/addon/calendar/providers/helper.ts | 19 +- .../course/addon-competency-course.html | 12 +- .../competency/components/course/course.ts | 6 +- .../pages/competency/competency.html | 8 +- .../competency/pages/competency/competency.ts | 17 +- .../competencysummary/competencysummary.html | 2 +- .../competencysummary/competencysummary.ts | 20 +- src/addon/competency/pages/plan/plan.html | 4 +- src/addon/competency/providers/competency.ts | 4 +- .../addon-course-completion-report.html | 12 +- src/addon/files/pages/list/list.html | 2 +- .../addon-messages-confirmed-contacts.html | 2 +- .../addon-messages-contact-requests.html | 2 +- .../contacts/addon-messages-contacts.html | 2 +- .../addon-messages-discussions.html | 10 +- .../components/discussions/discussions.ts | 2 + .../conversation-info/conversation-info.html | 6 +- .../conversation-info/conversation-info.ts | 5 +- .../messages/pages/discussion/discussion.html | 4 +- .../messages/pages/discussion/discussion.ts | 2 + .../group-conversations.html | 8 +- .../group-conversations.ts | 2 + src/addon/messages/pages/search/search.html | 4 +- src/addon/messages/pages/search/search.ts | 3 + .../messages/providers/mainmenu-handler.ts | 7 +- .../addon-mod-assign-feedback-plugin.html | 2 +- .../index/addon-mod-assign-index.html | 2 +- .../mod/assign/components/index/index.ts | 2 +- .../addon-mod-assign-submission-plugin.html | 2 +- .../addon-mod-assign-submission.html | 8 +- .../addon-mod-assign-feedback-comments.html | 2 +- .../feedback/comments/component/comments.ts | 3 +- .../edit-feedback-modal.html | 2 +- src/addon/mod/assign/pages/edit/edit.html | 4 +- src/addon/mod/assign/pages/index/index.html | 2 +- .../submission-list/submission-list.html | 2 +- .../submission-review/submission-review.html | 2 +- ...ddon-mod-assign-submission-onlinetext.html | 2 +- .../onlinetext/component/onlinetext.ts | 3 +- .../index/addon-mod-book-index.html | 4 +- src/addon/mod/book/components/index/index.ts | 1 + src/addon/mod/book/pages/index/index.html | 2 +- src/addon/mod/book/pages/toc/toc.html | 2 +- src/addon/mod/book/pages/toc/toc.ts | 2 + .../index/addon-mod-chat-index.html | 2 +- src/addon/mod/chat/components/index/index.ts | 7 +- src/addon/mod/chat/pages/chat/chat.html | 6 +- src/addon/mod/chat/pages/chat/chat.ts | 3 + src/addon/mod/chat/pages/index/index.html | 2 +- .../session-messages/session-messages.html | 4 +- .../session-messages/session-messages.ts | 6 +- src/addon/mod/chat/pages/sessions/sessions.ts | 3 +- src/addon/mod/chat/pages/users/users.html | 2 +- .../index/addon-mod-choice-index.html | 10 +- src/addon/mod/choice/pages/index/index.html | 2 +- .../index/addon-mod-data-index.html | 2 +- .../addon-mod-data-field-checkbox.html | 2 +- .../component/addon-mod-data-field-date.html | 2 +- .../component/addon-mod-data-field-menu.html | 2 +- .../addon-mod-data-field-multimenu.html | 2 +- .../addon-mod-data-field-number.html | 2 +- .../addon-mod-data-field-radiobutton.html | 2 +- .../component/addon-mod-data-field-text.html | 2 +- .../addon-mod-data-field-textarea.html | 2 +- src/addon/mod/data/pages/edit/edit.html | 2 +- src/addon/mod/data/pages/entry/entry.html | 2 +- src/addon/mod/data/pages/index/index.html | 2 +- .../index/addon-mod-feedback-index.html | 12 +- .../mod/feedback/pages/attempt/attempt.html | 9 +- src/addon/mod/feedback/pages/form/form.html | 14 +- src/addon/mod/feedback/pages/index/index.html | 2 +- .../pages/nonrespondents/nonrespondents.html | 2 +- .../pages/respondents/respondents.html | 2 +- .../index/addon-mod-folder-index.html | 2 +- src/addon/mod/folder/pages/index/index.html | 2 +- .../index/addon-mod-forum-index.html | 6 +- .../components/post/addon-mod-forum-post.html | 4 +- .../forum/pages/discussion/discussion.html | 2 +- src/addon/mod/forum/pages/index/index.html | 2 +- .../sort-order-selector.html | 2 +- .../index/addon-mod-glossary-index.html | 2 +- .../mod/glossary/components/index/index.ts | 2 + src/addon/mod/glossary/pages/edit/edit.html | 2 +- src/addon/mod/glossary/pages/entry/entry.html | 10 +- src/addon/mod/glossary/pages/index/index.html | 2 +- .../index/addon-mod-imscp-index.html | 3 +- src/addon/mod/imscp/pages/index/index.html | 2 +- .../index/addon-mod-lesson-index.html | 4 +- src/addon/mod/lesson/pages/index/index.html | 2 +- .../lesson/pages/menu-modal/menu-modal.html | 2 +- src/addon/mod/lesson/pages/player/player.html | 50 ++-- .../lesson/pages/user-retake/user-retake.html | 22 +- .../components/index/addon-mod-lti-index.html | 2 +- src/addon/mod/lti/pages/index/index.html | 2 +- .../index/addon-mod-page-index.html | 4 +- src/addon/mod/page/pages/index/index.html | 2 +- .../index/addon-mod-quiz-index.html | 6 +- src/addon/mod/quiz/pages/attempt/attempt.html | 4 +- src/addon/mod/quiz/pages/index/index.html | 2 +- src/addon/mod/quiz/pages/player/player.html | 6 +- src/addon/mod/quiz/pages/review/review.html | 8 +- .../index/addon-mod-resource-index.html | 4 +- src/addon/mod/resource/pages/index/index.html | 2 +- .../index/addon-mod-scorm-index.html | 6 +- src/addon/mod/scorm/pages/index/index.html | 2 +- src/addon/mod/scorm/pages/player/player.html | 2 +- src/addon/mod/scorm/pages/player/player.ts | 3 +- src/addon/mod/scorm/pages/toc/toc.html | 2 +- src/addon/mod/scorm/pages/toc/toc.ts | 2 + .../index/addon-mod-survey-index.html | 4 +- src/addon/mod/survey/pages/index/index.html | 2 +- .../components/index/addon-mod-url-index.html | 2 +- src/addon/mod/url/pages/index/index.html | 2 +- .../index/addon-mod-wiki-index.html | 4 +- src/addon/mod/wiki/components/index/index.ts | 3 +- src/addon/mod/wiki/pages/edit/edit.html | 2 +- src/addon/mod/wiki/pages/index/index.html | 2 +- src/addon/mod/wiki/pages/map/map.html | 2 +- src/addon/mod/wiki/pages/map/map.ts | 2 + ...shop-assessment-strategy-accumulative.html | 4 +- ...workshop-assessment-strategy-comments.html | 4 +- ...orkshop-assessment-strategy-numerrors.html | 8 +- ...d-workshop-assessment-strategy-rubric.html | 4 +- .../classes/assessment-strategy-component.ts | 1 + ...ddon-mod-workshop-assessment-strategy.html | 2 +- .../assessment-strategy.ts | 4 +- .../index/addon-mod-workshop-index.html | 14 +- .../addon-mod-workshop-submission.html | 8 +- .../workshop/pages/assessment/assessment.html | 4 +- .../edit-submission/edit-submission.html | 2 +- src/addon/mod/workshop/pages/index/index.html | 2 +- src/addon/mod/workshop/pages/phase/phase.html | 2 +- .../workshop/pages/submission/submission.html | 6 +- .../components/list/addon-notes-list.html | 4 +- src/addon/notes/components/list/list.ts | 4 + src/addon/notifications/pages/list/list.html | 6 +- src/addon/notifications/pages/list/list.ts | 3 + .../addon-qbehaviour-deferredcbm.html | 4 +- .../deferredcbm/component/deferredcbm.ts | 2 + .../component/informationitem.ts | 2 + .../component/addon-qtype-calculated.html | 6 +- .../component/addon-qtype-ddimageortext.html | 4 +- .../component/addon-qtype-ddmarker.html | 4 +- .../ddwtos/component/addon-qtype-ddwtos.html | 4 +- src/addon/qtype/ddwtos/component/ddwtos.ts | 3 +- .../component/addon-qtype-description.html | 2 +- .../essay/component/addon-qtype-essay.html | 6 +- .../component/addon-qtype-gapselect.html | 2 +- .../qtype/gapselect/component/gapselect.ts | 3 +- .../match/component/addon-qtype-match.html | 4 +- .../component/addon-qtype-multianswer.html | 2 +- .../multianswer/component/multianswer.ts | 3 +- .../component/addon-qtype-multichoice.html | 12 +- .../component/addon-qtype-shortanswer.html | 2 +- .../checkbox/component/checkbox.ts | 2 + .../datetime/component/datetime.ts | 2 + .../addon-user-profile-field-menu.html | 2 +- .../userprofilefield/menu/component/menu.ts | 2 + .../addon-user-profile-field-text.html | 2 +- .../userprofilefield/text/component/text.ts | 2 + .../addon-user-profile-field-textarea.html | 2 +- .../textarea/component/textarea.ts | 2 + .../core-context-menu-popover.html | 2 +- .../core-course-picker-menu-popover.html | 2 +- .../navigation-bar/navigation-bar.ts | 5 +- src/components/site-picker/site-picker.ts | 7 +- .../core-block-only-title.html | 2 +- .../core-block-pre-rendered.html | 6 +- src/core/comments/pages/viewer/viewer.html | 6 +- .../pages/choose-site/choose-site.html | 2 +- .../course/classes/main-resource-component.ts | 3 +- .../components/format/core-course-format.html | 8 +- .../module-completion/module-completion.ts | 13 +- .../core-course-module-description.html | 2 +- .../module-description/module-description.ts | 2 + .../components/module/core-course-module.html | 10 +- .../core-course-unsupported-module.html | 2 +- .../pages/list-mod-type/list-mod-type.html | 2 +- .../section-selector/section-selector.html | 4 +- .../section-selector/section-selector.ts | 3 + src/core/course/pages/section/section.html | 2 +- src/core/course/pages/section/section.ts | 7 +- .../unsupported-module.html | 2 +- .../unsupported-module/unsupported-module.ts | 3 +- .../core-courses-course-list-item.html | 2 +- .../core-courses-course-progress.html | 4 +- .../courses/pages/categories/categories.html | 8 +- .../pages/course-preview/course-preview.html | 12 +- .../courses/pages/dashboard/dashboard.html | 2 +- src/core/courses/pages/dashboard/dashboard.ts | 2 + src/core/filter/providers/filter.ts | 223 +++++++++++++++++- src/core/grades/pages/courses/courses.html | 2 +- src/core/grades/pages/grade/grade.html | 22 +- .../login/pages/credentials/credentials.html | 4 +- .../pages/email-signup/email-signup.html | 4 +- src/core/login/pages/reconnect/reconnect.html | 2 +- .../login/pages/site-error/site-error.html | 2 +- src/core/login/pages/site-help/site-help.html | 2 +- src/core/login/pages/sites/sites.html | 2 +- src/core/login/pages/sites/sites.ts | 8 +- src/core/mainmenu/pages/more/more.html | 2 +- src/core/mainmenu/pages/more/more.ts | 2 + .../providers/pushnotifications.ts | 14 +- .../classes/base-question-component.ts | 2 + .../components/question/core-question.html | 4 +- .../question/components/question/question.ts | 4 + src/core/question/providers/helper.ts | 9 +- src/core/rating/pages/ratings/ratings.html | 2 +- .../pages/space-usage/space-usage.html | 2 +- .../settings/pages/space-usage/space-usage.ts | 8 +- .../synchronization/synchronization.html | 2 +- .../pages/choose-site/choose-site.html | 2 +- src/core/sharedfiles/pages/list/list.html | 2 +- .../components/index/core-sitehome-index.html | 2 +- .../components/module-index/module-index.ts | 3 +- .../participants/core-user-participants.html | 2 +- .../user-profile-field/user-profile-field.ts | 4 + src/core/user/pages/about/about.html | 25 +- src/core/user/pages/profile/profile.html | 8 +- src/core/viewer/pages/text/text.html | 2 +- src/core/viewer/pages/text/text.ts | 6 + src/directives/format-text.ts | 38 ++- src/providers/sites.ts | 8 +- src/providers/utils/text.ts | 12 +- 239 files changed, 901 insertions(+), 475 deletions(-) diff --git a/src/addon/badges/pages/issued-badge/issued-badge.html b/src/addon/badges/pages/issued-badge/issued-badge.html index 0dcc1e810..75ee12adf 100644 --- a/src/addon/badges/pages/issued-badge/issued-badge.html +++ b/src/addon/badges/pages/issued-badge/issued-badge.html @@ -24,9 +24,7 @@

{{ 'core.name' | translate}}

-

- -

+

{{ user.fullname }}

@@ -36,14 +34,12 @@

{{ 'addon.badges.issuername' | translate}}

-

- -

+

{{ badge.issuername }}

{{ 'addon.badges.contact' | translate}}

- + {{ badge.issuercontact }}

@@ -66,9 +62,7 @@

{{ 'core.description' | translate}}

-

- -

+

{{ badge.description }}

{{ 'addon.badges.imageauthorname' | translate}}

@@ -77,23 +71,23 @@

{{ 'addon.badges.imageauthoremail' | translate}}

- + {{ badge.imageauthoremail }}

{{ 'addon.badges.imageauthorurl' | translate}}

- + {{ badge.imageauthorurl }}

{{ 'addon.badges.imagecaption' | translate}}

-

+

{{ badge.imagecaption }}

{{ 'core.course' | translate}}

- +

@@ -131,13 +125,13 @@

{{ 'addon.badges.issueremail' | translate}}

- + {{ badge.endorsement.issueremail }}

{{ 'addon.badges.issuerurl' | translate}}

- + {{ badge.endorsement.issuerurl }}

@@ -147,14 +141,12 @@

{{ 'addon.badges.claimid' | translate}}

- + {{ badge.endorsement.claimid }}

{{ 'addon.badges.claimcomment' | translate}}

-

- -

+

{{ badge.endorsement.claimcomment }}

@@ -164,7 +156,7 @@

{{ 'addon.badges.relatedbages' | translate}}

-

+

<{{ relatedBadge.name }}

{{ 'addon.badges.norelated' | translate}}

@@ -177,7 +169,7 @@

{{ 'addon.badges.alignment' | translate}}

-

+

{{ alignment.targetname }}

{{ 'addon.badges.noalignment' | translate}}

diff --git a/src/addon/badges/pages/user-badges/user-badges.html b/src/addon/badges/pages/user-badges/user-badges.html index 6a2a33a24..315e9af08 100644 --- a/src/addon/badges/pages/user-badges/user-badges.html +++ b/src/addon/badges/pages/user-badges/user-badges.html @@ -17,7 +17,7 @@ -

+

{{ badge.name }}

{{ badge.dateissued * 1000 | coreFormatDate :'strftimedatetimeshort' }}

{{ 'addon.badges.expired' | translate }} diff --git a/src/addon/block/activitymodules/components/activitymodules/addon-block-activitymodules.html b/src/addon/block/activitymodules/components/activitymodules/addon-block-activitymodules.html index 7711b65f6..342e38924 100644 --- a/src/addon/block/activitymodules/components/activitymodules/addon-block-activitymodules.html +++ b/src/addon/block/activitymodules/components/activitymodules/addon-block-activitymodules.html @@ -4,6 +4,6 @@ - + {{ entry.name }} diff --git a/src/addon/block/recentlyaccesseditems/components/recentlyaccesseditems/addon-block-recentlyaccesseditems.html b/src/addon/block/recentlyaccesseditems/components/recentlyaccesseditems/addon-block-recentlyaccesseditems.html index f6e60ba65..dbf92f587 100644 --- a/src/addon/block/recentlyaccesseditems/components/recentlyaccesseditems/addon-block-recentlyaccesseditems.html +++ b/src/addon/block/recentlyaccesseditems/components/recentlyaccesseditems/addon-block-recentlyaccesseditems.html @@ -7,8 +7,8 @@ -

-

+

+

diff --git a/src/addon/block/sitemainmenu/components/sitemainmenu/addon-block-sitemainmenu.html b/src/addon/block/sitemainmenu/components/sitemainmenu/addon-block-sitemainmenu.html index f9a5b7f82..49dfb8748 100644 --- a/src/addon/block/sitemainmenu/components/sitemainmenu/addon-block-sitemainmenu.html +++ b/src/addon/block/sitemainmenu/components/sitemainmenu/addon-block-sitemainmenu.html @@ -4,7 +4,7 @@ - + diff --git a/src/addon/block/sitemainmenu/components/sitemainmenu/sitemainmenu.ts b/src/addon/block/sitemainmenu/components/sitemainmenu/sitemainmenu.ts index 8568c8225..20651772a 100644 --- a/src/addon/block/sitemainmenu/components/sitemainmenu/sitemainmenu.ts +++ b/src/addon/block/sitemainmenu/components/sitemainmenu/sitemainmenu.ts @@ -30,6 +30,7 @@ import { CoreBlockBaseComponent } from '@core/block/classes/base-block-component export class AddonBlockSiteMainMenuComponent extends CoreBlockBaseComponent implements OnInit { @Input() downloadEnabled: boolean; + component = 'AddonBlockSiteMainMenu'; mainMenuBlock: any; siteHomeId: number; diff --git a/src/addon/block/timeline/components/events/addon-block-timeline-events.html b/src/addon/block/timeline/components/events/addon-block-timeline-events.html index 46af070cc..22e5445f7 100644 --- a/src/addon/block/timeline/components/events/addon-block-timeline-events.html +++ b/src/addon/block/timeline/components/events/addon-block-timeline-events.html @@ -5,9 +5,9 @@ -

+

- +

diff --git a/src/addon/mod/glossary/pages/entry/entry.html b/src/addon/mod/glossary/pages/entry/entry.html index 5954398ff..2c9fc51e0 100644 --- a/src/addon/mod/glossary/pages/entry/entry.html +++ b/src/addon/mod/glossary/pages/entry/entry.html @@ -1,6 +1,6 @@ - + @@ -12,16 +12,16 @@ -

+

{{ entry.timemodified | coreDateDayOrTime }} -

+

{{ entry.userfullname }}

-

+

{{ entry.timemodified | coreDateDayOrTime }}
- +
diff --git a/src/addon/mod/glossary/pages/index/index.html b/src/addon/mod/glossary/pages/index/index.html index f33735512..35ce44b11 100644 --- a/src/addon/mod/glossary/pages/index/index.html +++ b/src/addon/mod/glossary/pages/index/index.html @@ -1,6 +1,6 @@ - + diff --git a/src/addon/mod/imscp/components/index/addon-mod-imscp-index.html b/src/addon/mod/imscp/components/index/addon-mod-imscp-index.html index e8c542dfa..435cf919a 100644 --- a/src/addon/mod/imscp/components/index/addon-mod-imscp-index.html +++ b/src/addon/mod/imscp/components/index/addon-mod-imscp-index.html @@ -16,8 +16,7 @@
- - +
diff --git a/src/addon/mod/imscp/pages/index/index.html b/src/addon/mod/imscp/pages/index/index.html index 8d8662c3d..f31c63425 100644 --- a/src/addon/mod/imscp/pages/index/index.html +++ b/src/addon/mod/imscp/pages/index/index.html @@ -1,6 +1,6 @@ - + diff --git a/src/addon/mod/lesson/components/index/addon-mod-lesson-index.html b/src/addon/mod/lesson/components/index/addon-mod-lesson-index.html index 655de6301..98c3eaf5d 100644 --- a/src/addon/mod/lesson/components/index/addon-mod-lesson-index.html +++ b/src/addon/mod/lesson/components/index/addon-mod-lesson-index.html @@ -18,12 +18,12 @@ - +
- +
diff --git a/src/addon/mod/lesson/pages/index/index.html b/src/addon/mod/lesson/pages/index/index.html index e09f2c477..d90832113 100644 --- a/src/addon/mod/lesson/pages/index/index.html +++ b/src/addon/mod/lesson/pages/index/index.html @@ -1,6 +1,6 @@ - + diff --git a/src/addon/mod/lesson/pages/menu-modal/menu-modal.html b/src/addon/mod/lesson/pages/menu-modal/menu-modal.html index 5744f07bd..deeeaca2c 100644 --- a/src/addon/mod/lesson/pages/menu-modal/menu-modal.html +++ b/src/addon/mod/lesson/pages/menu-modal/menu-modal.html @@ -26,7 +26,7 @@ diff --git a/src/addon/mod/lesson/pages/player/player.html b/src/addon/mod/lesson/pages/player/player.html index 6c83c1f4b..5e351352b 100644 --- a/src/addon/mod/lesson/pages/player/player.html +++ b/src/addon/mod/lesson/pages/player/player.html @@ -1,6 +1,6 @@ - +
diff --git a/src/addon/mod/quiz/pages/review/review.html b/src/addon/mod/quiz/pages/review/review.html index 4d398ed27..15bafe825 100644 --- a/src/addon/mod/quiz/pages/review/review.html +++ b/src/addon/mod/quiz/pages/review/review.html @@ -46,7 +46,7 @@

{{ 'addon.mod_quiz.marks' | translate }}

-

+

<{{ attempt.readableMark }}

{{ 'addon.mod_quiz.grade' | translate }}

@@ -54,7 +54,7 @@

{{ data.title }}

- +
@@ -73,11 +73,11 @@

{{ 'core.question.information' | translate }}

{{question.status}}

-

+

{{question.readableMark}}

- + diff --git a/src/addon/mod/resource/components/index/addon-mod-resource-index.html b/src/addon/mod/resource/components/index/addon-mod-resource-index.html index 43e4c906f..d8172c08b 100644 --- a/src/addon/mod/resource/components/index/addon-mod-resource-index.html +++ b/src/addon/mod/resource/components/index/addon-mod-resource-index.html @@ -13,14 +13,14 @@ - +
- +
diff --git a/src/addon/mod/resource/pages/index/index.html b/src/addon/mod/resource/pages/index/index.html index bae9e1278..59b962225 100644 --- a/src/addon/mod/resource/pages/index/index.html +++ b/src/addon/mod/resource/pages/index/index.html @@ -1,6 +1,6 @@ - + diff --git a/src/addon/mod/scorm/components/index/addon-mod-scorm-index.html b/src/addon/mod/scorm/components/index/addon-mod-scorm-index.html index 959fd819f..8d86b0309 100644 --- a/src/addon/mod/scorm/components/index/addon-mod-scorm-index.html +++ b/src/addon/mod/scorm/components/index/addon-mod-scorm-index.html @@ -14,7 +14,7 @@ - +
@@ -98,8 +98,8 @@

- {{ sco.title }} - {{ sco.title }} + +

diff --git a/src/addon/mod/scorm/pages/index/index.html b/src/addon/mod/scorm/pages/index/index.html index f8a5f7d42..1bd6f15a8 100644 --- a/src/addon/mod/scorm/pages/index/index.html +++ b/src/addon/mod/scorm/pages/index/index.html @@ -1,6 +1,6 @@ - + diff --git a/src/addon/mod/scorm/pages/player/player.html b/src/addon/mod/scorm/pages/player/player.html index bdf47bd53..848a18bc9 100644 --- a/src/addon/mod/scorm/pages/player/player.html +++ b/src/addon/mod/scorm/pages/player/player.html @@ -1,6 +1,6 @@ - + - - - + {{ note.content }} diff --git a/src/addon/notes/components/list/list.ts b/src/addon/notes/components/list/list.ts index 57a9de314..843ff1c39 100644 --- a/src/addon/notes/components/list/list.ts +++ b/src/addon/notes/components/list/list.ts @@ -103,6 +103,10 @@ export class AddonNotesListComponent implements OnInit, OnDestroy { return this.notesProvider.getNotes(this.courseId, this.userId).then((notes) => { const notesList: AddonNotesNoteFormatted[] = notes[this.type + 'notes'] || []; + notesList.forEach((note) => { + note.content = this.textUtils.decodeHTML(note.content); + }); + return this.notesProvider.setOfflineDeletedNotes(notesList, this.courseId).then((notesList) => { this.hasOffline = notesList.some((note) => note.offline || note.deleted); diff --git a/src/addon/notifications/pages/list/list.html b/src/addon/notifications/pages/list/list.html index bd523d6ba..72b4cdce1 100644 --- a/src/addon/notifications/pages/list/list.html +++ b/src/addon/notifications/pages/list/list.html @@ -21,16 +21,16 @@ -

+

{{ notification.subject }}

{{notification.timecreated | coreDateDayOrTime}}

-

+

{{ notification.userfromfullname }}

-

+

diff --git a/src/addon/notifications/pages/list/list.ts b/src/addon/notifications/pages/list/list.ts index 2046b00bc..70342f5e3 100644 --- a/src/addon/notifications/pages/list/list.ts +++ b/src/addon/notifications/pages/list/list.ts @@ -40,6 +40,7 @@ export class AddonNotificationsListPage { loadMoreError = false; canMarkAllNotificationsAsRead = false; loadingMarkAllNotificationsAsRead = false; + siteHomeId: number; protected isCurrentView: boolean; protected cronObserver: CoreEventObserver; @@ -51,6 +52,8 @@ export class AddonNotificationsListPage { private utils: CoreUtilsProvider, private notificationsProvider: AddonNotificationsProvider, private pushNotificationsDelegate: CorePushNotificationsDelegate, private notificationsHelper: AddonNotificationsHelperProvider) { + + this.siteHomeId = sitesProvider.getCurrentSite().getSiteHomeId(); } /** diff --git a/src/addon/qbehaviour/deferredcbm/component/addon-qbehaviour-deferredcbm.html b/src/addon/qbehaviour/deferredcbm/component/addon-qbehaviour-deferredcbm.html index 0975635c1..a141d0e03 100644 --- a/src/addon/qbehaviour/deferredcbm/component/addon-qbehaviour-deferredcbm.html +++ b/src/addon/qbehaviour/deferredcbm/component/addon-qbehaviour-deferredcbm.html @@ -4,9 +4,7 @@
- - - + {{ option.text }}
diff --git a/src/addon/qbehaviour/deferredcbm/component/deferredcbm.ts b/src/addon/qbehaviour/deferredcbm/component/deferredcbm.ts index d85eccf09..dcb4c1310 100644 --- a/src/addon/qbehaviour/deferredcbm/component/deferredcbm.ts +++ b/src/addon/qbehaviour/deferredcbm/component/deferredcbm.ts @@ -27,6 +27,8 @@ export class AddonQbehaviourDeferredCBMComponent { @Input() componentId: number; // ID of the component the question belongs to. @Input() attemptId: number; // Attempt ID. @Input() offlineEnabled?: boolean | string; // Whether the question can be answered in offline. + @Input() contextLevel?: string; // The context level. + @Input() contextInstanceId?: number; // The instance ID related to the context. @Output() buttonClicked: EventEmitter; // Should emit an event when a behaviour button is clicked. @Output() onAbort: EventEmitter; // Should emit an event if the question should be aborted. diff --git a/src/addon/qbehaviour/informationitem/component/informationitem.ts b/src/addon/qbehaviour/informationitem/component/informationitem.ts index 3842fca29..aaa44569e 100644 --- a/src/addon/qbehaviour/informationitem/component/informationitem.ts +++ b/src/addon/qbehaviour/informationitem/component/informationitem.ts @@ -27,6 +27,8 @@ export class AddonQbehaviourInformationItemComponent { @Input() componentId: number; // ID of the component the question belongs to. @Input() attemptId: number; // Attempt ID. @Input() offlineEnabled?: boolean | string; // Whether the question can be answered in offline. + @Input() contextLevel?: string; // The context level. + @Input() contextInstanceId?: number; // The instance ID related to the context. @Output() buttonClicked: EventEmitter; // Should emit an event when a behaviour button is clicked. @Output() onAbort: EventEmitter; // Should emit an event if the question should be aborted. diff --git a/src/addon/qtype/calculated/component/addon-qtype-calculated.html b/src/addon/qtype/calculated/component/addon-qtype-calculated.html index e2ea63c89..beb823202 100644 --- a/src/addon/qtype/calculated/component/addon-qtype-calculated.html +++ b/src/addon/qtype/calculated/component/addon-qtype-calculated.html @@ -1,6 +1,6 @@
-

+

@@ -55,9 +55,7 @@
- - - + {{ option.text }} diff --git a/src/addon/qtype/ddimageortext/component/addon-qtype-ddimageortext.html b/src/addon/qtype/ddimageortext/component/addon-qtype-ddimageortext.html index 218b25b24..e1e79fdc3 100644 --- a/src/addon/qtype/ddimageortext/component/addon-qtype-ddimageortext.html +++ b/src/addon/qtype/ddimageortext/component/addon-qtype-ddimageortext.html @@ -7,7 +7,7 @@ {{ 'core.question.howtodraganddrop' | translate }}

-

- +

+
diff --git a/src/addon/qtype/ddmarker/component/addon-qtype-ddmarker.html b/src/addon/qtype/ddmarker/component/addon-qtype-ddmarker.html index 199abc85d..58763a33e 100644 --- a/src/addon/qtype/ddmarker/component/addon-qtype-ddmarker.html +++ b/src/addon/qtype/ddmarker/component/addon-qtype-ddmarker.html @@ -7,7 +7,7 @@ {{ 'core.question.howtodraganddrop' | translate }}

-

- +

+ diff --git a/src/addon/qtype/ddwtos/component/addon-qtype-ddwtos.html b/src/addon/qtype/ddwtos/component/addon-qtype-ddwtos.html index 67c15fdfd..ae2f63831 100644 --- a/src/addon/qtype/ddwtos/component/addon-qtype-ddwtos.html +++ b/src/addon/qtype/ddwtos/component/addon-qtype-ddwtos.html @@ -7,8 +7,8 @@ {{ 'core.question.howtodraganddrop' | translate }}

-

- +

+
diff --git a/src/addon/qtype/ddwtos/component/ddwtos.ts b/src/addon/qtype/ddwtos/component/ddwtos.ts index b144a4013..83190e29e 100644 --- a/src/addon/qtype/ddwtos/component/ddwtos.ts +++ b/src/addon/qtype/ddwtos/component/ddwtos.ts @@ -95,7 +95,8 @@ export class AddonQtypeDdwtosComponent extends CoreQuestionBaseComponent impleme this.questionInstance = new AddonQtypeDdwtosQuestion(this.loggerProvider, this.domUtils, this.element, this.question, this.question.readOnly, this.inputIds, this.textUtils); - this.questionHelper.treatCorrectnessIconsClicks(this.element, this.component, this.componentId); + this.questionHelper.treatCorrectnessIconsClicks(this.element, this.component, this.componentId, this.contextLevel, + this.contextInstanceId); this.question.loaded = true; }); diff --git a/src/addon/qtype/description/component/addon-qtype-description.html b/src/addon/qtype/description/component/addon-qtype-description.html index 74d4f190d..3b54888e9 100644 --- a/src/addon/qtype/description/component/addon-qtype-description.html +++ b/src/addon/qtype/description/component/addon-qtype-description.html @@ -2,6 +2,6 @@ -

+

diff --git a/src/addon/qtype/essay/component/addon-qtype-essay.html b/src/addon/qtype/essay/component/addon-qtype-essay.html index ec4293251..b8df1320e 100644 --- a/src/addon/qtype/essay/component/addon-qtype-essay.html +++ b/src/addon/qtype/essay/component/addon-qtype-essay.html @@ -1,7 +1,7 @@
-

+

@@ -20,7 +20,7 @@

{{ 'core.question.errorinlinefilesnotsupported' | translate }}

-

+

@@ -31,7 +31,7 @@ -

+

diff --git a/src/addon/qtype/gapselect/component/addon-qtype-gapselect.html b/src/addon/qtype/gapselect/component/addon-qtype-gapselect.html index 70efb95b7..099c6d926 100644 --- a/src/addon/qtype/gapselect/component/addon-qtype-gapselect.html +++ b/src/addon/qtype/gapselect/component/addon-qtype-gapselect.html @@ -1,5 +1,5 @@
-

+

diff --git a/src/addon/qtype/gapselect/component/gapselect.ts b/src/addon/qtype/gapselect/component/gapselect.ts index 34de237db..2faa3ada4 100644 --- a/src/addon/qtype/gapselect/component/gapselect.ts +++ b/src/addon/qtype/gapselect/component/gapselect.ts @@ -44,6 +44,7 @@ export class AddonQtypeGapSelectComponent extends CoreQuestionBaseComponent impl * The question has been rendered. */ questionRendered(): void { - this.questionHelper.treatCorrectnessIconsClicks(this.element, this.component, this.componentId); + this.questionHelper.treatCorrectnessIconsClicks(this.element, this.component, this.componentId, this.contextLevel, + this.contextInstanceId); } } diff --git a/src/addon/qtype/match/component/addon-qtype-match.html b/src/addon/qtype/match/component/addon-qtype-match.html index 95bed5ddc..2f48f297d 100644 --- a/src/addon/qtype/match/component/addon-qtype-match.html +++ b/src/addon/qtype/match/component/addon-qtype-match.html @@ -1,12 +1,12 @@
- + -

+

diff --git a/src/addon/qtype/multianswer/component/addon-qtype-multianswer.html b/src/addon/qtype/multianswer/component/addon-qtype-multianswer.html index 74bc91da4..68b989b11 100644 --- a/src/addon/qtype/multianswer/component/addon-qtype-multianswer.html +++ b/src/addon/qtype/multianswer/component/addon-qtype-multianswer.html @@ -1,5 +1,5 @@
- +
diff --git a/src/addon/qtype/multianswer/component/multianswer.ts b/src/addon/qtype/multianswer/component/multianswer.ts index 5fa7ce6ca..d19750434 100644 --- a/src/addon/qtype/multianswer/component/multianswer.ts +++ b/src/addon/qtype/multianswer/component/multianswer.ts @@ -44,6 +44,7 @@ export class AddonQtypeMultiAnswerComponent extends CoreQuestionBaseComponent im * The question has been rendered. */ questionRendered(): void { - this.questionHelper.treatCorrectnessIconsClicks(this.element, this.component, this.componentId); + this.questionHelper.treatCorrectnessIconsClicks(this.element, this.component, this.componentId, this.contextLevel, + this.contextInstanceId); } } diff --git a/src/addon/qtype/multichoice/component/addon-qtype-multichoice.html b/src/addon/qtype/multichoice/component/addon-qtype-multichoice.html index 56ac05cc3..2914b227a 100644 --- a/src/addon/qtype/multichoice/component/addon-qtype-multichoice.html +++ b/src/addon/qtype/multichoice/component/addon-qtype-multichoice.html @@ -1,16 +1,16 @@
- - + + {{ question.prompt }} - -
+ +
@@ -25,8 +25,8 @@
- -
+ +
diff --git a/src/addon/qtype/shortanswer/component/addon-qtype-shortanswer.html b/src/addon/qtype/shortanswer/component/addon-qtype-shortanswer.html index 42febebf0..ee269de08 100644 --- a/src/addon/qtype/shortanswer/component/addon-qtype-shortanswer.html +++ b/src/addon/qtype/shortanswer/component/addon-qtype-shortanswer.html @@ -1,6 +1,6 @@
- + {{ 'addon.mod_quiz.answercolon' | translate }} diff --git a/src/addon/userprofilefield/checkbox/component/checkbox.ts b/src/addon/userprofilefield/checkbox/component/checkbox.ts index 0212563d4..80a8143ab 100644 --- a/src/addon/userprofilefield/checkbox/component/checkbox.ts +++ b/src/addon/userprofilefield/checkbox/component/checkbox.ts @@ -28,6 +28,8 @@ export class AddonUserProfileFieldCheckboxComponent implements OnInit { @Input() edit = false; // True if editing the field. Defaults to false. @Input() disabled = false; // True if disabled. Defaults to false. @Input() form: FormGroup; // Form where to add the form control. + @Input() contextLevel?: string; // The context level. + @Input() contextInstanceId?: number; // The instance ID related to the context. constructor(private fb: FormBuilder, protected utils: CoreUtilsProvider) { } diff --git a/src/addon/userprofilefield/datetime/component/datetime.ts b/src/addon/userprofilefield/datetime/component/datetime.ts index e1b287627..a9b66bf1f 100644 --- a/src/addon/userprofilefield/datetime/component/datetime.ts +++ b/src/addon/userprofilefield/datetime/component/datetime.ts @@ -30,6 +30,8 @@ export class AddonUserProfileFieldDatetimeComponent implements OnInit { @Input() edit = false; // True if editing the field. Defaults to false. @Input() disabled = false; // True if disabled. Defaults to false. @Input() form?: FormGroup; // Form where to add the form control. + @Input() contextLevel?: string; // The context level. + @Input() contextInstanceId?: number; // The instance ID related to the context. constructor(private fb: FormBuilder, private timeUtils: CoreTimeUtilsProvider, protected utils: CoreUtilsProvider, private translate: TranslateService) { } diff --git a/src/addon/userprofilefield/menu/component/addon-user-profile-field-menu.html b/src/addon/userprofilefield/menu/component/addon-user-profile-field-menu.html index dcde5daa8..d46a4dbd6 100644 --- a/src/addon/userprofilefield/menu/component/addon-user-profile-field-menu.html +++ b/src/addon/userprofilefield/menu/component/addon-user-profile-field-menu.html @@ -1,7 +1,7 @@

{{ field.name }}

-

+

diff --git a/src/addon/userprofilefield/menu/component/menu.ts b/src/addon/userprofilefield/menu/component/menu.ts index 59642861a..89f82faa0 100644 --- a/src/addon/userprofilefield/menu/component/menu.ts +++ b/src/addon/userprofilefield/menu/component/menu.ts @@ -27,6 +27,8 @@ export class AddonUserProfileFieldMenuComponent implements OnInit { @Input() edit = false; // True if editing the field. Defaults to false. @Input() disabled = false; // True if disabled. Defaults to false. @Input() form?: FormGroup; // Form where to add the form control. + @Input() contextLevel?: string; // The context level. + @Input() contextInstanceId?: number; // The instance ID related to the context. constructor(private fb: FormBuilder) { } diff --git a/src/addon/userprofilefield/text/component/addon-user-profile-field-text.html b/src/addon/userprofilefield/text/component/addon-user-profile-field-text.html index 1ca1a727d..5c9a460eb 100644 --- a/src/addon/userprofilefield/text/component/addon-user-profile-field-text.html +++ b/src/addon/userprofilefield/text/component/addon-user-profile-field-text.html @@ -1,7 +1,7 @@

{{ field.name }}

-

+

diff --git a/src/addon/userprofilefield/text/component/text.ts b/src/addon/userprofilefield/text/component/text.ts index 089a58bb0..c25ff38d9 100644 --- a/src/addon/userprofilefield/text/component/text.ts +++ b/src/addon/userprofilefield/text/component/text.ts @@ -28,6 +28,8 @@ export class AddonUserProfileFieldTextComponent implements OnInit { @Input() edit = false; // True if editing the field. Defaults to false. @Input() disabled = false; // True if disabled. Defaults to false. @Input() form?: FormGroup; // Form where to add the form control. + @Input() contextLevel?: string; // The context level. + @Input() contextInstanceId?: number; // The instance ID related to the context. constructor(private fb: FormBuilder, protected utils: CoreUtilsProvider) { } diff --git a/src/addon/userprofilefield/textarea/component/addon-user-profile-field-textarea.html b/src/addon/userprofilefield/textarea/component/addon-user-profile-field-textarea.html index 4a993015b..a9e60d41d 100644 --- a/src/addon/userprofilefield/textarea/component/addon-user-profile-field-textarea.html +++ b/src/addon/userprofilefield/textarea/component/addon-user-profile-field-textarea.html @@ -1,7 +1,7 @@

{{ field.name }}

-

+

diff --git a/src/addon/userprofilefield/textarea/component/textarea.ts b/src/addon/userprofilefield/textarea/component/textarea.ts index 79919bd35..475e1e717 100644 --- a/src/addon/userprofilefield/textarea/component/textarea.ts +++ b/src/addon/userprofilefield/textarea/component/textarea.ts @@ -27,6 +27,8 @@ export class AddonUserProfileFieldTextareaComponent implements OnInit { @Input() edit = false; // True if editing the field. Defaults to false. @Input() disabled = false; // True if disabled. Defaults to false. @Input() form?: FormGroup; // Form where to add the form control. + @Input() contextLevel?: string; // The context level. + @Input() contextInstanceId?: number; // The instance ID related to the context. control: FormControl; diff --git a/src/components/context-menu/core-context-menu-popover.html b/src/components/context-menu/core-context-menu-popover.html index 69ffdadf7..76a6b96d1 100644 --- a/src/components/context-menu/core-context-menu-popover.html +++ b/src/components/context-menu/core-context-menu-popover.html @@ -2,7 +2,7 @@ {{title}} - + {{item.badge}} diff --git a/src/components/course-picker-menu/core-course-picker-menu-popover.html b/src/components/course-picker-menu/core-course-picker-menu-popover.html index 6eea11d5e..ebfa0f52a 100644 --- a/src/components/course-picker-menu/core-course-picker-menu-popover.html +++ b/src/components/course-picker-menu/core-course-picker-menu-popover.html @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/src/components/navigation-bar/navigation-bar.ts b/src/components/navigation-bar/navigation-bar.ts index b5c2b0b42..5a38d49a0 100644 --- a/src/components/navigation-bar/navigation-bar.ts +++ b/src/components/navigation-bar/navigation-bar.ts @@ -35,6 +35,8 @@ export class CoreNavigationBarComponent { @Input() title?: string; // Title to show when seeing the info (new page). @Input() component?: string; // Component the bar belongs to. @Input() componentId?: number; // Component ID. + @Input() contextLevel?: string; // The context level. + @Input() contextInstanceId?: number; // The instance ID related to the context. @Output() action?: EventEmitter; // Function to call when an arrow is clicked. Will receive as a param the item to load. constructor(private textUtils: CoreTextUtilsProvider) { @@ -42,6 +44,7 @@ export class CoreNavigationBarComponent { } showInfo(): void { - this.textUtils.expandText(this.title, this.info, this.component, this.componentId); + this.textUtils.expandText(this.title, this.info, this.component, this.componentId, [], true, this.contextLevel, + this.contextInstanceId); } } diff --git a/src/components/site-picker/site-picker.ts b/src/components/site-picker/site-picker.ts index e58dfda86..c0ca1d6e1 100644 --- a/src/components/site-picker/site-picker.ts +++ b/src/components/site-picker/site-picker.ts @@ -15,7 +15,7 @@ import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core'; import { TranslateService } from '@ngx-translate/core'; import { CoreSitesProvider } from '@providers/sites'; -import { CoreTextUtilsProvider } from '@providers/utils/text'; +import { CoreFilterProvider } from '@core/filter/providers/filter'; /** * Component to display a site selector. It will display a select with the list of sites. If the selected site changes, @@ -36,7 +36,7 @@ export class CoreSitePickerComponent implements OnInit { sites: any[]; constructor(private translate: TranslateService, private sitesProvider: CoreSitesProvider, - private textUtils: CoreTextUtilsProvider) { + private filterProvider: CoreFilterProvider) { this.siteSelected = new EventEmitter(); } @@ -49,7 +49,8 @@ export class CoreSitePickerComponent implements OnInit { sites.forEach((site: any) => { // Format the site name. - promises.push(this.textUtils.formatText(site.siteName, true, true).catch(() => { + promises.push(this.filterProvider.getFiltersAndFormatText(site.siteName, 'system', site.siteHomeId, + {clean: true, singleLine: true}, site.getId()).catch(() => { return site.siteName; }).then((formatted) => { site.fullNameAndSiteName = this.translate.instant('core.fullnameandsitename', diff --git a/src/core/block/components/only-title-block/core-block-only-title.html b/src/core/block/components/only-title-block/core-block-only-title.html index 358fbde44..287592371 100644 --- a/src/core/block/components/only-title-block/core-block-only-title.html +++ b/src/core/block/components/only-title-block/core-block-only-title.html @@ -1,3 +1,3 @@ -

+

{{ title | translate }}

\ No newline at end of file diff --git a/src/core/block/components/pre-rendered-block/core-block-pre-rendered.html b/src/core/block/components/pre-rendered-block/core-block-pre-rendered.html index 84cf2ac52..4b3f46315 100644 --- a/src/core/block/components/pre-rendered-block/core-block-pre-rendered.html +++ b/src/core/block/components/pre-rendered-block/core-block-pre-rendered.html @@ -1,11 +1,11 @@ -

+

- + - + diff --git a/src/core/comments/pages/viewer/viewer.html b/src/core/comments/pages/viewer/viewer.html index 2a023a419..dc24b1acc 100644 --- a/src/core/comments/pages/viewer/viewer.html +++ b/src/core/comments/pages/viewer/viewer.html @@ -1,6 +1,6 @@ - +
- + @@ -56,7 +56,7 @@
- + diff --git a/src/core/contentlinks/pages/choose-site/choose-site.html b/src/core/contentlinks/pages/choose-site/choose-site.html index c6a401175..198304584 100644 --- a/src/core/contentlinks/pages/choose-site/choose-site.html +++ b/src/core/contentlinks/pages/choose-site/choose-site.html @@ -15,7 +15,7 @@ {{ 'core.pictureof' | translate:{$a: site.fullname} }}

{{site.fullName}}

-

+

{{site.siteUrl}}

diff --git a/src/core/course/classes/main-resource-component.ts b/src/core/course/classes/main-resource-component.ts index 3ffae46fe..2233f893a 100644 --- a/src/core/course/classes/main-resource-component.ts +++ b/src/core/course/classes/main-resource-component.ts @@ -236,7 +236,8 @@ export class CoreCourseModuleMainResourceComponent implements OnInit, OnDestroy, * Expand the description. */ expandDescription(): void { - this.textUtils.expandText(this.translate.instant('core.description'), this.description, this.component, this.module.id); + this.textUtils.expandText(this.translate.instant('core.description'), this.description, this.component, this.module.id, + [], true, 'module', this.module.id); } /** diff --git a/src/core/course/components/format/core-course-format.html b/src/core/course/components/format/core-course-format.html index 7013b69f5..07b21f6db 100644 --- a/src/core/course/components/format/core-course-format.html +++ b/src/core/course/components/format/core-course-format.html @@ -58,10 +58,10 @@ @@ -74,13 +74,13 @@
- + - + diff --git a/src/core/course/components/module-completion/module-completion.ts b/src/core/course/components/module-completion/module-completion.ts index df4f4ceb2..ff3f265d1 100644 --- a/src/core/course/components/module-completion/module-completion.ts +++ b/src/core/course/components/module-completion/module-completion.ts @@ -15,9 +15,9 @@ import { Component, Input, Output, EventEmitter, OnChanges, SimpleChange } from '@angular/core'; import { TranslateService } from '@ngx-translate/core'; import { CoreDomUtilsProvider } from '@providers/utils/dom'; -import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreUserProvider } from '@core/user/providers/user'; import { CoreCourseProvider } from '../../providers/course'; +import { CoreFilterProvider } from '@core/filter/providers/filter'; /** * Component to handle activity completion. It shows a checkbox with the current status, and allows manually changing @@ -34,13 +34,14 @@ import { CoreCourseProvider } from '../../providers/course'; }) export class CoreCourseModuleCompletionComponent implements OnChanges { @Input() completion: any; // The completion status. + @Input() moduleId?: number; // The name of the module this completion affects. @Input() moduleName?: string; // The name of the module this completion affects. @Output() completionChanged?: EventEmitter; // Will emit an event when the completion changes. completionImage: string; completionDescription: string; - constructor(private textUtils: CoreTextUtilsProvider, private domUtils: CoreDomUtilsProvider, + constructor(private filterProvider: CoreFilterProvider, private domUtils: CoreDomUtilsProvider, private translate: TranslateService, private courseProvider: CoreCourseProvider, private userProvider: CoreUserProvider) { this.completionChanged = new EventEmitter(); @@ -137,7 +138,9 @@ export class CoreCourseModuleCompletionComponent implements OnChanges { } if (moduleName) { - this.textUtils.formatText(moduleName, true, true, 50).then((modNameFormatted) => { + this.filterProvider.getFiltersAndFormatText(moduleName, 'module', this.moduleId, + {clean: true, singleLine: true, shortenLength: 50}).then((modName) => { + let promise; if (this.completion.overrideby > 0) { @@ -147,11 +150,11 @@ export class CoreCourseModuleCompletionComponent implements OnChanges { (profile) => { return { overrideuser: profile.fullname, - modname: modNameFormatted + modname: modName }; }); } else { - promise = Promise.resolve(modNameFormatted); + promise = Promise.resolve(modName); } return promise.then((translateParams) => { diff --git a/src/core/course/components/module-description/core-course-module-description.html b/src/core/course/components/module-description/core-course-module-description.html index 412d5bf3b..af4e525b3 100644 --- a/src/core/course/components/module-description/core-course-module-description.html +++ b/src/core/course/components/module-description/core-course-module-description.html @@ -1,6 +1,6 @@ - + {{ note }} diff --git a/src/core/course/components/module-description/module-description.ts b/src/core/course/components/module-description/module-description.ts index 0e19d86b1..eaa08a1b0 100644 --- a/src/core/course/components/module-description/module-description.ts +++ b/src/core/course/components/module-description/module-description.ts @@ -40,6 +40,8 @@ export class CoreCourseModuleDescriptionComponent { @Input() component?: string; // Component for format text directive. @Input() componentId?: string | number; // Component ID to use in conjunction with the component. @Input() showFull?: string | boolean; // Whether to always display the full description. + @Input() contextLevel?: string; // The context level. + @Input() contextInstanceId?: number; // The instance ID related to the context. constructor() { // Nothing to do. diff --git a/src/core/course/components/module/core-course-module.html b/src/core/course/components/module/core-course-module.html index 0b0239685..4d9a4021d 100644 --- a/src/core/course/components/module/core-course-module.html +++ b/src/core/course/components/module/core-course-module.html @@ -2,12 +2,12 @@
- +
- +
@@ -21,15 +21,15 @@
- + {{ 'core.course.hiddenfromstudents' | translate }} {{ 'core.course.hiddenoncoursepage' | translate }}
{{ 'core.restricted' | translate }} - +
{{ 'core.course.manualcompletionnotsynced' | translate }}
- + \ No newline at end of file diff --git a/src/core/course/components/unsupported-module/core-course-unsupported-module.html b/src/core/course/components/unsupported-module/core-course-unsupported-module.html index 3738ade00..f1796de2e 100644 --- a/src/core/course/components/unsupported-module/core-course-unsupported-module.html +++ b/src/core/course/components/unsupported-module/core-course-unsupported-module.html @@ -1,5 +1,5 @@
- +

{{ 'core.whoops' | translate }}

{{ 'core.uhoh' | translate }}

diff --git a/src/core/course/pages/list-mod-type/list-mod-type.html b/src/core/course/pages/list-mod-type/list-mod-type.html index 7315af183..39678efed 100644 --- a/src/core/course/pages/list-mod-type/list-mod-type.html +++ b/src/core/course/pages/list-mod-type/list-mod-type.html @@ -1,6 +1,6 @@ - + {{ title }} diff --git a/src/core/course/pages/section-selector/section-selector.html b/src/core/course/pages/section-selector/section-selector.html index e160fa1f6..e8af2bc87 100644 --- a/src/core/course/pages/section-selector/section-selector.html +++ b/src/core/course/pages/section-selector/section-selector.html @@ -13,10 +13,10 @@ -

+

{{ 'core.course.hiddenfromstudents' | translate }} - +
diff --git a/src/core/course/pages/section-selector/section-selector.ts b/src/core/course/pages/section-selector/section-selector.ts index c86cf171c..d3ce687c3 100644 --- a/src/core/course/pages/section-selector/section-selector.ts +++ b/src/core/course/pages/section-selector/section-selector.ts @@ -30,12 +30,15 @@ export class CoreCourseSectionSelectorPage { stealthModulesSectionId = CoreCourseProvider.STEALTH_MODULES_SECTION_ID; sections: any; selected: number; + courseId: number; constructor(navParams: NavParams, courseHelper: CoreCourseHelperProvider, private viewCtrl: ViewController) { this.sections = navParams.get('sections'); this.selected = navParams.get('selected'); const course = navParams.get('course'); + this.courseId = course && course.id; + if (course && course.enablecompletion && course.courseformatoptions && course.courseformatoptions.coursedisplay == 1 && course.completionusertracked !== false) { this.sections.forEach((section) => { diff --git a/src/core/course/pages/section/section.html b/src/core/course/pages/section/section.html index ea12ab46f..6d2411153 100644 --- a/src/core/course/pages/section/section.html +++ b/src/core/course/pages/section/section.html @@ -1,6 +1,6 @@ - + diff --git a/src/core/course/pages/section/section.ts b/src/core/course/pages/section/section.ts index 907e88518..5590b1c27 100644 --- a/src/core/course/pages/section/section.ts +++ b/src/core/course/pages/section/section.ts @@ -18,7 +18,6 @@ import { TranslateService } from '@ngx-translate/core'; import { CoreEventsProvider } from '@providers/events'; import { CoreSitesProvider } from '@providers/sites'; import { CoreDomUtilsProvider } from '@providers/utils/dom'; -import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreTabsComponent } from '@components/tabs/tabs'; import { CoreCoursesProvider } from '@core/courses/providers/courses'; @@ -30,6 +29,7 @@ import { CoreCourseOptionsDelegate, CoreCourseOptionsHandlerToDisplay, CoreCourseOptionsMenuHandlerToDisplay } from '../../providers/options-delegate'; import { CoreCourseSyncProvider } from '../../providers/sync'; import { CoreCourseFormatComponent } from '../../components/format/format'; +import { CoreFilterProvider } from '@core/filter/providers/filter'; /** * Page that displays the list of courses the user is enrolled in. @@ -75,7 +75,7 @@ export class CoreCourseSectionPage implements OnDestroy { constructor(navParams: NavParams, private courseProvider: CoreCourseProvider, private domUtils: CoreDomUtilsProvider, private courseFormatDelegate: CoreCourseFormatDelegate, private courseOptionsDelegate: CoreCourseOptionsDelegate, private translate: TranslateService, private courseHelper: CoreCourseHelperProvider, eventsProvider: CoreEventsProvider, - private textUtils: CoreTextUtilsProvider, private coursesProvider: CoreCoursesProvider, + private coursesProvider: CoreCoursesProvider, private filterProvider: CoreFilterProvider, sitesProvider: CoreSitesProvider, private navCtrl: NavController, private injector: Injector, private prefetchDelegate: CoreCourseModulePrefetchDelegate, private syncProvider: CoreCourseSyncProvider, private utils: CoreUtilsProvider) { @@ -263,7 +263,8 @@ export class CoreCourseSectionPage implements OnDestroy { // Format the name of each section and check if it has content. this.sections = sections.map((section) => { - this.textUtils.formatText(section.name.trim(), true, true).then((name) => { + this.filterProvider.getFiltersAndFormatText(section.name.trim(), 'course', this.course.id, + {clean: true, singleLine: true}).then((name) => { section.formattedName = name; }); section.hasContent = this.courseHelper.sectionHasContent(section); diff --git a/src/core/course/pages/unsupported-module/unsupported-module.html b/src/core/course/pages/unsupported-module/unsupported-module.html index 13c933949..c0ae5285a 100644 --- a/src/core/course/pages/unsupported-module/unsupported-module.html +++ b/src/core/course/pages/unsupported-module/unsupported-module.html @@ -1,6 +1,6 @@ - + diff --git a/src/core/course/pages/unsupported-module/unsupported-module.ts b/src/core/course/pages/unsupported-module/unsupported-module.ts index 8ecd58f00..6e4c87008 100644 --- a/src/core/course/pages/unsupported-module/unsupported-module.ts +++ b/src/core/course/pages/unsupported-module/unsupported-module.ts @@ -36,6 +36,7 @@ export class CoreCourseUnsupportedModulePage { * Expand the description. */ expandDescription(): void { - this.textUtils.expandText(this.translate.instant('core.description'), this.module.description); + this.textUtils.expandText(this.translate.instant('core.description'), this.module.description, undefined, undefined, + [], true, 'module', this.module.id); } } diff --git a/src/core/courses/components/course-list-item/core-courses-course-list-item.html b/src/core/courses/components/course-list-item/core-courses-course-list-item.html index a56a02b9b..e594ff06b 100644 --- a/src/core/courses/components/course-list-item/core-courses-course-list-item.html +++ b/src/core/courses/components/course-list-item/core-courses-course-list-item.html @@ -1,6 +1,6 @@ -

+

diff --git a/src/core/courses/components/course-progress/core-courses-course-progress.html b/src/core/courses/components/course-progress/core-courses-course-progress.html index 985d92008..ed72a738e 100644 --- a/src/core/courses/components/course-progress/core-courses-course-progress.html +++ b/src/core/courses/components/course-progress/core-courses-course-progress.html @@ -4,10 +4,10 @@
-

+

- +

diff --git a/src/core/courses/pages/categories/categories.html b/src/core/courses/pages/categories/categories.html index e24c372bb..0952bb4ef 100644 --- a/src/core/courses/pages/categories/categories.html +++ b/src/core/courses/pages/categories/categories.html @@ -1,6 +1,6 @@ - + @@ -10,10 +10,10 @@ -

+

- +
@@ -21,7 +21,7 @@
-

+

{{category.coursecount}}
diff --git a/src/core/courses/pages/course-preview/course-preview.html b/src/core/courses/pages/course-preview/course-preview.html index e379c0b21..f84814ab6 100644 --- a/src/core/courses/pages/course-preview/course-preview.html +++ b/src/core/courses/pages/course-preview/course-preview.html @@ -1,6 +1,6 @@ - + @@ -15,13 +15,13 @@
-

-

+

+

{{course.startdate * 1000 | coreFormatDate:"strftimedatefullshort" }} - {{course.enddate * 1000 | coreFormatDate:"strftimedatefullshort" }}

- + @@ -36,8 +36,8 @@
- : - + : +
diff --git a/src/core/courses/pages/dashboard/dashboard.html b/src/core/courses/pages/dashboard/dashboard.html index 4f030b26f..0030c0b0f 100644 --- a/src/core/courses/pages/dashboard/dashboard.html +++ b/src/core/courses/pages/dashboard/dashboard.html @@ -1,6 +1,6 @@ - +
diff --git a/src/core/user/pages/profile/profile.html b/src/core/user/pages/profile/profile.html index fae5a9edd..fcda7fd09 100644 --- a/src/core/user/pages/profile/profile.html +++ b/src/core/user/pages/profile/profile.html @@ -1,6 +1,6 @@ - + {{ title }} @@ -13,11 +13,11 @@ -

-

+

{{ user.fullname }}

+

{{ user.address }}

{{ 'core.user.roles' | translate}}{{'core.labelsep' | translate}} - + {{ user.roles }}

diff --git a/src/core/viewer/pages/text/text.html b/src/core/viewer/pages/text/text.html index 56fc902a9..f73c58612 100644 --- a/src/core/viewer/pages/text/text.html +++ b/src/core/viewer/pages/text/text.html @@ -10,7 +10,7 @@ - + diff --git a/src/core/viewer/pages/text/text.ts b/src/core/viewer/pages/text/text.ts index 6ab1e7bf3..912c9ccff 100644 --- a/src/core/viewer/pages/text/text.ts +++ b/src/core/viewer/pages/text/text.ts @@ -30,6 +30,9 @@ export class CoreViewerTextPage { component: string; // Component to use in format-text. componentId: string | number; // Component ID to use in format-text. files: any[]; // List of files. + filter: boolean; // Whether to filter the text. + contextLevel: string; // The context level. + instanceId: number; // The instance ID related to the context. constructor(private viewCtrl: ViewController, params: NavParams, textUtils: CoreTextUtilsProvider) { this.title = params.get('title'); @@ -37,6 +40,9 @@ export class CoreViewerTextPage { this.component = params.get('component'); this.componentId = params.get('componentId'); this.files = params.get('files'); + this.filter = params.get('filter'); + this.contextLevel = params.get('contextLevel'); + this.instanceId = params.get('instanceId'); } /** diff --git a/src/directives/format-text.ts b/src/directives/format-text.ts index 88fb67c20..e9c78ec04 100644 --- a/src/directives/format-text.ts +++ b/src/directives/format-text.ts @@ -30,10 +30,13 @@ import { CoreLinkDirective } from '../directives/link'; import { CoreExternalContentDirective } from '../directives/external-content'; import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper'; import { CoreSplitViewComponent } from '@components/split-view/split-view'; +import { CoreFilterProvider } from '@core/filter/providers/filter'; /** * Directive to format text rendered. It renders the HTML and treats all links and media, using CoreLinkDirective - * and CoreExternalContentDirective. + * and CoreExternalContentDirective. It also applies filters if needed. + * + * Please use this directive if your text needs to be filtered or it can contain links or media (images, audio, video). * * Example usage: * @@ -55,6 +58,9 @@ export class CoreFormatTextDirective implements OnChanges { @Input() fullOnClick?: boolean | string; // Whether it should open a new page with the full contents on click. @Input() fullTitle?: string; // Title to use in full view. Defaults to "Description". @Input() highlight?: string; // Text to highlight. + @Input() filter?: boolean | string; // Whether to filter the text. If not defined, true if contextLevel and instanceId are set. + @Input() contextLevel?: string; // The context level of the text. + @Input() contextInstanceId?: number; // The instance ID related to the context. @Output() afterRender?: EventEmitter; // Called when the data is rendered. protected element: HTMLElement; @@ -67,7 +73,8 @@ export class CoreFormatTextDirective implements OnChanges { private filepoolProvider: CoreFilepoolProvider, private appProvider: CoreAppProvider, private contentLinksHelper: CoreContentLinksHelperProvider, @Optional() private navCtrl: NavController, @Optional() private content: Content, @Optional() private svComponent: CoreSplitViewComponent, - private iframeUtils: CoreIframeUtilsProvider, private eventsProvider: CoreEventsProvider) { + private iframeUtils: CoreIframeUtilsProvider, private eventsProvider: CoreEventsProvider, + private filterProvider: CoreFilterProvider) { this.element = element.nativeElement; this.element.classList.add('opacity-hide'); // Hide contents until they're treated. this.afterRender = new EventEmitter(); @@ -275,8 +282,10 @@ export class CoreFormatTextDirective implements OnChanges { return; } else { // Open a new state with the contents. + const filter = this.utils.isTrueOrOne(this.filter); + this.textUtils.expandText(this.fullTitle || this.translate.instant('core.description'), this.text, - this.component, this.componentId); + this.component, this.componentId, undefined, filter, this.contextLevel, this.contextInstanceId); } } @@ -363,9 +372,26 @@ export class CoreFormatTextDirective implements OnChanges { }).then((siteInstance: CoreSite) => { site = siteInstance; - // Apply format text function. - return this.textUtils.formatText(this.text, this.utils.isTrueOrOne(this.clean), - this.utils.isTrueOrOne(this.singleLine), undefined, this.highlight); + if (this.contextLevel == 'course' && this.contextInstanceId <= 0) { + this.contextInstanceId = site.getSiteHomeId(); + } + + this.filter = typeof this.filter == 'undefined' ? !!(this.contextLevel && this.contextInstanceId) : !!this.filter; + + const options = { + clean: this.utils.isTrueOrOne(this.clean), + singleLine: this.utils.isTrueOrOne(this.singleLine), + highlight: this.highlight, + filter: this.filter + }; + + if (this.filter) { + return this.filterProvider.getFiltersAndFormatText(this.text, this.contextLevel, this.contextInstanceId, options, + site.getId()); + } else { + return this.filterProvider.formatText(this.text, options); + } + }).then((formatted) => { const div = document.createElement('div'), canTreatVimeo = site && site.isVersionGreaterEqualThan(['3.3.4', '3.4']), diff --git a/src/providers/sites.ts b/src/providers/sites.ts index 5616f3dd2..d3e1ecba8 100644 --- a/src/providers/sites.ts +++ b/src/providers/sites.ts @@ -113,6 +113,11 @@ export interface CoreSiteBasicInfo { * Badge to display in the site. */ badge?: number; + + /** + * Site home ID. + */ + siteHomeId?: number; } /** @@ -1130,7 +1135,8 @@ export class CoreSitesProvider { siteUrl: site.siteUrl, fullName: siteInfo && siteInfo.fullname, siteName: CoreConfigConstants.sitename ? CoreConfigConstants.sitename : siteInfo && siteInfo.sitename, - avatar: siteInfo && siteInfo.userpictureurl + avatar: siteInfo && siteInfo.userpictureurl, + siteHomeId: siteInfo && siteInfo.siteid || 1 }; formattedSites.push(basicInfo); } diff --git a/src/providers/utils/text.ts b/src/providers/utils/text.ts index 262662da6..50593fc93 100644 --- a/src/providers/utils/text.ts +++ b/src/providers/utils/text.ts @@ -349,15 +349,22 @@ export class CoreTextUtilsProvider { * @param component Component to link the embedded files to. * @param componentId An ID to use in conjunction with the component. * @param files List of files to display along with the text. + * @param filter Whether the text should be filtered. + * @param contextLevel The context level. + * @param instanceId The instance ID related to the context. */ - expandText(title: string, text: string, component?: string, componentId?: string | number, files?: any[]): void { + expandText(title: string, text: string, component?: string, componentId?: string | number, files?: any[], + filter?: boolean, contextLevel?: string, instanceId?: number): void { if (text.length > 0) { const params: any = { title: title, content: text, component: component, componentId: componentId, - files: files + files: files, + filter: filter, + contextLevel: contextLevel, + instanceId: instanceId }; // Open a modal with the contents. @@ -398,6 +405,7 @@ export class CoreTextUtilsProvider { * @param shortenLength Number of characters to shorten the text. * @param highlight Text to highlight. * @return Promise resolved with the formatted text. + * @deprecated since 3.8.0. Please use CoreFilterProvider.formatText instead. */ formatText(text: string, clean?: boolean, singleLine?: boolean, shortenLength?: number, highlight?: string): Promise { return this.treatMultilangTags(text).then((formatted) => {