MOBILE-3565 login: Add help and onboarding modals

main
Dani Palou 2020-10-27 11:44:35 +01:00
parent 977eb08a97
commit d66c744ab8
14 changed files with 989 additions and 13 deletions

View File

@ -0,0 +1,76 @@
<ion-header>
<ion-toolbar>
<ion-title>{{ 'core.login.help' | translate }}</ion-title>
<ion-buttons slot="end">
<ion-button (click)="closeHelp()" [attr.aria-label]="'core.close' | translate">
<ion-icon slot="icon-only" name="fa-times"></ion-icon>
</ion-button>
</ion-buttons>
</ion-toolbar>
</ion-header>
<ion-content>
<ion-list>
<ion-item class="ion-text-wrap">
<ion-label>
<h2><b>{{ 'core.login.faqcannotfindmysitequestion' | translate }}</b></h2>
</ion-label>
</ion-item>
<ion-item class="ion-text-wrap">
<ion-label>
<p>{{ 'core.login.faqcannotfindmysiteanswer' | translate }}</p>
</ion-label>
</ion-item>
<ion-item class="ion-text-wrap">
<ion-label>
<h2><b>{{ 'core.login.faqwhatisurlquestion' | translate }}</b></h2>
</ion-label>
</ion-item>
<ion-item class="ion-text-wrap core-login-faqwhatisurlanswer">
<ion-label>
<p [innerHTML]="'core.login.faqwhatisurlanswer' | translate: {$image: urlImageHtml}"></p>
</ion-label>
</ion-item>
<ion-item class="ion-text-wrap">
<ion-label>
<h2><b>{{ 'core.login.faqcannotconnectquestion' | translate }}</b></h2>
</ion-label>
</ion-item>
<ion-item class="ion-text-wrap">
<ion-label>
<p>{{ 'core.login.faqcannotconnectanswer' | translate }} {{ 'core.whoissiteadmin' | translate }}</p>
</ion-label>
</ion-item>
<ion-item class="ion-text-wrap">
<ion-label>
<h2><b>{{ 'core.login.faqsetupsitequestion' | translate }}</b></h2>
</ion-label>
</ion-item>
<ion-item class="ion-text-wrap">
<ion-label>
<p><core-format-text [text]="'core.login.faqsetupsiteanswer' | translate:{$link: setupLinkHtml}" [filter]="false">
</core-format-text></p>
</ion-label>
</ion-item>
<ion-item class="ion-text-wrap">
<ion-label>
<h2><b>{{ 'core.login.faqtestappquestion' | translate }}</b></h2>
</ion-label>
</ion-item>
<ion-item class="ion-text-wrap">
<ion-label>
<p>{{ 'core.login.faqtestappanswer' | translate }}</p>
</ion-label>
</ion-item>
<ion-item class="ion-text-wrap" *ngIf="canScanQR">
<ion-label>
<h2><b>{{ 'core.login.faqwhereisqrcode' | translate }}</b></h2>
</ion-label>
</ion-item>
<ion-item class="ion-text-wrap" *ngIf="canScanQR" class="core-login-faqwhereisqrcodeanswer">
<ion-label>
<p [innerHTML]="'core.login.faqwhereisqrcodeanswer' | translate: {$image: qrCodeImageHtml}"></p>
</ion-label>
</ion-item>
</ion-list>
</ion-content>

View File

@ -0,0 +1,9 @@
.core-login-faqwhatisurlanswer img {
max-height: 50px;
}
.core-login-faqwhereisqrcodeanswer img {
max-height: 220px;
margin-top: 5px;
margin-bottom: 5px;
}

View File

@ -0,0 +1,52 @@
// (C) Copyright 2015 Moodle Pty Ltd.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import { Component } from '@angular/core';
import { CoreUtils } from '@services/utils/utils';
import { ModalController, Translate } from '@singletons/core.singletons';
import { CoreLoginHelperProvider } from '@core/login/services/helper';
/**
* Component that displays help to connect to a site.
*/
@Component({
selector: 'core-login-site-help',
templateUrl: 'site-help.html',
styleUrls: ['site-help.scss'],
})
export class CoreLoginSiteHelpComponent {
urlImageHtml: string;
setupLinkHtml: string;
qrCodeImageHtml: string;
canScanQR: boolean;
constructor() {
this.canScanQR = CoreUtils.instance.canScanQR();
this.urlImageHtml = CoreLoginHelperProvider.FAQ_URL_IMAGE_HTML;
this.qrCodeImageHtml = CoreLoginHelperProvider.FAQ_QRCODE_IMAGE_HTML;
this.setupLinkHtml = '<a href="https://moodle.com/getstarted/" title="' +
Translate.instance.instant('core.login.faqsetupsitelinktitle') + '">https://moodle.com/getstarted/</a>';
}
/**
* Close help modal.
*/
closeHelp(): void {
ModalController.instance.dismiss();
}
}

View File

