forked from CIT/Vmeda.Online
		
	MOBILE-2675 iframe: Open site content in the app in offline
This commit is contained in:
		
							parent
							
								
									0327c092e0
								
							
						
					
					
						commit
						8a4563aa28
					
				| @ -1631,6 +1631,7 @@ | |||||||
|   "core.view": "moodle", |   "core.view": "moodle", | ||||||
|   "core.viewcode": "local_moodlemobileapp", |   "core.viewcode": "local_moodlemobileapp", | ||||||
|   "core.vieweditor": "local_moodlemobileapp", |   "core.vieweditor": "local_moodlemobileapp", | ||||||
|  |   "core.viewembeddedcontent": "local_moodlemobileapp", | ||||||
|   "core.viewprofile": "moodle", |   "core.viewprofile": "moodle", | ||||||
|   "core.warningofflinedatadeleted": "local_moodlemobileapp", |   "core.warningofflinedatadeleted": "local_moodlemobileapp", | ||||||
|   "core.whatisyourage": "moodle", |   "core.whatisyourage": "moodle", | ||||||
|  | |||||||
| @ -1630,6 +1630,7 @@ | |||||||
|     "core.view": "View", |     "core.view": "View", | ||||||
|     "core.viewcode": "View code", |     "core.viewcode": "View code", | ||||||
|     "core.vieweditor": "View editor", |     "core.vieweditor": "View editor", | ||||||
|  |     "core.viewembeddedcontent": "View embedded content", | ||||||
|     "core.viewprofile": "View profile", |     "core.viewprofile": "View profile", | ||||||
|     "core.warningofflinedatadeleted": "Offline data from {{component}} '{{name}}' has been deleted. {{error}}", |     "core.warningofflinedatadeleted": "Offline data from {{component}} '{{name}}' has been deleted. {{error}}", | ||||||
|     "core.whatisyourage": "What is your age?", |     "core.whatisyourage": "What is your age?", | ||||||
|  | |||||||
| @ -240,6 +240,7 @@ | |||||||
|     "view": "View", |     "view": "View", | ||||||
|     "viewcode": "View code", |     "viewcode": "View code", | ||||||
|     "vieweditor": "View editor", |     "vieweditor": "View editor", | ||||||
|  |     "viewembeddedcontent": "View embedded content", | ||||||
|     "viewprofile": "View profile", |     "viewprofile": "View profile", | ||||||
|     "warningofflinedatadeleted": "Offline data from {{component}} '{{name}}' has been deleted. {{error}}", |     "warningofflinedatadeleted": "Offline data from {{component}} '{{name}}' has been deleted. {{error}}", | ||||||
|     "whatisyourage": "What is your age?", |     "whatisyourage": "What is your age?", | ||||||
|  | |||||||
| @ -13,7 +13,7 @@ | |||||||
| // limitations under the License.
 | // limitations under the License.
 | ||||||
| 
 | 
 | ||||||
| import { Injectable, NgZone } from '@angular/core'; | import { Injectable, NgZone } from '@angular/core'; | ||||||
| import { Platform } from 'ionic-angular'; | import { Config, Platform } from 'ionic-angular'; | ||||||
| import { TranslateService } from '@ngx-translate/core'; | import { TranslateService } from '@ngx-translate/core'; | ||||||
| import { Network } from '@ionic-native/network'; | import { Network } from '@ionic-native/network'; | ||||||
| import { CoreAppProvider } from '../app'; | import { CoreAppProvider } from '../app'; | ||||||
| @ -24,6 +24,7 @@ import { CoreDomUtilsProvider } from './dom'; | |||||||
| import { CoreTextUtilsProvider } from './text'; | import { CoreTextUtilsProvider } from './text'; | ||||||
| import { CoreUrlUtilsProvider } from './url'; | import { CoreUrlUtilsProvider } from './url'; | ||||||
| import { CoreUtilsProvider } from './utils'; | import { CoreUtilsProvider } from './utils'; | ||||||
|  | import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper'; | ||||||
| 
 | 
 | ||||||
