Skip to content

Commit

Permalink
fix(component): fix server-side rendering
Browse files Browse the repository at this point in the history
Change the RecaptchaLoaderService to render the recaptcha script tag only in a browser environment.

Closes #34

BREAKING CHANGE:
Angular v2.x.x is no longer supported due to dependency on Platform capabilities that were added in [v4.0.0-rc.1](https://github.com/angular/angular/blob/master/CHANGELOG.md#features-20)
  • Loading branch information
sdorra authored and DethAriel committed Aug 30, 2017
1 parent 247fa20 commit 7a5bc6c
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 14 deletions.
2 changes: 1 addition & 1 deletion package.json
Expand Up @@ -35,7 +35,7 @@
"@types/grecaptcha": "^2.0.33"
},
"peerDependencies": {
"@angular/core": "^4.0.0 || ^2.0.0"
"@angular/core": "^4.0.0"
},
"devDependencies": {
"@angular/common": "^4.0.0",
Expand Down
34 changes: 21 additions & 13 deletions recaptcha/recaptcha-loader.service.ts
@@ -1,9 +1,12 @@
import { isPlatformBrowser } from '@angular/common';
import {
Inject,
Injectable,
OpaqueToken,
Optional,
PLATFORM_ID,
} from '@angular/core';
import 'rxjs/add/observable/of';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
import { Observable } from 'rxjs/Observable';

Expand All @@ -22,27 +25,32 @@ export class RecaptchaLoaderService {
/** @internal */
private language: string;

constructor(@Optional() @Inject(RECAPTCHA_LANGUAGE) language?: string) {
constructor(
@Inject(PLATFORM_ID) private readonly platformId: {},
@Optional() @Inject(RECAPTCHA_LANGUAGE) language?: string,
) {
this.language = language;
this.init();
this.ready = RecaptchaLoaderService.ready.asObservable();
this.ready = isPlatformBrowser(this.platformId) ? RecaptchaLoaderService.ready.asObservable() : Observable.of();
}

/** @internal */
private init() {
if (RecaptchaLoaderService.ready) {
return;
}
window.ng2recaptchaloaded = () => {
RecaptchaLoaderService.ready.next(grecaptcha);
};
RecaptchaLoaderService.ready = new BehaviorSubject<ReCaptchaV2.ReCaptcha>(null);
const script = document.createElement('script') as HTMLScriptElement;
script.innerHTML = '';
const langParam = this.language ? '&hl=' + this.language : '';
script.src = `https://www.google.com/recaptcha/api.js?render=explicit&onload=ng2recaptchaloaded${langParam}`;
script.async = true;
script.defer = true;
document.head.appendChild(script);
if (isPlatformBrowser(this.platformId)) {
window.ng2recaptchaloaded = () => {
RecaptchaLoaderService.ready.next(grecaptcha);
};
RecaptchaLoaderService.ready = new BehaviorSubject<ReCaptchaV2.ReCaptcha>(null);
const script = document.createElement('script') as HTMLScriptElement;
script.innerHTML = '';
const langParam = this.language ? '&hl=' + this.language : '';
script.src = `https://www.google.com/recaptcha/api.js?render=explicit&onload=ng2recaptchaloaded${langParam}`;
script.async = true;
script.defer = true;
document.head.appendChild(script);
}
}
}

0 comments on commit 7a5bc6c

Please sign in to comment.