@ -0,0 +1,59 @@
<ion-header>
<ion-toolbar>
<ion-buttons slot="start">
<ion-button (click)="previous($event)" [attr.aria-label]="'core.back' | translate">
<ion-icon slot="icon-only" name="fa-arrow-left"></ion-icon>
</ion-button>
</ion-buttons>
<ion-buttons slot="end">
<ion-button (click)="skip($event)" [attr.aria-label]="'core.skip' | translate">
{{'core.skip' | translate}}
</ion-button>
</ion-buttons>
</ion-toolbar>
</ion-header>
<ion-content class="ion-padding">
<div>
<div class="ion-text-center ion-padding core-login-site-logo">
<img src="assets/img/login_logo.png" class="avatar-full login-logo" role="presentation">
</div>
<h3 class="core-login-onboarding-step">
{{'core.login.onboardingwelcome' | translate}}
</h3>
<div *ngIf="step == 0" class="core-login-onboarding-step">
<ion-button expand="block" (click)="skip($event)" class="ion-margin-bottom" color="light">
{{'core.login.onboardingimalearner' | translate}}
</ion-button>
<ion-button expand="block" (click)="next($event)" class="ion-margin-bottom" color="light">
{{'core.login.onboardingimaneducator' | translate}}
</ion-button>
</div>
<div *ngIf="step == 1" class="core-login-onboarding-step">
<p class="core-login-onboarding-text">
{{ 'core.login.onboardingtoconnect' | translate }}
</p>
<ion-button expand="block" (click)="skip($event)" class="ion-margin-bottom" color="light">
{{ 'core.login.onboardingialreadyhaveasite' | translate }}
</ion-button>
<ion-button expand="block" (click)="next($event)" class="ion-margin-bottom">
{{ 'core.login.onboardingineedasite' | translate }}
</ion-button>
</div>
<div *ngIf="step == 2" class="core-login-onboarding-step">
<ul class="core-login-onboarding-text">
<li><ion-icon name="far-check-circle"></ion-icon> {{ 'core.login.onboardingcreatemanagecourses' | translate }}</li>
<li><ion-icon name="far-check-circle"></ion-icon> {{ 'core.login.onboardingenrolmanagestudents' | translate }}</li>
<li><ion-icon name="far-check-circle"></ion-icon> {{ 'core.login.onboardingprovidefeedback' | translate }}</li>
</ul>
<ion-button expand="block" (click)="gotoWeb($event)" class="ion-margin-bottom">
{{ 'core.login.onboardinggetstarted' | translate }}
</ion-button>
</div>
</div>
</ion-content>

View File

@ -0,0 +1,28 @@
:host {
.core-login-onboarding-step {
padding: 10px 20px;
text-align: center;
/* @todo @include media-breakpoint-up(md) {
max-width: 80%;
}*/
margin: 0 auto;
p {
margin-bottom: 10px;
}
ul {
margin-bottom: 30px;
list-style-type: none;
// @todo @include text-align('start');
// @todo @include padding-horizontal(10px, null);
li {
margin-bottom: 10px;
}
}
.button-block {
margin-top: 20px;
}
}
}

View File

@ -0,0 +1,94 @@
// (C) Copyright 2015 Moodle Pty Ltd.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import { Component } from '@angular/core';
import { CoreConfig } from '@services/config';
import { CoreUtils } from '@services/utils/utils';
import { CoreLoginHelperProvider } from '@core/login/services/helper';
import { ModalController } from '@singletons/core.singletons';
/**
* Component that displays onboarding help regarding the CoreLoginSitePage.
*/
@Component({
selector: 'core-login-site-onboarding',
templateUrl: 'site-onboarding.html',
styleUrls: ['site-onboarding.scss', '../../login.scss'],
})
export class CoreLoginSiteOnboardingComponent {
step = 0;
/**
* Go to next step.
*
* @param e Click event.
*/
next(e: Event): void {
e.stopPropagation();
this.step++;
}
/**
* Go to previous step.
*
* @param e Click event.
*/
previous(e: Event): void {
e.stopPropagation();
if (this.step == 0) {
ModalController.instance.dismiss();
} else {
this.step--;
}
}
/**
* Close modal.
*
* @param e Click event.
*/
skip(e: Event): void {
e.stopPropagation();
this.saveOnboardingDone();
ModalController.instance.dismiss();
}
/**
* Create a site.
*
* @param e Click event.
*/
gotoWeb(e: Event): void {
e.stopPropagation();
this.saveOnboardingDone();
CoreUtils.instance.openInBrowser('https://moodle.com/getstarted/');
ModalController.instance.dismiss();
}
/**
* Saves the onboarding has finished.
*/
protected saveOnboardingDone(): void {
CoreConfig.instance.set(CoreLoginHelperProvider.ONBOARDING_DONE, 1);
}
}

View File

@ -36,7 +36,7 @@
"faqsetupsitequestion": "I want to set up my own Moodle site.",
"faqtestappanswer": "To test the app in a Moodle Demo Site, type \"teacher\" or \"student\" in the \"Your site\" field and click the \"Connect to your site\" button.",
"faqtestappquestion": "I just want to test the app, what can I do?",
"faqwhatisurlanswer": "<p>Every organisation has their own unique address or URL for their Moodle site. To find the address:</p><ol><li>Open a web browser and go to your Moodle site login page.</li><li>At the top of the page, in the address bar, you will see the URL of your Moodle site e.g. \"campus.example.edu\".<br>{{$image}}</li><li>Copy the address (do not copy the /login and what comes after), paste it into the Moodle app then click \"Connect to your site\"</li><li>Now you can log in to your site using your username and password.</li>",
"faqwhatisurlanswer": "<p>Every organisation has their own unique address or URL for their Moodle site. To find the address:</p><ol><li>Open a web browser and go to your Moodle site login page.</li><li>At the top of the page, in the address bar, you will see the URL of your Moodle site e.g. \"campus.example.edu\".<br>{{$image}}</li><li>Copy the address (do not copy the /login and what comes after), paste it into the Moodle app then click \"Connect to your site\"</li><li>Now you can log in to your site using your username and password.</li></ol>",
"faqwhatisurlquestion": "What is my site address? How can I find my site URL?",
"faqwhereisqrcode": "Where can I find the QR code?",
"faqwhereisqrcodeanswer": "<p>If your organisation has enabled it, you will find a QR code on the web site at the bottom of your user profile page.</p>{{$image}}",
@ -121,4 +121,4 @@
"webservicesnotenabled": "Your host site may not have enabled Web services. Please contact your administrator for help.",
"youcanstillconnectwithcredentials": "You can still connect to the site by entering your username and password.",
"yourenteredsite": "Connect to your site"
}
}

View File

@ -13,12 +13,32 @@
// limitations under the License.
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { IonicModule } from '@ionic/angular';
import { TranslateModule } from '@ngx-translate/core';
import { CoreComponentsModule } from '@components/components.module';
import { CoreDirectivesModule } from '@directives/directives.module';
import { CoreLoginRoutingModule } from './login-routing.module';
import { CoreLoginSiteHelpComponent } from './components/site-help/site-help';
import { CoreLoginSiteOnboardingComponent } from './components/site-onboarding/site-onboarding';
@NgModule({
imports: [
CoreLoginRoutingModule,
CommonModule,
IonicModule,
TranslateModule.forChild(),
CoreComponentsModule,
CoreDirectivesModule,
],
declarations: [
CoreLoginSiteHelpComponent,
CoreLoginSiteOnboardingComponent,
],
exports: [
CoreLoginSiteHelpComponent,
CoreLoginSiteOnboardingComponent,
],
declarations: [],
})
export class CoreLoginModule {}

