commit
32055bd8d5
|
@ -18,7 +18,7 @@
|
|||
<core-loading [hideUntil]="loaded">
|
||||
<ion-item *ngIf="showMyEntriesToggle">
|
||||
<ion-label>{{ 'addon.blog.showonlyyourentries' | translate }}</ion-label>
|
||||
<ion-toggle [(ngModel)]="onlyMyEntries" (ionChange)="onlyMyEntriesToggleChanged(onlyMyEntries)"></ion-toggle>
|
||||
<ion-toggle [(ngModel)]="onlyMyEntries" (ionChange)="onlyMyEntriesToggleChanged(onlyMyEntries)" slot="end"></ion-toggle>
|
||||
</ion-item>
|
||||
<core-empty-box *ngIf="entries && entries.length == 0" icon="far-newspaper" [message]="'addon.blog.noentriesyet' | translate">
|
||||
</core-empty-box>
|
||||
|
|
|
@ -363,7 +363,7 @@
|
|||
<p class="item-heading">{{ 'addon.mod_assign.groupsubmissionsettings' | translate }}</p>
|
||||
<p>{{ 'addon.mod_assign.applytoteam' | translate }}</p>
|
||||
</ion-label>
|
||||
<ion-toggle [(ngModel)]="grade.applyToAll"></ion-toggle>
|
||||
<ion-toggle [(ngModel)]="grade.applyToAll" slot="end"></ion-toggle>
|
||||
</ion-item>
|
||||
|
||||
<!-- Attempt status. -->
|
||||
|
@ -387,7 +387,7 @@
|
|||
</ion-item>
|
||||
<ion-item *ngIf="canSaveGrades && allowAddAttempt">
|
||||
<ion-label>{{ 'addon.mod_assign.addattempt' | translate }}</ion-label>
|
||||
<ion-toggle [(ngModel)]="grade.addAttempt"></ion-toggle>
|
||||
<ion-toggle [(ngModel)]="grade.addAttempt" slot="end"></ion-toggle>
|
||||
</ion-item>
|
||||
</ng-container>
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
|
||||
<ion-item>
|
||||
<ion-label>{{ 'addon.mod_chat.showincompletesessions' | translate }}</ion-label>
|
||||
<ion-toggle [(ngModel)]="showAll" (ionChange)="reloadSessions()"></ion-toggle>
|
||||
<ion-toggle [(ngModel)]="showAll" (ionChange)="reloadSessions()" slot="end"></ion-toggle>
|
||||
</ion-item>
|
||||
|
||||
<ion-card *ngFor="let session of sessions.items" (click)="sessions.select(session)" button
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
<ion-content>
|
||||
<ion-item>
|
||||
<ion-label>{{ 'addon.mod_data.advancedsearch' | translate }}</ion-label>
|
||||
<ion-toggle [(ngModel)]="search.searchingAdvanced"></ion-toggle>
|
||||
<ion-toggle [(ngModel)]="search.searchingAdvanced" slot="end"></ion-toggle>
|
||||
</ion-item>
|
||||
<form (ngSubmit)="searchEntries($event)" [formGroup]="searchForm" #searchFormEl>
|
||||
<ion-list class="ion-no-margin">
|
||||
|
|
|
@ -43,7 +43,7 @@
|
|||
<div *ngIf="advanced" id="addon-mod-forum-new-discussion-advanced">
|
||||
<ion-item *ngIf="showGroups && groupIds.length > 1 && accessInfo.cancanposttomygroups">
|
||||
<ion-label>{{ 'addon.mod_forum.posttomygroups' | translate }}</ion-label>
|
||||
<ion-toggle [(ngModel)]="newDiscussion.postToAllGroups" name="postallgroups"></ion-toggle>
|
||||
<ion-toggle [(ngModel)]="newDiscussion.postToAllGroups" name="postallgroups" slot="end"></ion-toggle>
|
||||
</ion-item>
|
||||
<ion-item *ngIf="showGroups" class="core-edit-set-group">
|
||||
<ion-label>{{ 'addon.mod_forum.group' | translate }}</ion-label>
|
||||
|
@ -58,11 +58,11 @@
|
|||
</ion-item>
|
||||
<ion-item>
|
||||
<ion-label>{{ 'addon.mod_forum.discussionsubscription' | translate }}</ion-label>
|
||||
<ion-toggle [(ngModel)]="newDiscussion.subscribe" name="subscribe"></ion-toggle>
|
||||
<ion-toggle [(ngModel)]="newDiscussion.subscribe" name="subscribe" slot="end"></ion-toggle>
|
||||
</ion-item>
|
||||
<ion-item *ngIf="canPin">
|
||||
<ion-label>{{ 'addon.mod_forum.discussionpinned' | translate }}</ion-label>
|
||||
<ion-toggle [(ngModel)]="newDiscussion.pin" name="pin"></ion-toggle>
|
||||
<ion-toggle [(ngModel)]="newDiscussion.pin" name="pin" slot="end"></ion-toggle>
|
||||
</ion-item>
|
||||
<core-attachments *ngIf="canCreateAttachments && forum && forum.maxattachments > 0" [files]="newDiscussion.files"
|
||||
[maxSize]="forum.maxbytes" [maxSubmissions]="forum.maxattachments" [component]="component" [componentId]="forum.cmid"
|
||||
|
|
|
@ -62,16 +62,16 @@
|
|||
</ion-item-divider>
|
||||
<ion-item class="ion-text-wrap">
|
||||
<ion-label>{{ 'addon.mod_glossary.entryusedynalink' | translate }}</ion-label>
|
||||
<ion-toggle [(ngModel)]="data.usedynalink" name="usedynalink"></ion-toggle>
|
||||
<ion-toggle [(ngModel)]="data.usedynalink" name="usedynalink" slot="end"></ion-toggle>
|
||||
</ion-item>
|
||||
<ion-item class="ion-text-wrap">
|
||||
<ion-label>{{ 'addon.mod_glossary.casesensitive' | translate }}</ion-label>
|
||||
<ion-toggle [disabled]="!data.usedynalink" [(ngModel)]="data.casesensitive" name="casesensitive">
|
||||
<ion-toggle [disabled]="!data.usedynalink" [(ngModel)]="data.casesensitive" name="casesensitive" slot="end">
|
||||
</ion-toggle>
|
||||
</ion-item>
|
||||
<ion-item class="ion-text-wrap">
|
||||
<ion-label>{{ 'addon.mod_glossary.fullmatch' | translate }}</ion-label>
|
||||
<ion-toggle [disabled]="!data.usedynalink" [(ngModel)]="data.fullmatch" name="fullmatch"></ion-toggle>
|
||||
<ion-toggle [disabled]="!data.usedynalink" [(ngModel)]="data.fullmatch" name="fullmatch" slot="end"></ion-toggle>
|
||||
</ion-item>
|
||||
</ng-container>
|
||||
<ion-button class="ion-margin" expand="block" [disabled]="!data.concept || !data.definition" (click)="save()">
|
||||
|
|
|
@ -56,6 +56,7 @@ export class AddonModLabelModuleHandlerService extends CoreModuleHandlerBase imp
|
|||
title,
|
||||
a11yTitle: '',
|
||||
class: 'addon-mod-label-handler',
|
||||
hasCustomCmListItem: true,
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -105,9 +105,11 @@
|
|||
</ion-label>
|
||||
</ion-item>
|
||||
<ion-item class="ion-text-wrap" *ngIf="access.canpublishsubmissions">
|
||||
<ion-label>{{ 'addon.mod_workshop.publishsubmission' | translate }}</ion-label>
|
||||
<ion-toggle formControlName="published"></ion-toggle>
|
||||
<p class="item-help">{{ 'addon.mod_workshop.publishsubmission_help' | translate }}</p>
|
||||
<ion-label>
|
||||
<p class="item-heading">{{ 'addon.mod_workshop.publishsubmission' | translate }}</p>
|
||||
<p>{{ 'addon.mod_workshop.publishsubmission_help' | translate }}</p>
|
||||
</ion-label>
|
||||
<ion-toggle formControlName="published" slot="end"></ion-toggle>
|
||||
</ion-item>
|
||||
|
||||
<ion-item class="ion-text-wrap">
|
||||
|
|
|
@ -449,7 +449,14 @@ export class AddonModWorkshopHelperProvider {
|
|||
* @returns Promise resolved with the files.
|
||||
*/
|
||||
async applyOfflineData(
|
||||
submission: AddonModWorkshopSubmissionDataWithOfflineData = {
|
||||
submission?: AddonModWorkshopSubmissionDataWithOfflineData,
|
||||
actions: AddonModWorkshopOfflineSubmission[] = [],
|
||||
): Promise<AddonModWorkshopSubmissionDataWithOfflineData | undefined> {
|
||||
if (actions.length === 0) {
|
||||
return submission;
|
||||
}
|
||||
|
||||
const baseSubmission = submission ?? {
|
||||
id: 0,
|
||||
workshopid: 0,
|
||||
title: '',
|
||||
|
@ -462,12 +469,7 @@ export class AddonModWorkshopHelperProvider {
|
|||
attachment: 0,
|
||||
published: false,
|
||||
late: 0,
|
||||
},
|
||||
actions: AddonModWorkshopOfflineSubmission[] = [],
|
||||
): Promise<AddonModWorkshopSubmissionDataWithOfflineData | undefined> {
|
||||
if (actions.length === 0) {
|
||||
return submission;
|
||||
}
|
||||
};
|
||||
|
||||
let attachmentsId: CoreFileUploaderStoreFilesResult | undefined;
|
||||
const workshopId = actions[0].workshopid;
|
||||
|
@ -476,17 +478,17 @@ export class AddonModWorkshopHelperProvider {
|
|||
switch (action.action) {
|
||||
case AddonModWorkshopAction.ADD:
|
||||
case AddonModWorkshopAction.UPDATE:
|
||||
submission.title = action.title;
|
||||
submission.content = action.content;
|
||||
submission.title = action.title;
|
||||
submission.courseid = action.courseid;
|
||||
submission.submissionmodified = action.timemodified / 1000;
|
||||
submission.offline = true;
|
||||
baseSubmission.title = action.title;
|
||||
baseSubmission.content = action.content;
|
||||
baseSubmission.title = action.title;
|
||||
baseSubmission.courseid = action.courseid;
|
||||
baseSubmission.submissionmodified = action.timemodified / 1000;
|
||||
baseSubmission.offline = true;
|
||||
attachmentsId = action.attachmentsid as CoreFileUploaderStoreFilesResult;
|
||||
break;
|
||||
case AddonModWorkshopAction.DELETE:
|
||||
submission.deleted = true;
|
||||
submission.submissionmodified = action.timemodified / 1000;
|
||||
baseSubmission.deleted = true;
|
||||
baseSubmission.submissionmodified = action.timemodified / 1000;
|
||||
break;
|
||||
default:
|
||||
}
|
||||
|
@ -494,13 +496,13 @@ export class AddonModWorkshopHelperProvider {
|
|||
|
||||
// Check offline files for latest attachmentsid.
|
||||
if (attachmentsId) {
|
||||
submission.attachmentfiles =
|
||||
baseSubmission.attachmentfiles =
|
||||
await this.getSubmissionFilesFromOfflineFilesObject(attachmentsId, workshopId);
|
||||
} else {
|
||||
submission.attachmentfiles = [];
|
||||
baseSubmission.attachmentfiles = [];
|
||||
}
|
||||
|
||||
return submission;
|
||||
return baseSubmission;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -49,13 +49,14 @@ Feature: Test basic usage of workshop activity in app
|
|||
Given I entered the workshop activity "workshop" on course "Course 1" as "student1" in the app
|
||||
Then I should find "Task to do" within "Submit your work" "ion-item" in the app
|
||||
|
||||
When I press "Edit submission" in the app
|
||||
When I press "Add submission" in the app
|
||||
And I set the field "Title" to "The Answer" in the app
|
||||
And I set the field "Submission content" to "42" in the app
|
||||
And I press "Save" in the app
|
||||
Then I should find "Task done" within "Submit your work" "ion-item" in the app
|
||||
And I should find "The Answer" in the app
|
||||
And I should find "42" in the app
|
||||
And I should find "Edit submission" in the app
|
||||
|
||||
Given I entered the workshop activity "workshop" on course "Course 1" as "teacher1" in the app
|
||||
When I pull to refresh in the app
|
||||
|
|
|
@ -45,6 +45,7 @@ export class CoreModuleHandlerBase implements Partial<CoreCourseModuleHandler> {
|
|||
title: module.name,
|
||||
class: 'addon-mod_' + module.modname + '-handler',
|
||||
showDownloadButton: true,
|
||||
hasCustomCmListItem: false,
|
||||
action: async (
|
||||
event: Event,
|
||||
module: CoreCourseModuleData,
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<ion-card *ngIf="module.handlerData && module.visibleoncoursepage !== 0"
|
||||
class="activity-card core-course-module-handler {{module.handlerData.class}}" [class.core-course-module-with-view]="moduleHasView"
|
||||
[class.item-dimmed]="module.visible === 0 || module.uservisible === false" (click)="moduleClicked($event)"
|
||||
[button]="module.handlerData.action && module.uservisible"
|
||||
[class.item-dimmed]="module.visible === 0 || module.uservisible === false" [class.activityinline]="activityInline"
|
||||
(click)="moduleClicked($event)" [button]="module.handlerData.action && module.uservisible"
|
||||
[attr.aria-label]="module.handlerData.a11yTitle ? module.handlerData.a11yTitle : null" id="core-course-module-{{module.id}}">
|
||||
<ng-container *ngIf="!module.handlerData.loading">
|
||||
<ion-item class="ion-text-wrap">
|
||||
|
|
|
@ -7,6 +7,10 @@
|
|||
|
||||
ion-card {
|
||||
margin: var(--vertical-margin) var(--horizontal-margin);
|
||||
|
||||
&.activityinline {
|
||||
border: 0px;
|
||||
}
|
||||
}
|
||||
|
||||
ion-item {
|
||||
|
@ -94,7 +98,8 @@
|
|||
}
|
||||
}
|
||||
|
||||
.core-module-description ::ng-deep img {
|
||||
.core-module-description ::ng-deep img,
|
||||
.activity-title .item-heading core-format-text ::ng-deep img {
|
||||
border-radius: var(--radius-lg);
|
||||
}
|
||||
|
||||
|
@ -185,4 +190,9 @@
|
|||
&.indented + ::ng-deep core-course-module.indented ion-card {
|
||||
border-top: 1px solid var(--border-color);
|
||||
}
|
||||
|
||||
// Hide download folder icon meanwhile MOBILE-4147 is not solved
|
||||
core-format-text.core-module-description ::ng-deep .description-inner .navitem {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -65,6 +65,7 @@ export class CoreCourseModuleComponent implements OnInit, OnDestroy {
|
|||
prefetchStatusIcon$ = new BehaviorSubject<string>(''); // Module prefetch status icon.
|
||||
prefetchStatusText$ = new BehaviorSubject<string>(''); // Module prefetch status text.
|
||||
moduleHasView = true;
|
||||
activityInline = false;
|
||||
|
||||
protected prefetchHandler?: CoreCourseModulePrefetchHandler;
|
||||
|
||||
|
@ -101,6 +102,18 @@ export class CoreCourseModuleComponent implements OnInit, OnDestroy {
|
|||
this.module.handlerData.a11yTitle = this.module.handlerData.a11yTitle ?? this.module.handlerData.title;
|
||||
this.moduleHasView = CoreCourse.moduleHasView(this.module);
|
||||
|
||||
if (
|
||||
this.module.handlerData.hasCustomCmListItem &&
|
||||
(!this.showAvailability || !this.module.availabilityinfo) &&
|
||||
(!this.showCompletion || !this.hasCompletion) &&
|
||||
(!this.showActivityDates || !this.module.dates?.length) &&
|
||||
!this.module.groupmode &&
|
||||
!(this.module.visible === 0) &&
|
||||
!(this.module.visible !== 0 && this.module.isStealth)
|
||||
) {
|
||||
this.activityInline = true;
|
||||
}
|
||||
|
||||
if (this.showDownloadStatus && this.module.handlerData.showDownloadButton) {
|
||||
const status = await CoreCourseModulePrefetchDelegate.getModuleStatus(this.module, this.module.course);
|
||||
this.updateModuleStatus(status);
|
||||
|
|
|
@ -1784,6 +1784,7 @@ export type CoreCourseGetContentsWSModule = {
|
|||
completion?: CoreCourseModuleCompletionTracking; // Type of completion tracking: 0 means none, 1 manual, 2 automatic.
|
||||
completiondata?: CoreCourseModuleWSCompletionData; // Module completion data.
|
||||
contents?: CoreCourseModuleContentFile[];
|
||||
groupmode?: number; // @since 4.3. Group mode value
|
||||
downloadcontent?: number; // @since 4.0 The download content value.
|
||||
dates?: {
|
||||
label: string;
|
||||
|
|
|
@ -168,6 +168,14 @@ export interface CoreCourseModuleHandlerData {
|
|||
*/
|
||||
showDownloadButton?: boolean;
|
||||
|
||||
/**
|
||||
* Wether activity has the custom cmlist item flag enabled.
|
||||
*
|
||||
* Activities like label uses this flag to indicate that it should be
|
||||
* displayed as a custom course item instead of a tipical activity card.
|
||||
*/
|
||||
hasCustomCmListItem?: boolean;
|
||||
|
||||
/**
|
||||
* The buttons to display in the module item.
|
||||
*
|
||||
|
|
|
@ -22,19 +22,20 @@
|
|||
<p class="item-heading">Text direction</p>
|
||||
<p>{{ direction }}</p>
|
||||
</ion-label>
|
||||
<ion-toggle [(ngModel)]="rtl" (ionChange)="RTLChanged()"></ion-toggle>
|
||||
<ion-toggle [(ngModel)]="rtl" (ionChange)="RTLChanged()" slot="end"></ion-toggle>
|
||||
</ion-item>
|
||||
<ion-item class="ion-text-wrap">
|
||||
<ion-label>
|
||||
<p class="item-heading">Force safe area margins</p>
|
||||
</ion-label>
|
||||
<ion-toggle [(ngModel)]="forceSafeAreaMargins" (ionChange)="safeAreaChanged()"></ion-toggle>
|
||||
<ion-toggle [(ngModel)]="forceSafeAreaMargins" (ionChange)="safeAreaChanged()" slot="end"></ion-toggle>
|
||||
</ion-item>
|
||||
<ion-item class="ion-text-wrap" *ngIf="stagingSitesCount && enableStagingSites !== undefined">
|
||||
<ion-label>
|
||||
<h2>Enable staging sites ({{stagingSitesCount}})</h2>
|
||||
</ion-label>
|
||||
<ion-toggle [(ngModel)]="enableStagingSites" (ionChange)="setEnabledStagingSites($event.detail.checked)"></ion-toggle>
|
||||
<ion-toggle [(ngModel)]="enableStagingSites" (ionChange)="setEnabledStagingSites($event.detail.checked)"
|
||||
slot="end"></ion-toggle>
|
||||
</ion-item>
|
||||
<ng-container *ngIf="siteId">
|
||||
<ion-item class="ion-text-wrap">
|
||||
|
@ -42,14 +43,14 @@
|
|||
<p class="item-heading">Enable remote styles <ion-badge>{{remoteStylesCount}}</ion-badge>
|
||||
</p>
|
||||
</ion-label>
|
||||
<ion-toggle [(ngModel)]="remoteStyles" (ionChange)="remoteStylesChanged()"></ion-toggle>
|
||||
<ion-toggle [(ngModel)]="remoteStyles" (ionChange)="remoteStylesChanged()" slot="end"></ion-toggle>
|
||||
</ion-item>
|
||||
<ion-item class="ion-text-wrap">
|
||||
<ion-label>
|
||||
<p class="item-heading">Enable site plugin styles <ion-badge>{{pluginStylesCount}}</ion-badge>
|
||||
</p>
|
||||
</ion-label>
|
||||
<ion-toggle [(ngModel)]="pluginStyles" (ionChange)="pluginStylesChanged()"></ion-toggle>
|
||||
<ion-toggle [(ngModel)]="pluginStyles" (ionChange)="pluginStylesChanged()" slot="end"></ion-toggle>
|
||||
</ion-item>
|
||||
<ion-item class="ion-text-wrap" *ngIf="userToursEnabled">
|
||||
<ion-label>
|
||||
|
|
|
@ -57,7 +57,7 @@
|
|||
<p class="item-heading">{{ 'core.settings.enablerichtexteditor' | translate }}</p>
|
||||
<p>{{ 'core.settings.enablerichtexteditordescription' | translate }}</p>
|
||||
</ion-label>
|
||||
<ion-toggle [(ngModel)]="richTextEditor" (ionChange)="richTextEditorChanged($event)"></ion-toggle>
|
||||
<ion-toggle [(ngModel)]="richTextEditor" (ionChange)="richTextEditorChanged($event)" slot="end"></ion-toggle>
|
||||
</ion-item>
|
||||
<ion-item class="ion-text-wrap" *ngIf="displayIframeHelp">
|
||||
<ion-label>
|
||||
|
@ -73,14 +73,14 @@
|
|||
<p class="item-heading">{{ 'core.settings.debugdisplay' | translate }}</p>
|
||||
<p>{{ 'core.settings.debugdisplaydescription' | translate }}</p>
|
||||
</ion-label>
|
||||
<ion-toggle [(ngModel)]="debugDisplay" (ionChange)="debugDisplayChanged($event)"></ion-toggle>
|
||||
<ion-toggle [(ngModel)]="debugDisplay" (ionChange)="debugDisplayChanged($event)" slot="end"></ion-toggle>
|
||||
</ion-item>
|
||||
<ion-item class="ion-text-wrap" *ngIf="analyticsSupported">
|
||||
<ion-label>
|
||||
<p class="item-heading">{{ 'core.settings.enableanalytics' | translate }}</p>
|
||||
<p>{{ 'core.settings.enableanalyticsdescription' | translate }}</p>
|
||||
</ion-label>
|
||||
<ion-toggle [(ngModel)]="analyticsEnabled" (ionChange)="analyticsEnabledChanged($event)"></ion-toggle>
|
||||
<ion-toggle [(ngModel)]="analyticsEnabled" (ionChange)="analyticsEnabledChanged($event)" slot="end"></ion-toggle>
|
||||
</ion-item>
|
||||
</ion-list>
|
||||
</ion-content>
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
<p class="item-heading">{{ handler.title | translate}}</p>
|
||||
</ion-label>
|
||||
<ion-toggle *ngIf="handler.toggle" [(ngModel)]="handler.toggleChecked"
|
||||
(ionChange)="handler.toggle($event.detail.checked)">
|
||||
(ionChange)="handler.toggle($event.detail.checked)" slot="end">
|
||||
</ion-toggle>
|
||||
</ion-item>
|
||||
</ion-list>
|
||||
|
|
|
@ -90,6 +90,7 @@ export class CoreSitePluginsModuleHandler extends CoreSitePluginsBaseHandler imp
|
|||
icon: CoreCourse.getModuleIconSrc(module.modname, icon),
|
||||
class: this.handlerSchema.displaydata?.class,
|
||||
showDownloadButton: showDowloadButton !== undefined ? showDowloadButton : hasOffline,
|
||||
hasCustomCmListItem: this.handlerSchema.hascustomcmlistitem ?? false,
|
||||
};
|
||||
|
||||
if (this.handlerSchema.method) {
|
||||
|
|
|
@ -895,6 +895,7 @@ export type CoreSitePluginsCourseModuleHandlerData = CoreSitePluginsHandlerCommo
|
|||
supportedfeatures?: Record<string, unknown>;
|
||||
manualcompletionalwaysshown?: boolean;
|
||||
nolinkhandlers?: boolean;
|
||||
hascustomcmlistitem?: boolean;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -113,10 +113,6 @@ core-format-text {
|
|||
padding: 10px 0;
|
||||
}
|
||||
|
||||
.btn-link {
|
||||
background: none;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@keyframes loading {
|
||||
|
@ -679,6 +675,29 @@ core-rich-text-editor .core-rte-editor {
|
|||
background-color: var(--#{$color-name});
|
||||
}
|
||||
}
|
||||
|
||||
.btn-link {
|
||||
background: none;
|
||||
}
|
||||
|
||||
button, .btn {
|
||||
margin: 4px 8px;
|
||||
padding-left: 12px;
|
||||
padding-right: 12px;
|
||||
border-radius: var(--core-input-radius);
|
||||
a {
|
||||
color: inherit;
|
||||
}
|
||||
}
|
||||
|
||||
@each $color-name, $unused in $colors {
|
||||
.btn.btn-#{$color-name} {
|
||||
--color-base: var(--#{$color-name});
|
||||
color: var(--#{$color-name}-shade);
|
||||
border-color: var(--color-base);
|
||||
background-color: var(--#{$color-name}-tint);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// h1 is too big and ugly, reduce size when loading.
|
||||
|
|
Loading…
Reference in New Issue