UNPKG

ngx-gist-runkit

Version:

Gist RunKit combines the power of Github Gist with RunKit.

232 lines (223 loc) 18.1 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('rxjs'), require('@angular/common/http')) : typeof define === 'function' && define.amd ? define('ngx-gist-runkit', ['exports', '@angular/core', 'rxjs', '@angular/common/http'], factory) : (factory((global['ngx-gist-runkit'] = {}),global.ng.core,global.rxjs,global.ng.common.http)); }(this, (function (exports,i0,rxjs,http) { 'use strict'; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var NgxGistRunkitService = (function () { function NgxGistRunkitService() { this.TWITTER_OBJECT = 'RunKit'; this.TWITTER_SCRIPT_ID = 'RunKit-js'; this.TWITTER_WIDGET_URL = 'https://embed.runkit.com'; } /** * @return {?} */ NgxGistRunkitService.prototype.loadScript = /** * @return {?} */ function () { var _this = this; return rxjs.Observable.create(function (observer) { _this._startScriptLoad(); window[_this.TWITTER_OBJECT].ready(_this._onTwitterScriptLoadedFactory(observer)); }); }; /** * @return {?} */ NgxGistRunkitService.prototype._startScriptLoad = /** * @return {?} */ function () { /** @type {?} */ var twitterData = window[this.TWITTER_OBJECT] || {}; if (this._twitterScriptAlreadyExists()) { window[this.TWITTER_OBJECT] = twitterData; return; } this._appendTwitterScriptToDOM(); twitterData._e = []; twitterData.ready = function (callback) { twitterData._e.push(callback); }; window[this.TWITTER_OBJECT] = twitterData; }; /** * @return {?} */ NgxGistRunkitService.prototype._twitterScriptAlreadyExists = /** * @return {?} */ function () { /** @type {?} */ var twitterScript = document.getElementById(this.TWITTER_SCRIPT_ID); return (twitterScript !== null || typeof twitterScript !== 'object'); }; /** * @return {?} */ NgxGistRunkitService.prototype._appendTwitterScriptToDOM = /** * @return {?} */ function () { /** @type {?} */ var firstJSScript = document.getElementsByTagName('script')[0]; /** @type {?} */ var js = document.createElement('script'); js.id = this.TWITTER_SCRIPT_ID; js.src = this.TWITTER_WIDGET_URL; firstJSScript.parentNode.insertBefore(js, firstJSScript); }; /** * @param {?} observer * @return {?} */ NgxGistRunkitService.prototype._onTwitterScriptLoadedFactory = /** * @param {?} observer * @return {?} */ function (observer) { return function (twitterData) { observer.next(twitterData); observer.complete(); }; }; NgxGistRunkitService.decorators = [ { type: i0.Injectable, args: [{ providedIn: 'root' },] } ]; /** @nocollapse */ NgxGistRunkitService.ngInjectableDef = i0.defineInjectable({ factory: function NgxGistRunkitService_Factory() { return new NgxGistRunkitService(); }, token: NgxGistRunkitService, providedIn: "root" }); return NgxGistRunkitService; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var NgxGistRunkitComponent = (function () { function NgxGistRunkitComponent(http$$1, ngxGistRunkitService) { this.http = http$$1; this.ngxGistRunkitService = ngxGistRunkitService; this.gistId = undefined; this.gistFileName = undefined; } /** * @return {?} */ NgxGistRunkitComponent.prototype.ngAfterViewInit = /** * @return {?} */ function () { var _this = this; if (window['RunKit'] && this.gistId !== undefined && this.gistFileName !== undefined) { /** @type {?} */ var runKit = window['RunKit']; this.fetchGithubGist(runKit, this.gistId, this.gistFileName); } else { this.ngxGistRunkitService.loadScript().subscribe(function (gistData) { /** @type {?} */ var runKit = window['RunKit']; _this.fetchGithubGist(runKit, _this.gistId, _this.gistFileName); }); } }; /** * @param {?} runKit * @param {?} data * @return {?} */ NgxGistRunkitComponent.prototype.createNotebook = /** * @param {?} runKit * @param {?} data * @return {?} */ function (runKit, data) { this.notebook = window['RunKit'].createNotebook({ element: this.embed.nativeElement, source: data }); }; /** * @param {?} runKit * @param {?} gistId * @param {?} fileName * @return {?} */ NgxGistRunkitComponent.prototype.fetchGithubGist = /** * @param {?} runKit * @param {?} gistId * @param {?} fileName * @return {?} */ function (runKit, gistId, fileName) { var _this = this; this.http .get('https://api.github.com/gists/' + gistId) .subscribe(function (response) { if (response) { _this.createNotebook(runKit, response['files'][fileName].content); } }); }; NgxGistRunkitComponent.decorators = [ { type: i0.Component, args: [{ selector: 'app-ngx-gist-runkit', template: "<div #runKit></div>\n" }] } ]; /** @nocollapse */ NgxGistRunkitComponent.ctorParameters = function () { return [ { type: http.HttpClient }, { type: NgxGistRunkitService } ]; }; NgxGistRunkitComponent.propDecorators = { embed: [{ type: i0.ViewChild, args: ['runKit',] }], gistId: [{ type: i0.Input }], gistFileName: [{ type: i0.Input }] }; return NgxGistRunkitComponent; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var NgxGistRunkitModule = (function () { function NgxGistRunkitModule() { } NgxGistRunkitModule.decorators = [ { type: i0.NgModule, args: [{ imports: [ http.HttpClientModule ], declarations: [NgxGistRunkitComponent], providers: [NgxGistRunkitService], exports: [ NgxGistRunkitComponent ] },] } ]; return NgxGistRunkitModule; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ exports.NgxGistRunkitModule = NgxGistRunkitModule; exports.ɵa = NgxGistRunkitComponent; exports.ɵb = NgxGistRunkitService; Object.defineProperty(exports, '__esModule', { value: true }); }))); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWdpc3QtcnVua2l0LnVtZC5qcy5tYXAiLCJzb3VyY2VzIjpbIm5nOi8vbmd4LWdpc3QtcnVua2l0L2FwcC9uZ3gtZ2lzdC1ydW5raXQvc2VydmljZXMvbmd4LWdpc3QtcnVua2l0LnNlcnZpY2UudHMiLCJuZzovL25neC1naXN0LXJ1bmtpdC9hcHAvbmd4LWdpc3QtcnVua2l0L2NvbXBvbmVudHMvbmd4LWdpc3QtcnVua2l0LmNvbXBvbmVudC50cyIsIm5nOi8vbmd4LWdpc3QtcnVua2l0L2FwcC9uZ3gtZ2lzdC1ydW5raXQvbmd4LWdpc3QtcnVua2l0Lm1vZHVsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBPYnNlcnZlciB9IGZyb20gJ3J4anMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBOZ3hHaXN0UnVua2l0U2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgVFdJVFRFUl9PQkpFQ1QgPSAnUnVuS2l0JztcbiAgcHJpdmF0ZSByZWFkb25seSBUV0lUVEVSX1NDUklQVF9JRCA9ICdSdW5LaXQtanMnO1xuICBwcml2YXRlIHJlYWRvbmx5IFRXSVRURVJfV0lER0VUX1VSTCA9ICdodHRwczovL2VtYmVkLnJ1bmtpdC5jb20nO1xuXG4gIHB1YmxpYyBsb2FkU2NyaXB0KCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICByZXR1cm4gT2JzZXJ2YWJsZS5jcmVhdGUoKG9ic2VydmVyOiBPYnNlcnZlcjxhbnk+KSA9PiB7XG4gICAgICAgICAgdGhpcy5fc3RhcnRTY3JpcHRMb2FkKCk7XG4gICAgICAgICAgd2luZG93WyB0aGlzLlRXSVRURVJfT0JKRUNUIF0ucmVhZHkodGhpcy5fb25Ud2l0dGVyU2NyaXB0TG9hZGVkRmFjdG9yeShvYnNlcnZlcikpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9zdGFydFNjcmlwdExvYWQoKSB7XG4gICAgICBjb25zdCB0d2l0dGVyRGF0YSA9IHdpbmRvd1sgdGhpcy5UV0lUVEVSX09CSkVDVCBdIHx8IHt9O1xuXG4gICAgICBpZiAodGhpcy5fdHdpdHRlclNjcmlwdEFscmVhZHlFeGlzdHMoKSkge1xuICAgICAgICAgIHdpbmRvd1sgdGhpcy5UV0lUVEVSX09CSkVDVCBdID0gdHdpdHRlckRhdGE7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9hcHBlbmRUd2l0dGVyU2NyaXB0VG9ET00oKTtcblxuICAgICAgdHdpdHRlckRhdGEuX2UgPSBbXTtcblxuICAgICAgdHdpdHRlckRhdGEucmVhZHkgPSAoY2FsbGJhY2s6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICAgICAgdHdpdHRlckRhdGEuX2UucHVzaChjYWxsYmFjayk7XG4gICAgICB9O1xuXG4gICAgICB3aW5kb3dbIHRoaXMuVFdJVFRFUl9PQkpFQ1QgXSA9IHR3aXR0ZXJEYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBfdHdpdHRlclNjcmlwdEFscmVhZHlFeGlzdHMoKTogYm9vbGVhbiB7XG4gICAgICBjb25zdCB0d2l0dGVyU2NyaXB0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5UV0lUVEVSX1NDUklQVF9JRCk7XG4gICAgICByZXR1cm4gKHR3aXR0ZXJTY3JpcHQgIT09IG51bGwgfHwgdHlwZW9mIHR3aXR0ZXJTY3JpcHQgIT09ICdvYmplY3QnKTtcbiAgfVxuXG4gIHByaXZhdGUgX2FwcGVuZFR3aXR0ZXJTY3JpcHRUb0RPTSgpOiB2b2lkIHtcbiAgICAgIGNvbnN0IGZpcnN0SlNTY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0JylbIDAgXTtcbiAgICAgIGNvbnN0IGpzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICBqcy5pZCA9IHRoaXMuVFdJVFRFUl9TQ1JJUFRfSUQ7XG4gICAgICBqcy5zcmMgPSB0aGlzLlRXSVRURVJfV0lER0VUX1VSTDtcbiAgICAgIGZpcnN0SlNTY3JpcHQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoanMsIGZpcnN0SlNTY3JpcHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25Ud2l0dGVyU2NyaXB0TG9hZGVkRmFjdG9yeShvYnNlcnZlcjogT2JzZXJ2ZXI8YW55Pik6IEZ1bmN0aW9uIHtcbiAgICAgIHJldHVybiAodHdpdHRlckRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgIG9ic2VydmVyLm5leHQodHdpdHRlckRhdGEpO1xuICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICB9O1xuICB9XG59XG4iLCJpbXBvcnQgeyBWaWV3Q2hpbGQsIENvbXBvbmVudCwgQWZ0ZXJWaWV3SW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBOZ3hHaXN0UnVua2l0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL25neC1naXN0LXJ1bmtpdC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLW5neC1naXN0LXJ1bmtpdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9uZ3gtZ2lzdC1ydW5raXQuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3hHaXN0UnVua2l0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ3J1bktpdCcpIGVtYmVkO1xuICBASW5wdXQoKSBnaXN0SWQgPSB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIGdpc3RGaWxlTmFtZSA9IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBuZ3hHaXN0UnVua2l0U2VydmljZTogTmd4R2lzdFJ1bmtpdFNlcnZpY2VcbiAgKSB7fVxuICBub3RlYm9vazogYW55O1xuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKFxuICAgICAgd2luZG93WydSdW5LaXQnXSAmJlxuICAgICAgdGhpcy5naXN0SWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5naXN0RmlsZU5hbWUgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgY29uc3QgcnVuS2l0ID0gd2luZG93WydSdW5LaXQnXTtcbiAgICAgIHRoaXMuZmV0Y2hHaXRodWJHaXN0KHJ1bktpdCwgdGhpcy5naXN0SWQsIHRoaXMuZ2lzdEZpbGVOYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5uZ3hHaXN0UnVua2l0U2VydmljZS5sb2FkU2NyaXB0KCkuc3Vic2NyaWJlKChnaXN0RGF0YTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJ1bktpdCA9IHdpbmRvd1snUnVuS2l0J107XG4gICAgICAgIHRoaXMuZmV0Y2hHaXRodWJHaXN0KHJ1bktpdCwgdGhpcy5naXN0SWQsIHRoaXMuZ2lzdEZpbGVOYW1lKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVOb3RlYm9vayhydW5LaXQsIGRhdGEpIHtcbiAgICB0aGlzLm5vdGVib29rID0gd2luZG93WydSdW5LaXQnXS5jcmVhdGVOb3RlYm9vayh7XG4gICAgICBlbGVtZW50OiB0aGlzLmVtYmVkLm5hdGl2ZUVsZW1lbnQsXG4gICAgICBzb3VyY2U6IGRhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBmZXRjaEdpdGh1Ykdpc3QocnVuS2l0LCBnaXN0SWQsIGZpbGVOYW1lKSB7XG4gICAgdGhpcy5odHRwXG4gICAgICAuZ2V0KCdodHRwczovL2FwaS5naXRodWIuY29tL2dpc3RzLycgKyBnaXN0SWQpXG4gICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgdGhpcy5jcmVhdGVOb3RlYm9vayhydW5LaXQsIHJlc3BvbnNlWydmaWxlcyddW2ZpbGVOYW1lXS5jb250ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3hHaXN0UnVua2l0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL25neC1naXN0LXJ1bmtpdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmd4R2lzdFJ1bmtpdFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL25neC1naXN0LXJ1bmtpdC5zZXJ2aWNlJztcbmltcG9ydCB7IEh0dHBDbGllbnRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBIdHRwQ2xpZW50TW9kdWxlXG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW05neEdpc3RSdW5raXRDb21wb25lbnRdLFxuICBwcm92aWRlcnM6IFtOZ3hHaXN0UnVua2l0U2VydmljZV0sXG4gIGV4cG9ydHM6IFtcbiAgICBOZ3hHaXN0UnVua2l0Q29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTmd4R2lzdFJ1bmtpdE1vZHVsZSB7IH1cbiJdLCJuYW1lcyI6WyJPYnNlcnZhYmxlIiwiSW5qZWN0YWJsZSIsImh0dHAiLCJDb21wb25lbnQiLCJIdHRwQ2xpZW50IiwiVmlld0NoaWxkIiwiSW5wdXQiLCJOZ01vZHVsZSIsIkh0dHBDbGllbnRNb2R1bGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTs7a0NBT29DLFFBQVE7cUNBQ0wsV0FBVztzQ0FDViwwQkFBMEI7Ozs7O1FBRXpELHlDQUFVOzs7OztnQkFDYixPQUFPQSxlQUFVLENBQUMsTUFBTSxDQUFDLFVBQUMsUUFBdUI7b0JBQzdDLEtBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO29CQUN4QixNQUFNLENBQUUs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