View File

@ -15,6 +15,7 @@
import { Component, OnInit, ViewChild, ElementRef } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { FormBuilder, FormGroup, ValidatorFn, AbstractControl, ValidationErrors } from '@angular/forms';
import { NavController } from '@ionic/angular';
import { CoreApp } from '@services/app';
import { CoreConfig } from '@services/config';
@ -25,10 +26,11 @@ import { CoreLoginHelper, CoreLoginHelperProvider } from '@core/login/services/h
import { CoreSite } from '@classes/site';
import { CoreError } from '@classes/errors/error';
import { CoreConstants } from '@core/constants';
import { Translate } from '@singletons/core.singletons';
import { Translate, ModalController } from '@singletons/core.singletons';
import { CoreUrl } from '@singletons/url';
import { CoreUrlUtils } from '@services/utils/url';
import { NavController } from '@ionic/angular';
import { CoreLoginSiteHelpComponent } from '@core/login/components/site-help/site-help';
import { CoreLoginSiteOnboardingComponent } from '@core/login/components/site-onboarding/site-onboarding';
/**
* Page that displays a "splash screen" while the app is being initialized.
@ -215,15 +217,25 @@ export class CoreLoginSitePage implements OnInit {
/**
* Show a help modal.
*/
showHelp(): void {
// @todo
async showHelp(): Promise<void> {
const modal = await ModalController.instance.create({
component: CoreLoginSiteHelpComponent,
cssClass: 'core-modal-fullscreen',
});
await modal.present();
}
/**
* Show an onboarding modal.
*/
showOnboarding(): void {
// @todo
async showOnboarding(): Promise<void> {
const modal = await ModalController.instance.create({
component: CoreLoginSiteOnboardingComponent,
cssClass: 'core-modal-fullscreen',
});
await modal.present();
}
/**
@ -360,7 +372,6 @@ export class CoreLoginSitePage implements OnInit {
pageParams['logoUrl'] = foundSite.imageurl;
}
// @todo Navigate to credentials.
this.navCtrl.navigateForward('/login/credentials', {
queryParams: pageParams,
});

View File

@ -1,18 +1,325 @@
{
"accounts": "Accounts",
"add": "Add",
"agelocationverification": "Age and location verification",
"ago": "{{$a}} ago",
"all": "All",
"allgroups": "All groups",
"allparticipants": "All participants",
"answer": "Answer",
"answered": "Answered",
"areyousure": "Are you sure?",
"back": "Back",
"browser": "Browser",
"cancel": "Cancel",
"cannotconnect": "Cannot connect",
"cannotconnecttrouble": "We're having trouble connecting to your site.",
"cannotconnectverify": "<strong>Please check the address is correct.</strong>",
"cannotdownloadfiles": "File downloading is disabled. Please contact your site administrator.",
"cannotopeninapp": "This file may not work as expected on this device. Would you like to open it anyway?",
"cannotopeninappdownload": "This file may not work as expected on this device. Would you like to download it anyway?",
"captureaudio": "Record audio",
"capturedimage": "Taken picture.",
"captureimage": "Take picture",
"capturevideo": "Record video",
"category": "Category",
"choose": "Choose",
"choosedots": "Choose...",
"clearsearch": "Clear search",
"clearstoreddata": "Clear storage {{$a}}",
"clicktohideshow": "Click to expand or collapse",
"clicktoseefull": "Click to see full contents.",
"close": "Close",
"comments": "Comments",
"commentscount": "Comments ({{$a}})",
"completion-alt-auto-fail": "Completed: {{$a}} (did not achieve pass grade)",
"completion-alt-auto-n": "Not completed: {{$a}}",
"completion-alt-auto-n-override": "Not completed: {{$a.modname}} (set by {{$a.overrideuser}})",
"completion-alt-auto-pass": "Completed: {{$a}} (achieved pass grade)",
"completion-alt-auto-y": "Completed: {{$a}}",
"completion-alt-auto-y-override": "Completed: {{$a.modname}} (set by {{$a.overrideuser}})",
"completion-alt-manual-n": "Not completed: {{$a}}. Select to mark as complete.",
"completion-alt-manual-n-override": "Not completed: {{$a.modname}} (set by {{$a.overrideuser}}). Select to mark as complete.",
"completion-alt-manual-y": "Completed: {{$a}}. Select to mark as not complete.",
"completion-alt-manual-y-override": "Completed: {{$a.modname}} (set by {{$a.overrideuser}}). Select to mark as not complete.",
"confirmcanceledit": "Are you sure you want to leave this page? All changes will be lost.",
"confirmdeletefile": "Are you sure you want to delete this file?",
"confirmgotabroot": "Are you sure you want to go back to {{name}}?",
"confirmgotabrootdefault": "Are you sure you want to go to the initial page of the current tab?",
"confirmleaveunknownchanges": "Are you sure you want to leave this page? If you have unsaved changes they will be lost.",
"confirmloss": "Are you sure? All changes will be lost.",
"confirmopeninbrowser": "Do you want to open it in a web browser?",
"considereddigitalminor": "You are too young to create an account on this site.",
"content": "Content",
"contenteditingsynced": "The content you are editing has been synced.",
"continue": "Continue",
"copiedtoclipboard": "Text copied to clipboard",
"copytoclipboard": "Copy to clipboard",
"course": "Course",
"coursedetails": "Course details",
"coursenogroups": "You are not a member of any group of this course.",
"currentdevice": "Current device",
"datastoredoffline": "Data stored in the device because it couldn't be sent. It will be sent automatically later.",
"date": "Date",
"day": "day",
"days": "days",
"decsep": ".",
"defaultvalue": "Default ({{$a}})",
"delete": "Delete",
"deletedoffline": "Deleted offline",
"deleteduser": "Deleted user",
"deleting": "Deleting",
"description": "Description",
"desktop": "Desktop",
"dfdaymonthyear": "MM-DD-YYYY",
"dfdayweekmonth": "ddd, D MMM",
"dffulldate": "dddd, D MMMM YYYY h[:]mm A",
"dflastweekdate": "ddd",
"dfmediumdate": "LLL",
"dftimedate": "h[:]mm A",
"digitalminor": "Digital minor",
"digitalminor_desc": "Please ask your parent/guardian to contact:",
"discard": "Discard",
"dismiss": "Dismiss",
"displayoptions": "Display options",
"done": "Done",
"download": "Download",
"downloaded": "Downloaded",
"downloadfile": "Download file",
"downloading": "Downloading",
"edit": "Edit",
"emptysplit": "This page will appear blank if the left panel is empty or is loading.",
"error": "Error",
"errorchangecompletion": "An error occurred while changing the completion status. Please try again.",
"errordeletefile": "Error deleting the file. Please try again.",
"errordownloading": "Error downloading file.",
"errordownloadingsomefiles": "Error downloading files. Some files might be missing.",
"errorfileexistssamename": "A file with this name already exists.",
"errorinvalidform": "The form contains invalid data. Please check that all required fields are filled in and that the data is valid.",
"errorinvalidresponse": "Invalid response received. Please contact your site administrator if the error persists.",
"errorloadingcontent": "Error loading content.",
"errorofflinedisabled": "Offline browsing is disabled on your site. You need to be connected to the internet to use the app.",
"erroropenfilenoapp": "Error opening file: no app found to open this type of file.",
"erroropenfilenoextension": "Error opening file: the file doesn't have an extension.",
"erroropenpopup": "This activity is trying to open a popup. This is not supported in the app.",
"errorrenamefile": "Error renaming file. Please try again.",
"errorsomedatanotdownloaded": "If you downloaded this activity, please notice that some data isn't downloaded during the download process for performance and data usage reasons.",
"errorsync": "An error occurred while synchronising. Please try again.",
"errorsyncblocked": "This {{$a}} cannot be synchronised right now because of an ongoing process. Please try again later. If the problem persists, try restarting the app.",
"errorurlschemeinvalidscheme": "This URL is meant to be used in another app: {{$a}}.",
"errorurlschemeinvalidsite": "This site URL cannot be opened in this app.",
"explanationdigitalminor": "This information is required to determine if your age is over the digital age of consent. This is the age when an individual can consent to terms and conditions and their data being legally stored and processed.",
"favourites": "Starred",
"filename": "Filename",
"filenameexist": "File name already exists: {{$a}}",
"filenotfound": "File not found, sorry.",
"folder": "Folder",
"forcepasswordchangenotice": "You must change your password to proceed.",
"fulllistofcourses": "All courses",
"fullnameandsitename": "{{fullname}} ({{sitename}})",
"group": "Group",
"groupsseparate": "Separate groups",
"groupsvisible": "Visible groups",
"hasdatatosync": "This {{$a}} has offline data to be synchronised.",
"help": "Help",
"hide": "Hide",
"hour": "hour",
"hours": "hours",
"humanreadablesize": "{{size}} {{unit}}",
"image": "Image",
"imageviewer": "Image viewer",
"info": "Information",
"invalidformdata": "Incorrect form data",
"labelsep": ":",
"filter": "Filter",
"lastaccess": "Last access",
"lastdownloaded": "Last downloaded",
"lastmodified": "Last modified",
"lastsync": "Last synchronisation",
"layoutgrid": "Grid",
"list": "List",
"listsep": ",",
"loading": "Loading",
"loadmore": "Load more",
"location": "Location",
"lostconnection": "Your authentication token is invalid or has expired. You will have to reconnect to the site.",
"maxsizeandattachments": "Maximum file size: {{$a.size}}, maximum number of files: {{$a.attachments}}",
"min": "min",
"mins": "mins",
"misc": "Miscellaneous",
"mod_assign": "Assignment",
"mod_assignment": "Assignment 2.2 (Disabled)",
"mod_book": "Book",
"mod_chat": "Chat",
"mod_choice": "Choice",
"mod_data": "Database",
"mod_database": "Database",
"mod_external-tool": "External tool",
"mod_feedback": "Feedback",
"mod_file": "File",
"mod_folder": "Folder",
"mod_forum": "Forum",
"mod_glossary": "Glossary",
"mod_h5pactivity": "H5P",
"mod_ims": "IMS content package",
"mod_imscp": "IMS content package",
"mod_label": "Label",
"mod_lesson": "Lesson",
"mod_lti": "External tool",
"mod_page": "Page",
"mod_quiz": "Quiz",
"mod_resource": "File",
"mod_scorm": "SCORM package",
"mod_survey": "Survey",
"mod_url": "URL",
"mod_wiki": "Wiki",
"mod_workshop": "Workshop",
"moduleintro": "Description",
"more": "more",
"mygroups": "My groups",
"name": "Name",
"needhelp": "Need help?",
"networkerroriframemsg": "This content is not available offline. Please connect to the internet and try again.",
"networkerrormsg": "There was a problem connecting to the site. Please check your connection and try again.",
"never": "Never",
"next": "Next",
"no": "No",
"nocomments": "No comments",
"nograde": "No grade",
"none": "None",
"nopasswordchangeforced": "You cannot proceed without changing your password.",
"nopermissionerror": "Sorry, but you do not currently have permissions to do that",
"nopermissions": "Sorry, but you do not currently have permissions to do that ({{$a}}).",
"noresults": "No results",
"noselection": "No selection",
"notapplicable": "n/a",
"notavailable": "Not available",
"notenrolledprofile": "This profile is not available because this user is not enrolled in this course.",
"notice": "Notice",
"nooptionavailable": "No option available",
"notingroup": "Sorry, but you need to be part of a group to see this page.",
"notsent": "Not sent",
"now": "now",
"nummore": "{{$a}} more",
"numwords": "{{$a}} words",
"offline": "Offline",
"ok": "OK",
"online": "Online",
"openfile": "Open file",
"openfullimage": "Click here to display the full size image",
"openinbrowser": "Open in browser",
"openmodinbrowser": "Open {{$a}} in browser",
"othergroups": "Other groups",
"pagea": "Page {{$a}}",
"parentlanguage": "",
"paymentinstant": "Use the button below to pay and be enrolled within minutes!",
"percentagenumber": "{{$a}}%",
"phone": "Phone",
"pictureof": "Picture of {{$a}}",
"previous": "Previous",
"proceed": "Proceed",
"pulltorefresh": "Pull to refresh",
"qrscanner": "QR scanner",
"quotausage": "You have currently used {{$a.used}} of your {{$a.total}} limit.",
"redirectingtosite": "You will be redirected to the site.",
"refresh": "Refresh",
"remove": "Remove",
"removefiles": "Remove files {{$a}}",
"required": "Required",
"requireduserdatamissing": "This user lacks some required profile data. Please enter the data in your site and try again.<br>{{$a}}",
"resourcedisplayopen": "Open",
"resources": "Resources",
"restore": "Restore",
"restricted": "Restricted",
"retry": "Retry",
"save": "Save",
"savechanges": "Save changes",
"scanqr": "Scan QR code",
"search": "Search",
"searching": "Searching",
"searchresults": "Search results",
"sec": "sec",
"secs": "secs",
"seemoredetail": "Click here to see more detail",
"selectacategory": "Please select a category",
"selectacourse": "Select a course",
"selectagroup": "Select a group",
"send": "Send",
"sending": "Sending",
"serverconnection": "Error connecting to the server",
"show": "Show",
"showless": "Show less...",
"showmore": "Show more...",
"site": "Site",
"sitemaintenance": "The site is undergoing maintenance and is currently not available",
"sizeb": "bytes",
"sizegb": "GB",
"sizekb": "KB",
"sizemb": "MB",
"sizetb": "TB",
"skip": "Skip",
"sorry": "Sorry...",
"sort": "Sort",
"sortby": "Sort by",
"start": "Start",
"storingfiles": "Storing files",
"strftimedate": "%d %B %Y",
"strftimedatefullshort": "%d/%m/%y",
"strftimedateshort": "%d %B",
"strftimedatetime": "%d %B %Y, %I:%M %p",
"strftimedatetimeshort": "%d/%m/%y, %H:%M",
"strftimedaydate": "%A, %d %B %Y",
"strftimedaydatetime": "%A, %d %B %Y, %I:%M %p",
"strftimedayshort": "%A, %d %B",
"strftimedaytime": "%a, %H:%M",
"strftimemonthyear": "%B %Y",
"strftimerecent": "%d %b, %H:%M",
"strftimerecentfull": "%a, %d %b %Y, %I:%M %p",
"strftimetime": "%I:%M %p",
"strftimetime12": "%I:%M %p",
"strftimetime24": "%H:%M",
"submit": "Submit",
"success": "Success",
"tablet": "Tablet",
"teachers": "Teachers",
"thereisdatatosync": "There are offline {{$a}} to be synchronised.",
"thisdirection": "ltr",
"time": "Time",
"timesup": "Time is up!",
"today": "Today",
"tryagain": "Try again",
"twoparagraphs": "{{p1}}<br><br>{{p2}}",
"uhoh": "Uh oh!",
"unexpectederror": "Unexpected error. Please close and reopen the application then try again.",
"unicodenotsupported": "Some emojis are not supported on this site. Such characters will be removed when the message is sent.",
"unicodenotsupportedcleanerror": "Empty text was found when cleaning Unicode chars.",
"unknown": "Unknown",
"yes": "Yes"
"unlimited": "Unlimited",
"unzipping": "Unzipping",
"upgraderunning": "Site is being upgraded, please retry later.",
"updaterequired": "App update required",
"updaterequireddesc": "Please update your app to version {{$a}}",
"user": "User",
"userdeleted": "This user account has been deleted",
"userdetails": "User details",
"usernotfullysetup": "User not fully set-up",
"users": "Users",
"view": "View",
"viewcode": "View code",
"vieweditor": "View editor",
"viewembeddedcontent": "View embedded content",
"viewprofile": "View profile",
"warningofflinedatadeleted": "Offline data from {{component}} '{{name}}' has been deleted. {{error}}",
"whatisyourage": "What is your age?",
"wheredoyoulive": "In which country do you live?",
"whoissiteadmin": "\"Site Administrators\" are the people who manage the Moodle at your school/university/company or learning organisation. If you don't know how to contact them, please contact your teachers/trainers.",
"whoops": "Oops!",
"whyisthishappening": "Why is this happening?",
"whyisthisrequired": "Why is this required?",
"wsfunctionnotavailable": "The web service function is not available.",
"year": "year",
"years": "years",
"yes": "Yes",
"youreoffline": "You are offline",
"youreonline": "You are back online"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -300,12 +300,65 @@
"assets.mimetypes.text/rtf": "RTF document",
"assets.mimetypes.text/vtt": "Web Video Text Track",
"assets.mimetypes.video": "Video file ({{$a.EXT}})",
"core.accounts": "Accounts",
"core.add": "Add",
"core.agelocationverification": "Age and location verification",
"core.ago": "{{$a}} ago",
"core.all": "All",
"core.allgroups": "All groups",
"core.allparticipants": "All participants",
"core.answer": "Answer",
"core.answered": "Answered",
"core.areyousure": "Are you sure?",
"core.back": "Back",
"core.browser": "Browser",
"core.cancel": "Cancel",
"core.cannotconnect": "Cannot connect",
"core.cannotconnecttrouble": "We're having trouble connecting to your site.",
"core.cannotconnectverify": "<strong>Please check the address is correct.</strong>",
"core.cannotdownloadfiles": "File downloading is disabled. Please contact your site administrator.",
"core.cannotopeninapp": "This file may not work as expected on this device. Would you like to open it anyway?",
"core.cannotopeninappdownload": "This file may not work as expected on this device. Would you like to download it anyway?",
"core.captureaudio": "Record audio",
"core.capturedimage": "Taken picture.",
"core.captureimage": "Take picture",
"core.capturevideo": "Record video",
"core.category": "Category",
"core.choose": "Choose",
"core.choosedots": "Choose...",
"core.clearsearch": "Clear search",
"core.clearstoreddata": "Clear storage {{$a}}",
"core.clicktohideshow": "Click to expand or collapse",
"core.clicktoseefull": "Click to see full contents.",
"core.close": "Close",
"core.comments": "Comments",
"core.commentscount": "Comments ({{$a}})",
"core.completion-alt-auto-fail": "Completed: {{$a}} (did not achieve pass grade)",
"core.completion-alt-auto-n": "Not completed: {{$a}}",
"core.completion-alt-auto-n-override": "Not completed: {{$a.modname}} (set by {{$a.overrideuser}})",
"core.completion-alt-auto-pass": "Completed: {{$a}} (achieved pass grade)",
"core.completion-alt-auto-y": "Completed: {{$a}}",
"core.completion-alt-auto-y-override": "Completed: {{$a.modname}} (set by {{$a.overrideuser}})",
"core.completion-alt-manual-n": "Not completed: {{$a}}. Select to mark as complete.",
"core.completion-alt-manual-n-override": "Not completed: {{$a.modname}} (set by {{$a.overrideuser}}). Select to mark as complete.",
"core.completion-alt-manual-y": "Completed: {{$a}}. Select to mark as not complete.",
"core.completion-alt-manual-y-override": "Completed: {{$a.modname}} (set by {{$a.overrideuser}}). Select to mark as not complete.",
"core.confirmcanceledit": "Are you sure you want to leave this page? All changes will be lost.",
"core.confirmdeletefile": "Are you sure you want to delete this file?",
"core.confirmgotabroot": "Are you sure you want to go back to {{name}}?",
"core.confirmgotabrootdefault": "Are you sure you want to go to the initial page of the current tab?",
"core.confirmleaveunknownchanges": "Are you sure you want to leave this page? If you have unsaved changes they will be lost.",
"core.confirmloss": "Are you sure? All changes will be lost.",
"core.confirmopeninbrowser": "Do you want to open it in a web browser?",
"core.considereddigitalminor": "You are too young to create an account on this site.",
"core.content": "Content",
"core.contenteditingsynced": "The content you are editing has been synced.",
"core.continue": "Continue",
"core.copiedtoclipboard": "Text copied to clipboard",
"core.copytoclipboard": "Copy to clipboard",
"core.course": "Course",
"core.coursedetails": "Course details",
"core.coursenogroups": "You are not a member of any group of this course.",
"core.courses.addtofavourites": "Star this course",
"core.courses.allowguests": "This course allows guest users to enter",
"core.courses.availablecourses": "Available courses",
@ -343,7 +396,90 @@
"core.courses.sendpaymentbutton": "Send payment via PayPal",
"core.courses.show": "Restore to view",
"core.courses.totalcoursesearchresults": "Total courses: {{$a}}",
"core.currentdevice": "Current device",
"core.datastoredoffline": "Data stored in the device because it couldn't be sent. It will be sent automatically later.",
"core.date": "Date",
"core.day": "day",
"core.days": "days",
"core.decsep": ".",
"core.defaultvalue": "Default ({{$a}})",
"core.delete": "Delete",
"core.deletedoffline": "Deleted offline",
"core.deleteduser": "Deleted user",
"core.deleting": "Deleting",
"core.description": "Description",
"core.desktop": "Desktop",
"core.dfdaymonthyear": "MM-DD-YYYY",
"core.dfdayweekmonth": "ddd, D MMM",
"core.dffulldate": "dddd, D MMMM YYYY h[:]mm A",
"core.dflastweekdate": "ddd",
"core.dfmediumdate": "LLL",
"core.dftimedate": "h[:]mm A",
"core.digitalminor": "Digital minor",
"core.digitalminor_desc": "Please ask your parent/guardian to contact:",
"core.discard": "Discard",
"core.dismiss": "Dismiss",
"core.displayoptions": "Display options",
"core.done": "Done",
"core.download": "Download",
"core.downloaded": "Downloaded",
"core.downloadfile": "Download file",
"core.downloading": "Downloading",
"core.edit": "Edit",
"core.emptysplit": "This page will appear blank if the left panel is empty or is loading.",
"core.error": "Error",
"core.errorchangecompletion": "An error occurred while changing the completion status. Please try again.",
"core.errordeletefile": "Error deleting the file. Please try again.",
"core.errordownloading": "Error downloading file.",
"core.errordownloadingsomefiles": "Error downloading files. Some files might be missing.",
"core.errorfileexistssamename": "A file with this name already exists.",
"core.errorinvalidform": "The form contains invalid data. Please check that all required fields are filled in and that the data is valid.",
"core.errorinvalidresponse": "Invalid response received. Please contact your site administrator if the error persists.",
"core.errorloadingcontent": "Error loading content.",
"core.errorofflinedisabled": "Offline browsing is disabled on your site. You need to be connected to the internet to use the app.",
"core.erroropenfilenoapp": "Error opening file: no app found to open this type of file.",
"core.erroropenfilenoextension": "Error opening file: the file doesn't have an extension.",
"core.erroropenpopup": "This activity is trying to open a popup. This is not supported in the app.",
"core.errorrenamefile": "Error renaming file. Please try again.",
"core.errorsomedatanotdownloaded": "If you downloaded this activity, please notice that some data isn't downloaded during the download process for performance and data usage reasons.",
"core.errorsync": "An error occurred while synchronising. Please try again.",
"core.errorsyncblocked": "This {{$a}} cannot be synchronised right now because of an ongoing process. Please try again later. If the problem persists, try restarting the app.",
"core.errorurlschemeinvalidscheme": "This URL is meant to be used in another app: {{$a}}.",
"core.errorurlschemeinvalidsite": "This site URL cannot be opened in this app.",
"core.explanationdigitalminor": "This information is required to determine if your age is over the digital age of consent. This is the age when an individual can consent to terms and conditions and their data being legally stored and processed.",
"core.favourites": "Starred",
"core.filename": "Filename",
"core.filenameexist": "File name already exists: {{$a}}",
"core.filenotfound": "File not found, sorry.",
"core.filter": "Filter",
"core.folder": "Folder",
"core.forcepasswordchangenotice": "You must change your password to proceed.",
"core.fulllistofcourses": "All courses",
"core.fullnameandsitename": "{{fullname}} ({{sitename}})",
"core.group": "Group",
"core.groupsseparate": "Separate groups",
"core.groupsvisible": "Visible groups",
"core.hasdatatosync": "This {{$a}} has offline data to be synchronised.",
"core.help": "Help",
"core.hide": "Hide",
"core.hour": "hour",
"core.hours": "hours",
"core.humanreadablesize": "{{size}} {{unit}}",
"core.image": "Image",
"core.imageviewer": "Image viewer",
"core.info": "Information",
"core.invalidformdata": "Incorrect form data",
"core.labelsep": ":",
"core.lastaccess": "Last access",
"core.lastdownloaded": "Last downloaded",
"core.lastmodified": "Last modified",
"core.lastsync": "Last synchronisation",
"core.layoutgrid": "Grid",
"core.list": "List",
"core.listsep": ",",
"core.loading": "Loading",
"core.loadmore": "Load more",
"core.location": "Location",
"core.login.auth_email": "Email-based self-registration",
"core.login.authenticating": "Authenticating",
"core.login.cancel": "Cancel",
@ -381,7 +517,7 @@
"core.login.faqsetupsitequestion": "I want to set up my own Moodle site.",
"core.login.faqtestappanswer": "To test the app in a Moodle Demo Site, type \"teacher\" or \"student\" in the \"Your site\" field and click the \"Connect to your site\" button.",
"core.login.faqtestappquestion": "I just want to test the app, what can I do?",
"core.login.faqwhatisurlanswer": "<p>Every organisation has their own unique address or URL for their Moodle site. To find the address:</p><ol><li>Open a web browser and go to your Moodle site login page.</li><li>At the top of the page, in the address bar, you will see the URL of your Moodle site e.g. \"campus.example.edu\".<br>{{$image}}</li><li>Copy the address (do not copy the /login and what comes after), paste it into the Moodle app then click \"Connect to your site\"</li><li>Now you can log in to your site using your username and password.</li>",
"core.login.faqwhatisurlanswer": "<p>Every organisation has their own unique address or URL for their Moodle site. To find the address:</p><ol><li>Open a web browser and go to your Moodle site login page.</li><li>At the top of the page, in the address bar, you will see the URL of your Moodle site e.g. \"campus.example.edu\".<br>{{$image}}</li><li>Copy the address (do not copy the /login and what comes after), paste it into the Moodle app then click \"Connect to your site\"</li><li>Now you can log in to your site using your username and password.</li></ol>",
"core.login.faqwhatisurlquestion": "What is my site address? How can I find my site URL?",
"core.login.faqwhereisqrcode": "Where can I find the QR code?",
"core.login.faqwhereisqrcodeanswer": "<p>If your organisation has enabled it, you will find a QR code on the web site at the bottom of your user profile page.</p>{{$image}}",
@ -466,17 +602,116 @@
"core.login.webservicesnotenabled": "Your host site may not have enabled Web services. Please contact your administrator for help.",
"core.login.youcanstillconnectwithcredentials": "You can still connect to the site by entering your username and password.",
"core.login.yourenteredsite": "Connect to your site",
"core.lostconnection": "Your authentication token is invalid or has expired. You will have to reconnect to the site.",
"core.mainmenu.changesite": "Change site",
"core.mainmenu.help": "Help",
"core.mainmenu.home": "Home",
"core.mainmenu.logout": "Log out",
"core.mainmenu.website": "Website",
"core.maxsizeandattachments": "Maximum file size: {{$a.size}}, maximum number of files: {{$a.attachments}}",
"core.min": "min",
"core.mins": "mins",
"core.misc": "Miscellaneous",
"core.mod_assign": "Assignment",
"core.mod_assignment": "Assignment 2.2 (Disabled)",
"core.mod_book": "Book",
"core.mod_chat": "Chat",
"core.mod_choice": "Choice",
"core.mod_data": "Database",
"core.mod_database": "Database",
"core.mod_external-tool": "External tool",
"core.mod_feedback": "Feedback",
"core.mod_file": "File",
"core.mod_folder": "Folder",
"core.mod_forum": "Forum",
"core.mod_glossary": "Glossary",
"core.mod_h5pactivity": "H5P",
"core.mod_ims": "IMS content package",
"core.mod_imscp": "IMS content package",
"core.mod_label": "Label",
"core.mod_lesson": "Lesson",
"core.mod_lti": "External tool",
"core.mod_page": "Page",
"core.mod_quiz": "Quiz",
"core.mod_resource": "File",
"core.mod_scorm": "SCORM package",
"core.mod_survey": "Survey",
"core.mod_url": "URL",
"core.mod_wiki": "Wiki",
"core.mod_workshop": "Workshop",
"core.moduleintro": "Description",
"core.more": "more",
"core.mygroups": "My groups",
"core.name": "Name",
"core.needhelp": "Need help?",
"core.networkerroriframemsg": "This content is not available offline. Please connect to the internet and try again.",
"core.networkerrormsg": "There was a problem connecting to the site. Please check your connection and try again.",
"core.never": "Never",
"core.next": "Next",
"core.no": "No",
"core.nocomments": "No comments",
"core.nograde": "No grade",
"core.none": "None",
"core.nooptionavailable": "No option available",
"core.nopasswordchangeforced": "You cannot proceed without changing your password.",
"core.nopermissionerror": "Sorry, but you do not currently have permissions to do that",
"core.nopermissions": "Sorry, but you do not currently have permissions to do that ({{$a}}).",
"core.noresults": "No results",
"core.noselection": "No selection",
"core.notapplicable": "n/a",
"core.notavailable": "Not available",
"core.notenrolledprofile": "This profile is not available because this user is not enrolled in this course.",
"core.notice": "Notice",
"core.notingroup": "Sorry, but you need to be part of a group to see this page.",
"core.notsent": "Not sent",
"core.now": "now",
"core.nummore": "{{$a}} more",
"core.numwords": "{{$a}} words",
"core.offline": "Offline",
"core.ok": "OK",
"core.online": "Online",
"core.openfile": "Open file",
"core.openfullimage": "Click here to display the full size image",
"core.openinbrowser": "Open in browser",
"core.openmodinbrowser": "Open {{$a}} in browser",
"core.othergroups": "Other groups",
"core.pagea": "Page {{$a}}",
"core.parentlanguage": "",
"core.paymentinstant": "Use the button below to pay and be enrolled within minutes!",
"core.percentagenumber": "{{$a}}%",
"core.phone": "Phone",
"core.pictureof": "Picture of {{$a}}",
"core.previous": "Previous",
"core.proceed": "Proceed",
"core.pulltorefresh": "Pull to refresh",
"core.qrscanner": "QR scanner",
"core.quotausage": "You have currently used {{$a.used}} of your {{$a.total}} limit.",
"core.redirectingtosite": "You will be redirected to the site.",
"core.refresh": "Refresh",
"core.remove": "Remove",
"core.removefiles": "Remove files {{$a}}",
"core.required": "Required",
"core.requireduserdatamissing": "This user lacks some required profile data. Please enter the data in your site and try again.<br>{{$a}}",
"core.resourcedisplayopen": "Open",
"core.resources": "Resources",
"core.restore": "Restore",
"core.restricted": "Restricted",
"core.retry": "Retry",
"core.save": "Save",
"core.savechanges": "Save changes",
"core.scanqr": "Scan QR code",
"core.search": "Search",
"core.searching": "Searching",
"core.searchresults": "Search results",
"core.sec": "sec",
"core.secs": "secs",
"core.seemoredetail": "Click here to see more detail",
"core.selectacategory": "Please select a category",
"core.selectacourse": "Select a course",
"core.selectagroup": "Select a group",
"core.send": "Send",
"core.sending": "Sending",
"core.serverconnection": "Error connecting to the server",
"core.settings.about": "About",
"core.settings.appsettings": "App settings",
"core.settings.appversion": "App version",
@ -548,7 +783,79 @@
"core.settings.syncsettings": "Synchronisation settings",
"core.settings.total": "Total",
"core.settings.wificonnection": "Wi-Fi connection",
"core.show": "Show",
"core.showless": "Show less...",
"core.showmore": "Show more...",
"core.site": "Site",
"core.sitemaintenance": "The site is undergoing maintenance and is currently not available",
"core.sizeb": "bytes",
"core.sizegb": "GB",
"core.sizekb": "KB",
"core.sizemb": "MB",
"core.sizetb": "TB",
"core.skip": "Skip",
"core.sorry": "Sorry...",
"core.sort": "Sort",
"core.sortby": "Sort by",
"core.start": "Start",
"core.storingfiles": "Storing files",
"core.strftimedate": "%d %B %Y",
"core.strftimedatefullshort": "%d/%m/%y",
"core.strftimedateshort": "%d %B",
"core.strftimedatetime": "%d %B %Y, %I:%M %p",
"core.strftimedatetimeshort": "%d/%m/%y, %H:%M",
"core.strftimedaydate": "%A, %d %B %Y",
"core.strftimedaydatetime": "%A, %d %B %Y, %I:%M %p",
"core.strftimedayshort": "%A, %d %B",
"core.strftimedaytime": "%a, %H:%M",
"core.strftimemonthyear": "%B %Y",
"core.strftimerecent": "%d %b, %H:%M",
"core.strftimerecentfull": "%a, %d %b %Y, %I:%M %p",
"core.strftimetime": "%I:%M %p",
"core.strftimetime12": "%I:%M %p",
"core.strftimetime24": "%H:%M",
"core.submit": "Submit",
"core.success": "Success",
"core.tablet": "Tablet",
"core.teachers": "Teachers",
"core.thereisdatatosync": "There are offline {{$a}} to be synchronised.",
"core.thisdirection": "ltr",
"core.time": "Time",
"core.timesup": "Time is up!",
"core.today": "Today",
"core.tryagain": "Try again",
"core.twoparagraphs": "{{p1}}<br><br>{{p2}}",
"core.uhoh": "Uh oh!",
"core.unexpectederror": "Unexpected error. Please close and reopen the application then try again.",
"core.unicodenotsupported": "Some emojis are not supported on this site. Such characters will be removed when the message is sent.",
"core.unicodenotsupportedcleanerror": "Empty text was found when cleaning Unicode chars.",
"core.unknown": "Unknown",
"core.yes": "Yes"
"core.unlimited": "Unlimited",
"core.unzipping": "Unzipping",
"core.updaterequired": "App update required",
"core.updaterequireddesc": "Please update your app to version {{$a}}",
"core.upgraderunning": "Site is being upgraded, please retry later.",
"core.user": "User",
"core.userdeleted": "This user account has been deleted",
"core.userdetails": "User details",
"core.usernotfullysetup": "User not fully set-up",
"core.users": "Users",
"core.view": "View",
"core.viewcode": "View code",
"core.vieweditor": "View editor",
"core.viewembeddedcontent": "View embedded content",
"core.viewprofile": "View profile",
"core.warningofflinedatadeleted": "Offline data from {{component}} '{{name}}' has been deleted. {{error}}",
"core.whatisyourage": "What is your age?",
"core.wheredoyoulive": "In which country do you live?",
"core.whoissiteadmin": "\"Site Administrators\" are the people who manage the Moodle at your school/university/company or learning organisation. If you don't know how to contact them, please contact your teachers/trainers.",
"core.whoops": "Oops!",
"core.whyisthishappening": "Why is this happening?",
"core.whyisthisrequired": "Why is this required?",
"core.wsfunctionnotavailable": "The web service function is not available.",
"core.year": "year",
"core.years": "years",
"core.yes": "Yes",
"core.youreoffline": "You are offline",
"core.youreonline": "You are back online"
}

View File

@ -70,3 +70,16 @@ ion-item-divider {
ion-list.list-md {
padding-bottom: 0;
}
// Modals.
.core-modal-fullscreen .modal-wrapper {
position: absolute;
// @todo @include position(0 !important, null, null, 0 !important);
display: block;
width: 100% !important;
height: 100% !important;
}
.core-modal-force-on-top {
z-index: 100000 !important;
}