Merge pull request #1541 from dpalou/MOBILE-2601

MOBILE-2601 calendar: Display location in calendar events
main
Juan Leyva 2018-09-28 12:35:39 +02:00 committed by GitHub
commit e26d2b0a04
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 39 additions and 14 deletions

View File

@ -9,7 +9,7 @@
</ion-refresher>
<core-loading [hideUntil]="eventLoaded">
<ion-card>
<ion-card-content>
<ion-card-content *ngIf="event">
<ion-card-title text-wrap>
<core-icon *ngIf="event.icon && !event.moduleIcon" [name]="event.icon" item-start></core-icon>
<core-format-text [text]="event.name"></core-format-text>
@ -33,11 +33,19 @@
<ion-item text-wrap *ngIf="event.moduleIcon">
<img *ngIf="event.moduleIcon" src="{{event.moduleIcon}}" item-start alt="" role="presentation" class="core-module-icon"> {{event.moduleName}}
</ion-item>
<ion-item>
<p text-wrap *ngIf="event.description">
<ion-item text-wrap *ngIf="event.description">
<p>
<core-format-text [text]="event.description"></core-format-text>
</p>
</ion-item>
<ion-item text-wrap *ngIf="event.location">
<h2>{{ 'core.location' | translate}}</h2>
<p>
<a [href]="event.encodedLocation" core-link auto-login="no">
<core-format-text [text]="event.location"></core-format-text>
</a>
</p>
</ion-item>
<ion-item *ngIf="moduleUrl">
<a ion-button block color="primary" [href]="moduleUrl" core-link capture="true">{{ 'addon.calendar.gotoactivity' | translate }}</a>
</ion-item>

View File

@ -166,6 +166,12 @@ export class AddonCalendarEventPage {
this.categoryPath = event.category.nestedname;
}
if (event.location) {
// Build a link to open the address in maps.
event.location = this.textUtils.decodeHTML(event.location);
event.encodedLocation = this.textUtils.buildAddressURL(event.location);
}
return Promise.all(promises);
}).catch((error) => {
this.domUtils.showErrorModalDefault(error, 'addon.calendar.errorloadevent', true);

View File

@ -13,13 +13,13 @@
// limitations under the License.
import { Component } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';
import { IonicPage, NavParams, Platform } from 'ionic-angular';
import { IonicPage, NavParams } from 'ionic-angular';
import { CoreUserProvider } from '../../providers/user';
import { CoreUserHelperProvider } from '../../providers/helper';
import { CoreDomUtilsProvider } from '@providers/utils/dom';
import { CoreEventsProvider } from '@providers/events';
import { CoreSitesProvider } from '@providers/sites';
import { CoreTextUtilsProvider } from '@providers/utils/text';
/**
* Page that displays an user about page.
@ -37,17 +37,15 @@ export class CoreUserAboutPage {
userLoaded = false;
hasContact = false;
hasDetails = false;
isAndroid = false;
user: any = {};
title: string;
constructor(navParams: NavParams, private userProvider: CoreUserProvider, private userHelper: CoreUserHelperProvider,
private domUtils: CoreDomUtilsProvider, private eventsProvider: CoreEventsProvider, private sanitizer: DomSanitizer,
private sitesProvider: CoreSitesProvider, private platform: Platform) {
private domUtils: CoreDomUtilsProvider, private eventsProvider: CoreEventsProvider,
private sitesProvider: CoreSitesProvider, private textUtils: CoreTextUtilsProvider) {
this.userId = navParams.get('userId');
this.courseId = navParams.get('courseId');
this.isAndroid = this.platform.is('android');
this.siteId = this.sitesProvider.getCurrentSite().getId();
}
@ -69,8 +67,7 @@ export class CoreUserAboutPage {
if (user.address) {
user.address = this.userHelper.formatAddress(user.address, user.city, user.country);
user.encodedAddress = this.sanitizer.bypassSecurityTrustUrl(
(this.isAndroid ? 'geo:0,0?q=' : 'http://maps.google.com?q=') + encodeURIComponent(user.address));
user.encodedAddress = this.textUtils.buildAddressURL(user.address);
}
this.hasContact = user.email || user.phone1 || user.phone2 || user.city || user.country || user.address;

View File

@ -117,6 +117,7 @@
"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 size for new files: {{$a.size}}, maximum attachments: {{$a.attachments}}",
"min" : "min",

View File

@ -13,7 +13,8 @@
// limitations under the License.
import { Injectable } from '@angular/core';
import { ModalController } from 'ionic-angular';
import { DomSanitizer, SafeUrl } from '@angular/platform-browser';
import { ModalController, Platform } from 'ionic-angular';
import { TranslateService } from '@ngx-translate/core';
import { CoreLangProvider } from '../lang';
@ -70,7 +71,19 @@ export class CoreTextUtilsProvider {
protected template = document.createElement('template'); // A template element to convert HTML to element.
constructor(private translate: TranslateService, private langProvider: CoreLangProvider, private modalCtrl: ModalController) { }
constructor(private translate: TranslateService, private langProvider: CoreLangProvider, private modalCtrl: ModalController,
private sanitizer: DomSanitizer, private platform: Platform) { }
/**
* Given an address as a string, return a URL to open the address in maps.
*
* @param {string} address The address.
* @return {SafeUrl} URL to view the address.
*/
buildAddressURL(address: string): SafeUrl {
return this.sanitizer.bypassSecurityTrustUrl((this.platform.is('android') ? 'geo:0,0?q=' : 'http://maps.google.com?q=') +
encodeURIComponent(address));
}
/**
* Given a list of sentences, build a message with all of them wrapped in <p>.
@ -231,7 +244,7 @@ export class CoreTextUtilsProvider {
.replace(/&lt;/g, '<')
.replace(/&gt;/g, '>')
.replace(/&quot;/g, '"')
.replace(/&#039;/g, '')
.replace(/&#039;/g, '\'')
.replace(/&nbsp;/g, ' ');
}