Merge pull request #1502 from crazyserver/MOBILE-2567

Mobile 2567
main
Juan Leyva 2018-09-05 11:45:27 +02:00 committed by GitHub
commit 0fbb1e2fd2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
41 changed files with 164 additions and 227 deletions

View File

@ -36,7 +36,7 @@
</core-loading> </core-loading>
<!-- Upload a private file. --> <!-- 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"> <button ion-fab (click)="uploadFile()" [attr.aria-label]="'core.fileuploader.uploadafile' | translate">
<ion-icon name="add"></ion-icon> <ion-icon name="add"></ion-icon>
</button> </button>

View File

@ -12,7 +12,7 @@
</a> </a>
</core-navbar-buttons> </core-navbar-buttons>
</ion-header> </ion-header>
<ion-content> <ion-content class="has-footer">
<core-loading [hideUntil]="loaded"> <core-loading [hideUntil]="loaded">
<!-- Load previous messages. --> <!-- Load previous messages. -->
<ion-infinite-scroll [enabled]="canLoadMore" (ionInfinite)="loadPrevious($event)" position="top"> <ion-infinite-scroll [enabled]="canLoadMore" (ionInfinite)="loadPrevious($event)" position="top">

View File

@ -112,15 +112,15 @@
<ion-item text-wrap *ngIf="membersToSubmit && membersToSubmit.length > 0"> <ion-item text-wrap *ngIf="membersToSubmit && membersToSubmit.length > 0">
<h2>{{ 'addon.mod_assign.userswhoneedtosubmit' | translate: {$a: ''} }}</h2> <h2>{{ 'addon.mod_assign.userswhoneedtosubmit' | translate: {$a: ''} }}</h2>
<div *ngFor="let user of membersToSubmit"> <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> <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'"> <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> </ion-avatar>
<h2>{{ user.fullname }}</h2> <h2>{{ user.fullname }}</h2>
</a> </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> {{ 'addon.mod_assign.hiddenuser' | translate }} <core-format-text [text]="user"></core-format-text>
</p> </ion-item>
</div> </div>
</ion-item> </ion-item>

View File

@ -5,7 +5,7 @@
<core-format-text [component]="component" [componentId]="assign.cmid" [maxHeight]="80" [fullOnClick]="true" [fullTitle]="plugin.name" [text]="text"></core-format-text> <core-format-text [component]="component" [componentId]="assign.cmid" [maxHeight]="80" [fullOnClick]="true" [fullTitle]="plugin.name" [text]="text"></core-format-text>
</p> </p>
<div item-end> <div item-end>
<div text-right> <div text-end>
<button ion-button icon-only clear *ngIf="canEdit" (click)="editComment()" color="dark"> <button ion-button icon-only clear *ngIf="canEdit" (click)="editComment()" color="dark">
<ion-icon name="create"></ion-icon> <ion-icon name="create"></ion-icon>
</button> </button>

View File

@ -1,5 +1,5 @@
<ion-list> <ion-list>
<a ion-item text-wrap *ngFor="let chapter of chapters" (click)="loadChapter(chapter.id)" detail-none> <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> </a>
</ion-list> </ion-list>

View File

@ -8,7 +8,7 @@
</ion-buttons> </ion-buttons>
</ion-navbar> </ion-navbar>
</ion-header> </ion-header>
<ion-content> <ion-content class="has-footer">
<core-loading [hideUntil]="loaded"> <core-loading [hideUntil]="loaded">
<div aria-live="polite"> <div aria-live="polite">
<div *ngFor="let message of messages; index as index; last as last"> <div *ngFor="let message of messages; index as index; last as last">

View File

@ -92,7 +92,7 @@
</core-loading> </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"> <button ion-fab (click)="gotoAddEntries($event)" [attr.aria-label]="'addon.mod_data.addentries' | translate">
<ion-icon name="add"></ion-icon> <ion-icon name="add"></ion-icon>
</button> </button>

View File

@ -47,9 +47,11 @@
<core-compile-html [text]="advancedSearch" [jsData]="jsData" [extraImports]="extraImports"></core-compile-html> <core-compile-html [text]="advancedSearch" [jsData]="jsData" [extraImports]="extraImports"></core-compile-html>
</div> </div>
</ion-list> </ion-list>
<button ion-button block margin type="submit" icon-start> <div padding>
<button ion-button block type="submit" icon-start>
<ion-icon name="search"></ion-icon> <ion-icon name="search"></ion-icon>
{{ 'addon.mod_data.search' | translate }} {{ 'addon.mod_data.search' | translate }}
</button> </button>
</div>
</form> </form>
</ion-content> </ion-content>

