ngx-gist-runkit
Version:
Gist RunKit combines the power of Github Gist with RunKit.
232 lines (223 loc) • 18.1 kB
JavaScript
(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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