From efa8618efa42d6dbe7e3e4d4303e681685ed8c3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= <crazyserver@gmail.com> Date: Mon, 3 Sep 2018 13:29:20 +0200 Subject: [PATCH 01/16] MOBILE-2567 chat: Add margin bottom when keyboard is open --- src/addon/messages/pages/discussion/discussion.html | 2 +- src/addon/mod/chat/pages/chat/chat.html | 2 +- src/app/app.scss | 4 +++- src/components/tabs/tabs.scss | 1 + src/core/emulator/pages/capture-media/capture-media.html | 2 +- 5 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/addon/messages/pages/discussion/discussion.html b/src/addon/messages/pages/discussion/discussion.html index 1c7b2e325..89bd5a6be 100644 --- a/src/addon/messages/pages/discussion/discussion.html +++ b/src/addon/messages/pages/discussion/discussion.html @@ -12,7 +12,7 @@ </a> </core-navbar-buttons> </ion-header> -<ion-content> +<ion-content class="has-footer"> <core-loading [hideUntil]="loaded"> <!-- Load previous messages. --> <ion-infinite-scroll [enabled]="canLoadMore" (ionInfinite)="loadPrevious($event)" position="top"> diff --git a/src/addon/mod/chat/pages/chat/chat.html b/src/addon/mod/chat/pages/chat/chat.html index fbdf3bce1..c440dce08 100644 --- a/src/addon/mod/chat/pages/chat/chat.html +++ b/src/addon/mod/chat/pages/chat/chat.html @@ -8,7 +8,7 @@ </ion-buttons> </ion-navbar> </ion-header> -<ion-content> +<ion-content class="has-footer"> <core-loading [hideUntil]="loaded"> <div aria-live="polite"> <div *ngFor="let message of messages; index as index; last as last"> diff --git a/src/app/app.scss b/src/app/app.scss index 59e4bfb88..5df6a8ce9 100644 --- a/src/app/app.scss +++ b/src/app/app.scss @@ -919,8 +919,10 @@ ion-app.app-root { } body.keyboard-is-open { - .scroll-content, .fixed-content { + ion-content:not(.has-footer) { + > .scroll-content, > .fixed-content { margin-bottom: 0 !important; + } } core-ion-tabs .tabbar { diff --git a/src/components/tabs/tabs.scss b/src/components/tabs/tabs.scss index 92429699d..b39c0f89e 100644 --- a/src/components/tabs/tabs.scss +++ b/src/components/tabs/tabs.scss @@ -26,6 +26,7 @@ ion-app.app-root .core-tabs-bar { word-wrap: break-word; display: block; width: 100%; + line-height: 1.2em; } &[aria-selected=true] { diff --git a/src/core/emulator/pages/capture-media/capture-media.html b/src/core/emulator/pages/capture-media/capture-media.html index 8ea643e22..60e2c6dd2 100644 --- a/src/core/emulator/pages/capture-media/capture-media.html +++ b/src/core/emulator/pages/capture-media/capture-media.html @@ -11,7 +11,7 @@ </ion-buttons> </ion-navbar> </ion-header> -<ion-content> +<ion-content class="has-footer"> <core-loading [hideUntil]="readyToCapture"> <div class="core-av-wrapper"> <!-- Video stream for image and video. --> From 36fac6c00fd744ecba4e83d42b092f59faccd5cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= <crazyserver@gmail.com> Date: Mon, 3 Sep 2018 14:00:20 +0200 Subject: [PATCH 02/16] MOBILE-2567 assignment: Style users who need to submit --- .../components/submission/addon-mod-assign-submission.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/addon/mod/assign/components/submission/addon-mod-assign-submission.html b/src/addon/mod/assign/components/submission/addon-mod-assign-submission.html index ba7f9c590..f8d03552a 100644 --- a/src/addon/mod/assign/components/submission/addon-mod-assign-submission.html +++ b/src/addon/mod/assign/components/submission/addon-mod-assign-submission.html @@ -112,15 +112,15 @@ <ion-item text-wrap *ngIf="membersToSubmit && membersToSubmit.length > 0"> <h2>{{ 'addon.mod_assign.userswhoneedtosubmit' | translate: {$a: ''} }}</h2> <div *ngFor="let user of membersToSubmit"> - <a *ngIf="user.fullname" (click)="openUserProfile(user.id)" [title]="user.fullname"> + <a ion-item text-wrap *ngIf="user.fullname" (click)="openUserProfile(user.id)" [title]="user.fullname"> <ion-avatar item-start> <img [src]="user.profileimageurl" core-external-content [alt]="'core.pictureof' | translate:{$a: user.fullname}" role="presentation" onError="this.src='assets/img/user-avatar.png'"> </ion-avatar> <h2>{{ user.fullname }}</h2> </a> - <p *ngIf="!user.fullname"> + <ion-item text-wrap *ngIf="!user.fullname"> {{ 'addon.mod_assign.hiddenuser' | translate }} <core-format-text [text]="user"></core-format-text> - </p> + </ion-item> </div> </ion-item> From cc20483ae547e669e557f248406dbfbd99b5e755 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= <crazyserver@gmail.com> Date: Mon, 3 Sep 2018 16:02:36 +0200 Subject: [PATCH 03/16] MOBILE-2567 sites: add more padding on icon only buttons --- src/app/app.scss | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/app/app.scss b/src/app/app.scss index 5df6a8ce9..08adcea53 100644 --- a/src/app/app.scss +++ b/src/app/app.scss @@ -396,6 +396,12 @@ ion-app.app-root { } } + .item .item-button[icon-only] { + height: 2.8em; + font-size: 1.6rem; + padding: 0 3px; + } + // Ionic fix. Button can occupy all page if not. ion-select { position: relative; From 6f11b7df8c83934c2e2c29bdca61c0814c7abed6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= <crazyserver@gmail.com> Date: Mon, 3 Sep 2018 16:38:15 +0200 Subject: [PATCH 04/16] MOBILE-2567 mainmenu: Fix my courses button menu --- src/core/mainmenu/pages/menu/menu.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/core/mainmenu/pages/menu/menu.scss b/src/core/mainmenu/pages/menu/menu.scss index ae7a4fcbc..2fa0db196 100644 --- a/src/core/mainmenu/pages/menu/menu.scss +++ b/src/core/mainmenu/pages/menu/menu.scss @@ -6,11 +6,15 @@ ion-app.app-root page-core-mainmenu { .ion-fa-graduation-cap { @extend .fa-graduation-cap; @extend .fa; + font-size: 21px; + height: 21px; } .ion-ios-fa-graduation-cap-outline { color: transparent; -webkit-text-stroke-width: 0.8px; -webkit-text-stroke-color: $tabs-tab-color-inactive; + font-size: 23px; + height: 23px; } } From da6d4877c2441f032b862e4e974a943ca902057d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= <crazyserver@gmail.com> Date: Mon, 3 Sep 2018 16:53:03 +0200 Subject: [PATCH 05/16] MOBILE-2567 choice: Style radio buttons for iOS --- src/app/app.ios.scss | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/app/app.ios.scss b/src/app/app.ios.scss index 8684dbd18..edb7d3071 100644 --- a/src/app/app.ios.scss +++ b/src/app/app.ios.scss @@ -138,4 +138,22 @@ ion-app.app-root.ios { .card-ios.with-borders .item-ios:last-child .item-inner { border-bottom: 0; } + + + .radio-ios .radio-icon { + @include position(0, null, null, 0); + @include margin(0); + @include border-radius($radio-md-icon-border-radius); + + position: relative; + display: block; + + width: $checkbox-ios-icon-size; + height: $checkbox-ios-icon-size; + + border-width: $checkbox-ios-icon-border-width; + border-style: $checkbox-ios-icon-border-style; + border-color: $checkbox-ios-icon-border-color-off; + background-color: $checkbox-ios-background-color-off; + } } \ No newline at end of file From 7ab32c7afbe7c08a27adcea5acaf95c8283e70c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= <crazyserver@gmail.com> Date: Tue, 4 Sep 2018 10:22:26 +0200 Subject: [PATCH 06/16] MOBILE-2567 ux: Fix more RTL rules --- src/addon/files/pages/list/list.html | 2 +- .../component/addon-mod-assign-feedback-comments.html | 2 +- .../toc-popover/addon-mod-assign-submission-toc-popover.html | 2 +- .../mod/data/components/index/addon-mod-data-index.html | 2 +- .../glossary/components/index/addon-mod-glossary-index.html | 2 +- .../components/toc-popover/addon-mod-imscp-toc-popover.html | 2 +- src/addon/mod/lesson/pages/player/player.html | 2 +- src/addon/mod/lesson/pages/player/player.scss | 5 ----- src/addon/mod/quiz/pages/review/review.html | 4 ++-- .../mod/wiki/components/index/addon-mod-wiki-index.html | 2 +- src/addon/notifications/pages/list/list.html | 2 +- .../qtype/calculated/component/addon-qtype-calculated.html | 2 +- .../qtype/shortanswer/component/addon-qtype-shortanswer.html | 2 +- src/components/timer/core-timer.html | 2 +- .../overview-events/core-courses-overview-events.html | 4 ++-- src/core/emulator/pages/capture-media/capture-media.html | 2 +- src/core/login/pages/sites/sites.html | 2 +- 17 files changed, 18 insertions(+), 23 deletions(-) diff --git a/src/addon/files/pages/list/list.html b/src/addon/files/pages/list/list.html index 791a6d6db..9bb3ee955 100644 --- a/src/addon/files/pages/list/list.html +++ b/src/addon/files/pages/list/list.html @@ -36,7 +36,7 @@ </core-loading> <!-- Upload a private file. --> - <ion-fab bottom right *ngIf="showUpload && root != 'site' && !path"> + <ion-fab bottom end *ngIf="showUpload && root != 'site' && !path"> <button ion-fab (click)="uploadFile()" [attr.aria-label]="'core.fileuploader.uploadafile' | translate"> <ion-icon name="add"></ion-icon> </button> diff --git a/src/addon/mod/assign/feedback/comments/component/addon-mod-assign-feedback-comments.html b/src/addon/mod/assign/feedback/comments/component/addon-mod-assign-feedback-comments.html index 62f3857f9..cfb780447 100644 --- a/src/addon/mod/assign/feedback/comments/component/addon-mod-assign-feedback-comments.html +++ b/src/addon/mod/assign/feedback/comments/component/addon-mod-assign-feedback-comments.html @@ -5,7 +5,7 @@ <core-format-text [component]="component" [componentId]="assign.cmid" [maxHeight]="80" [fullOnClick]="true" [fullTitle]="plugin.name" [text]="text"></core-format-text> </p> <div item-end> - <div text-right> + <div text-end> <button ion-button icon-only clear *ngIf="canEdit" (click)="editComment()" color="dark"> <ion-icon name="create"></ion-icon> </button> diff --git a/src/addon/mod/book/components/toc-popover/addon-mod-assign-submission-toc-popover.html b/src/addon/mod/book/components/toc-popover/addon-mod-assign-submission-toc-popover.html index ed35905b6..6d3dca6f0 100644 --- a/src/addon/mod/book/components/toc-popover/addon-mod-assign-submission-toc-popover.html +++ b/src/addon/mod/book/components/toc-popover/addon-mod-assign-submission-toc-popover.html @@ -1,5 +1,5 @@ <ion-list> <a ion-item text-wrap *ngFor="let chapter of chapters" (click)="loadChapter(chapter.id)" detail-none> - <p [attr.padding-start]="chapter.level == 1 ? true : null">{{chapter.title}}</p> + <p [attr.padding-left]="chapter.level == 1 ? true : null">{{chapter.title}}</p> </a> </ion-list> diff --git a/src/addon/mod/data/components/index/addon-mod-data-index.html b/src/addon/mod/data/components/index/addon-mod-data-index.html index 3d3d4e3f2..c195f2b41 100644 --- a/src/addon/mod/data/components/index/addon-mod-data-index.html +++ b/src/addon/mod/data/components/index/addon-mod-data-index.html @@ -92,7 +92,7 @@ </core-loading> -<ion-fab bottom right *ngIf="canAdd"> +<ion-fab bottom end *ngIf="canAdd"> <button ion-fab (click)="gotoAddEntries($event)" [attr.aria-label]="'addon.mod_data.addentries' | translate"> <ion-icon name="add"></ion-icon> </button> diff --git a/src/addon/mod/glossary/components/index/addon-mod-glossary-index.html b/src/addon/mod/glossary/components/index/addon-mod-glossary-index.html index adf3b4689..4ad1add14 100644 --- a/src/addon/mod/glossary/components/index/addon-mod-glossary-index.html +++ b/src/addon/mod/glossary/components/index/addon-mod-glossary-index.html @@ -61,7 +61,7 @@ </ion-infinite-scroll> </core-loading> - <ion-fab bottom right *ngIf="canAdd"> + <ion-fab bottom end *ngIf="canAdd"> <button ion-fab (click)="openNewEntry()" [attr.aria-label]="'addon.mod_glossary.addentry' | translate"> <ion-icon name="add"></ion-icon> </button> diff --git a/src/addon/mod/imscp/components/toc-popover/addon-mod-imscp-toc-popover.html b/src/addon/mod/imscp/components/toc-popover/addon-mod-imscp-toc-popover.html index 4c1c9b21b..6bda8d594 100644 --- a/src/addon/mod/imscp/components/toc-popover/addon-mod-imscp-toc-popover.html +++ b/src/addon/mod/imscp/components/toc-popover/addon-mod-imscp-toc-popover.html @@ -1,5 +1,5 @@ <ion-list> <a ion-item *ngFor="let item of items" (click)="loadItem(item.href)" detail-none [class.core-bold]="!item.href"> - <span padding-start *ngFor="let i of getNumberForPadding(item.level)"></span>{{item.title}} + <span padding-left *ngFor="let i of getNumberForPadding(item.level)"></span>{{item.title}} </a> </ion-list> diff --git a/src/addon/mod/lesson/pages/player/player.html b/src/addon/mod/lesson/pages/player/player.html index 6bb4f6a75..a6a2c73c6 100644 --- a/src/addon/mod/lesson/pages/player/player.html +++ b/src/addon/mod/lesson/pages/player/player.html @@ -50,7 +50,7 @@ <!-- Short answer. --> <ng-container *ngSwitchCase="'shortanswer'"> - <ion-input padding-start [type]="question.input.type" placeholder="{{ 'addon.mod_lesson.youranswer' | translate }}" [id]="question.input.id" [formControlName]="question.input.name" autocorrect="off" [maxlength]="question.input.maxlength"> + <ion-input padding-left [type]="question.input.type" placeholder="{{ 'addon.mod_lesson.youranswer' | translate }}" [id]="question.input.id" [formControlName]="question.input.name" autocorrect="off" [maxlength]="question.input.maxlength"> </ion-input> </ng-container> diff --git a/src/addon/mod/lesson/pages/player/player.scss b/src/addon/mod/lesson/pages/player/player.scss index f492ff4b3..9e0535938 100644 --- a/src/addon/mod/lesson/pages/player/player.scss +++ b/src/addon/mod/lesson/pages/player/player.scss @@ -7,11 +7,6 @@ ion-app.app-root page-addon-mod-lesson-player { ion-input[padding-left] input[padding-left] { // Applying padding-left to the ion-input applies it twice since it's replicated in the inner input. - padding-left: 0; - } - - ion-input[padding-start] input[padding-start] { - // Applying padding-start to the ion-input applies it twice since it's replicated in the inner input. @include padding(null, null, null, 0); } diff --git a/src/addon/mod/quiz/pages/review/review.html b/src/addon/mod/quiz/pages/review/review.html index 1d6ffb483..49670516f 100644 --- a/src/addon/mod/quiz/pages/review/review.html +++ b/src/addon/mod/quiz/pages/review/review.html @@ -88,12 +88,12 @@ <!-- Arrows to go to next/previous. --> <ng-template #navArrows> <ion-row align-items-center> - <ion-col> + <ion-col text-start> <a ion-button icon-only color="light" *ngIf="previousPage >= 0" (click)="changePage(previousPage)" [title]="'core.previous' | translate"> <ion-icon name="arrow-back" md="ios-arrow-back"></ion-icon> </a> </ion-col> - <ion-col text-right> + <ion-col text-end> <a ion-button icon-only color="light" *ngIf="nextPage >= -1" (click)="changePage(nextPage)" [title]="'core.next' | translate"> <ion-icon name="arrow-forward" md="ios-arrow-forward"></ion-icon> </a> diff --git a/src/addon/mod/wiki/components/index/addon-mod-wiki-index.html b/src/addon/mod/wiki/components/index/addon-mod-wiki-index.html index 2747bb87e..ffa86beb8 100644 --- a/src/addon/mod/wiki/components/index/addon-mod-wiki-index.html +++ b/src/addon/mod/wiki/components/index/addon-mod-wiki-index.html @@ -73,7 +73,7 @@ </core-loading> -<ion-fab bottom right *ngIf="canEdit"> +<ion-fab bottom end *ngIf="canEdit"> <button ion-fab (click)="goToNewPage()" [attr.aria-label]="'addon.mod_wiki.createpage' | translate"> <ion-icon name="add"></ion-icon> </button> diff --git a/src/addon/notifications/pages/list/list.html b/src/addon/notifications/pages/list/list.html index b08d112f3..c75a3d715 100644 --- a/src/addon/notifications/pages/list/list.html +++ b/src/addon/notifications/pages/list/list.html @@ -20,7 +20,7 @@ <img [src]="notification.profileimageurlfrom || 'assets/img/user-avatar.png'" core-external-content [alt]="'core.pictureof' | translate:{$a: notification.userfromfullname}" role="presentation"> </ion-avatar> <h2>{{notification.userfromfullname}}</h2> - <div item-end *ngIf="!notification.timeread"><ion-icon name="record" color="primary"></ion-icon></div> + <div item-end *ngIf="!notification.timeread"><core-icon name="fa-circle" color="primary"></core-icon></div> <p>{{notification.timecreated | coreDateDayOrTime}}</p> </ion-item> <ion-item text-wrap> diff --git a/src/addon/qtype/calculated/component/addon-qtype-calculated.html b/src/addon/qtype/calculated/component/addon-qtype-calculated.html index ab11e293c..db25e4f4b 100644 --- a/src/addon/qtype/calculated/component/addon-qtype-calculated.html +++ b/src/addon/qtype/calculated/component/addon-qtype-calculated.html @@ -18,7 +18,7 @@ <!-- Input to enter the answer. --> <ion-col> - <ion-input padding-start type="text" placeholder="{{ 'core.question.answer' | translate }}" [attr.name]="question.input.name" [value]="question.input.value" [disabled]="question.input.readOnly" [ngClass]="[question.input.correctClass]" autocorrect="off"> + <ion-input padding-left type="text" placeholder="{{ 'core.question.answer' | translate }}" [attr.name]="question.input.name" [value]="question.input.value" [disabled]="question.input.readOnly" [ngClass]="[question.input.correctClass]" autocorrect="off"> </ion-input> </ion-col> diff --git a/src/addon/qtype/shortanswer/component/addon-qtype-shortanswer.html b/src/addon/qtype/shortanswer/component/addon-qtype-shortanswer.html index bdf6f49ab..550e65863 100644 --- a/src/addon/qtype/shortanswer/component/addon-qtype-shortanswer.html +++ b/src/addon/qtype/shortanswer/component/addon-qtype-shortanswer.html @@ -2,6 +2,6 @@ <ion-item text-wrap> <p><core-format-text [component]="component" [componentId]="componentId" [text]="question.text"></core-format-text></p> </ion-item> - <ion-input padding-start type="text" placeholder="{{ 'core.question.answer' | translate }}" [attr.name]="question.input.name" [value]="question.input.value" autocorrect="off" [disabled]="question.input.readOnly" [ngClass]="[question.input.correctClass]"> + <ion-input padding-left type="text" placeholder="{{ 'core.question.answer' | translate }}" [attr.name]="question.input.name" [value]="question.input.value" autocorrect="off" [disabled]="question.input.readOnly" [ngClass]="[question.input.correctClass]"> </ion-input> </section> diff --git a/src/components/timer/core-timer.html b/src/components/timer/core-timer.html index 31262562e..03c48900c 100644 --- a/src/components/timer/core-timer.html +++ b/src/components/timer/core-timer.html @@ -1,4 +1,4 @@ -<ion-item #container class="core-timer" [attr.text-center]="align == 'center' ? true : null" [attr.text-right]="align == 'right' ? true : null"> +<ion-item #container class="core-timer" [attr.text-center]="align == 'center' ? true : null" [attr.text-end]="align == 'right' ? true : null"> <ion-icon name="timer" item-start></ion-icon> <label *ngIf="timeLeft > 0 && timerText">{{ timerText }}</label> <span *ngIf="timeLeft > 0">{{ timeLeft | coreSecondsToHMS }}</span> diff --git a/src/core/courses/components/overview-events/core-courses-overview-events.html b/src/core/courses/components/overview-events/core-courses-overview-events.html index ff5aed5ec..3e010a2a5 100644 --- a/src/core/courses/components/overview-events/core-courses-overview-events.html +++ b/src/core/courses/components/overview-events/core-courses-overview-events.html @@ -1,11 +1,11 @@ <ng-template #eventTemplate let-event="event"> - <a ion-item core-link text-wrap detail-none capture="true" class="core-course-module-handler item-media" [href]="event.url" [title]="event.name" [class.item-badge-right-phone]="event.action && event.action.showitemcount"> + <a ion-item core-link text-wrap detail-none capture="true" class="core-course-module-handler item-media" [href]="event.url" [title]="event.name"> <img item-start [src]="event.iconUrl" core-external-content alt="" role="presentation" *ngIf="event.iconUrl" class="core-module-icon"> <h2><core-format-text [text]="event.name"></core-format-text></h2> <p>{{event.timesort * 1000 | coreFormatDate:"dfmediumdate" }} <core-format-text *ngIf="showCourse" [text]="event.course.fullnamedisplay"></core-format-text></p> <button ion-button clear item-end class="hidden-phone" (click)="action($event, event.action.url)" [title]="event.action.name" [disabled]="!event.action.actionable" *ngIf="event.action"> {{event.action.name}} - <ion-badge item-end margin-end *ngIf="event.action.showitemcount">{{event.action.itemcount}}</ion-badge> + <ion-badge item-end margin-start *ngIf="event.action.showitemcount">{{event.action.itemcount}}</ion-badge> </button> <ion-badge class="hidden-tablet" item-end *ngIf="event.action.showitemcount">{{event.action.itemcount}}</ion-badge> </a> diff --git a/src/core/emulator/pages/capture-media/capture-media.html b/src/core/emulator/pages/capture-media/capture-media.html index 60e2c6dd2..5e2fd78ec 100644 --- a/src/core/emulator/pages/capture-media/capture-media.html +++ b/src/core/emulator/pages/capture-media/capture-media.html @@ -47,7 +47,7 @@ <ion-icon name="trash"></ion-icon> </button> </ion-col> - <ion-col padding text-right class="chrono-container"> + <ion-col padding text-end class="chrono-container"> <core-chrono *ngIf="!isImage" [hidden]="hasCaptured" [running]="isCapturing" [reset]="resetChrono" [endTime]="maxTime" (onEnd)="stopCapturing()"></core-chrono> </ion-col> </ion-row> diff --git a/src/core/login/pages/sites/sites.html b/src/core/login/pages/sites/sites.html index ffe217791..b1d283c18 100644 --- a/src/core/login/pages/sites/sites.html +++ b/src/core/login/pages/sites/sites.html @@ -24,7 +24,7 @@ </button> </a> </ion-list> - <ion-fab bottom right> + <ion-fab bottom end> <button ion-fab (click)="add()" [attr.aria-label]="'core.add' | translate"> <ion-icon name="add"></ion-icon> </button> From 05b2616667c084349c896d30347a409cf3146976 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= <crazyserver@gmail.com> Date: Tue, 4 Sep 2018 12:14:23 +0200 Subject: [PATCH 07/16] MOBILE-2567 forum: Fix some forum styles --- .../index/addon-mod-forum-index.html | 10 +++--- src/addon/mod/forum/components/index/index.ts | 6 ++++ .../components/post/addon-mod-forum-post.html | 36 ++++++++++--------- .../forum/pages/discussion/discussion.html | 4 +-- .../forum/pages/discussion/discussion.scss | 9 +++++ 5 files changed, 41 insertions(+), 24 deletions(-) create mode 100644 src/addon/mod/forum/pages/discussion/discussion.scss diff --git a/src/addon/mod/forum/components/index/addon-mod-forum-index.html b/src/addon/mod/forum/components/index/addon-mod-forum-index.html index ddbebcadf..8d88b2378 100644 --- a/src/addon/mod/forum/components/index/addon-mod-forum-index.html +++ b/src/addon/mod/forum/components/index/addon-mod-forum-index.html @@ -32,12 +32,12 @@ </ion-avatar> <h2><core-format-text [text]="discussion.subject"></core-format-text></h2> <p *ngIf="discussion.userfullname"> - <ion-note float-end padding-start><ion-icon name="time"></ion-icon> {{ 'core.notsent' | translate }}</ion-note> + <ion-note float-end padding-left><ion-icon name="time"></ion-icon> {{ 'core.notsent' | translate }}</ion-note> {{discussion.userfullname}} </p> </ion-item> <ion-card-content> - <ion-note text-right *ngIf="discussion.groupname"> + <ion-note text-end *ngIf="discussion.groupname"> <ion-icon name="people"></ion-icon> {{ discussion.groupname }} </ion-note> <p><core-format-text [maxHeight]="60" [component]="component" [componentId]="componentId" [text]="discussion.message"></core-format-text></p> @@ -50,9 +50,9 @@ </ion-avatar> <h2><ion-icon name="pin" *ngIf="discussion.pinned"></ion-icon> <core-format-text [text]="discussion.subject"></core-format-text></h2> <p> - <ion-note float-end padding-start> + <ion-note float-end padding-left text-end> {{discussion.created | coreDateDayOrTime}} - <div *ngIf="discussion.numunread"><ion-icon name="record"></ion-icon> {{ 'addon.mod_forum.unreadpostsnumber' | translate:{ '$a' : discussion.numunread} }}</div> + <div *ngIf="discussion.numunread"><core-icon name="fa-circle" color="primary"></core-icon> {{ 'addon.mod_forum.unreadpostsnumber' | translate:{ '$a' : discussion.numunread} }}</div> </ion-note> {{discussion.userfullname}} </p> @@ -93,7 +93,7 @@ </ion-infinite-scroll> </core-loading> - <ion-fab bottom right *ngIf="forum && forum.cancreatediscussions"> + <ion-fab bottom end *ngIf="forum && forum.cancreatediscussions"> <button ion-fab (click)="openNewDiscussion()" [attr.aria-label]="addDiscussionText"> <ion-icon name="add"></ion-icon> </button> diff --git a/src/addon/mod/forum/components/index/index.ts b/src/addon/mod/forum/components/index/index.ts index 72993f242..942c456ea 100644 --- a/src/addon/mod/forum/components/index/index.ts +++ b/src/addon/mod/forum/components/index/index.ts @@ -88,6 +88,12 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom this.viewDiscObserver = this.eventsProvider.on(AddonModForumProvider.VIEW_DISCUSSION_EVENT, (data) => { if (this.forum && this.forum.id == data.forumId) { this.selectedDiscussion = this.splitviewCtrl.isOn() ? data.discussion : 0; + + // Invalidate discussion list if it was not read. + const discussion = this.discussions.find((disc) => disc.discussion == data.discussion); + if (discussion && discussion.numunread > 0) { + this.forumProvider.invalidateDiscussionsList(this.forum.id); + } } }, this.sitesProvider.getCurrentSiteId()); diff --git a/src/addon/mod/forum/components/post/addon-mod-forum-post.html b/src/addon/mod/forum/components/post/addon-mod-forum-post.html index b5d7c22eb..1260a8b5d 100644 --- a/src/addon/mod/forum/components/post/addon-mod-forum-post.html +++ b/src/addon/mod/forum/components/post/addon-mod-forum-post.html @@ -1,18 +1,20 @@ -<ion-item text-wrap> - <ion-avatar item-start (click)="openUserProfile(post.userid)"> - <img [src]="post.userpictureurl" onError="this.src='assets/img/user-avatar.png'" core-external-content [alt]="'core.pictureof' | translate:{$a: post.userfullname}" role="presentation"> - </ion-avatar> - <h2><span [class.core-bold]="post.parent == 0"><core-format-text [text]="post.subject"></core-format-text></span></h2> - <p> - <ion-note float-end padding-start *ngIf="!post.modified"><ion-icon name="time"></ion-icon> {{ 'core.notsent' | translate }}</ion-note> - <ion-note float-end padding-start *ngIf="post.modified"> - {{post.modified | coreDateDayOrTime}} - <div *ngIf="unread"><ion-icon name="record"></ion-icon> {{ 'addon.mod_forum.unread' | translate }}</div> - </ion-note> - {{post.userfullname}} - </p> -</ion-item> -<ion-card-content> +<ion-card-header text-wrap no-padding > + <ion-item text-wrap> + <ion-avatar item-start (click)="openUserProfile(post.userid)"> + <img [src]="post.userpictureurl" onError="this.src='assets/img/user-avatar.png'" core-external-content [alt]="'core.pictureof' | translate:{$a: post.userfullname}" role="presentation"> + </ion-avatar> + <h2><span [class.core-bold]="post.parent == 0"><core-format-text [text]="post.subject"></core-format-text></span></h2> + <p> + <ion-note float-end padding-left *ngIf="!post.modified"><ion-icon name="time"></ion-icon> {{ 'core.notsent' | translate }}</ion-note> + <ion-note float-end padding-left text-end *ngIf="post.modified"> + {{post.modified | coreDateDayOrTime}} + <div *ngIf="unread"><core-icon name="fa-circle" color="primary"></core-icon> {{ 'addon.mod_forum.unread' | translate }}</div> + </ion-note> + {{post.userfullname}} + </p> + </ion-item> +</ion-card-header> +<ion-card-content padding-top> <core-format-text [component]="component" [componentId]="componentId" [text]="post.message"></core-format-text> <div *ngFor="let attachment of post.attachments"> <!-- Files already attached to the submission. --> @@ -21,12 +23,12 @@ <core-local-file *ngIf="attachment.name" [file]="attachment"></core-local-file> </div> </ion-card-content> -<ion-item text-right *ngIf="post.id && post.canreply"> +<ion-item no-padding text-end *ngIf="post.id && post.canreply" class="addon-forum-reply-button"> <button ion-button icon-left clear small (click)="showReply()" [attr.aria-controls]="'addon-forum-reply-edit-form-' + uniqueId" [attr.aria-expanded]="replyData.replyingTo === post.id"> <ion-icon name="undo"></ion-icon> {{ 'addon.mod_forum.reply' | translate }} </button> </ion-item> -<ion-item text-right *ngIf="!post.id && (!replyData.isEditing || replyData.replyingTo != post.parent)"> +<ion-item text-end *ngIf="!post.id && (!replyData.isEditing || replyData.replyingTo != post.parent)"> <button ion-button icon-left clear small (click)="editReply()" [attr.aria-controls]="'addon-forum-reply-edit-form-' + uniqueId" [attr.aria-expanded]="replyData.replyingTo === post.parent"> <ion-icon name="create"></ion-icon> {{ 'addon.mod_forum.edit' | translate }} </button> diff --git a/src/addon/mod/forum/pages/discussion/discussion.html b/src/addon/mod/forum/pages/discussion/discussion.html index dd59860cf..3d0048019 100644 --- a/src/addon/mod/forum/pages/discussion/discussion.html +++ b/src/addon/mod/forum/pages/discussion/discussion.html @@ -30,7 +30,7 @@ <ion-icon name="warning"></ion-icon> {{ 'addon.mod_forum.discussionlocked' | translate }} </ion-card> - <ion-card *ngIf="discussion" margin-bottom> + <ion-card *ngIf="discussion" margin-bottom class="highlight"> <addon-mod-forum-post [post]="discussion" [courseId]="courseId" [discussionId]="discussionId" [component]="component" [componentId]="cmId" [replyData]="replyData" [originalData]="originalData" [defaultSubject]="defaultSubject" [forum]="forum" [trackPosts]="trackPosts" (onPostChange)="postListChanged()"></addon-mod-forum-post> </ion-card> @@ -51,7 +51,7 @@ <ion-card> <addon-mod-forum-post [post]="post" [courseId]="courseId" [discussionId]="discussionId" [component]="component" [componentId]="cmId" [replyData]="replyData" [originalData]="originalData" [defaultSubject]="defaultSubject" [forum]="forum" [trackPosts]="trackPosts" (onPostChange)="postListChanged()"></addon-mod-forum-post> </ion-card> - <div padding-start *ngIf="post.children.length && post.children[0].subject"> + <div padding-left *ngIf="post.children.length && post.children[0].subject"> <ng-container *ngFor="let child of post.children"> <ng-container *ngTemplateOutlet="nestedPosts; context: {post: child}"></ng-container> </ng-container> diff --git a/src/addon/mod/forum/pages/discussion/discussion.scss b/src/addon/mod/forum/pages/discussion/discussion.scss new file mode 100644 index 000000000..b4151f311 --- /dev/null +++ b/src/addon/mod/forum/pages/discussion/discussion.scss @@ -0,0 +1,9 @@ +ion-app.app-root page-addon-mod-forum-discussion { + .card.highlight .card-header .item { + background-color: $gray-lighter; + } + + .addon-forum-reply-button .label { + margin: 0; + } +} \ No newline at end of file From 050dbaa6cad06ee375555b3e9390c223e53a373e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= <crazyserver@gmail.com> Date: Tue, 4 Sep 2018 12:26:03 +0200 Subject: [PATCH 08/16] MOBILE-2567 forum: Recover unread post info --- src/addon/mod/forum/components/post/addon-mod-forum-post.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/addon/mod/forum/components/post/addon-mod-forum-post.html b/src/addon/mod/forum/components/post/addon-mod-forum-post.html index 1260a8b5d..17a9779ad 100644 --- a/src/addon/mod/forum/components/post/addon-mod-forum-post.html +++ b/src/addon/mod/forum/components/post/addon-mod-forum-post.html @@ -8,7 +8,7 @@ <ion-note float-end padding-left *ngIf="!post.modified"><ion-icon name="time"></ion-icon> {{ 'core.notsent' | translate }}</ion-note> <ion-note float-end padding-left text-end *ngIf="post.modified"> {{post.modified | coreDateDayOrTime}} - <div *ngIf="unread"><core-icon name="fa-circle" color="primary"></core-icon> {{ 'addon.mod_forum.unread' | translate }}</div> + <div *ngIf="trackPosts && !post.postread"><core-icon name="fa-circle" color="primary"></core-icon> {{ 'addon.mod_forum.unread' | translate }}</div> </ion-note> {{post.userfullname}} </p> From 2c54c12a01ce2a34d85a437421fa3fa7cf102688 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= <crazyserver@gmail.com> Date: Tue, 4 Sep 2018 12:51:27 +0200 Subject: [PATCH 09/16] MOBILE-2567 forum: Show locked discussion warning for teachers --- src/addon/mod/forum/components/index/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/addon/mod/forum/components/index/index.ts b/src/addon/mod/forum/components/index/index.ts index 942c456ea..8ab76ab1f 100644 --- a/src/addon/mod/forum/components/index/index.ts +++ b/src/addon/mod/forum/components/index/index.ts @@ -412,7 +412,7 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom forumId: this.forum.id, discussionId: discussion.discussion, trackPosts: this.trackPosts, - locked: discussion.locked && !discussion.canreply + locked: discussion.locked }; this.splitviewCtrl.push('AddonModForumDiscussionPage', params); } From 15dac04d8d2657437967c9c377d68c329161070b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= <crazyserver@gmail.com> Date: Tue, 4 Sep 2018 13:28:13 +0200 Subject: [PATCH 10/16] MOBILE-2567 ux: Style select --- src/app/app.scss | 22 ++++++++++++++++--- .../pages/my-overview/my-overview.html | 4 ++-- src/theme/variables.scss | 4 ++++ 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/app/app.scss b/src/app/app.scss index 08adcea53..3a4cf162f 100644 --- a/src/app/app.scss +++ b/src/app/app.scss @@ -374,6 +374,13 @@ ion-app.app-root { @include core-headings(); } + .item core-format-text, + core-format-text { + p { + margin-bottom: 1rem; + } + } + // Images in ion-card have width 100% and display block. Remove that when the image is in core-format-text. ion-card core-format-text img { width: min-content; @@ -417,10 +424,19 @@ ion-app.app-root { } } - :not(.item) > * > * > ion-select, + ion-select { + color: $core-select-placeholder-color; + align-self: start; + + .select-icon .select-icon-inner { + color: $core-select-placeholder-color; + } + } + + ion-select.core-button-select, .core-button-select { background-color: white; - color: $core-color; + color: $core-select-placeholder-color; white-space: normal; align-self: start; max-width: none; @@ -452,7 +468,7 @@ ion-app.app-root { } .select-icon .select-icon-inner { - color: $core-color; + color: $core-select-placeholder-color; } ion-icon:last-child { diff --git a/src/core/courses/pages/my-overview/my-overview.html b/src/core/courses/pages/my-overview/my-overview.html index 095ac7eff..4055e823b 100644 --- a/src/core/courses/pages/my-overview/my-overview.html +++ b/src/core/courses/pages/my-overview/my-overview.html @@ -37,7 +37,7 @@ <core-loading [hideUntil]="courses.loaded" class="core-loading-center"> <!-- "Time" selector. --> <div padding class="clearfix" [hidden]="showFilter" ion-row justify-content-between> - <ion-select float-start [title]="'core.show' | translate" [(ngModel)]="courses.selected" ion-col (ngModelChange)="selectedChanged()" interface="popover"> + <ion-select float-start [title]="'core.show' | translate" [(ngModel)]="courses.selected" ion-col (ngModelChange)="selectedChanged()" interface="popover" class="core-button-select"> <ion-option value="inprogress">{{ 'core.courses.inprogress' | translate }}</ion-option> <ion-option value="future">{{ 'core.courses.future' | translate }}</ion-option> <ion-option value="past">{{ 'core.courses.past' | translate }}</ion-option> @@ -82,7 +82,7 @@ </ion-refresher> <div padding [hidden]="!(timeline.loaded || timelineCourses.loaded)"> - <ion-select [(ngModel)]="timeline.sort" (ngModelChange)="switchSort()" interface="popover"> + <ion-select [(ngModel)]="timeline.sort" (ngModelChange)="switchSort()" interface="popover" class="core-button-select"> <ion-option value="sortbydates">{{ 'core.courses.sortbydates' | translate }}</ion-option> <ion-option value="sortbycourses">{{ 'core.courses.sortbycourses' | translate }}</ion-option> </ion-select> diff --git a/src/theme/variables.scss b/src/theme/variables.scss index 10e70f4b2..4f5b43224 100644 --- a/src/theme/variables.scss +++ b/src/theme/variables.scss @@ -135,6 +135,7 @@ $core-login-box-background-border: $gray !default; $core-login-box-text-color: $text-color !default; $core-login-button-outline: false !default; $core-login-loading-color: false !default; +$core-select-placeholder-color: $core-color; // App iOS Variables // -------------------------------------------------- @@ -149,6 +150,7 @@ $tabs-ios-tab-color-inactive: $tabs-tab-color-inactive; $button-ios-outline-background-color: $core-button-outline-background-color; $toolbar-ios-height: 44px + 8; // Avoid toolbar with different heights. $checkbox-ios-icon-border-radius: 0px !default; +$select-ios-placeholder-color: $core-select-placeholder-color; $radio-ios-disabled-opacity: .5 !default; $checkbox-ios-disabled-opacity: .5 !default; $toggle-ios-disabled-opacity: .5 !default; @@ -166,6 +168,7 @@ $spinner-md-crescent-color: $core-spinner-color; $tabs-md-tab-color-inactive: $tabs-tab-color-inactive; $button-md-outline-background-color: $core-button-outline-background-color; $font-family-md-base: "Roboto", "Noto Sans", "Helvetica Neue", sans-serif !default; +$select-md-placeholder-color: $core-select-placeholder-color; $radio-md-disabled-opacity: .5 !default; $checkbox-md-disabled-opacity: .5 !default; $toggle-md-disabled-opacity: .5 !default; @@ -181,6 +184,7 @@ $loading-wp-spinner-color: $core-loading-spinner-color; $spinner-wp-circles-color: $core-spinner-color; $tabs-wp-tab-color-inactive: $tabs-tab-color-inactive; $button-wp-outline-background-color: $core-button-outline-background-color; +$select-wp-placeholder-color: $core-select-placeholder-color; $radio-wp-disabled-opacity: .5 !default; $checkbox-wp-disabled-opacity: .5 !default; $toggle-wp-disabled-opacity: .5 !default; From edf940f6041390764dd59f7145cca60970e7a423 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= <crazyserver@gmail.com> Date: Tue, 4 Sep 2018 14:46:55 +0200 Subject: [PATCH 11/16] MOBILE-2567 wiki: Change page string --- src/addon/mod/wiki/components/index/index.ts | 2 +- src/addon/mod/wiki/lang/en.json | 1 - src/theme/variables.scss | 2 ++ 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/addon/mod/wiki/components/index/index.ts b/src/addon/mod/wiki/components/index/index.ts index bf0116676..b030bbb16 100644 --- a/src/addon/mod/wiki/components/index/index.ts +++ b/src/addon/mod/wiki/components/index/index.ts @@ -84,7 +84,7 @@ export class AddonModWikiIndexComponent extends CoreCourseModuleMainActivityComp protected userProvider: CoreUserProvider, private popoverCtrl: PopoverController) { super(injector, content); - this.pageStr = this.translate.instant('addon.mod_wiki.page'); + this.pageStr = this.translate.instant('addon.mod_wiki.wikipage'); } /** diff --git a/src/addon/mod/wiki/lang/en.json b/src/addon/mod/wiki/lang/en.json index d8b4dcca2..e8d9a0d78 100644 --- a/src/addon/mod/wiki/lang/en.json +++ b/src/addon/mod/wiki/lang/en.json @@ -10,7 +10,6 @@ "newpagetitle": "New page title", "nocontent": "There is no content for this page", "notingroup": "Not in group", - "page": "Page", "pageexists": "This page already exists.", "pagename": "Page name", "subwiki": "Sub-wiki", diff --git a/src/theme/variables.scss b/src/theme/variables.scss index 4f5b43224..9d393a442 100644 --- a/src/theme/variables.scss +++ b/src/theme/variables.scss @@ -169,6 +169,7 @@ $tabs-md-tab-color-inactive: $tabs-tab-color-inactive; $button-md-outline-background-color: $core-button-outline-background-color; $font-family-md-base: "Roboto", "Noto Sans", "Helvetica Neue", sans-serif !default; $select-md-placeholder-color: $core-select-placeholder-color; +$label-md-text-color: $text-color !default; $radio-md-disabled-opacity: .5 !default; $checkbox-md-disabled-opacity: .5 !default; $toggle-md-disabled-opacity: .5 !default; @@ -185,6 +186,7 @@ $spinner-wp-circles-color: $core-spinner-color; $tabs-wp-tab-color-inactive: $tabs-tab-color-inactive; $button-wp-outline-background-color: $core-button-outline-background-color; $select-wp-placeholder-color: $core-select-placeholder-color; +$label-wp-text-color: $text-color !default; $radio-wp-disabled-opacity: .5 !default; $checkbox-wp-disabled-opacity: .5 !default; $toggle-wp-disabled-opacity: .5 !default; From 7e4dbd736e2170df7b5bc075168ed1d516efa700 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= <crazyserver@gmail.com> Date: Tue, 4 Sep 2018 16:57:31 +0200 Subject: [PATCH 12/16] MOBILE-2567 ux: Seems that $core-text-input-md-show-highlight is not needed anymore --- src/app/app.ios.scss | 65 --------------------------- src/app/app.md.scss | 65 --------------------------- src/core/login/pages/site/site.html | 2 +- src/core/login/pages/sites/sites.scss | 4 +- src/theme/variables.scss | 4 +- 5 files changed, 4 insertions(+), 136 deletions(-) diff --git a/src/app/app.ios.scss b/src/app/app.ios.scss index edb7d3071..c6d73a607 100644 --- a/src/app/app.ios.scss +++ b/src/app/app.ios.scss @@ -59,71 +59,6 @@ ion-app.app-root.ios { height: 100%; } - - // Highlights inside the input element. - @if ($core-text-input-ios-show-highlight) { - .card-ios, .list-ios { - // In order to get a 2px border we need to add an inset - // box-shadow 1px (this is to avoid the div resizing) - - // The last item in a list has a border on the item, not the - // inner item, so add it to the item itself - .item-input.item-input-has-focus:last-child, - .item-input.input-has-focus:last-child { - @include ios-input-highlight($text-input-ios-highlight-color); - - .item-inner ion-input { - box-shadow: none; - } - } - - // Show the focus highlight when the input has focus - .item-input.ng-valid.item-input-has-value:not(.input-has-focus):not(.item-input-has-focus):last-child, - .item-input.ng-valid.input-has-value:not(.input-has-focus):not(.item-input-has-focus):last-child { - @include ios-input-highlight($text-input-ios-highlight-color-valid); - - .item-inner ion-input { - box-shadow: none; - } - } - - .item-input.ng-invalid.ng-touched:not(.input-has-focus):not(.item-input-has-focus):last-child { - @include ios-input-highlight($text-input-ios-highlight-color-invalid); - - .item-inner ion-input { - box-shadow: none; - } - } - } - - .item-ios.item-input { - .item-inner { - border: 0; - } - - &.item-block .item-inner ion-input { - border-bottom: $hairlines-width solid $list-border-color; - } - - // TODO remove all uses of input-has-focus in v4 - &.item-input-has-focus .item-inner ion-input, - &.input-has-focus .item-inner ion-input { - @include ios-input-highlight($text-input-ios-highlight-color); - } - - // Show the valid highlight when it has the .ng-valid class and a value - &.ng-valid.item-input-has-value:not(.input-has-focus):not(.item-input-has-focus) .item-inner ion-input, - &.ng-valid.input-has-value:not(.input-has-focus):not(.item-input-has-focus) .item-inner ion-input { - @include ios-input-highlight($text-input-ios-highlight-color-valid); - } - - // Show the invalid highlight when it has the invalid class and has been touched - &.ng-invalid.ng-touched:not(.input-has-focus):not(.item-input-has-focus) .item-inner ion-input { - @include ios-input-highlight($text-input-ios-highlight-color-invalid); - } - } - } - // Different levels of padding. @for $i from 0 through 15 { .core-padding-#{$i} { diff --git a/src/app/app.md.scss b/src/app/app.md.scss index c183e0c3c..de8eefcf1 100644 --- a/src/app/app.md.scss +++ b/src/app/app.md.scss @@ -41,71 +41,6 @@ ion-app.app-root.md { height: calc(100% - #{($navbar-md-height)}); } - // Highlights inside the input element. - @if ($core-text-input-md-show-highlight) { - .card-md, .list-md { - // In order to get a 2px border we need to add an inset - // box-shadow 1px (this is to avoid the div resizing) - - // The last item in a list has a border on the item, not the - // inner item, so add it to the item itself - .item-input.item-input-has-focus:last-child, - .item-input.input-has-focus:last-child { - @include md-input-highlight($text-input-md-highlight-color); - - .item-inner ion-input { - box-shadow: none; - } - } - - .item-input.ng-valid.item-input-has-value:not(.input-has-focus):not(.item-input-has-focus):last-child, - .item-input.ng-valid.input-has-value:not(.input-has-focus):not(.item-input-has-focus):last-child { - @include md-input-highlight($text-input-md-highlight-color-valid); - - .item-inner ion-input { - box-shadow: none; - } - } - - .item-input.ng-invalid.ng-touched:not(.input-has-focus):not(.item-input-has-focus):last-child { - @include md-input-highlight($text-input-md-highlight-color-invalid); - - .item-inner ion-input { - box-shadow: none; - } - } - } - - .item-md.item-input { - .item-inner { - border: 0; - } - - &.item-block .item-inner ion-input { - border-bottom: 1px solid $list-border-color; - } - - // TODO remove all uses of input-has-focus in v4 - &.item-input-has-focus .item-inner ion-input, - &.input-has-focus .item-inner ion-input { - @include md-input-highlight($text-input-md-highlight-color); - } - - // Show the valid highlight when it has the .ng-valid class and a value - // TODO remove all uses of input-has-focus in v4 - // TODO remove all uses of input-has-value in v4 - &.ng-valid.item-input-has-value:not(.input-has-focus):not(.item-input-has-focus) .item-inner ion-input, - &.ng-valid.input-has-value:not(.input-has-focus):not(.item-input-has-focus) .item-inner ion-input { - @include md-input-highlight($text-input-md-highlight-color-valid); - } - - // Show the invalid highlight when it has the invalid class and has been touched - &.ng-invalid.ng-touched:not(.input-has-focus):not(.item-input-has-focus) .item-inner ion-input { - @include md-input-highlight($text-input-md-highlight-color-invalid); - } - } - } - // Different levels of padding. @for $i from 0 through 15 { .core-padding-#{$i} { diff --git a/src/core/login/pages/site/site.html b/src/core/login/pages/site/site.html index 6632e4278..737e6ef89 100644 --- a/src/core/login/pages/site/site.html +++ b/src/core/login/pages/site/site.html @@ -14,7 +14,7 @@ <div text-center padding> <img src="assets/img/login_logo.png" class="avatar-full login-logo" role="presentation"> </div> - <form ion-list no-lines [formGroup]="siteForm" (ngSubmit)="connect(siteForm.value.siteUrl)"> + <form ion-list [formGroup]="siteForm" (ngSubmit)="connect(siteForm.value.siteUrl)"> <!-- Form to input the site URL if there are no fixed sites. --> <div *ngIf="!fixedSites"> <p padding>{{ 'core.login.newsitedescription' | translate }}</p> diff --git a/src/core/login/pages/sites/sites.scss b/src/core/login/pages/sites/sites.scss index 04cca753b..ba18de255 100644 --- a/src/core/login/pages/sites/sites.scss +++ b/src/core/login/pages/sites/sites.scss @@ -1,5 +1,5 @@ ion-app.app-root page-core-login-sites { - .item-button[icon-only] ion-icon { - font-size: 2.3em; + .item-ios .item-button[icon-only] ion-icon { + font-size: 2.1em; } } diff --git a/src/theme/variables.scss b/src/theme/variables.scss index 9d393a442..2505ef59d 100644 --- a/src/theme/variables.scss +++ b/src/theme/variables.scss @@ -142,7 +142,6 @@ $core-select-placeholder-color: $core-color; // iOS only Sass variables can go here $text-input-ios-show-focus-highlight: false; -$core-text-input-ios-show-highlight: false; $item-ios-avatar-size: 54px; $loading-ios-spinner-color: $core-loading-spinner-color; $spinner-ios-ios-color: $core-spinner-color; @@ -159,8 +158,7 @@ $toggle-ios-disabled-opacity: .5 !default; // -------------------------------------------------- // Material Design only Sass variables can go here -$text-input-md-show-focus-highlight: false; -$core-text-input-md-show-highlight: true; +$text-input-md-show-focus-highlight: true; $item-md-detail-push-show: true; $item-md-avatar-size: 54px; $loading-md-spinner-color: $core-loading-spinner-color; From e68aef3c632ea5b1ac7f7a2ebcdceaa7fe3e4d8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= <crazyserver@gmail.com> Date: Tue, 4 Sep 2018 17:30:47 +0200 Subject: [PATCH 13/16] MOBILE-2567 workshop: Fix empty group report selector --- .../mod/workshop/components/index/addon-mod-workshop-index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/addon/mod/workshop/components/index/addon-mod-workshop-index.html b/src/addon/mod/workshop/components/index/addon-mod-workshop-index.html index f1513402d..83adb867f 100644 --- a/src/addon/mod/workshop/components/index/addon-mod-workshop-index.html +++ b/src/addon/mod/workshop/components/index/addon-mod-workshop-index.html @@ -130,7 +130,7 @@ </ng-container> <!-- MULTIPLE PHASES SUBMISSION OR GREATER only teachers --> - <ion-card class="with-borders" *ngIf="access.canviewallsubmissions && workshop.phase >= workshopPhases.PHASE_SUBMISSION && grades && grades.length"> + <ion-card class="with-borders" *ngIf="access.canviewallsubmissions && workshop.phase >= workshopPhases.PHASE_SUBMISSION && ((grades && grades.length) || (groupInfo && (groupInfo.separateGroups || groupInfo.visibleGroups)))"> <ion-item-divider color="light" text-wrap *ngIf="workshop.phase == workshopPhases.PHASE_SUBMISSION"> <h2>{{ 'addon.mod_workshop.submissionsreport' | translate }}</h2> </ion-item-divider> From 46d56f153db0f5fb6079d4fe0a624b74d816ce48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= <crazyserver@gmail.com> Date: Wed, 5 Sep 2018 10:13:31 +0200 Subject: [PATCH 14/16] MOBILE-2567 feedback: Fix navigation to analysis --- .../mod/feedback/components/index/index.ts | 3 +- src/addon/mod/feedback/providers/helper.ts | 42 +++++++++---------- 2 files changed, 22 insertions(+), 23 deletions(-) diff --git a/src/addon/mod/feedback/components/index/index.ts b/src/addon/mod/feedback/components/index/index.ts index cc0e922d9..74ac6e14d 100644 --- a/src/addon/mod/feedback/components/index/index.ts +++ b/src/addon/mod/feedback/components/index/index.ts @@ -423,9 +423,10 @@ export class AddonModFeedbackIndexComponent extends CoreCourseModuleMainActivity this.warning = ''; if (analysis.warnings.length) { - this.warning = analysis.warnings.find((warning) => { + const warning = analysis.warnings.find((warning) => { return warning.warningcode == 'insufficientresponsesforthisgroup'; }); + this.warning = warning && warning.message; } } }); diff --git a/src/addon/mod/feedback/providers/helper.ts b/src/addon/mod/feedback/providers/helper.ts index cbd1ea4d5..87d75b0bb 100644 --- a/src/addon/mod/feedback/providers/helper.ts +++ b/src/addon/mod/feedback/providers/helper.ts @@ -13,7 +13,7 @@ // limitations under the License. import { Injectable } from '@angular/core'; -import { NavController } from 'ionic-angular'; +import { NavController, ViewController } from 'ionic-angular'; import { AddonModFeedbackProvider } from './feedback'; import { CoreUserProvider } from '@core/user/providers/user'; import { CoreTextUtilsProvider } from '@providers/utils/text'; @@ -35,17 +35,17 @@ export class AddonModFeedbackHelperProvider { } /** - * Check if the page we are going to open is in the history and returns the number of pages in the stack to go back. + * Check if the page we are going to open is in the history and returns the view controller in the stack to go back. * * @param {string} pageName Name of the page we want to navigate. * @param {number} instance Activity instance Id. I.e FeedbackId. * @param {string} paramName Param name where to find the instance number. * @param {string} prefix Prefix to check if we are out of the activity context. * @param {NavController} navCtrl Nav Controller of the view. - * @return {number} Returns the number of times the history needs to go back to find the specified page. + * @return {ViewController} Returns view controller found or null. */ - protected getActivityHistoryBackCounter(pageName: string, instance: number, paramName: string, prefix: string, - navCtrl: NavController): number { + protected getPageView(pageName: string, instance: number, paramName: string, prefix: string, + navCtrl: NavController): ViewController { let historyInstance, params, view = navCtrl.getActive(); @@ -65,13 +65,13 @@ export class AddonModFeedbackHelperProvider { // Page found. if (view.name == pageName) { - return view.index; + return view; } view = navCtrl.getPrevious(view); } - return 0; + return null; } /** @@ -223,26 +223,24 @@ export class AddonModFeedbackHelperProvider { * @return {Promise<void>} Resolved when navigation animation is done. */ openFeature(feature: string, navCtrl: NavController, module: any, courseId: number, group: number = 0): Promise<void> { - const pageName = feature && feature != 'analysis' ? 'AddonModFeedback' + feature + 'Page' : 'AddonModFeedbackIndexPage'; - let backTimes = 0; - - const stateParams = { - module: module, - moduleId: module.id, - courseId: courseId, - feedbackId: module.instance, - group: group - }; + const pageName = feature && feature != 'analysis' ? 'AddonModFeedback' + feature + 'Page' : 'AddonModFeedbackIndexPage', + stateParams = { + module: module, + moduleId: module.id, + courseId: courseId, + feedbackId: module.instance, + group: group + }; // Only check history if navigating through tabs. if (pageName == 'AddonModFeedbackIndexPage') { stateParams['tab'] = feature == 'analysis' ? 'analysis' : 'overview'; - backTimes = this.getActivityHistoryBackCounter(pageName, module.instance, 'feedbackId', 'AddonModFeedback', navCtrl); - } + const view = this.getPageView(pageName, module.instance, 'feedbackId', 'AddonModFeedback', navCtrl); - if (backTimes > 0) { - // Go back X times until the the page we want to reach. - return navCtrl.remove(navCtrl.getActive().index, backTimes); + if (view) { + // Go back to the found page. + return navCtrl.popTo(view); + } } // Not found, open new state. From cdff2a83aec59a6733b47b9c3537cc921791ecd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= <crazyserver@gmail.com> Date: Wed, 5 Sep 2018 10:58:15 +0200 Subject: [PATCH 15/16] MOBILE-2567 workshop: Add message when you have no assessments --- .../workshop/components/index/addon-mod-workshop-index.html | 5 ++++- src/addon/mod/workshop/lang/en.json | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/addon/mod/workshop/components/index/addon-mod-workshop-index.html b/src/addon/mod/workshop/components/index/addon-mod-workshop-index.html index 83adb867f..5ac411c4f 100644 --- a/src/addon/mod/workshop/components/index/addon-mod-workshop-index.html +++ b/src/addon/mod/workshop/components/index/addon-mod-workshop-index.html @@ -119,10 +119,13 @@ </ion-item> </ion-card> - <ion-card class="with-borders" *ngIf="canAssess && assessments && assessments.length"> + <ion-card class="with-borders" *ngIf="canAssess"> <ion-item-divider color="light" text-wrap> <h2>{{ 'addon.mod_workshop.assignedassessments' | translate }}</h2> </ion-item-divider> + <ion-item text-wrap *ngIf="!assessments || !assessments.length"> + <p>{{ 'addon.mod_workshop.assignedassessmentsnone' | translate }}</p> + </ion-item> <ng-container *ngFor="let assessment of assessments"> <addon-mod-workshop-submission [submission]="assessment.submission" [assessment]="assessment" [courseId]="workshop.course" [module]="module" [workshop]="workshop" [access]="access" summary="true"></addon-mod-workshop-submission> </ng-container> diff --git a/src/addon/mod/workshop/lang/en.json b/src/addon/mod/workshop/lang/en.json index d63f0d836..4a2056785 100644 --- a/src/addon/mod/workshop/lang/en.json +++ b/src/addon/mod/workshop/lang/en.json @@ -9,6 +9,7 @@ "assessmentstrategynotsupported": "Assessment strategy {{$a}} not supported", "assessmentweight": "Assessment weight", "assignedassessments": "Assigned submissions to assess", + "assignedassessmentsnone": "You have no assigned submission to assess", "conclusion": "Conclusion", "createsubmission": "Start preparing your submission", "deletesubmission": "Delete submission", From d04b47c756cfd111054b480f4bbb3441c38fe197 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= <crazyserver@gmail.com> Date: Wed, 5 Sep 2018 11:41:35 +0200 Subject: [PATCH 16/16] MOBILE-2567 data: Fix search button padding --- src/addon/mod/data/pages/search/search.html | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/addon/mod/data/pages/search/search.html b/src/addon/mod/data/pages/search/search.html index fe3f63426..fcc6e1830 100644 --- a/src/addon/mod/data/pages/search/search.html +++ b/src/addon/mod/data/pages/search/search.html @@ -47,9 +47,11 @@ <core-compile-html [text]="advancedSearch" [jsData]="jsData" [extraImports]="extraImports"></core-compile-html> </div> </ion-list> - <button ion-button block margin type="submit" icon-start> - <ion-icon name="search"></ion-icon> - {{ 'addon.mod_data.search' | translate }} - </button> + <div padding> + <button ion-button block type="submit" icon-start> + <ion-icon name="search"></ion-icon> + {{ 'addon.mod_data.search' | translate }} + </button> + </div> </form> </ion-content>