View File

@ -423,9 +423,10 @@ export class AddonModFeedbackIndexComponent extends CoreCourseModuleMainActivity
this.warning = ''; this.warning = '';
if (analysis.warnings.length) { if (analysis.warnings.length) {
this.warning = analysis.warnings.find((warning) => { const warning = analysis.warnings.find((warning) => {
return warning.warningcode == 'insufficientresponsesforthisgroup'; return warning.warningcode == 'insufficientresponsesforthisgroup';
}); });
this.warning = warning && warning.message;
} }
} }
}); });

View File

@ -13,7 +13,7 @@
// limitations under the License. // limitations under the License.
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { NavController } from 'ionic-angular'; import { NavController, ViewController } from 'ionic-angular';
import { AddonModFeedbackProvider } from './feedback'; import { AddonModFeedbackProvider } from './feedback';
import { CoreUserProvider } from '@core/user/providers/user'; import { CoreUserProvider } from '@core/user/providers/user';
import { CoreTextUtilsProvider } from '@providers/utils/text'; 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 {string} pageName Name of the page we want to navigate.
* @param {number} instance Activity instance Id. I.e FeedbackId. * @param {number} instance Activity instance Id. I.e FeedbackId.
* @param {string} paramName Param name where to find the instance number. * @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 {string} prefix Prefix to check if we are out of the activity context.
* @param {NavController} navCtrl Nav Controller of the view. * @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, protected getPageView(pageName: string, instance: number, paramName: string, prefix: string,
navCtrl: NavController): number { navCtrl: NavController): ViewController {
let historyInstance, params, let historyInstance, params,
view = navCtrl.getActive(); view = navCtrl.getActive();
@ -65,13 +65,13 @@ export class AddonModFeedbackHelperProvider {
// Page found. // Page found.
if (view.name == pageName) { if (view.name == pageName) {
return view.index; return view;
} }
view = navCtrl.getPrevious(view); view = navCtrl.getPrevious(view);
} }
return 0; return null;
} }
/** /**
@ -223,10 +223,8 @@ export class AddonModFeedbackHelperProvider {
* @return {Promise<void>} Resolved when navigation animation is done. * @return {Promise<void>} Resolved when navigation animation is done.
*/ */
openFeature(feature: string, navCtrl: NavController, module: any, courseId: number, group: number = 0): Promise<void> { openFeature(feature: string, navCtrl: NavController, module: any, courseId: number, group: number = 0): Promise<void> {
const pageName = feature && feature != 'analysis' ? 'AddonModFeedback' + feature + 'Page' : 'AddonModFeedbackIndexPage'; const pageName = feature && feature != 'analysis' ? 'AddonModFeedback' + feature + 'Page' : 'AddonModFeedbackIndexPage',
let backTimes = 0; stateParams = {
const stateParams = {
module: module, module: module,
moduleId: module.id, moduleId: module.id,
courseId: courseId, courseId: courseId,
@ -237,12 +235,12 @@ export class AddonModFeedbackHelperProvider {
// Only check history if navigating through tabs. // Only check history if navigating through tabs.
if (pageName == 'AddonModFeedbackIndexPage') { if (pageName == 'AddonModFeedbackIndexPage') {
stateParams['tab'] = feature == 'analysis' ? 'analysis' : 'overview'; 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) { if (view) {
// Go back X times until the the page we want to reach. // Go back to the found page.
return navCtrl.remove(navCtrl.getActive().index, backTimes); return navCtrl.popTo(view);
}
} }
// Not found, open new state. // Not found, open new state.

View File

@ -32,12 +32,12 @@
</ion-avatar> </ion-avatar>
<h2><core-format-text [text]="discussion.subject"></core-format-text></h2> <h2><core-format-text [text]="discussion.subject"></core-format-text></h2>
<p *ngIf="discussion.userfullname"> <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}} {{discussion.userfullname}}
</p> </p>
</ion-item> </ion-item>
<ion-card-content> <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-icon name="people"></ion-icon> {{ discussion.groupname }}
</ion-note> </ion-note>
<p><core-format-text [maxHeight]="60" [component]="component" [componentId]="componentId" [text]="discussion.message"></core-format-text></p> <p><core-format-text [maxHeight]="60" [component]="component" [componentId]="componentId" [text]="discussion.message"></core-format-text></p>
@ -50,9 +50,9 @@
</ion-avatar> </ion-avatar>
<h2><ion-icon name="pin" *ngIf="discussion.pinned"></ion-icon> <core-format-text [text]="discussion.subject"></core-format-text></h2> <h2><ion-icon name="pin" *ngIf="discussion.pinned"></ion-icon> <core-format-text [text]="discussion.subject"></core-format-text></h2>
<p> <p>
<ion-note float-end padding-start> <ion-note float-end padding-left text-end>
{{discussion.created | coreDateDayOrTime}} {{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> </ion-note>
{{discussion.userfullname}} {{discussion.userfullname}}
</p> </p>
@ -93,7 +93,7 @@
</ion-infinite-scroll> </ion-infinite-scroll>
</core-loading> </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"> <button ion-fab (click)="openNewDiscussion()" [attr.aria-label]="addDiscussionText">
<ion-icon name="add"></ion-icon> <ion-icon name="add"></ion-icon>
</button> </button>

View File

@ -88,6 +88,12 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom
this.viewDiscObserver = this.eventsProvider.on(AddonModForumProvider.VIEW_DISCUSSION_EVENT, (data) => { this.viewDiscObserver = this.eventsProvider.on(AddonModForumProvider.VIEW_DISCUSSION_EVENT, (data) => {
if (this.forum && this.forum.id == data.forumId) { if (this.forum && this.forum.id == data.forumId) {
this.selectedDiscussion = this.splitviewCtrl.isOn() ? data.discussion : 0; 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()); }, this.sitesProvider.getCurrentSiteId());
@ -406,7 +412,7 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom
forumId: this.forum.id, forumId: this.forum.id,
discussionId: discussion.discussion, discussionId: discussion.discussion,
trackPosts: this.trackPosts, trackPosts: this.trackPosts,
locked: discussion.locked && !discussion.canreply locked: discussion.locked
}; };
this.splitviewCtrl.push('AddonModForumDiscussionPage', params); this.splitviewCtrl.push('AddonModForumDiscussionPage', params);
} }

View File

@ -1,18 +1,20 @@
<ion-item text-wrap> <ion-card-header text-wrap no-padding >
<ion-item text-wrap>
<ion-avatar item-start (click)="openUserProfile(post.userid)"> <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"> <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> </ion-avatar>
<h2><span [class.core-bold]="post.parent == 0"><core-format-text [text]="post.subject"></core-format-text></span></h2> <h2><span [class.core-bold]="post.parent == 0"><core-format-text [text]="post.subject"></core-format-text></span></h2>
<p> <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-left *ngIf="!post.modified"><ion-icon name="time"></ion-icon> {{ 'core.notsent' | translate }}</ion-note>
<ion-note float-end padding-start *ngIf="post.modified"> <ion-note float-end padding-left text-end *ngIf="post.modified">
{{post.modified | coreDateDayOrTime}} {{post.modified | coreDateDayOrTime}}
<div *ngIf="unread"><ion-icon name="record"></ion-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> </ion-note>
{{post.userfullname}} {{post.userfullname}}
</p> </p>
</ion-item> </ion-item>
<ion-card-content> </ion-card-header>
<ion-card-content padding-top>
<core-format-text [component]="component" [componentId]="componentId" [text]="post.message"></core-format-text> <core-format-text [component]="component" [componentId]="componentId" [text]="post.message"></core-format-text>
<div *ngFor="let attachment of post.attachments"> <div *ngFor="let attachment of post.attachments">
<!-- Files already attached to the submission. --> <!-- Files already attached to the submission. -->
@ -21,12 +23,12 @@
<core-local-file *ngIf="attachment.name" [file]="attachment"></core-local-file> <core-local-file *ngIf="attachment.name" [file]="attachment"></core-local-file>
</div> </div>
</ion-card-content> </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"> <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 }} <ion-icon name="undo"></ion-icon> {{ 'addon.mod_forum.reply' | translate }}
</button> </button>
</ion-item> </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"> <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 }} <ion-icon name="create"></ion-icon> {{ 'addon.mod_forum.edit' | translate }}
</button> </button>

View File

@ -30,7 +30,7 @@
<ion-icon name="warning"></ion-icon> {{ 'addon.mod_forum.discussionlocked' | translate }} <ion-icon name="warning"></ion-icon> {{ 'addon.mod_forum.discussionlocked' | translate }}
</ion-card> </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> <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> </ion-card>
@ -51,7 +51,7 @@
<ion-card> <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> <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> </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 *ngFor="let child of post.children">
<ng-container *ngTemplateOutlet="nestedPosts; context: {post: child}"></ng-container> <ng-container *ngTemplateOutlet="nestedPosts; context: {post: child}"></ng-container>
</ng-container> </ng-container>

View File

@ -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;
}
}

View File

@ -61,7 +61,7 @@
</ion-infinite-scroll> </ion-infinite-scroll>
</core-loading> </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"> <button ion-fab (click)="openNewEntry()" [attr.aria-label]="'addon.mod_glossary.addentry' | translate">
<ion-icon name="add"></ion-icon> <ion-icon name="add"></ion-icon>
</button> </button>

View File

@ -1,5 +1,5 @@
<ion-list> <ion-list>
<a ion-item *ngFor="let item of items" (click)="loadItem(item.href)" detail-none [class.core-bold]="!item.href"> <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> </a>
</ion-list> </ion-list>

View File

@ -50,7 +50,7 @@
<!-- Short answer. --> <!-- Short answer. -->
<ng-container *ngSwitchCase="'shortanswer'"> <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> </ion-input>
</ng-container> </ng-container>

View File

@ -7,11 +7,6 @@ ion-app.app-root page-addon-mod-lesson-player {
ion-input[padding-left] input[padding-left] { 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. // 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); @include padding(null, null, null, 0);
} }

View File

@ -88,12 +88,12 @@
<!-- Arrows to go to next/previous. --> <!-- Arrows to go to next/previous. -->
<ng-template #navArrows> <ng-template #navArrows>
<ion-row align-items-center> <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"> <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> <ion-icon name="arrow-back" md="ios-arrow-back"></ion-icon>
</a> </a>
</ion-col> </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"> <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> <ion-icon name="arrow-forward" md="ios-arrow-forward"></ion-icon>
</a> </a>

View File

@ -73,7 +73,7 @@
</core-loading> </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"> <button ion-fab (click)="goToNewPage()" [attr.aria-label]="'addon.mod_wiki.createpage' | translate">
<ion-icon name="add"></ion-icon> <ion-icon name="add"></ion-icon>
</button> </button>

View File

@ -84,7 +84,7 @@ export class AddonModWikiIndexComponent extends CoreCourseModuleMainActivityComp
protected userProvider: CoreUserProvider, private popoverCtrl: PopoverController) { protected userProvider: CoreUserProvider, private popoverCtrl: PopoverController) {
super(injector, content); super(injector, content);
this.pageStr = this.translate.instant('addon.mod_wiki.page'); this.pageStr = this.translate.instant('addon.mod_wiki.wikipage');
} }
/** /**

View File

@ -10,7 +10,6 @@
"newpagetitle": "New page title", "newpagetitle": "New page title",
"nocontent": "There is no content for this page", "nocontent": "There is no content for this page",
"notingroup": "Not in group", "notingroup": "Not in group",
"page": "Page",
"pageexists": "This page already exists.", "pageexists": "This page already exists.",
"pagename": "Page name", "pagename": "Page name",
"subwiki": "Sub-wiki", "subwiki": "Sub-wiki",

View File

@ -119,10 +119,13 @@
</ion-item> </ion-item>
</ion-card> </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> <ion-item-divider color="light" text-wrap>
<h2>{{ 'addon.mod_workshop.assignedassessments' | translate }}</h2> <h2>{{ 'addon.mod_workshop.assignedassessments' | translate }}</h2>
</ion-item-divider> </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"> <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> <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> </ng-container>
@ -130,7 +133,7 @@
</ng-container> </ng-container>
<!-- MULTIPLE PHASES SUBMISSION OR GREATER only teachers --> <!-- 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"> <ion-item-divider color="light" text-wrap *ngIf="workshop.phase == workshopPhases.PHASE_SUBMISSION">
<h2>{{ 'addon.mod_workshop.submissionsreport' | translate }}</h2> <h2>{{ 'addon.mod_workshop.submissionsreport' | translate }}</h2>
</ion-item-divider> </ion-item-divider>

View File

@ -9,6 +9,7 @@
"assessmentstrategynotsupported": "Assessment strategy {{$a}} not supported", "assessmentstrategynotsupported": "Assessment strategy {{$a}} not supported",
"assessmentweight": "Assessment weight", "assessmentweight": "Assessment weight",
"assignedassessments": "Assigned submissions to assess", "assignedassessments": "Assigned submissions to assess",
"assignedassessmentsnone": "You have no assigned submission to assess",
"conclusion": "Conclusion", "conclusion": "Conclusion",
"createsubmission": "Start preparing your submission", "createsubmission": "Start preparing your submission",
"deletesubmission": "Delete submission", "deletesubmission": "Delete submission",

View File

@ -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"> <img [src]="notification.profileimageurlfrom || 'assets/img/user-avatar.png'" core-external-content [alt]="'core.pictureof' | translate:{$a: notification.userfromfullname}" role="presentation">
</ion-avatar> </ion-avatar>
<h2>{{notification.userfromfullname}}</h2> <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> <p>{{notification.timecreated | coreDateDayOrTime}}</p>
</ion-item> </ion-item>
<ion-item text-wrap> <ion-item text-wrap>

View File

@ -18,7 +18,7 @@
<!-- Input to enter the answer. --> <!-- Input to enter the answer. -->
<ion-col> <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-input>
</ion-col> </ion-col>

View File

@ -2,6 +2,6 @@
<ion-item text-wrap> <ion-item text-wrap>
<p><core-format-text [component]="component" [componentId]="componentId" [text]="question.text"></core-format-text></p> <p><core-format-text [component]="component" [componentId]="componentId" [text]="question.text"></core-format-text></p>
</ion-item> </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> </ion-input>
</section> </section>

View File

@ -59,71 +59,6 @@ ion-app.app-root.ios {
height: 100%; 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. // Different levels of padding.
@for $i from 0 through 15 { @for $i from 0 through 15 {
.core-padding-#{$i} { .core-padding-#{$i} {
@ -138,4 +73,22 @@ ion-app.app-root.ios {
.card-ios.with-borders .item-ios:last-child .item-inner { .card-ios.with-borders .item-ios:last-child .item-inner {
border-bottom: 0; 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;
}
} }

View File

@ -41,71 +41,6 @@ ion-app.app-root.md {
height: calc(100% - #{($navbar-md-height)}); 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. // Different levels of padding.
@for $i from 0 through 15 { @for $i from 0 through 15 {
.core-padding-#{$i} { .core-padding-#{$i} {

View File

@ -374,6 +374,13 @@ ion-app.app-root {
@include core-headings(); @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. // 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 { ion-card core-format-text img {
width: min-content; width: min-content;
@ -396,6 +403,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. // Ionic fix. Button can occupy all page if not.
ion-select { ion-select {
position: relative; position: relative;
@ -411,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 { .core-button-select {
background-color: white; background-color: white;
color: $core-color; color: $core-select-placeholder-color;
white-space: normal; white-space: normal;
align-self: start; align-self: start;
max-width: none; max-width: none;
@ -446,7 +468,7 @@ ion-app.app-root {
} }
.select-icon .select-icon-inner { .select-icon .select-icon-inner {
color: $core-color; color: $core-select-placeholder-color;
} }
ion-icon:last-child { ion-icon:last-child {
@ -919,9 +941,11 @@ ion-app.app-root {
} }
body.keyboard-is-open { body.keyboard-is-open {
.scroll-content, .fixed-content { ion-content:not(.has-footer) {
> .scroll-content, > .fixed-content {
margin-bottom: 0 !important; margin-bottom: 0 !important;
} }
}
core-ion-tabs .tabbar { core-ion-tabs .tabbar {
display: none; display: none;

View File

@ -26,6 +26,7 @@ ion-app.app-root .core-tabs-bar {
word-wrap: break-word; word-wrap: break-word;
display: block; display: block;
width: 100%; width: 100%;
line-height: 1.2em;
} }
&[aria-selected=true] { &[aria-selected=true] {

View File

@ -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> <ion-icon name="timer" item-start></ion-icon>
<label *ngIf="timeLeft > 0 && timerText">{{ timerText }}</label> <label *ngIf="timeLeft > 0 && timerText">{{ timerText }}</label>
<span *ngIf="timeLeft > 0">{{ timeLeft | coreSecondsToHMS }}</span> <span *ngIf="timeLeft > 0">{{ timeLeft | coreSecondsToHMS }}</span>

View File

@ -1,11 +1,11 @@
<ng-template #eventTemplate let-event="event"> <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"> <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> <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> <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"> <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}} {{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> </button>
<ion-badge class="hidden-tablet" item-end *ngIf="event.action.showitemcount">{{event.action.itemcount}}</ion-badge> <ion-badge class="hidden-tablet" item-end *ngIf="event.action.showitemcount">{{event.action.itemcount}}</ion-badge>
</a> </a>

View File

@ -37,7 +37,7 @@
<core-loading [hideUntil]="courses.loaded" class="core-loading-center"> <core-loading [hideUntil]="courses.loaded" class="core-loading-center">
<!-- "Time" selector. --> <!-- "Time" selector. -->
<div padding class="clearfix" [hidden]="showFilter" ion-row justify-content-between> <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="inprogress">{{ 'core.courses.inprogress' | translate }}</ion-option>
<ion-option value="future">{{ 'core.courses.future' | translate }}</ion-option> <ion-option value="future">{{ 'core.courses.future' | translate }}</ion-option>
<ion-option value="past">{{ 'core.courses.past' | translate }}</ion-option> <ion-option value="past">{{ 'core.courses.past' | translate }}</ion-option>
@ -82,7 +82,7 @@
</ion-refresher> </ion-refresher>
<div padding [hidden]="!(timeline.loaded || timelineCourses.loaded)"> <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="sortbydates">{{ 'core.courses.sortbydates' | translate }}</ion-option>
<ion-option value="sortbycourses">{{ 'core.courses.sortbycourses' | translate }}</ion-option> <ion-option value="sortbycourses">{{ 'core.courses.sortbycourses' | translate }}</ion-option>
</ion-select> </ion-select>

View File

@ -11,7 +11,7 @@
</ion-buttons> </ion-buttons>
</ion-navbar> </ion-navbar>
</ion-header> </ion-header>
<ion-content> <ion-content class="has-footer">
<core-loading [hideUntil]="readyToCapture"> <core-loading [hideUntil]="readyToCapture">
<div class="core-av-wrapper"> <div class="core-av-wrapper">
<!-- Video stream for image and video. --> <!-- Video stream for image and video. -->
@ -47,7 +47,7 @@
<ion-icon name="trash"></ion-icon> <ion-icon name="trash"></ion-icon>
</button> </button>
</ion-col> </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> <core-chrono *ngIf="!isImage" [hidden]="hasCaptured" [running]="isCapturing" [reset]="resetChrono" [endTime]="maxTime" (onEnd)="stopCapturing()"></core-chrono>
</ion-col> </ion-col>
</ion-row> </ion-row>

View File

@ -14,7 +14,7 @@
<div text-center padding> <div text-center padding>
<img src="assets/img/login_logo.png" class="avatar-full login-logo" role="presentation"> <img src="assets/img/login_logo.png" class="avatar-full login-logo" role="presentation">
</div> </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. --> <!-- Form to input the site URL if there are no fixed sites. -->
<div *ngIf="!fixedSites"> <div *ngIf="!fixedSites">
<p padding>{{ 'core.login.newsitedescription' | translate }}</p> <p padding>{{ 'core.login.newsitedescription' | translate }}</p>

View File

@ -24,7 +24,7 @@
</button> </button>
</a> </a>
</ion-list> </ion-list>
<ion-fab bottom right> <ion-fab bottom end>
<button ion-fab (click)="add()" [attr.aria-label]="'core.add' | translate"> <button ion-fab (click)="add()" [attr.aria-label]="'core.add' | translate">
<ion-icon name="add"></ion-icon> <ion-icon name="add"></ion-icon>
</button> </button>

View File

@ -1,5 +1,5 @@
ion-app.app-root page-core-login-sites { ion-app.app-root page-core-login-sites {
.item-button[icon-only] ion-icon { .item-ios .item-button[icon-only] ion-icon {
font-size: 2.3em; font-size: 2.1em;
} }
} }

View File

@ -6,11 +6,15 @@ ion-app.app-root page-core-mainmenu {
.ion-fa-graduation-cap { .ion-fa-graduation-cap {
@extend .fa-graduation-cap; @extend .fa-graduation-cap;
@extend .fa; @extend .fa;
font-size: 21px;
height: 21px;
} }
.ion-ios-fa-graduation-cap-outline { .ion-ios-fa-graduation-cap-outline {
color: transparent; color: transparent;
-webkit-text-stroke-width: 0.8px; -webkit-text-stroke-width: 0.8px;
-webkit-text-stroke-color: $tabs-tab-color-inactive; -webkit-text-stroke-color: $tabs-tab-color-inactive;
font-size: 23px;
height: 23px;
} }
} }

View File

@ -135,13 +135,13 @@ $core-login-box-background-border: $gray !default;
$core-login-box-text-color: $text-color !default; $core-login-box-text-color: $text-color !default;
$core-login-button-outline: false !default; $core-login-button-outline: false !default;
$core-login-loading-color: false !default; $core-login-loading-color: false !default;
$core-select-placeholder-color: $core-color;
// App iOS Variables // App iOS Variables
// -------------------------------------------------- // --------------------------------------------------
// iOS only Sass variables can go here // iOS only Sass variables can go here
$text-input-ios-show-focus-highlight: false; $text-input-ios-show-focus-highlight: false;
$core-text-input-ios-show-highlight: false;
$item-ios-avatar-size: 54px; $item-ios-avatar-size: 54px;
$loading-ios-spinner-color: $core-loading-spinner-color; $loading-ios-spinner-color: $core-loading-spinner-color;
$spinner-ios-ios-color: $core-spinner-color; $spinner-ios-ios-color: $core-spinner-color;
@ -149,6 +149,7 @@ $tabs-ios-tab-color-inactive: $tabs-tab-color-inactive;
$button-ios-outline-background-color: $core-button-outline-background-color; $button-ios-outline-background-color: $core-button-outline-background-color;
$toolbar-ios-height: 44px + 8; // Avoid toolbar with different heights. $toolbar-ios-height: 44px + 8; // Avoid toolbar with different heights.
$checkbox-ios-icon-border-radius: 0px !default; $checkbox-ios-icon-border-radius: 0px !default;
$select-ios-placeholder-color: $core-select-placeholder-color;
$radio-ios-disabled-opacity: .5 !default; $radio-ios-disabled-opacity: .5 !default;
$checkbox-ios-disabled-opacity: .5 !default; $checkbox-ios-disabled-opacity: .5 !default;
$toggle-ios-disabled-opacity: .5 !default; $toggle-ios-disabled-opacity: .5 !default;
@ -157,8 +158,7 @@ $toggle-ios-disabled-opacity: .5 !default;
// -------------------------------------------------- // --------------------------------------------------
// Material Design only Sass variables can go here // Material Design only Sass variables can go here
$text-input-md-show-focus-highlight: false; $text-input-md-show-focus-highlight: true;
$core-text-input-md-show-highlight: true;
$item-md-detail-push-show: true; $item-md-detail-push-show: true;
$item-md-avatar-size: 54px; $item-md-avatar-size: 54px;
$loading-md-spinner-color: $core-loading-spinner-color; $loading-md-spinner-color: $core-loading-spinner-color;
@ -166,6 +166,8 @@ $spinner-md-crescent-color: $core-spinner-color;
$tabs-md-tab-color-inactive: $tabs-tab-color-inactive; $tabs-md-tab-color-inactive: $tabs-tab-color-inactive;
$button-md-outline-background-color: $core-button-outline-background-color; $button-md-outline-background-color: $core-button-outline-background-color;
$font-family-md-base: "Roboto", "Noto Sans", "Helvetica Neue", sans-serif !default; $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; $radio-md-disabled-opacity: .5 !default;
$checkbox-md-disabled-opacity: .5 !default; $checkbox-md-disabled-opacity: .5 !default;
$toggle-md-disabled-opacity: .5 !default; $toggle-md-disabled-opacity: .5 !default;
@ -181,6 +183,8 @@ $loading-wp-spinner-color: $core-loading-spinner-color;
$spinner-wp-circles-color: $core-spinner-color; $spinner-wp-circles-color: $core-spinner-color;
$tabs-wp-tab-color-inactive: $tabs-tab-color-inactive; $tabs-wp-tab-color-inactive: $tabs-tab-color-inactive;
$button-wp-outline-background-color: $core-button-outline-background-color; $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; $radio-wp-disabled-opacity: .5 !default;
$checkbox-wp-disabled-opacity: .5 !default; $checkbox-wp-disabled-opacity: .5 !default;
$toggle-wp-disabled-opacity: .5 !default; $toggle-wp-disabled-opacity: .5 !default;