| /* | /* | ||||||
|  * "Utils" service with helper functions for iframes, embed and similar. |  * "Utils" service with helper functions for iframes, embed and similar. | ||||||
| @ -37,7 +38,8 @@ export class CoreIframeUtilsProvider { | |||||||
|     constructor(logger: CoreLoggerProvider, private fileProvider: CoreFileProvider, private sitesProvider: CoreSitesProvider, |     constructor(logger: CoreLoggerProvider, private fileProvider: CoreFileProvider, private sitesProvider: CoreSitesProvider, | ||||||
|             private urlUtils: CoreUrlUtilsProvider, private textUtils: CoreTextUtilsProvider, private utils: CoreUtilsProvider, |             private urlUtils: CoreUrlUtilsProvider, private textUtils: CoreTextUtilsProvider, private utils: CoreUtilsProvider, | ||||||
|             private domUtils: CoreDomUtilsProvider, private platform: Platform, private appProvider: CoreAppProvider, |             private domUtils: CoreDomUtilsProvider, private platform: Platform, private appProvider: CoreAppProvider, | ||||||
|             private translate: TranslateService, private network: Network, private zone: NgZone) { |             private translate: TranslateService, private network: Network, private zone: NgZone, private config: Config, | ||||||
|  |             private contentLinksHelper: CoreContentLinksHelperProvider) { | ||||||
|         this.logger = logger.getInstance('CoreUtilsProvider'); |         this.logger = logger.getInstance('CoreUtilsProvider'); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -57,16 +59,51 @@ export class CoreIframeUtilsProvider { | |||||||
|                 return true; |                 return true; | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             // The frame has an online URL but the app is offline. Show a warning.
 |             // The frame has an online URL but the app is offline. Show a warning, or a link if the URL can be opened in the app.
 | ||||||
|             const div = document.createElement('div'); |             const div = document.createElement('div'); | ||||||
| 
 | 
 | ||||||
|             div.setAttribute('text-center', ''); |             div.setAttribute('text-center', ''); | ||||||
|             div.setAttribute('padding', ''); |             div.setAttribute('padding', ''); | ||||||
|             div.classList.add('core-iframe-offline-warning'); |             div.classList.add('core-iframe-offline-warning'); | ||||||
|             div.innerHTML = (isSubframe ?  '' : this.domUtils.getConnectionWarningIconHtml()) + |  | ||||||
|                     '<p>' + this.translate.instant('core.networkerroriframemsg') + '</p>'; |  | ||||||
| 
 | 
 | ||||||
|             element.parentElement.insertBefore(div, element); |             const site = this.sitesProvider.getCurrentSite(); | ||||||
|  |             const username = site ? site.getInfo().username : undefined; | ||||||
|  |             this.contentLinksHelper.canHandleLink(src, undefined, username).then((canHandleLink) => { | ||||||
|  |                 if (canHandleLink) { | ||||||
|  |                     const link = document.createElement('a'); | ||||||
|  | 
 | ||||||
|  |                     if (isSubframe) { | ||||||
|  |                         // Ionic styles are not available in subframes, adding some minimal inline styles.
 | ||||||
|  |                         link.style.display = 'block'; | ||||||
|  |                         link.style.padding = '1em'; | ||||||
|  |                         link.style.fontWeight = '500'; | ||||||
|  |                         link.style.textAlign = 'center'; | ||||||
|  |                         link.style.textTransform = 'uppercase'; | ||||||
|  |                         link.style.cursor = 'pointer'; | ||||||
|  |                     } else { | ||||||
|  |                         const mode = this.config.get('mode'); | ||||||
|  |                         link.setAttribute('ion-button', ''); | ||||||
|  |                         link.classList.add('button', 'button-' + mode, | ||||||
|  |                                 'button-default', 'button-default-' + mode, | ||||||
|  |                                 'button-block', 'button-block-' + mode); | ||||||
|  |                     } | ||||||
|  | 
 | ||||||
|  |                     const message = this.translate.instant('core.viewembeddedcontent'); | ||||||
|  |                     link.innerHTML = isSubframe ? message : '<span class="button-inner">' + message + '</span>'; | ||||||
|  | 
 | ||||||
|  |                     link.onclick = (event: Event): void => { | ||||||
|  |                         this.contentLinksHelper.handleLink(src, username); | ||||||
|  |                         event.preventDefault(); | ||||||
|  |                     }; | ||||||
|  | 
 | ||||||
|  |                     div.appendChild(link); | ||||||
|  |                 } else { | ||||||
|  |                     div.innerHTML = (isSubframe ?  '' : this.domUtils.getConnectionWarningIconHtml()) + | ||||||
|  |                         '<p>' + this.translate.instant('core.networkerroriframemsg') + '</p>'; | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 element.parentElement.insertBefore(div, element); | ||||||
|  |             }); | ||||||
| 
 | 
 | ||||||
|             // Add a class to specify that the iframe is hidden.
 |             // Add a class to specify that the iframe is hidden.
 | ||||||
|             element.classList.add('core-iframe-offline-disabled'); |             element.classList.add('core-iframe-offline-disabled'); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user