Socket
Socket
Sign inDemoInstall

ckeditor4-angular

Package Overview
Dependencies
Maintainers
1
Versions
33
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ckeditor4-angular - npm Package Compare versions

Comparing version 1.0.0-beta.2 to 1.0.0

760

bundles/ckeditor4-angular.umd.js
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/common'), require('@angular/core'), require('@angular/forms'), require('load-script')) :
typeof define === 'function' && define.amd ? define('ckeditor4-angular', ['exports', '@angular/common', '@angular/core', '@angular/forms', 'load-script'], factory) :
(factory((global['ckeditor4-angular'] = {}),global.ng.common,global.ng.core,global.ng.forms,global.loadScript));
}(this, (function (exports,common,core,forms,loadScript) { 'use strict';
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common'), require('@angular/forms'), require('load-script')) :
typeof define === 'function' && define.amd ? define('ckeditor4-angular', ['exports', '@angular/core', '@angular/common', '@angular/forms', 'load-script'], factory) :
(global = global || self, factory(global['ckeditor4-angular'] = {}, global.ng.core, global.ng.common, global.ng.forms, global.loadScript));
}(this, (function (exports, core, common, forms, loadScript) { 'use strict';
loadScript = loadScript && loadScript.hasOwnProperty('default') ? loadScript['default'] : loadScript;
/*! *****************************************************************************
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
MERCHANTABLITY OR NON-INFRINGEMENT.
See the Apache Version 2.0 License for specific language governing permissions
and limitations under the License.
***************************************************************************** */
/* global Reflect, Promise */
var extendStatics = function(d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
function __extends(d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
}
var __assign = function() {
__assign = Object.assign || function __assign(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
function __rest(s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
}
function __decorate(decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
}
function __param(paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
}
function __metadata(metadataKey, metadataValue) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
}
function __awaiter(thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
}
function __generator(thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
}
function __exportStar(m, exports) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
function __values(o) {
var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0;
if (m) return m.call(o);
return {
next: function () {
if (o && i >= o.length) o = void 0;
return { value: o && o[i++], done: !o };
}
};
}
function __read(o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
}
function __spread() {
for (var ar = [], i = 0; i < arguments.length; i++)
ar = ar.concat(__read(arguments[i]));
return ar;
}
function __spreadArrays() {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
function __await(v) {
return this instanceof __await ? (this.v = v, this) : new __await(v);
}
function __asyncGenerator(thisArg, _arguments, generator) {
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
var g = generator.apply(thisArg, _arguments || []), i, q = [];
return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
function fulfill(value) { resume("next", value); }
function reject(value) { resume("throw", value); }
function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
}
function __asyncDelegator(o) {
var i, p;
return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
}
function __asyncValues(o) {
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
var m = o[Symbol.asyncIterator], i;
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
}
function __makeTemplateObject(cooked, raw) {
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
return cooked;
};
function __importStar(mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result.default = mod;
return result;
}
function __importDefault(mod) {
return (mod && mod.__esModule) ? mod : { default: mod };
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/
/** @type {?} */
var promise;
/**
* @param {?} editorURL
* @return {?}
*/
function getEditorNamespace(editorURL) {

@@ -27,11 +219,4 @@ if (editorURL.length < 1) {

else if (!promise) {
promise = new Promise(( /**
* @param {?} scriptResolve
* @param {?} scriptReject
* @return {?}
*/function (scriptResolve, scriptReject) {
loadScript(editorURL, ( /**
* @param {?} err
* @return {?}
*/function (err) {
promise = new Promise(function (scriptResolve, scriptReject) {
loadScript(editorURL, function (err) {
if (err) {

@@ -44,4 +229,4 @@ scriptReject(err);

}
}));
}));
});
});
}

@@ -52,4 +237,4 @@ return promise;

/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/

@@ -76,3 +261,3 @@ var CKEditorComponent = /** @class */ (function () {

*/
this.type = "divarea" /* DIVAREA */;
this.type = "classic" /* CLASSIC */;
/**

@@ -85,5 +270,14 @@ * Fires when the editor is ready. It corresponds with the `editor#instanceReady`

/**
* Fires when the editor data is loaded, e.g. after calling setData()
* https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-setData
* editor's method. It corresponds with the `editor#dataReady`
* https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#event-dataReady event.
*/
this.dataReady = new core.EventEmitter();
/**
* Fires when the content of the editor has changed. It corresponds with the `editor#change`
* https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#event-change
* event. For performance reasons this event may be called even when data didn't really changed.
* Please note that this event will only be fired when `undo` plugin is loaded. If you need to
* listen for editor changes (e.g. for two-way data binding), use `dataChange` event instead.
*/

@@ -119,10 +313,9 @@ this.change = new core.EventEmitter();

*
* Defaults to 'https://cdn.ckeditor.com/4.12.1/standard-all/ckeditor.js'
* Defaults to 'https://cdn.ckeditor.com/4.13.0/standard-all/ckeditor.js'
*/
this.editorUrl = 'https://cdn.ckeditor.com/4.12.1/standard-all/ckeditor.js';
this.editorUrl = 'https://cdn.ckeditor.com/4.13.0/standard-all/ckeditor.js';
}
CKEditorComponent_1 = CKEditorComponent;
Object.defineProperty(CKEditorComponent.prototype, "data", {
get: /**
* @return {?}
*/ function () {
get: function () {
return this._data;

@@ -137,11 +330,3 @@ },

*/
set: /**
* Keeps track of the editor's data.
*
* It's also decorated as an input which is useful when not using the ngModel.
*
* See https://angular.io/api/forms/NgModel to learn more.
* @param {?} data
* @return {?}
*/ function (data) {
set: function (data) {
if (data === this._data) {

@@ -162,5 +347,3 @@ return;

Object.defineProperty(CKEditorComponent.prototype, "readOnly", {
get: /**
* @return {?}
*/ function () {
get: function () {
if (this.instance) {

@@ -176,9 +359,3 @@ return this.instance.readOnly;

*/
set: /**
* When set `true`, the editor becomes read-only.
* https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#property-readOnly
* to learn more.
* @param {?} isReadOnly
* @return {?}
*/ function (isReadOnly) {
set: function (isReadOnly) {
if (this.instance) {

@@ -194,271 +371,185 @@ this.instance.setReadOnly(isReadOnly);

});
/**
* @return {?}
*/
CKEditorComponent.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
var _this = this;
getEditorNamespace(this.editorUrl).then(( /**
* @return {?}
*/function () {
_this.ngZone.runOutsideAngular(_this.createEditor.bind(_this));
})).catch(window.console.error);
};
/**
* @return {?}
*/
CKEditorComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
var _this = this;
this.ngZone.runOutsideAngular(( /**
* @return {?}
*/function () {
if (_this.instance) {
_this.instance.destroy();
_this.instance = null;
}
}));
};
/**
* @param {?} value
* @return {?}
*/
CKEditorComponent.prototype.writeValue = /**
* @param {?} value
* @return {?}
*/
function (value) {
this.data = value;
};
/**
* @param {?} callback
* @return {?}
*/
CKEditorComponent.prototype.registerOnChange = /**
* @param {?} callback
* @return {?}
*/
function (callback) {
this.onChange = callback;
};
/**
* @param {?} callback
* @return {?}
*/
CKEditorComponent.prototype.registerOnTouched = /**
* @param {?} callback
* @return {?}
*/
function (callback) {
this.onTouched = callback;
};
/**
* @private
* @return {?}
*/
CKEditorComponent.prototype.createEditor = /**
* @private
* @return {?}
*/
function () {
/** @type {?} */
var element = this.createInitialElement();
CKEditorComponent.prototype.ngAfterViewInit = function () {
var _this = this;
getEditorNamespace(this.editorUrl).then(function () {
_this.ngZone.runOutsideAngular(_this.createEditor.bind(_this));
}).catch(window.console.error);
};
CKEditorComponent.prototype.ngOnDestroy = function () {
var _this = this;
this.ngZone.runOutsideAngular(function () {
if (_this.instance) {
_this.instance.destroy();
_this.instance = null;
}
});
};
CKEditorComponent.prototype.writeValue = function (value) {
this.data = value;
};
CKEditorComponent.prototype.registerOnChange = function (callback) {
this.onChange = callback;
};
CKEditorComponent.prototype.registerOnTouched = function (callback) {
this.onTouched = callback;
};
CKEditorComponent.prototype.createEditor = function () {
var _this = this;
var element = document.createElement(this.tagName);
this.elementRef.nativeElement.appendChild(element);
if (this.type === "divarea" /* DIVAREA */) {
this.config = this.ensureDivareaPlugin(this.config || {});
/** @type {?} */
var instance = this.type === "inline" /* INLINE */ ?
CKEDITOR.inline(element, this.config)
: CKEDITOR.replace(element, this.config);
instance.once('instanceReady', ( /**
* @param {?} evt
* @return {?}
*/function (evt) {
var _this = this;
this.instance = instance;
this.wrapper.removeAttribute('style');
this.elementRef.nativeElement.appendChild(this.wrapper);
// Read only state may change during instance initialization.
this.readOnly = this._readOnly !== null ? this._readOnly : this.instance.readOnly;
this.subscribe(this.instance);
/** @type {?} */
var undo = instance.undoManager;
if (this.data !== null) {
undo && undo.lock();
instance.setData(this.data);
// Locking undoManager prevents 'change' event.
// Trigger it manually to updated bound data.
if (this.data !== instance.getData()) {
instance.fire('change');
}
undo && undo.unlock();
}
this.ngZone.run(( /**
* @return {?}
*/function () {
}
var instance = this.type === "inline" /* INLINE */
? CKEDITOR.inline(element, this.config)
: CKEDITOR.replace(element, this.config);
instance.once('instanceReady', function (evt) {
_this.instance = instance;
// Read only state may change during instance initialization.
_this.readOnly = _this._readOnly !== null ? _this._readOnly : _this.instance.readOnly;
_this.subscribe(_this.instance);
var undo = instance.undoManager;
if (_this.data !== null) {
undo && undo.lock();
instance.setData(_this.data, { callback: function () {
// Locking undoManager prevents 'change' event.
// Trigger it manually to updated bound data.
if (_this.data !== instance.getData()) {
undo ? instance.fire('change') : instance.fire('dataReady');
}
undo && undo.unlock();
_this.ngZone.run(function () {
_this.ready.emit(evt);
});
} });
}
else {
_this.ngZone.run(function () {
_this.ready.emit(evt);
}));
}), this);
};
/**
* @private
* @param {?} editor
* @return {?}
*/
CKEditorComponent.prototype.subscribe = /**
* @private
* @param {?} editor
* @return {?}
*/
function (editor) {
var _this = this;
editor.on('focus', ( /**
* @param {?} evt
* @return {?}
*/function (evt) {
_this.ngZone.run(( /**
* @return {?}
*/function () {
_this.focus.emit(evt);
}));
}));
editor.on('blur', ( /**
* @param {?} evt
* @return {?}
*/function (evt) {
_this.ngZone.run(( /**
* @return {?}
*/function () {
if (_this.onTouched) {
_this.onTouched();
}
_this.blur.emit(evt);
}));
}));
editor.on('change', ( /**
* @param {?} evt
* @return {?}
*/function (evt) {
_this.ngZone.run(( /**
* @return {?}
*/function () {
/** @type {?} */
var newData = editor.getData();
_this.change.emit(evt);
if (newData === _this.data) {
return;
}
_this._data = newData;
_this.dataChange.emit(newData);
if (_this.onChange) {
_this.onChange(newData);
}
}));
}));
};
/**
* @private
* @param {?} config
* @return {?}
*/
CKEditorComponent.prototype.ensureDivareaPlugin = /**
* @private
* @param {?} config
* @return {?}
*/
function (config) {
var extraPlugins = config.extraPlugins, removePlugins = config.removePlugins;
extraPlugins = this.removePlugin(extraPlugins, 'divarea') || '';
extraPlugins = extraPlugins.concat(typeof extraPlugins === 'string' ? ',divarea' : 'divarea');
if (removePlugins && removePlugins.includes('divarea')) {
removePlugins = this.removePlugin(removePlugins, 'divarea');
console.warn('[CKEDITOR] divarea plugin is required to initialize editor using Angular integration.');
});
}
return Object.assign({}, config, { extraPlugins: extraPlugins, removePlugins: removePlugins });
};
/**
* @private
* @param {?} plugins
* @param {?} toRemove
* @return {?}
*/
CKEditorComponent.prototype.removePlugin = /**
* @private
* @param {?} plugins
* @param {?} toRemove
* @return {?}
*/
function (plugins, toRemove) {
if (!plugins) {
return null;
});
};
CKEditorComponent.prototype.subscribe = function (editor) {
var _this = this;
editor.on('focus', function (evt) {
_this.ngZone.run(function () {
_this.focus.emit(evt);
});
});
editor.on('blur', function (evt) {
_this.ngZone.run(function () {
if (_this.onTouched) {
_this.onTouched();
}
_this.blur.emit(evt);
});
});
editor.on('dataReady', this.propagateChange, this);
if (this.instance.undoManager) {
editor.on('change', this.propagateChange, this);
}
// If 'undo' plugin is not loaded, listen to 'selectionCheck' event instead. (#54).
else {
editor.on('selectionCheck', this.propagateChange, this);
}
};
CKEditorComponent.prototype.propagateChange = function (event) {
var _this = this;
this.ngZone.run(function () {
var newData = _this.instance.getData();
if (event.name == 'change') {
_this.change.emit(event);
}
/** @type {?} */
var isString = typeof plugins === 'string';
if (isString) {
plugins = (( /** @type {?} */(plugins))).split(',');
else if (event.name == 'dataReady') {
_this.dataReady.emit(event);
}
plugins = (( /** @type {?} */(plugins))).filter(( /**
* @param {?} plugin
* @return {?}
*/function (plugin) { return plugin !== toRemove; }));
if (isString) {
plugins = (( /** @type {?} */(plugins))).join(',');
if (newData === _this.data) {
return;
}
return plugins;
};
/**
* @private
* @return {?}
*/
CKEditorComponent.prototype.createInitialElement = /**
* @private
* @return {?}
*/
function () {
// Render editor outside of component so it won't be removed from DOM before `instanceReady`.
this.wrapper = document.createElement('div');
/** @type {?} */
var element = document.createElement(this.tagName);
this.wrapper.setAttribute('style', 'display:none;');
document.body.appendChild(this.wrapper);
this.wrapper.appendChild(element);
return element;
};
CKEditorComponent.decorators = [
{ type: core.Component, args: [{
selector: 'ckeditor',
template: '<ng-template></ng-template>',
providers: [
{
provide: forms.NG_VALUE_ACCESSOR,
useExisting: core.forwardRef(( /**
* @return {?}
*/function () { return CKEditorComponent; })),
multi: true,
}
]
}] }
];
/** @nocollapse */
CKEditorComponent.ctorParameters = function () {
return [
{ type: core.ElementRef },
{ type: core.NgZone }
];
_this._data = newData;
_this.dataChange.emit(newData);
if (_this.onChange) {
_this.onChange(newData);
}
});
};
CKEditorComponent.propDecorators = {
config: [{ type: core.Input }],
tagName: [{ type: core.Input }],
type: [{ type: core.Input }],
data: [{ type: core.Input }],
readOnly: [{ type: core.Input }],
ready: [{ type: core.Output }],
change: [{ type: core.Output }],
dataChange: [{ type: core.Output }],
focus: [{ type: core.Output }],
blur: [{ type: core.Output }],
editorUrl: [{ type: core.Input }]
CKEditorComponent.prototype.ensureDivareaPlugin = function (config) {
var extraPlugins = config.extraPlugins, removePlugins = config.removePlugins;
extraPlugins = this.removePlugin(extraPlugins, 'divarea') || '';
extraPlugins = extraPlugins.concat(typeof extraPlugins === 'string' ? ',divarea' : 'divarea');
if (removePlugins && removePlugins.includes('divarea')) {
removePlugins = this.removePlugin(removePlugins, 'divarea');
console.warn('[CKEDITOR] divarea plugin is required to initialize editor using Angular integration.');
}
return Object.assign({}, config, { extraPlugins: extraPlugins, removePlugins: removePlugins });
};
CKEditorComponent.prototype.removePlugin = function (plugins, toRemove) {
if (!plugins) {
return null;
}
var isString = typeof plugins === 'string';
if (isString) {
plugins = plugins.split(',');
}
plugins = plugins.filter(function (plugin) { return plugin !== toRemove; });
if (isString) {
plugins = plugins.join(',');
}
return plugins;
};
var CKEditorComponent_1;
CKEditorComponent.ctorParameters = function () { return [
{ type: core.ElementRef },
{ type: core.NgZone }
]; };
__decorate([
core.Input()
], CKEditorComponent.prototype, "config", void 0);
__decorate([
core.Input()
], CKEditorComponent.prototype, "tagName", void 0);
__decorate([
core.Input()
], CKEditorComponent.prototype, "type", void 0);
__decorate([
core.Input()
], CKEditorComponent.prototype, "data", null);
__decorate([
core.Input()
], CKEditorComponent.prototype, "readOnly", null);
__decorate([
core.Output()
], CKEditorComponent.prototype, "ready", void 0);
__decorate([
core.Output()
], CKEditorComponent.prototype, "dataReady", void 0);
__decorate([
core.Output()
], CKEditorComponent.prototype, "change", void 0);
__decorate([
core.Output()
], CKEditorComponent.prototype, "dataChange", void 0);
__decorate([
core.Output()
], CKEditorComponent.prototype, "focus", void 0);
__decorate([
core.Output()
], CKEditorComponent.prototype, "blur", void 0);
__decorate([
core.Input()
], CKEditorComponent.prototype, "editorUrl", void 0);
CKEditorComponent = CKEditorComponent_1 = __decorate([
core.Component({
selector: 'ckeditor',
template: '<ng-template></ng-template>',
providers: [
{
provide: forms.NG_VALUE_ACCESSOR,
useExisting: core.forwardRef(function () { return CKEditorComponent_1; }),
multi: true,
}
]
})
], CKEditorComponent);
return CKEditorComponent;

@@ -468,26 +559,9 @@ }());

/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/
(function (CKEditor4) {
/**
* The CKEditor4 editor constructor.
* @record
*/
function Config() { }
CKEditor4.Config = Config;
/**
* The event object passed to CKEditor4 event callbacks.
*
* See https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_eventInfo.html
* to learn more.
* @record
*/
function EventInfo() { }
CKEditor4.EventInfo = EventInfo;
})(exports.CKEditor4 || (exports.CKEditor4 = {}));
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/

@@ -497,19 +571,14 @@ var CKEditorModule = /** @class */ (function () {

}
CKEditorModule.decorators = [
{ type: core.NgModule, args: [{
imports: [forms.FormsModule, common.CommonModule],
declarations: [CKEditorComponent],
exports: [CKEditorComponent]
},] }
];
CKEditorModule = __decorate([
core.NgModule({
imports: [forms.FormsModule, common.CommonModule],
declarations: [CKEditorComponent],
exports: [CKEditorComponent]
})
], CKEditorModule);
return CKEditorModule;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
exports.CKEditorComponent = CKEditorComponent;
exports.CKEditorModule = CKEditorModule;
exports.CKEditorComponent = CKEditorComponent;

@@ -519,3 +588,2 @@ Object.defineProperty(exports, '__esModule', { value: true });

})));
//# sourceMappingURL=ckeditor4-angular.umd.js.map
//# sourceMappingURL=ckeditor4-angular.umd.js.map

@@ -1,2 +0,15 @@

!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@angular/common"),require("@angular/core"),require("@angular/forms"),require("load-script")):"function"==typeof define&&define.amd?define("ckeditor4-angular",["exports","@angular/common","@angular/core","@angular/forms","load-script"],e):e(t["ckeditor4-angular"]={},t.ng.common,t.ng.core,t.ng.forms,t.loadScript)}(this,function(t,e,n,i,r){"use strict";var o;r=r&&r.hasOwnProperty("default")?r["default"]:r;var a,s=(Object.defineProperty(u.prototype,"data",{get:function(){return this._data},set:function(t){if(t!==this._data)return this.instance?(this.instance.setData(t),void(this._data=this.instance.getData())):void(this._data=t)},enumerable:!0,configurable:!0}),Object.defineProperty(u.prototype,"readOnly",{get:function(){return this.instance?this.instance.readOnly:this._readOnly},set:function(t){this.instance?this.instance.setReadOnly(t):this._readOnly=t},enumerable:!0,configurable:!0}),u.prototype.ngAfterViewInit=function(){var t=this;(function e(t){if(t.length<1)throw new TypeError("CKEditor URL must be a non-empty string.");return"CKEDITOR"in window?Promise.resolve(CKEDITOR):(o||(o=new Promise(function(e,n){r(t,function(t){t?n(t):(e(CKEDITOR),o=undefined)})})),o)})(this.editorUrl).then(function(){t.ngZone.runOutsideAngular(t.createEditor.bind(t))})["catch"](window.console.error)},u.prototype.ngOnDestroy=function(){var t=this;this.ngZone.runOutsideAngular(function(){t.instance&&(t.instance.destroy(),t.instance=null)})},u.prototype.writeValue=function(t){this.data=t},u.prototype.registerOnChange=function(t){this.onChange=t},u.prototype.registerOnTouched=function(t){this.onTouched=t},u.prototype.createEditor=function(){var t=this.createInitialElement();this.config=this.ensureDivareaPlugin(this.config||{});var i="inline"===this.type?CKEDITOR.inline(t,this.config):CKEDITOR.replace(t,this.config);i.once("instanceReady",function(t){var e=this;this.instance=i,this.wrapper.removeAttribute("style"),this.elementRef.nativeElement.appendChild(this.wrapper),this.readOnly=null!==this._readOnly?this._readOnly:this.instance.readOnly,this.subscribe(this.instance);var n=i.undoManager;null!==this.data&&(n&&n.lock(),i.setData(this.data),this.data!==i.getData()&&i.fire("change"),n&&n.unlock()),this.ngZone.run(function(){e.ready.emit(t)})},this)},u.prototype.subscribe=function(n){var i=this;n.on("focus",function(t){i.ngZone.run(function(){i.focus.emit(t)})}),n.on("blur",function(t){i.ngZone.run(function(){i.onTouched&&i.onTouched(),i.blur.emit(t)})}),n.on("change",function(e){i.ngZone.run(function(){var t=n.getData();i.change.emit(e),t!==i.data&&(i._data=t,i.dataChange.emit(t),i.onChange&&i.onChange(t))})})},u.prototype.ensureDivareaPlugin=function(t){var e=t.extraPlugins,n=t.removePlugins;return e=(e=this.removePlugin(e,"divarea")||"").concat("string"==typeof e?",divarea":"divarea"),n&&n.includes("divarea")&&(n=this.removePlugin(n,"divarea"),console.warn("[CKEDITOR] divarea plugin is required to initialize editor using Angular integration.")),Object.assign({},t,{extraPlugins:e,removePlugins:n})},u.prototype.removePlugin=function(t,e){if(!t)return null;var n="string"==typeof t;return n&&(t=t.split(",")),t=t.filter(function(t){return t!==e}),n&&(t=t.join(",")),t},u.prototype.createInitialElement=function(){this.wrapper=document.createElement("div");var t=document.createElement(this.tagName);return this.wrapper.setAttribute("style","display:none;"),document.body.appendChild(this.wrapper),this.wrapper.appendChild(t),t},u.decorators=[{type:n.Component,args:[{selector:"ckeditor",template:"<ng-template></ng-template>",providers:[{provide:i.NG_VALUE_ACCESSOR,useExisting:n.forwardRef(function(){return u}),multi:!0}]}]}],u.ctorParameters=function(){return[{type:n.ElementRef},{type:n.NgZone}]},u.propDecorators={config:[{type:n.Input}],tagName:[{type:n.Input}],type:[{type:n.Input}],data:[{type:n.Input}],readOnly:[{type:n.Input}],ready:[{type:n.Output}],change:[{type:n.Output}],dataChange:[{type:n.Output}],focus:[{type:n.Output}],blur:[{type:n.Output}],editorUrl:[{type:n.Input}]},u);function u(t,e){this.elementRef=t,this.ngZone=e,this.tagName="textarea",this.type="divarea",this.ready=new n.EventEmitter,this.change=new n.EventEmitter,this.dataChange=new n.EventEmitter,this.focus=new n.EventEmitter,this.blur=new n.EventEmitter,this._readOnly=null,this._data=null,this.editorUrl="https://cdn.ckeditor.com/4.12.1/standard-all/ckeditor.js"}(a=t.CKEditor4||(t.CKEditor4={})).Config=function l(){},a.EventInfo=function p(){};var c=(d.decorators=[{type:n.NgModule,args:[{imports:[i.FormsModule,e.CommonModule],declarations:[s],exports:[s]}]}],d);function d(){}t.CKEditorModule=c,t.CKEditorComponent=s,Object.defineProperty(t,"__esModule",{value:!0})});
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@angular/core"),require("@angular/common"),require("@angular/forms"),require("load-script")):"function"==typeof define&&define.amd?define("ckeditor4-angular",["exports","@angular/core","@angular/common","@angular/forms","load-script"],e):e((t=t||self)["ckeditor4-angular"]={},t.ng.core,t.ng.common,t.ng.forms,t.loadScript)}(this,(function(t,e,n,i,o){"use strict";o=o&&o.hasOwnProperty("default")?o.default:o;var r;function a(t,e,n,i){var o,r=arguments.length,a=r<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,e,n,i);else for(var u=t.length-1;u>=0;u--)(o=t[u])&&(a=(r<3?o(a):r>3?o(e,n,a):o(e,n))||a);return r>3&&a&&Object.defineProperty(e,n,a),a}
/**
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/
var u=function(){function t(t,n){this.elementRef=t,this.ngZone=n,this.tagName="textarea",this.type="classic",this.ready=new e.EventEmitter,this.dataReady=new e.EventEmitter,this.change=new e.EventEmitter,this.dataChange=new e.EventEmitter,this.focus=new e.EventEmitter,this.blur=new e.EventEmitter,this._readOnly=null,this._data=null,this.editorUrl="https://cdn.ckeditor.com/4.13.0/standard-all/ckeditor.js"}var n;return n=t,Object.defineProperty(t.prototype,"data",{get:function(){return this._data},set:function(t){if(t!==this._data)return this.instance?(this.instance.setData(t),void(this._data=this.instance.getData())):void(this._data=t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"readOnly",{get:function(){return this.instance?this.instance.readOnly:this._readOnly},set:function(t){this.instance?this.instance.setReadOnly(t):this._readOnly=t},enumerable:!0,configurable:!0}),t.prototype.ngAfterViewInit=function(){var t=this;(function(t){if(t.length<1)throw new TypeError("CKEditor URL must be a non-empty string.");return"CKEDITOR"in window?Promise.resolve(CKEDITOR):(r||(r=new Promise((function(e,n){o(t,(function(t){t?n(t):(e(CKEDITOR),r=void 0)}))}))),r)})(this.editorUrl).then((function(){t.ngZone.runOutsideAngular(t.createEditor.bind(t))})).catch(window.console.error)},t.prototype.ngOnDestroy=function(){var t=this;this.ngZone.runOutsideAngular((function(){t.instance&&(t.instance.destroy(),t.instance=null)}))},t.prototype.writeValue=function(t){this.data=t},t.prototype.registerOnChange=function(t){this.onChange=t},t.prototype.registerOnTouched=function(t){this.onTouched=t},t.prototype.createEditor=function(){var t=this,e=document.createElement(this.tagName);this.elementRef.nativeElement.appendChild(e),"divarea"===this.type&&(this.config=this.ensureDivareaPlugin(this.config||{}));var n="inline"===this.type?CKEDITOR.inline(e,this.config):CKEDITOR.replace(e,this.config);n.once("instanceReady",(function(e){t.instance=n,t.readOnly=null!==t._readOnly?t._readOnly:t.instance.readOnly,t.subscribe(t.instance);var i=n.undoManager;null!==t.data?(i&&i.lock(),n.setData(t.data,{callback:function(){t.data!==n.getData()&&(i?n.fire("change"):n.fire("dataReady")),i&&i.unlock(),t.ngZone.run((function(){t.ready.emit(e)}))}})):t.ngZone.run((function(){t.ready.emit(e)}))}))},t.prototype.subscribe=function(t){var e=this;t.on("focus",(function(t){e.ngZone.run((function(){e.focus.emit(t)}))})),t.on("blur",(function(t){e.ngZone.run((function(){e.onTouched&&e.onTouched(),e.blur.emit(t)}))})),t.on("dataReady",this.propagateChange,this),this.instance.undoManager?t.on("change",this.propagateChange,this):t.on("selectionCheck",this.propagateChange,this)},t.prototype.propagateChange=function(t){var e=this;this.ngZone.run((function(){var n=e.instance.getData();"change"==t.name?e.change.emit(t):"dataReady"==t.name&&e.dataReady.emit(t),n!==e.data&&(e._data=n,e.dataChange.emit(n),e.onChange&&e.onChange(n))}))},t.prototype.ensureDivareaPlugin=function(t){var e=t.extraPlugins,n=t.removePlugins;return e=(e=this.removePlugin(e,"divarea")||"").concat("string"==typeof e?",divarea":"divarea"),n&&n.includes("divarea")&&(n=this.removePlugin(n,"divarea"),console.warn("[CKEDITOR] divarea plugin is required to initialize editor using Angular integration.")),Object.assign({},t,{extraPlugins:e,removePlugins:n})},t.prototype.removePlugin=function(t,e){if(!t)return null;var n="string"==typeof t;return n&&(t=t.split(",")),t=t.filter((function(t){return t!==e})),n&&(t=t.join(",")),t},t.ctorParameters=function(){return[{type:e.ElementRef},{type:e.NgZone}]},a([e.Input()],t.prototype,"config",void 0),a([e.Input()],t.prototype,"tagName",void 0),a([e.Input()],t.prototype,"type",void 0),a([e.Input()],t.prototype,"data",null),a([e.Input()],t.prototype,"readOnly",null),a([e.Output()],t.prototype,"ready",void 0),a([e.Output()],t.prototype,"dataReady",void 0),a([e.Output()],t.prototype,"change",void 0),a([e.Output()],t.prototype,"dataChange",void 0),a([e.Output()],t.prototype,"focus",void 0),a([e.Output()],t.prototype,"blur",void 0),a([e.Input()],t.prototype,"editorUrl",void 0),t=n=a([e.Component({selector:"ckeditor",template:"<ng-template></ng-template>",providers:[{provide:i.NG_VALUE_ACCESSOR,useExisting:e.forwardRef((function(){return n})),multi:!0}]})],t)}(),s=function(){function t(){}return t=a([e.NgModule({imports:[i.FormsModule,n.CommonModule],declarations:[u],exports:[u]})],t)}();
/**
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/
/**
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/t.CKEditorComponent=u,t.CKEditorModule=s,Object.defineProperty(t,"__esModule",{value:!0})}));
//# sourceMappingURL=ckeditor4-angular.umd.min.js.map

@@ -55,5 +55,14 @@ /**

/**
* Fires when the editor data is loaded, e.g. after calling setData()
* https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-setData
* editor's method. It corresponds with the `editor#dataReady`
* https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#event-dataReady event.
*/
dataReady: EventEmitter<CKEditor4.EventInfo>;
/**
* Fires when the content of the editor has changed. It corresponds with the `editor#change`
* https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#event-change
* event. For performance reasons this event may be called even when data didn't really changed.
* Please note that this event will only be fired when `undo` plugin is loaded. If you need to
* listen for editor changes (e.g. for two-way data binding), use `dataChange` event instead.
*/

@@ -85,6 +94,2 @@ change: EventEmitter<CKEditor4.EventInfo>;

/**
* Wrapper element used to initialize editor.
*/
wrapper: HTMLElement;
/**
* If the component is read–only before the editor instance is created, it remembers that state,

@@ -112,6 +117,6 @@ * so the editor can become read–only once it is ready.

*
* Defaults to 'https://cdn.ckeditor.com/4.12.1/standard-all/ckeditor.js'
* Defaults to 'https://cdn.ckeditor.com/4.13.0/standard-all/ckeditor.js'
*/
editorUrl: string;
constructor(elementRef: ElementRef<HTMLElement>, ngZone: NgZone);
constructor(elementRef: ElementRef, ngZone: NgZone);
ngAfterViewInit(): void;

@@ -124,5 +129,5 @@ ngOnDestroy(): void;

private subscribe;
private propagateChange;
private ensureDivareaPlugin;
private removePlugin;
private createInitialElement;
}

@@ -16,2 +16,8 @@ /**

/**
* The CKEditor4 editor.
*/
interface Editor {
[key: string]: any;
}
/**
* The CKEditor4 editor interface type.

@@ -23,3 +29,4 @@ * See https://ckeditor.com/docs/ckeditor4/latest/guide/dev_uitypes.html

DIVAREA = "divarea",
INLINE = "inline"
INLINE = "inline",
CLASSIC = "classic"
}

@@ -26,0 +33,0 @@ /**

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":4,"exports":[{"from":"./ckeditor"}],"metadata":{"CKEditorModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":10,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/forms","name":"FormsModule","line":11,"character":12},{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":11,"character":25}],"declarations":[{"__symbolic":"reference","name":"CKEditorComponent"}],"exports":[{"__symbolic":"reference","name":"CKEditorComponent"}]}]}],"members":{}},"CKEditorComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":27,"character":1},"arguments":[{"selector":"ckeditor","template":"<ng-template></ng-template>","providers":[{"provide":{"__symbolic":"reference","module":"@angular/forms","name":"NG_VALUE_ACCESSOR","line":33,"character":12},"useExisting":{"__symbolic":"reference","name":"CKEditorComponent"},"multi":true}]}]}],"members":{"config":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":45,"character":2}}]}],"tagName":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":52,"character":2}}]}],"type":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":64,"character":2}}]}],"data":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":73,"character":2}}]}],"readOnly":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":98,"character":2}}]}],"ready":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":121,"character":2}}]}],"change":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":128,"character":2}}]}],"dataChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":136,"character":2}}]}],"focus":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":143,"character":2}}]}],"blur":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":150,"character":2}}]}],"editorUrl":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":191,"character":2}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":193,"character":45,"context":{"typeName":"HTMLElement"},"module":"./ckeditor.component"}]},{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":193,"character":75}]}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"writeValue":[{"__symbolic":"method"}],"registerOnChange":[{"__symbolic":"method"}],"registerOnTouched":[{"__symbolic":"method"}],"createEditor":[{"__symbolic":"method"}],"subscribe":[{"__symbolic":"method"}],"ensureDivareaPlugin":[{"__symbolic":"method"}],"removePlugin":[{"__symbolic":"method"}],"createInitialElement":[{"__symbolic":"method"}]}}},"origins":{"CKEditorModule":"./ckeditor.module","CKEditorComponent":"./ckeditor.component"},"importAs":"ckeditor4-angular"}
{"__symbolic":"module","version":4,"exports":[{"from":"./ckeditor"}],"metadata":{"CKEditorModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":10,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/forms","name":"FormsModule","line":11,"character":12},{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":11,"character":25}],"declarations":[{"__symbolic":"reference","name":"CKEditorComponent"}],"exports":[{"__symbolic":"reference","name":"CKEditorComponent"}]}]}],"members":{}},"CKEditorComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":27,"character":1},"arguments":[{"selector":"ckeditor","template":"<ng-template></ng-template>","providers":[{"provide":{"__symbolic":"reference","module":"@angular/forms","name":"NG_VALUE_ACCESSOR","line":33,"character":12},"useExisting":{"__symbolic":"reference","name":"CKEditorComponent"},"multi":true}]}]}],"members":{"config":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":45,"character":2}}]}],"tagName":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":52,"character":2}}]}],"type":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":64,"character":2}}]}],"data":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":73,"character":2}}]}],"readOnly":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":98,"character":2}}]}],"ready":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":121,"character":2}}]}],"dataReady":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":129,"character":2}}]}],"change":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":138,"character":2}}]}],"dataChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":146,"character":2}}]}],"focus":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":153,"character":2}}]}],"blur":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":160,"character":2}}]}],"editorUrl":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":196,"character":2}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":198,"character":34},{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":198,"character":62}]}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"writeValue":[{"__symbolic":"method"}],"registerOnChange":[{"__symbolic":"method"}],"registerOnTouched":[{"__symbolic":"method"}],"createEditor":[{"__symbolic":"method"}],"subscribe":[{"__symbolic":"method"}],"propagateChange":[{"__symbolic":"method"}],"ensureDivareaPlugin":[{"__symbolic":"method"}],"removePlugin":[{"__symbolic":"method"}]}}},"origins":{"CKEditorModule":"./ckeditor.module","CKEditorComponent":"./ckeditor.component"},"importAs":"ckeditor4-angular"}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/
import { Component, NgZone, Input, Output, EventEmitter, forwardRef, ElementRef } from '@angular/core';
var CKEditorComponent_1;
import * as tslib_1 from "tslib";
import { Component, NgZone, Input, Output, EventEmitter, forwardRef, ElementRef, AfterViewInit, OnDestroy } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { getEditorNamespace } from './ckeditor.helpers';
export class CKEditorComponent {
/**
* @param {?} elementRef
* @param {?} ngZone
*/
let CKEditorComponent = CKEditorComponent_1 = class CKEditorComponent {
constructor(elementRef, ngZone) {

@@ -36,3 +30,3 @@ this.elementRef = elementRef;

*/
this.type = "divarea" /* DIVAREA */;
this.type = "classic" /* CLASSIC */;
/**

@@ -45,5 +39,14 @@ * Fires when the editor is ready. It corresponds with the `editor#instanceReady`

/**
* Fires when the editor data is loaded, e.g. after calling setData()
* https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-setData
* editor's method. It corresponds with the `editor#dataReady`
* https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#event-dataReady event.
*/
this.dataReady = new EventEmitter();
/**
* Fires when the content of the editor has changed. It corresponds with the `editor#change`
* https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#event-change
* event. For performance reasons this event may be called even when data didn't really changed.
* Please note that this event will only be fired when `undo` plugin is loaded. If you need to
* listen for editor changes (e.g. for two-way data binding), use `dataChange` event instead.
*/

@@ -79,5 +82,5 @@ this.change = new EventEmitter();

*
* Defaults to 'https://cdn.ckeditor.com/4.12.1/standard-all/ckeditor.js'
* Defaults to 'https://cdn.ckeditor.com/4.13.0/standard-all/ckeditor.js'
*/
this.editorUrl = 'https://cdn.ckeditor.com/4.12.1/standard-all/ckeditor.js';
this.editorUrl = 'https://cdn.ckeditor.com/4.13.0/standard-all/ckeditor.js';
}

@@ -90,4 +93,2 @@ /**

* See https://angular.io/api/forms/NgModel to learn more.
* @param {?} data
* @return {?}
*/

@@ -106,5 +107,2 @@ set data(data) {

}
/**
* @return {?}
*/
get data() {

@@ -117,4 +115,2 @@ return this._data;

* to learn more.
* @param {?} isReadOnly
* @return {?}
*/

@@ -129,5 +125,2 @@ set readOnly(isReadOnly) {

}
/**
* @return {?}
*/
get readOnly() {

@@ -139,21 +132,9 @@ if (this.instance) {

}
/**
* @return {?}
*/
ngAfterViewInit() {
getEditorNamespace(this.editorUrl).then((/**
* @return {?}
*/
() => {
getEditorNamespace(this.editorUrl).then(() => {
this.ngZone.runOutsideAngular(this.createEditor.bind(this));
})).catch(window.console.error);
}).catch(window.console.error);
}
/**
* @return {?}
*/
ngOnDestroy() {
this.ngZone.runOutsideAngular((/**
* @return {?}
*/
() => {
this.ngZone.runOutsideAngular(() => {
if (this.instance) {

@@ -163,95 +144,57 @@ this.instance.destroy();

}
}));
});
}
/**
* @param {?} value
* @return {?}
*/
writeValue(value) {
this.data = value;
}
/**
* @param {?} callback
* @return {?}
*/
registerOnChange(callback) {
this.onChange = callback;
}
/**
* @param {?} callback
* @return {?}
*/
registerOnTouched(callback) {
this.onTouched = callback;
}
/**
* @private
* @return {?}
*/
createEditor() {
/** @type {?} */
const element = this.createInitialElement();
this.config = this.ensureDivareaPlugin(this.config || {});
/** @type {?} */
const instance = this.type === "inline" /* INLINE */ ?
CKEDITOR.inline(element, this.config)
const element = document.createElement(this.tagName);
this.elementRef.nativeElement.appendChild(element);
if (this.type === "divarea" /* DIVAREA */) {
this.config = this.ensureDivareaPlugin(this.config || {});
}
const instance = this.type === "inline" /* INLINE */
? CKEDITOR.inline(element, this.config)
: CKEDITOR.replace(element, this.config);
instance.once('instanceReady', (/**
* @param {?} evt
* @return {?}
*/
function (evt) {
instance.once('instanceReady', evt => {
this.instance = instance;
this.wrapper.removeAttribute('style');
this.elementRef.nativeElement.appendChild(this.wrapper);
// Read only state may change during instance initialization.
this.readOnly = this._readOnly !== null ? this._readOnly : this.instance.readOnly;
this.subscribe(this.instance);
/** @type {?} */
const undo = instance.undoManager;
if (this.data !== null) {
undo && undo.lock();
instance.setData(this.data);
// Locking undoManager prevents 'change' event.
// Trigger it manually to updated bound data.
if (this.data !== instance.getData()) {
instance.fire('change');
}
undo && undo.unlock();
instance.setData(this.data, { callback: () => {
// Locking undoManager prevents 'change' event.
// Trigger it manually to updated bound data.
if (this.data !== instance.getData()) {
undo ? instance.fire('change') : instance.fire('dataReady');
}
undo && undo.unlock();
this.ngZone.run(() => {
this.ready.emit(evt);
});
} });
}
this.ngZone.run((/**
* @return {?}
*/
() => {
this.ready.emit(evt);
}));
}), this);
else {
this.ngZone.run(() => {
this.ready.emit(evt);
});
}
});
}
/**
* @private
* @param {?} editor
* @return {?}
*/
subscribe(editor) {
editor.on('focus', (/**
* @param {?} evt
* @return {?}
*/
evt => {
this.ngZone.run((/**
* @return {?}
*/
() => {
editor.on('focus', evt => {
this.ngZone.run(() => {
this.focus.emit(evt);
}));
}));
editor.on('blur', (/**
* @param {?} evt
* @return {?}
*/
evt => {
this.ngZone.run((/**
* @return {?}
*/
() => {
});
});
editor.on('blur', evt => {
this.ngZone.run(() => {
if (this.onTouched) {

@@ -261,32 +204,32 @@ this.onTouched();

this.blur.emit(evt);
}));
}));
editor.on('change', (/**
* @param {?} evt
* @return {?}
*/
evt => {
this.ngZone.run((/**
* @return {?}
*/
() => {
/** @type {?} */
const newData = editor.getData();
this.change.emit(evt);
if (newData === this.data) {
return;
}
this._data = newData;
this.dataChange.emit(newData);
if (this.onChange) {
this.onChange(newData);
}
}));
}));
});
});
editor.on('dataReady', this.propagateChange, this);
if (this.instance.undoManager) {
editor.on('change', this.propagateChange, this);
}
// If 'undo' plugin is not loaded, listen to 'selectionCheck' event instead. (#54).
else {
editor.on('selectionCheck', this.propagateChange, this);
}
}
/**
* @private
* @param {?} config
* @return {?}
*/
propagateChange(event) {
this.ngZone.run(() => {
const newData = this.instance.getData();
if (event.name == 'change') {
this.change.emit(event);
}
else if (event.name == 'dataReady') {
this.dataReady.emit(event);
}
if (newData === this.data) {
return;
}
this._data = newData;
this.dataChange.emit(newData);
if (this.onChange) {
this.onChange(newData);
}
});
}
ensureDivareaPlugin(config) {

@@ -302,8 +245,2 @@ let { extraPlugins, removePlugins } = config;

}
/**
* @private
* @param {?} plugins
* @param {?} toRemove
* @return {?}
*/
removePlugin(plugins, toRemove) {

@@ -313,49 +250,13 @@ if (!plugins) {

}
/** @type {?} */
const isString = typeof plugins === 'string';
if (isString) {
plugins = ((/** @type {?} */ (plugins))).split(',');
plugins = plugins.split(',');
}
plugins = ((/** @type {?} */ (plugins))).filter((/**
* @param {?} plugin
* @return {?}
*/
plugin => plugin !== toRemove));
plugins = plugins.filter(plugin => plugin !== toRemove);
if (isString) {
plugins = ((/** @type {?} */ (plugins))).join(',');
plugins = plugins.join(',');
}
return plugins;
}
/**
* @private
* @return {?}
*/
createInitialElement() {
// Render editor outside of component so it won't be removed from DOM before `instanceReady`.
this.wrapper = document.createElement('div');
/** @type {?} */
const element = document.createElement(this.tagName);
this.wrapper.setAttribute('style', 'display:none;');
document.body.appendChild(this.wrapper);
this.wrapper.appendChild(element);
return element;
}
}
CKEditorComponent.decorators = [
{ type: Component, args: [{
selector: 'ckeditor',
template: '<ng-template></ng-template>',
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef((/**
* @return {?}
*/
() => CKEditorComponent)),
multi: true,
}
]
}] }
];
/** @nocollapse */
};
CKEditorComponent.ctorParameters = () => [

@@ -365,134 +266,52 @@ { type: ElementRef },

];
CKEditorComponent.propDecorators = {
config: [{ type: Input }],
tagName: [{ type: Input }],
type: [{ type: Input }],
data: [{ type: Input }],
readOnly: [{ type: Input }],
ready: [{ type: Output }],
change: [{ type: Output }],
dataChange: [{ type: Output }],
focus: [{ type: Output }],
blur: [{ type: Output }],
editorUrl: [{ type: Input }]
};
if (false) {
/**
* The configuration of the editor.
* See https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html
* to learn more.
* @type {?}
*/
CKEditorComponent.prototype.config;
/**
* Tag name of the editor component.
*
* The default tag is `textarea`.
* @type {?}
*/
CKEditorComponent.prototype.tagName;
/**
* The type of the editor interface.
*
* By default editor interface will be initialized as `divarea` editor which is an inline editor with fixed UI.
* You can change interface type by choosing between `divarea` and `inline` editor interface types.
*
* See https://ckeditor.com/docs/ckeditor4/latest/guide/dev_uitypes.html
* and https://ckeditor.com/docs/ckeditor4/latest/examples/fixedui.html
* to learn more.
* @type {?}
*/
CKEditorComponent.prototype.type;
/**
* Fires when the editor is ready. It corresponds with the `editor#instanceReady`
* https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#event-instanceReady
* event.
* @type {?}
*/
CKEditorComponent.prototype.ready;
/**
* Fires when the content of the editor has changed. It corresponds with the `editor#change`
* https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#event-change
* event. For performance reasons this event may be called even when data didn't really changed.
* @type {?}
*/
CKEditorComponent.prototype.change;
/**
* Fires when the content of the editor has changed. In contrast to `change` - only emits when
* data really changed thus can be successfully used with `[data]` and two way `[(data)]` binding.
*
* See more: https://angular.io/guide/template-syntax#two-way-binding---
* @type {?}
*/
CKEditorComponent.prototype.dataChange;
/**
* Fires when the editing view of the editor is focused. It corresponds with the `editor#focus`
* https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#event-focus
* event.
* @type {?}
*/
CKEditorComponent.prototype.focus;
/**
* Fires when the editing view of the editor is blurred. It corresponds with the `editor#blur`
* https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#event-blur
* event.
* @type {?}
*/
CKEditorComponent.prototype.blur;
/**
* The instance of the editor created by this component.
* @type {?}
*/
CKEditorComponent.prototype.instance;
/**
* Wrapper element used to initialize editor.
* @type {?}
*/
CKEditorComponent.prototype.wrapper;
/**
* If the component is read–only before the editor instance is created, it remembers that state,
* so the editor can become read–only once it is ready.
* @type {?}
* @private
*/
CKEditorComponent.prototype._readOnly;
/**
* A callback executed when the content of the editor changes. Part of the
* `ControlValueAccessor` (https://angular.io/api/forms/ControlValueAccessor) interface.
*
* Note: Unset unless the component uses the `ngModel`.
* @type {?}
*/
CKEditorComponent.prototype.onChange;
/**
* A callback executed when the editor has been blurred. Part of the
* `ControlValueAccessor` (https://angular.io/api/forms/ControlValueAccessor) interface.
*
* Note: Unset unless the component uses the `ngModel`.
* @type {?}
*/
CKEditorComponent.prototype.onTouched;
/**
* @type {?}
* @private
*/
CKEditorComponent.prototype._data;
/**
* CKEditor 4 script url address. Script will be loaded only if CKEDITOR namespace is missing.
*
* Defaults to 'https://cdn.ckeditor.com/4.12.1/standard-all/ckeditor.js'
* @type {?}
*/
CKEditorComponent.prototype.editorUrl;
/**
* @type {?}
* @private
*/
CKEditorComponent.prototype.elementRef;
/**
* @type {?}
* @private
*/
CKEditorComponent.prototype.ngZone;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vY2tlZGl0b3I0LWFuZ3VsYXIvIiwic291cmNlcyI6WyJja2VkaXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFLQSxPQUFPLEVBQ04sU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixVQUFVLEVBQ1YsVUFBVSxFQUVWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFFTixpQkFBaUIsRUFDakIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQWtCeEQsTUFBTSxPQUFPLGlCQUFpQjs7Ozs7SUEwSjdCLFlBQXFCLFVBQW1DLEVBQVUsTUFBYztRQUEzRCxlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7Ozs7OztRQTdJdkUsWUFBTyxHQUFHLFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7UUFZckIsU0FBSSwyQkFBc0Q7Ozs7OztRQXlEekQsVUFBSyxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDOzs7Ozs7UUFPaEQsV0FBTSxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDOzs7Ozs7O1FBUWpELGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQzs7Ozs7O1FBT3JELFVBQUssR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQzs7Ozs7O1FBT2hELFNBQUksR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQzs7Ozs7UUFnQmpELGNBQVMsR0FBWSxJQUFJLENBQUM7UUFrQjFCLFVBQUssR0FBVyxJQUFJLENBQUM7Ozs7OztRQU9wQixjQUFTLEdBQUcsMERBQTBELENBQUM7SUFHaEYsQ0FBQzs7Ozs7Ozs7OztJQXpIRCxJQUFhLElBQUksQ0FBRSxJQUFZO1FBQzlCLElBQUssSUFBSSxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUc7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SUFPN0Isc0NBQWdGOzs7OztJQUVuRSx1Q0FBMkM7Ozs7O0lBQUUsbUNBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBDb3B5cmlnaHQgKGMpIDIwMDMtMjAxOSwgQ0tTb3VyY2UgLSBGcmVkZXJpY28gS25hYmJlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEZvciBsaWNlbnNpbmcsIHNlZSBMSUNFTlNFLm1kLlxuICovXG5cbmltcG9ydCB7XG5cdENvbXBvbmVudCxcblx0Tmdab25lLFxuXHRJbnB1dCxcblx0T3V0cHV0LFxuXHRFdmVudEVtaXR0ZXIsXG5cdGZvcndhcmRSZWYsXG5cdEVsZW1lbnRSZWYsXG5cdEFmdGVyVmlld0luaXQsIE9uRGVzdHJveVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtcblx0Q29udHJvbFZhbHVlQWNjZXNzb3IsXG5cdE5HX1ZBTFVFX0FDQ0VTU09SXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgZ2V0RWRpdG9yTmFtZXNwYWNlIH0gZnJvbSAnLi9ja2VkaXRvci5oZWxwZXJzJztcblxuaW1wb3J0IHsgQ0tFZGl0b3I0IH0gZnJvbSAnLi9ja2VkaXRvcic7XG5cbmRlY2xhcmUgbGV0IENLRURJVE9SOiBhbnk7XG5cbkBDb21wb25lbnQoIHtcblx0c2VsZWN0b3I6ICdja2VkaXRvcicsXG5cdHRlbXBsYXRlOiAnPG5nLXRlbXBsYXRlPjwvbmctdGVtcGxhdGU+JyxcblxuXHRwcm92aWRlcnM6IFtcblx0XHR7XG5cdFx0XHRwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcblx0XHRcdHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCAoKSA9PiBDS0VkaXRvckNvbXBvbmVudCApLFxuXHRcdFx0bXVsdGk6IHRydWUsXG5cdFx0fVxuXHRdXG59IClcbmV4cG9ydCBjbGFzcyBDS0VkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXHQvKipcblx0ICogVGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGVkaXRvci5cblx0ICogU2VlIGh0dHBzOi8vY2tlZGl0b3IuY29tL2RvY3MvY2tlZGl0b3I0L2xhdGVzdC9hcGkvQ0tFRElUT1JfY29uZmlnLmh0bWxcblx0ICogdG8gbGVhcm4gbW9yZS5cblx0ICovXG5cdEBJbnB1dCgpIGNvbmZpZz86IENLRWRpdG9yNC5Db25maWc7XG5cblx0LyoqXG5cdCAqIFRhZyBuYW1lIG9mIHRoZSBlZGl0b3IgY29tcG9uZW50LlxuXHQgKlxuXHQgKiBUaGUgZGVmYXVsdCB0YWcgaXMgYHRleHRhcmVhYC5cblx0ICovXG5cdEBJbnB1dCgpIHRhZ05hbWUgPSAndGV4dGFyZWEnO1xuXG5cdC8qKlxuXHQgKiBUaGUgdHlwZSBvZiB0aGUgZWRpdG9yIGludGVyZmFjZS5cblx0ICpcblx0ICogQnkgZGVmYXVsdCBlZGl0b3IgaW50ZXJmYWNlIHdpbGwgYmUgaW5pdGlhbGl6ZWQgYXMgYGRpdmFyZWFgIGVkaXRvciB3aGljaCBpcyBhbiBpbmxpbmUgZWRpdG9yIHdpdGggZml4ZWQgVUkuXG5cdCAqIFlvdSBjYW4gY2hhbmdlIGludGVyZmFjZSB0eXBlIGJ5IGNob29zaW5nIGJldHdlZW4gYGRpdmFyZWFgIGFuZCBgaW5saW5lYCBlZGl0b3IgaW50ZXJmYWNlIHR5cGVzLlxuXHQgKlxuXHQgKiBTZWUgaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjQvbGF0ZXN0L2d1aWRlL2Rldl91aXR5cGVzLmh0bWxcblx0ICogYW5kIGh0dHBzOi8vY2tlZGl0b3IuY29tL2RvY3MvY2tlZGl0b3I0L2xhdGVzdC9leGFtcGxlcy9maXhlZHVpLmh0bWxcblx0ICogdG8gbGVhcm4gbW9yZS5cblx0ICovXG5cdEBJbnB1dCgpIHR5cGU6IENLRWRpdG9yNC5FZGl0b3JUeXBlID0gQ0tFZGl0b3I0LkVkaXRvclR5cGUuRElWQVJFQTtcblxuXHQvKipcblx0ICogS2VlcHMgdHJhY2sgb2YgdGhlIGVkaXRvcidzIGRhdGEuXG5cdCAqXG5cdCAqIEl0J3MgYWxzbyBkZWNvcmF0ZWQgYXMgYW4gaW5wdXQgd2hpY2ggaXMgdXNlZnVsIHdoZW4gbm90IHVzaW5nIHRoZSBuZ01vZGVsLlxuXHQgKlxuXHQgKiBTZWUgaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9mb3Jtcy9OZ01vZGVsIHRvIGxlYXJuIG1vcmUuXG5cdCAqL1xuXHRASW5wdXQoKSBzZXQgZGF0YSggZGF0YTogc3RyaW5nICkge1xuXHRcdGlmICggZGF0YSA9PT0gdGhpcy5fZGF0YSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuaW5zdGFuY2UgKSB7XG5cdFx0XHR0aGlzLmluc3RhbmNlLnNldERhdGEoIGRhdGEgKTtcblx0XHRcdC8vIERhdGEgbWF5IGJlIGNoYW5nZWQgYnkgQUNGLlxuXHRcdFx0dGhpcy5fZGF0YSA9IHRoaXMuaW5zdGFuY2UuZ2V0RGF0YSgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuX2RhdGEgPSBkYXRhO1xuXG5cdH1cblxuXHRnZXQgZGF0YSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9kYXRhO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdoZW4gc2V0IGB0cnVlYCwgdGhlIGVkaXRvciBiZWNvbWVzIHJlYWQtb25seS5cblx0ICogaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjQvbGF0ZXN0L2FwaS9DS0VESVRPUl9lZGl0b3IuaHRtbCNwcm9wZXJ0eS1yZWFkT25seVxuXHQgKiB0byBsZWFybiBtb3JlLlxuXHQgKi9cblx0QElucHV0KCkgc2V0IHJlYWRPbmx5KCBpc1JlYWRPbmx5OiBib29sZWFuICkge1xuXHRcdGlmICggdGhpcy5pbnN0YW5jZSApIHtcblx0XHRcdHRoaXMuaW5zdGFuY2Uuc2V0UmVhZE9ubHkoIGlzUmVhZE9ubHkgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZWxheSBzZXR0aW5nIHJlYWQtb25seSBzdGF0ZSB1bnRpbCBlZGl0b3IgaW5pdGlhbGl6YXRpb24uXG5cdFx0dGhpcy5fcmVhZE9ubHkgPSBpc1JlYWRPbmx5O1xuXHR9XG5cblx0Z2V0IHJlYWRPbmx5KCk6IGJvb2xlYW4ge1xuXHRcdGlmICggdGhpcy5pbnN0YW5jZSApIHtcblx0XHRcdHJldHVybiB0aGlzLmluc3RhbmNlLnJlYWRPbmx5O1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLl9yZWFkT25seTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGaXJlcyB3aGVuIHRoZSBlZGl0b3IgaXMgcmVhZHkuIEl0IGNvcnJlc3BvbmRzIHdpdGggdGhlIGBlZGl0b3IjaW5zdGFuY2VSZWFkeWBcblx0ICogaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjQvbGF0ZXN0L2FwaS9DS0VESVRPUl9lZGl0b3IuaHRtbCNldmVudC1pbnN0YW5jZVJlYWR5XG5cdCAqIGV2ZW50LlxuXHQgKi9cblx0QE91dHB1dCgpIHJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxDS0VkaXRvcjQuRXZlbnRJbmZvPigpO1xuXG5cdC8qKlxuXHQgKiBGaXJlcyB3aGVuIHRoZSBjb250ZW50IG9mIHRoZSBlZGl0b3IgaGFzIGNoYW5nZWQuIEl0IGNvcnJlc3BvbmRzIHdpdGggdGhlIGBlZGl0b3IjY2hhbmdlYFxuXHQgKiBodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNC9sYXRlc3QvYXBpL0NLRURJVE9SX2VkaXRvci5odG1sI2V2ZW50LWNoYW5nZVxuXHQgKiBldmVudC4gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgdGhpcyBldmVudCBtYXkgYmUgY2FsbGVkIGV2ZW4gd2hlbiBkYXRhIGRpZG4ndCByZWFsbHkgY2hhbmdlZC5cblx0ICovXG5cdEBPdXRwdXQoKSBjaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPENLRWRpdG9yNC5FdmVudEluZm8+KCk7XG5cblx0LyoqXG5cdCAqIEZpcmVzIHdoZW4gdGhlIGNvbnRlbnQgb2YgdGhlIGVkaXRvciBoYXMgY2hhbmdlZC4gSW4gY29udHJhc3QgdG8gYGNoYW5nZWAgLSBvbmx5IGVtaXRzIHdoZW5cblx0ICogZGF0YSByZWFsbHkgY2hhbmdlZCB0aHVzIGNhbiBiZSBzdWNjZXNzZnVsbHkgdXNlZCB3aXRoIGBbZGF0YV1gIGFuZCB0d28gd2F5IGBbKGRhdGEpXWAgYmluZGluZy5cblx0ICpcblx0ICogU2VlIG1vcmU6IGh0dHBzOi8vYW5ndWxhci5pby9ndWlkZS90ZW1wbGF0ZS1zeW50YXgjdHdvLXdheS1iaW5kaW5nLS0tXG5cdCAqL1xuXHRAT3V0cHV0KCkgZGF0YUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q0tFZGl0b3I0LkV2ZW50SW5mbz4oKTtcblxuXHQvKipcblx0ICogRmlyZXMgd2hlbiB0aGUgZWRpdGluZyB2aWV3IG9mIHRoZSBlZGl0b3IgaXMgZm9jdXNlZC4gSXQgY29ycmVzcG9uZHMgd2l0aCB0aGUgYGVkaXRvciNmb2N1c2Bcblx0ICogaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjQvbGF0ZXN0L2FwaS9DS0VESVRPUl9lZGl0b3IuaHRtbCNldmVudC1mb2N1c1xuXHQgKiBldmVudC5cblx0ICovXG5cdEBPdXRwdXQoKSBmb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXI8Q0tFZGl0b3I0LkV2ZW50SW5mbz4oKTtcblxuXHQvKipcblx0ICogRmlyZXMgd2hlbiB0aGUgZWRpdGluZyB2aWV3IG9mIHRoZSBlZGl0b3IgaXMgYmx1cnJlZC4gSXQgY29ycmVzcG9uZHMgd2l0aCB0aGUgYGVkaXRvciNibHVyYFxuXHQgKiBodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNC9sYXRlc3QvYXBpL0NLRURJVE9SX2VkaXRvci5odG1sI2V2ZW50LWJsdXJcblx0ICogZXZlbnQuXG5cdCAqL1xuXHRAT3V0cHV0KCkgYmx1ciA9IG5ldyBFdmVudEVtaXR0ZXI8Q0tFZGl0b3I0LkV2ZW50SW5mbz4oKTtcblxuXHQvKipcblx0ICogVGhlIGluc3RhbmNlIG9mIHRoZSBlZGl0b3IgY3JlYXRlZCBieSB0aGlzIGNvbXBvbmVudC5cblx0ICovXG5cdGluc3RhbmNlOiBhbnk7XG5cblx0LyoqXG5cdCAqIFdyYXBwZXIgZWxlbWVudCB1c2VkIHRvIGluaXRpYWxpemUgZWRpdG9yLlxuXHQgKi9cblx0d3JhcHBlcjogSFRNTEVsZW1lbnQ7XG5cblx0LyoqXG5cdCAqIElmIHRoZSBjb21wb25lbnQgaXMgcmVhZOKAk29ubHkgYmVmb3JlIHRoZSBlZGl0b3IgaW5zdGFuY2UgaXMgY3JlYXRlZCwgaXQgcmVtZW1iZXJzIHRoYXQgc3RhdGUsXG5cdCAqIHNvIHRoZSBlZGl0b3IgY2FuIGJlY29tZSByZWFk4oCTb25seSBvbmNlIGl0IGlzIHJlYWR5LlxuXHQgKi9cblx0cHJpdmF0ZSBfcmVhZE9ubHk6IGJvb2xlYW4gPSBudWxsO1xuXG5cdC8qKlxuXHQgKiBBIGNhbGxiYWNrIGV4ZWN1dGVkIHdoZW4gdGhlIGNvbnRlbnQgb2YgdGhlIGVkaXRvciBjaGFuZ2VzLiBQYXJ0IG9mIHRoZVxuXHQgKiBgQ29udHJvbFZhbHVlQWNjZXNzb3JgIChodHRwczovL2FuZ3VsYXIuaW8vYXBpL2Zvcm1zL0NvbnRyb2xWYWx1ZUFjY2Vzc29yKSBpbnRlcmZhY2UuXG5cdCAqXG5cdCAqIE5vdGU6IFVuc2V0IHVubGVzcyB0aGUgY29tcG9uZW50IHVzZXMgdGhlIGBuZ01vZGVsYC5cblx0ICovXG5cdG9uQ2hhbmdlPzogKCBkYXRhOiBzdHJpbmcgKSA9PiB2b2lkO1xuXG5cdC8qKlxuXHQgKiBBIGNhbGxiYWNrIGV4ZWN1dGVkIHdoZW4gdGhlIGVkaXRvciBoYXMgYmVlbiBibHVycmVkLiBQYXJ0IG9mIHRoZVxuXHQgKiBgQ29udHJvbFZhbHVlQWNjZXNzb3JgIChodHRwczovL2FuZ3VsYXIuaW8vYXBpL2Zvcm1zL0NvbnRyb2xWYWx1ZUFjY2Vzc29yKSBpbnRlcmZhY2UuXG5cdCAqXG5cdCAqIE5vdGU6IFVuc2V0IHVubGVzcyB0aGUgY29tcG9uZW50IHVzZXMgdGhlIGBuZ01vZGVsYC5cblx0ICovXG5cdG9uVG91Y2hlZD86ICgpID0+IHZvaWQ7XG5cblx0cHJpdmF0ZSBfZGF0YTogc3RyaW5nID0gbnVsbDtcblxuXHQvKipcblx0ICogQ0tFZGl0b3IgNCBzY3JpcHQgdXJsIGFkZHJlc3MuIFNjcmlwdCB3aWxsIGJlIGxvYWRlZCBvbmx5IGlmIENLRURJVE9SIG5hbWVzcGFjZSBpcyBtaXNzaW5nLlxuXHQgKlxuXHQgKiBEZWZhdWx0cyB0byAnaHR0cHM6Ly9jZG4uY2tlZGl0b3IuY29tLzQuMTIuMS9zdGFuZGFyZC1hbGwvY2tlZGl0b3IuanMnXG5cdCAqL1xuXHRASW5wdXQoKSBlZGl0b3JVcmwgPSAnaHR0cHM6Ly9jZG4uY2tlZGl0b3IuY29tLzQuMTIuMS9zdGFuZGFyZC1hbGwvY2tlZGl0b3IuanMnO1xuXG5cdGNvbnN0cnVjdG9yKCBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LCBwcml2YXRlIG5nWm9uZTogTmdab25lICkge1xuXHR9XG5cblx0bmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuXHRcdGdldEVkaXRvck5hbWVzcGFjZSggdGhpcy5lZGl0b3JVcmwgKS50aGVuKCAoKSA9PiB7XG5cdFx0XHR0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhciggdGhpcy5jcmVhdGVFZGl0b3IuYmluZCggdGhpcyApICk7XG5cdFx0fSApLmNhdGNoKCB3aW5kb3cuY29uc29sZS5lcnJvciApO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoICgpID0+IHtcblx0XHRcdGlmICggdGhpcy5pbnN0YW5jZSApIHtcblx0XHRcdFx0dGhpcy5pbnN0YW5jZS5kZXN0cm95KCk7XG5cdFx0XHRcdHRoaXMuaW5zdGFuY2UgPSBudWxsO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxuXG5cdHdyaXRlVmFsdWUoIHZhbHVlOiBzdHJpbmcgKTogdm9pZCB7XG5cdFx0dGhpcy5kYXRhID0gdmFsdWU7XG5cdH1cblxuXHRyZWdpc3Rlck9uQ2hhbmdlKCBjYWxsYmFjazogKCBkYXRhOiBzdHJpbmcgKSA9PiB2b2lkICk6IHZvaWQge1xuXHRcdHRoaXMub25DaGFuZ2UgPSBjYWxsYmFjaztcblx0fVxuXG5cdHJlZ2lzdGVyT25Ub3VjaGVkKCBjYWxsYmFjazogKCkgPT4gdm9pZCApOiB2b2lkIHtcblx0XHR0aGlzLm9uVG91Y2hlZCA9IGNhbGxiYWNrO1xuXHR9XG5cblx0cHJpdmF0ZSBjcmVhdGVFZGl0b3IoKTogdm9pZCB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IHRoaXMuY3JlYXRlSW5pdGlhbEVsZW1lbnQoKTtcblxuXHRcdHRoaXMuY29uZmlnID0gdGhpcy5lbnN1cmVEaXZhcmVhUGx1Z2luKCB0aGlzLmNvbmZpZyB8fCB7fSApO1xuXG5cdFx0Y29uc3QgaW5zdGFuY2UgPSB0aGlzLnR5cGUgPT09IENLRWRpdG9yNC5FZGl0b3JUeXBlLklOTElORSA/XG5cdFx0XHRDS0VESVRPUi5pbmxpbmUoIGVsZW1lbnQsIHRoaXMuY29uZmlnIClcblx0XHRcdDogQ0tFRElUT1IucmVwbGFjZSggZWxlbWVudCwgdGhpcy5jb25maWcgKTtcblxuXHRcdGluc3RhbmNlLm9uY2UoICdpbnN0YW5jZVJlYWR5JywgZnVuY3Rpb24oIGV2dCApIHtcblx0XHRcdHRoaXMuaW5zdGFuY2UgPSBpbnN0YW5jZTtcblxuXHRcdFx0dGhpcy53cmFwcGVyLnJlbW92ZUF0dHJpYnV0ZSggJ3N0eWxlJyApO1xuXG5cdFx0XHR0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZCggdGhpcy53cmFwcGVyICk7XG5cblx0XHRcdC8vIFJlYWQgb25seSBzdGF0ZSBtYXkgY2hhbmdlIGR1cmluZyBpbnN0YW5jZSBpbml0aWFsaXphdGlvbi5cblx0XHRcdHRoaXMucmVhZE9ubHkgPSB0aGlzLl9yZWFkT25seSAhPT0gbnVsbCA/IHRoaXMuX3JlYWRPbmx5IDogdGhpcy5pbnN0YW5jZS5yZWFkT25seTtcblxuXHRcdFx0dGhpcy5zdWJzY3JpYmUoIHRoaXMuaW5zdGFuY2UgKTtcblxuXHRcdFx0Y29uc3QgdW5kbyA9IGluc3RhbmNlLnVuZG9NYW5hZ2VyO1xuXG5cdFx0XHRpZiAoIHRoaXMuZGF0YSAhPT0gbnVsbCApIHtcblx0XHRcdFx0dW5kbyAmJiB1bmRvLmxvY2soKTtcblx0XHRcdFx0aW5zdGFuY2Uuc2V0RGF0YSggdGhpcy5kYXRhICk7XG5cblx0XHRcdFx0Ly8gTG9ja2luZyB1bmRvTWFuYWdlciBwcmV2ZW50cyAnY2hhbmdlJyBldmVudC5cblx0XHRcdFx0Ly8gVHJpZ2dlciBpdCBtYW51YWxseSB0byB1cGRhdGVkIGJvdW5kIGRhdGEuXG5cdFx0XHRcdGlmICggdGhpcy5kYXRhICE9PSBpbnN0YW5jZS5nZXREYXRhKCkgKSB7XG5cdFx0XHRcdFx0aW5zdGFuY2UuZmlyZSggJ2NoYW5nZScgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR1bmRvICYmIHVuZG8udW5sb2NrKCk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMubmdab25lLnJ1biggKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnJlYWR5LmVtaXQoIGV2dCApO1xuXHRcdFx0fSApO1xuXHRcdH0sIHRoaXMgKTtcblx0fVxuXG5cdHByaXZhdGUgc3Vic2NyaWJlKCBlZGl0b3I6IGFueSApOiB2b2lkIHtcblx0XHRlZGl0b3Iub24oICdmb2N1cycsIGV2dCA9PiB7XG5cdFx0XHR0aGlzLm5nWm9uZS5ydW4oICgpID0+IHtcblx0XHRcdFx0dGhpcy5mb2N1cy5lbWl0KCBldnQgKTtcblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cblx0XHRlZGl0b3Iub24oICdibHVyJywgZXZ0ID0+IHtcblx0XHRcdHRoaXMubmdab25lLnJ1biggKCkgPT4ge1xuXHRcdFx0XHRpZiAoIHRoaXMub25Ub3VjaGVkICkge1xuXHRcdFx0XHRcdHRoaXMub25Ub3VjaGVkKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLmJsdXIuZW1pdCggZXZ0ICk7XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXG5cdFx0ZWRpdG9yLm9uKCAnY2hhbmdlJywgZXZ0ID0+IHtcblx0XHRcdHRoaXMubmdab25lLnJ1biggKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBuZXdEYXRhID0gZWRpdG9yLmdldERhdGEoKTtcblxuXHRcdFx0XHR0aGlzLmNoYW5nZS5lbWl0KCBldnQgKTtcblxuXHRcdFx0XHRpZiAoIG5ld0RhdGEgPT09IHRoaXMuZGF0YSApIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLl9kYXRhID0gbmV3RGF0YTtcblx0XHRcdFx0dGhpcy5kYXRhQ2hhbmdlLmVtaXQoIG5ld0RhdGEgKTtcblxuXHRcdFx0XHRpZiAoIHRoaXMub25DaGFuZ2UgKSB7XG5cdFx0XHRcdFx0dGhpcy5vbkNoYW5nZSggbmV3RGF0YSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0cHJpdmF0ZSBlbnN1cmVEaXZhcmVhUGx1Z2luKCBjb25maWc6IENLRWRpdG9yNC5Db25maWcgKTogQ0tFZGl0b3I0LkNvbmZpZyB7XG5cdFx0bGV0IHsgZXh0cmFQbHVnaW5zLCByZW1vdmVQbHVnaW5zIH0gPSBjb25maWc7XG5cblx0XHRleHRyYVBsdWdpbnMgPSB0aGlzLnJlbW92ZVBsdWdpbiggZXh0cmFQbHVnaW5zLCAnZGl2YXJlYScgKSB8fCAnJztcblx0XHRleHRyYVBsdWdpbnMgPSBleHRyYVBsdWdpbnMuY29uY2F0KCB0eXBlb2YgZXh0cmFQbHVnaW5zID09PSAnc3RyaW5nJyA/ICcsZGl2YXJlYScgOiAnZGl2YXJlYScgKTtcblxuXHRcdGlmICggcmVtb3ZlUGx1Z2lucyAmJiByZW1vdmVQbHVnaW5zLmluY2x1ZGVzKCAnZGl2YXJlYScgKSApIHtcblxuXHRcdFx0cmVtb3ZlUGx1Z2lucyA9IHRoaXMucmVtb3ZlUGx1Z2luKCByZW1vdmVQbHVnaW5zLCAnZGl2YXJlYScgKTtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnW0NLRURJVE9SXSBkaXZhcmVhIHBsdWdpbiBpcyByZXF1aXJlZCB0byBpbml0aWFsaXplIGVkaXRvciB1c2luZyBBbmd1bGFyIGludGVncmF0aW9uLicgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbigge30sIGNvbmZpZywgeyBleHRyYVBsdWdpbnMsIHJlbW92ZVBsdWdpbnMgfSApO1xuXHR9XG5cblx0cHJpdmF0ZSByZW1vdmVQbHVnaW4oIHBsdWdpbnM6IHN0cmluZyB8IHN0cmluZ1tdLCB0b1JlbW92ZTogc3RyaW5nICk6IHN0cmluZyB8IHN0cmluZ1tdIHtcblx0XHRpZiAoICFwbHVnaW5zICkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaXNTdHJpbmcgPSB0eXBlb2YgcGx1Z2lucyA9PT0gJ3N0cmluZyc7XG5cblx0XHRpZiAoIGlzU3RyaW5nICkge1xuXHRcdFx0cGx1Z2lucyA9ICggcGx1Z2lucyBhcyBzdHJpbmcgKS5zcGxpdCggJywnICk7XG5cdFx0fVxuXG5cdFx0cGx1Z2lucyA9ICggcGx1Z2lucyBhcyBzdHJpbmdbXSApLmZpbHRlciggcGx1Z2luID0+IHBsdWdpbiAhPT0gdG9SZW1vdmUgKTtcblxuXHRcdGlmICggaXNTdHJpbmcgKSB7XG5cdFx0XHRwbHVnaW5zID0gKCBwbHVnaW5zIGFzIHN0cmluZ1tdICkuam9pbiggJywnICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBsdWdpbnM7XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZUluaXRpYWxFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcblx0XHQvLyBSZW5kZXIgZWRpdG9yIG91dHNpZGUgb2YgY29tcG9uZW50IHNvIGl0IHdvbid0IGJlIHJlbW92ZWQgZnJvbSBET00gYmVmb3JlIGBpbnN0YW5jZVJlYWR5YC5cblx0XHR0aGlzLndyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApO1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCB0aGlzLnRhZ05hbWUgKTtcblxuXHRcdHRoaXMud3JhcHBlci5zZXRBdHRyaWJ1dGUoICdzdHlsZScsICdkaXNwbGF5Om5vbmU7JyApO1xuXG5cdFx0ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggdGhpcy53cmFwcGVyICk7XG5cdFx0dGhpcy53cmFwcGVyLmFwcGVuZENoaWxkKCBlbGVtZW50ICk7XG5cblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxufVxuIl19
tslib_1.__decorate([
Input()
], CKEditorComponent.prototype, "config", void 0);
tslib_1.__decorate([
Input()
], CKEditorComponent.prototype, "tagName", void 0);
tslib_1.__decorate([
Input()
], CKEditorComponent.prototype, "type", void 0);
tslib_1.__decorate([
Input()
], CKEditorComponent.prototype, "data", null);
tslib_1.__decorate([
Input()
], CKEditorComponent.prototype, "readOnly", null);
tslib_1.__decorate([
Output()
], CKEditorComponent.prototype, "ready", void 0);
tslib_1.__decorate([
Output()
], CKEditorComponent.prototype, "dataReady", void 0);
tslib_1.__decorate([
Output()
], CKEditorComponent.prototype, "change", void 0);
tslib_1.__decorate([
Output()
], CKEditorComponent.prototype, "dataChange", void 0);
tslib_1.__decorate([
Output()
], CKEditorComponent.prototype, "focus", void 0);
tslib_1.__decorate([
Output()
], CKEditorComponent.prototype, "blur", void 0);
tslib_1.__decorate([
Input()
], CKEditorComponent.prototype, "editorUrl", void 0);
CKEditorComponent = CKEditorComponent_1 = tslib_1.__decorate([
Component({
selector: 'ckeditor',
template: '<ng-template></ng-template>',
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => CKEditorComponent_1),
multi: true,
}
]
})
], CKEditorComponent);
export { CKEditorComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vY2tlZGl0b3I0LWFuZ3VsYXIvIiwic291cmNlcyI6WyJja2VkaXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHOzs7QUFFSCxPQUFPLEVBQ04sU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixVQUFVLEVBQ1YsVUFBVSxFQUNWLGFBQWEsRUFBRSxTQUFTLEVBQ3hCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFFTixpQkFBaUIsRUFDakIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQWtCeEQsSUFBYSxpQkFBaUIseUJBQTlCLE1BQWEsaUJBQWlCO0lBK0o3QixZQUFxQixVQUFzQixFQUFVLE1BQWM7UUFBOUMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7UUF2Sm5FOzs7O1dBSUc7UUFDTSxZQUFPLEdBQUcsVUFBVSxDQUFDO1FBRTlCOzs7Ozs7Ozs7V0FTRztRQUNNLFNBQUksMkJBQXNEO1FBb0RuRTs7OztXQUlHO1FBQ08sVUFBSyxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDO1FBRTFEOzs7OztXQUtHO1FBQ08sY0FBUyxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDO1FBRTlEOzs7Ozs7V0FNRztRQUNPLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUUzRDs7Ozs7V0FLRztRQUNPLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUUvRDs7OztXQUlHO1FBQ08sVUFBSyxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDO1FBRTFEOzs7O1dBSUc7UUFDTyxTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQXVCLENBQUM7UUFPekQ7OztXQUdHO1FBQ0ssY0FBUyxHQUFZLElBQUks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RDtBQVFqRDtJQUFULE1BQU0sRUFBRTtxREFBc0Q7QUFPckQ7SUFBVCxNQUFNLEVBQUU7Z0RBQWlEO0FBT2hEO0lBQVQsTUFBTSxFQUFFOytDQUFnRDtBQW9DaEQ7SUFBUixLQUFLLEVBQUU7b0RBQXdFO0FBN0pwRSxpQkFBaUI7SUFaN0IsU0FBUyxDQUFFO1FBQ1gsUUFBUSxFQUFFLFVBQVU7UUFDcEIsUUFBUSxFQUFFLDZCQUE2QjtRQUV2QyxTQUFTLEVBQUU7WUFDVjtnQkFDQyxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFFLEdBQUcsRUFBRSxDQUFDLG1CQUFpQixDQUFFO2dCQUNsRCxLQUFLLEVBQUUsSUFBSTthQUNYO1NBQ0Q7S0FDRCxDQUFFO0dBQ1UsaUJBQWlCLENBZ1U3QjtTQWhVWSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIENvcHlyaWdodCAoYykgMjAwMy0yMDE5LCBDS1NvdXJjZSAtIEZyZWRlcmljbyBLbmFiYmVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogRm9yIGxpY2Vuc2luZywgc2VlIExJQ0VOU0UubWQuXG4gKi9cblxuaW1wb3J0IHtcblx0Q29tcG9uZW50LFxuXHROZ1pvbmUsXG5cdElucHV0LFxuXHRPdXRwdXQsXG5cdEV2ZW50RW1pdHRlcixcblx0Zm9yd2FyZFJlZixcblx0RWxlbWVudFJlZixcblx0QWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuXHRDb250cm9sVmFsdWVBY2Nlc3Nvcixcblx0TkdfVkFMVUVfQUNDRVNTT1Jcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBnZXRFZGl0b3JOYW1lc3BhY2UgfSBmcm9tICcuL2NrZWRpdG9yLmhlbHBlcnMnO1xuXG5pbXBvcnQgeyBDS0VkaXRvcjQgfSBmcm9tICcuL2NrZWRpdG9yJztcblxuZGVjbGFyZSBsZXQgQ0tFRElUT1I6IGFueTtcblxuQENvbXBvbmVudCgge1xuXHRzZWxlY3RvcjogJ2NrZWRpdG9yJyxcblx0dGVtcGxhdGU6ICc8bmctdGVtcGxhdGU+PC9uZy10ZW1wbGF0ZT4nLFxuXG5cdHByb3ZpZGVyczogW1xuXHRcdHtcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuXHRcdFx0dXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoICgpID0+IENLRWRpdG9yQ29tcG9uZW50ICksXG5cdFx0XHRtdWx0aTogdHJ1ZSxcblx0XHR9XG5cdF1cbn0gKVxuZXhwb3J0IGNsYXNzIENLRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG5cdC8qKlxuXHQgKiBUaGUgY29uZmlndXJhdGlvbiBvZiB0aGUgZWRpdG9yLlxuXHQgKiBTZWUgaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjQvbGF0ZXN0L2FwaS9DS0VESVRPUl9jb25maWcuaHRtbFxuXHQgKiB0byBsZWFybiBtb3JlLlxuXHQgKi9cblx0QElucHV0KCkgY29uZmlnPzogQ0tFZGl0b3I0LkNvbmZpZztcblxuXHQvKipcblx0ICogVGFnIG5hbWUgb2YgdGhlIGVkaXRvciBjb21wb25lbnQuXG5cdCAqXG5cdCAqIFRoZSBkZWZhdWx0IHRhZyBpcyBgdGV4dGFyZWFgLlxuXHQgKi9cblx0QElucHV0KCkgdGFnTmFtZSA9ICd0ZXh0YXJlYSc7XG5cblx0LyoqXG5cdCAqIFRoZSB0eXBlIG9mIHRoZSBlZGl0b3IgaW50ZXJmYWNlLlxuXHQgKlxuXHQgKiBCeSBkZWZhdWx0IGVkaXRvciBpbnRlcmZhY2Ugd2lsbCBiZSBpbml0aWFsaXplZCBhcyBgZGl2YXJlYWAgZWRpdG9yIHdoaWNoIGlzIGFuIGlubGluZSBlZGl0b3Igd2l0aCBmaXhlZCBVSS5cblx0ICogWW91IGNhbiBjaGFuZ2UgaW50ZXJmYWNlIHR5cGUgYnkgY2hvb3NpbmcgYmV0d2VlbiBgZGl2YXJlYWAgYW5kIGBpbmxpbmVgIGVkaXRvciBpbnRlcmZhY2UgdHlwZXMuXG5cdCAqXG5cdCAqIFNlZSBodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNC9sYXRlc3QvZ3VpZGUvZGV2X3VpdHlwZXMuaHRtbFxuXHQgKiBhbmQgaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjQvbGF0ZXN0L2V4YW1wbGVzL2ZpeGVkdWkuaHRtbFxuXHQgKiB0byBsZWFybiBtb3JlLlxuXHQgKi9cblx0QElucHV0KCkgdHlwZTogQ0tFZGl0b3I0LkVkaXRvclR5cGUgPSBDS0VkaXRvcjQuRWRpdG9yVHlwZS5DTEFTU0lDO1xuXG5cdC8qKlxuXHQgKiBLZWVwcyB0cmFjayBvZiB0aGUgZWRpdG9yJ3MgZGF0YS5cblx0ICpcblx0ICogSXQncyBhbHNvIGRlY29yYXRlZCBhcyBhbiBpbnB1dCB3aGljaCBpcyB1c2VmdWwgd2hlbiBub3QgdXNpbmcgdGhlIG5nTW9kZWwuXG5cdCAqXG5cdCAqIFNlZSBodHRwczovL2FuZ3VsYXIuaW8vYXBpL2Zvcm1zL05nTW9kZWwgdG8gbGVhcm4gbW9yZS5cblx0ICovXG5cdEBJbnB1dCgpIHNldCBkYXRhKCBkYXRhOiBzdHJpbmcgKSB7XG5cdFx0aWYgKCBkYXRhID09PSB0aGlzLl9kYXRhICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5pbnN0YW5jZSApIHtcblx0XHRcdHRoaXMuaW5zdGFuY2Uuc2V0RGF0YSggZGF0YSApO1xuXHRcdFx0Ly8gRGF0YSBtYXkgYmUgY2hhbmdlZCBieSBBQ0YuXG5cdFx0XHR0aGlzLl9kYXRhID0gdGhpcy5pbnN0YW5jZS5nZXREYXRhKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5fZGF0YSA9IGRhdGE7XG5cblx0fVxuXG5cdGdldCBkYXRhKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuX2RhdGE7XG5cdH1cblxuXHQvKipcblx0ICogV2hlbiBzZXQgYHRydWVgLCB0aGUgZWRpdG9yIGJlY29tZXMgcmVhZC1vbmx5LlxuXHQgKiBodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNC9sYXRlc3QvYXBpL0NLRURJVE9SX2VkaXRvci5odG1sI3Byb3BlcnR5LXJlYWRPbmx5XG5cdCAqIHRvIGxlYXJuIG1vcmUuXG5cdCAqL1xuXHRASW5wdXQoKSBzZXQgcmVhZE9ubHkoIGlzUmVhZE9ubHk6IGJvb2xlYW4gKSB7XG5cdFx0aWYgKCB0aGlzLmluc3RhbmNlICkge1xuXHRcdFx0dGhpcy5pbnN0YW5jZS5zZXRSZWFkT25seSggaXNSZWFkT25seSApO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIERlbGF5IHNldHRpbmcgcmVhZC1vbmx5IHN0YXRlIHVudGlsIGVkaXRvciBpbml0aWFsaXphdGlvbi5cblx0XHR0aGlzLl9yZWFkT25seSA9IGlzUmVhZE9ubHk7XG5cdH1cblxuXHRnZXQgcmVhZE9ubHkoKTogYm9vbGVhbiB7XG5cdFx0aWYgKCB0aGlzLmluc3RhbmNlICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuaW5zdGFuY2UucmVhZE9ubHk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuX3JlYWRPbmx5O1xuXHR9XG5cblx0LyoqXG5cdCAqIEZpcmVzIHdoZW4gdGhlIGVkaXRvciBpcyByZWFkeS4gSXQgY29ycmVzcG9uZHMgd2l0aCB0aGUgYGVkaXRvciNpbnN0YW5jZVJlYWR5YFxuXHQgKiBodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNC9sYXRlc3QvYXBpL0NLRURJVE9SX2VkaXRvci5odG1sI2V2ZW50LWluc3RhbmNlUmVhZHlcblx0ICogZXZlbnQuXG5cdCAqL1xuXHRAT3V0cHV0KCkgcmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPENLRWRpdG9yNC5FdmVudEluZm8+KCk7XG5cblx0LyoqXG5cdCAqIEZpcmVzIHdoZW4gdGhlIGVkaXRvciBkYXRhIGlzIGxvYWRlZCwgZS5nLiBhZnRlciBjYWxsaW5nIHNldERhdGEoKVxuXHQgKiBodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNC9sYXRlc3QvYXBpL0NLRURJVE9SX2VkaXRvci5odG1sI21ldGhvZC1zZXREYXRhXG5cdCAqIGVkaXRvcidzIG1ldGhvZC4gSXQgY29ycmVzcG9uZHMgd2l0aCB0aGUgYGVkaXRvciNkYXRhUmVhZHlgXG5cdCAqIGh0dHBzOi8vY2tlZGl0b3IuY29tL2RvY3MvY2tlZGl0b3I0L2xhdGVzdC9hcGkvQ0tFRElUT1JfZWRpdG9yLmh0bWwjZXZlbnQtZGF0YVJlYWR5IGV2ZW50LlxuXHQgKi9cblx0QE91dHB1dCgpIGRhdGFSZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXI8Q0tFZGl0b3I0LkV2ZW50SW5mbz4oKTtcblxuXHQvKipcblx0ICogRmlyZXMgd2hlbiB0aGUgY29udGVudCBvZiB0aGUgZWRpdG9yIGhhcyBjaGFuZ2VkLiBJdCBjb3JyZXNwb25kcyB3aXRoIHRoZSBgZWRpdG9yI2NoYW5nZWBcblx0ICogaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjQvbGF0ZXN0L2FwaS9DS0VESVRPUl9lZGl0b3IuaHRtbCNldmVudC1jaGFuZ2Vcblx0ICogZXZlbnQuIEZvciBwZXJmb3JtYW5jZSByZWFzb25zIHRoaXMgZXZlbnQgbWF5IGJlIGNhbGxlZCBldmVuIHdoZW4gZGF0YSBkaWRuJ3QgcmVhbGx5IGNoYW5nZWQuXG5cdCAqIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBldmVudCB3aWxsIG9ubHkgYmUgZmlyZWQgd2hlbiBgdW5kb2AgcGx1Z2luIGlzIGxvYWRlZC4gSWYgeW91IG5lZWQgdG9cblx0ICogbGlzdGVuIGZvciBlZGl0b3IgY2hhbmdlcyAoZS5nLiBmb3IgdHdvLXdheSBkYXRhIGJpbmRpbmcpLCB1c2UgYGRhdGFDaGFuZ2VgIGV2ZW50IGluc3RlYWQuXG5cdCAqL1xuXHRAT3V0cHV0KCkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxDS0VkaXRvcjQuRXZlbnRJbmZvPigpO1xuXG5cdC8qKlxuXHQgKiBGaXJlcyB3aGVuIHRoZSBjb250ZW50IG9mIHRoZSBlZGl0b3IgaGFzIGNoYW5nZWQuIEluIGNvbnRyYXN0IHRvIGBjaGFuZ2VgIC0gb25seSBlbWl0cyB3aGVuXG5cdCAqIGRhdGEgcmVhbGx5IGNoYW5nZWQgdGh1cyBjYW4gYmUgc3VjY2Vzc2Z1bGx5IHVzZWQgd2l0aCBgW2RhdGFdYCBhbmQgdHdvIHdheSBgWyhkYXRhKV1gIGJpbmRpbmcuXG5cdCAqXG5cdCAqIFNlZSBtb3JlOiBodHRwczovL2FuZ3VsYXIuaW8vZ3VpZGUvdGVtcGxhdGUtc3ludGF4I3R3by13YXktYmluZGluZy0tLVxuXHQgKi9cblx0QE91dHB1dCgpIGRhdGFDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPENLRWRpdG9yNC5FdmVudEluZm8+KCk7XG5cblx0LyoqXG5cdCAqIEZpcmVzIHdoZW4gdGhlIGVkaXRpbmcgdmlldyBvZiB0aGUgZWRpdG9yIGlzIGZvY3VzZWQuIEl0IGNvcnJlc3BvbmRzIHdpdGggdGhlIGBlZGl0b3IjZm9jdXNgXG5cdCAqIGh0dHBzOi8vY2tlZGl0b3IuY29tL2RvY3MvY2tlZGl0b3I0L2xhdGVzdC9hcGkvQ0tFRElUT1JfZWRpdG9yLmh0bWwjZXZlbnQtZm9jdXNcblx0ICogZXZlbnQuXG5cdCAqL1xuXHRAT3V0cHV0KCkgZm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyPENLRWRpdG9yNC5FdmVudEluZm8+KCk7XG5cblx0LyoqXG5cdCAqIEZpcmVzIHdoZW4gdGhlIGVkaXRpbmcgdmlldyBvZiB0aGUgZWRpdG9yIGlzIGJsdXJyZWQuIEl0IGNvcnJlc3BvbmRzIHdpdGggdGhlIGBlZGl0b3IjYmx1cmBcblx0ICogaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjQvbGF0ZXN0L2FwaS9DS0VESVRPUl9lZGl0b3IuaHRtbCNldmVudC1ibHVyXG5cdCAqIGV2ZW50LlxuXHQgKi9cblx0QE91dHB1dCgpIGJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyPENLRWRpdG9yNC5FdmVudEluZm8+KCk7XG5cblx0LyoqXG5cdCAqIFRoZSBpbnN0YW5jZSBvZiB0aGUgZWRpdG9yIGNyZWF0ZWQgYnkgdGhpcyBjb21wb25lbnQuXG5cdCAqL1xuXHRpbnN0YW5jZTogYW55O1xuXG5cdC8qKlxuXHQgKiBJZiB0aGUgY29tcG9uZW50IGlzIHJlYWTigJNvbmx5IGJlZm9yZSB0aGUgZWRpdG9yIGluc3RhbmNlIGlzIGNyZWF0ZWQsIGl0IHJlbWVtYmVycyB0aGF0IHN0YXRlLFxuXHQgKiBzbyB0aGUgZWRpdG9yIGNhbiBiZWNvbWUgcmVhZOKAk29ubHkgb25jZSBpdCBpcyByZWFkeS5cblx0ICovXG5cdHByaXZhdGUgX3JlYWRPbmx5OiBib29sZWFuID0gbnVsbDtcblxuXHQvKipcblx0ICogQSBjYWxsYmFjayBleGVjdXRlZCB3aGVuIHRoZSBjb250ZW50IG9mIHRoZSBlZGl0b3IgY2hhbmdlcy4gUGFydCBvZiB0aGVcblx0ICogYENvbnRyb2xWYWx1ZUFjY2Vzc29yYCAoaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9mb3Jtcy9Db250cm9sVmFsdWVBY2Nlc3NvcikgaW50ZXJmYWNlLlxuXHQgKlxuXHQgKiBOb3RlOiBVbnNldCB1bmxlc3MgdGhlIGNvbXBvbmVudCB1c2VzIHRoZSBgbmdNb2RlbGAuXG5cdCAqL1xuXHRvbkNoYW5nZT86ICggZGF0YTogc3RyaW5nICkgPT4gdm9pZDtcblxuXHQvKipcblx0ICogQSBjYWxsYmFjayBleGVjdXRlZCB3aGVuIHRoZSBlZGl0b3IgaGFzIGJlZW4gYmx1cnJlZC4gUGFydCBvZiB0aGVcblx0ICogYENvbnRyb2xWYWx1ZUFjY2Vzc29yYCAoaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9mb3Jtcy9Db250cm9sVmFsdWVBY2Nlc3NvcikgaW50ZXJmYWNlLlxuXHQgKlxuXHQgKiBOb3RlOiBVbnNldCB1bmxlc3MgdGhlIGNvbXBvbmVudCB1c2VzIHRoZSBgbmdNb2RlbGAuXG5cdCAqL1xuXHRvblRvdWNoZWQ/OiAoKSA9PiB2b2lkO1xuXG5cdHByaXZhdGUgX2RhdGE6IHN0cmluZyA9IG51bGw7XG5cblx0LyoqXG5cdCAqIENLRWRpdG9yIDQgc2NyaXB0IHVybCBhZGRyZXNzLiBTY3JpcHQgd2lsbCBiZSBsb2FkZWQgb25seSBpZiBDS0VESVRPUiBuYW1lc3BhY2UgaXMgbWlzc2luZy5cblx0ICpcblx0ICogRGVmYXVsdHMgdG8gJ2h0dHBzOi8vY2RuLmNrZWRpdG9yLmNvbS80LjEzLjAvc3RhbmRhcmQtYWxsL2NrZWRpdG9yLmpzJ1xuXHQgKi9cblx0QElucHV0KCkgZWRpdG9yVXJsID0gJ2h0dHBzOi8vY2RuLmNrZWRpdG9yLmNvbS80LjEzLjAvc3RhbmRhcmQtYWxsL2NrZWRpdG9yLmpzJztcblxuXHRjb25zdHJ1Y3RvciggcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIG5nWm9uZTogTmdab25lICkge1xuXHR9XG5cblx0bmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuXHRcdGdldEVkaXRvck5hbWVzcGFjZSggdGhpcy5lZGl0b3JVcmwgKS50aGVuKCAoKSA9PiB7XG5cdFx0XHR0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhciggdGhpcy5jcmVhdGVFZGl0b3IuYmluZCggdGhpcyApICk7XG5cdFx0fSApLmNhdGNoKCB3aW5kb3cuY29uc29sZS5lcnJvciApO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoICgpID0+IHtcblx0XHRcdGlmICggdGhpcy5pbnN0YW5jZSApIHtcblx0XHRcdFx0dGhpcy5pbnN0YW5jZS5kZXN0cm95KCk7XG5cdFx0XHRcdHRoaXMuaW5zdGFuY2UgPSBudWxsO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxuXG5cdHdyaXRlVmFsdWUoIHZhbHVlOiBzdHJpbmcgKTogdm9pZCB7XG5cdFx0dGhpcy5kYXRhID0gdmFsdWU7XG5cdH1cblxuXHRyZWdpc3Rlck9uQ2hhbmdlKCBjYWxsYmFjazogKCBkYXRhOiBzdHJpbmcgKSA9PiB2b2lkICk6IHZvaWQge1xuXHRcdHRoaXMub25DaGFuZ2UgPSBjYWxsYmFjaztcblx0fVxuXG5cdHJlZ2lzdGVyT25Ub3VjaGVkKCBjYWxsYmFjazogKCkgPT4gdm9pZCApOiB2b2lkIHtcblx0XHR0aGlzLm9uVG91Y2hlZCA9IGNhbGxiYWNrO1xuXHR9XG5cblx0cHJpdmF0ZSBjcmVhdGVFZGl0b3IoKTogdm9pZCB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIHRoaXMudGFnTmFtZSApO1xuXHRcdHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKCBlbGVtZW50ICk7XG5cblx0XHRpZiAoIHRoaXMudHlwZSA9PT0gQ0tFZGl0b3I0LkVkaXRvclR5cGUuRElWQVJFQSApIHtcblx0XHRcdHRoaXMuY29uZmlnID0gdGhpcy5lbnN1cmVEaXZhcmVhUGx1Z2luKCB0aGlzLmNvbmZpZyB8fCB7fSApO1xuXHRcdH1cblxuXHRcdGNvbnN0IGluc3RhbmNlOiBDS0VkaXRvcjQuRWRpdG9yID0gdGhpcy50eXBlID09PSBDS0VkaXRvcjQuRWRpdG9yVHlwZS5JTkxJTkVcblx0XHRcdD8gQ0tFRElUT1IuaW5saW5lKCBlbGVtZW50LCB0aGlzLmNvbmZpZyApXG5cdFx0XHQ6IENLRURJVE9SLnJlcGxhY2UoIGVsZW1lbnQsIHRoaXMuY29uZmlnICk7XG5cblx0XHRpbnN0YW5jZS5vbmNlKCAnaW5zdGFuY2VSZWFkeScsIGV2dCA9PiB7XG5cdFx0XHR0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7XG5cblx0XHRcdC8vIFJlYWQgb25seSBzdGF0ZSBtYXkgY2hhbmdlIGR1cmluZyBpbnN0YW5jZSBpbml0aWFsaXphdGlvbi5cblx0XHRcdHRoaXMucmVhZE9ubHkgPSB0aGlzLl9yZWFkT25seSAhPT0gbnVsbCA/IHRoaXMuX3JlYWRPbmx5IDogdGhpcy5pbnN0YW5jZS5yZWFkT25seTtcblxuXHRcdFx0dGhpcy5zdWJzY3JpYmUoIHRoaXMuaW5zdGFuY2UgKTtcblxuXHRcdFx0Y29uc3QgdW5kbyA9IGluc3RhbmNlLnVuZG9NYW5hZ2VyO1xuXG5cdFx0XHRpZiAoIHRoaXMuZGF0YSAhPT0gbnVsbCApIHtcblx0XHRcdFx0dW5kbyAmJiB1bmRvLmxvY2soKTtcblxuXHRcdFx0XHRpbnN0YW5jZS5zZXREYXRhKCB0aGlzLmRhdGEsIHsgY2FsbGJhY2s6ICgpID0+IHtcblx0XHRcdFx0XHQvLyBMb2NraW5nIHVuZG9NYW5hZ2VyIHByZXZlbnRzICdjaGFuZ2UnIGV2ZW50LlxuXHRcdFx0XHRcdC8vIFRyaWdnZXIgaXQgbWFudWFsbHkgdG8gdXBkYXRlZCBib3VuZCBkYXRhLlxuXHRcdFx0XHRcdGlmICggdGhpcy5kYXRhICE9PSBpbnN0YW5jZS5nZXREYXRhKCkgKSB7XG5cdFx0XHRcdFx0XHR1bmRvID8gaW5zdGFuY2UuZmlyZSggJ2NoYW5nZScgKSA6IGluc3RhbmNlLmZpcmUoICdkYXRhUmVhZHknICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHVuZG8gJiYgdW5kby51bmxvY2soKTtcblxuXHRcdFx0XHRcdHRoaXMubmdab25lLnJ1biggKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5yZWFkeS5lbWl0KCBldnQgKTtcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdH0gfSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5uZ1pvbmUucnVuKCAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5yZWFkeS5lbWl0KCBldnQgKTtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxuXG5cdHByaXZhdGUgc3Vic2NyaWJlKCBlZGl0b3I6IGFueSApOiB2b2lkIHtcblx0XHRlZGl0b3Iub24oICdmb2N1cycsIGV2dCA9PiB7XG5cdFx0XHR0aGlzLm5nWm9uZS5ydW4oICgpID0+IHtcblx0XHRcdFx0dGhpcy5mb2N1cy5lbWl0KCBldnQgKTtcblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cblx0XHRlZGl0b3Iub24oICdibHVyJywgZXZ0ID0+IHtcblx0XHRcdHRoaXMubmdab25lLnJ1biggKCkgPT4ge1xuXHRcdFx0XHRpZiAoIHRoaXMub25Ub3VjaGVkICkge1xuXHRcdFx0XHRcdHRoaXMub25Ub3VjaGVkKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLmJsdXIuZW1pdCggZXZ0ICk7XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXG5cdFx0ZWRpdG9yLm9uKCAnZGF0YVJlYWR5JywgdGhpcy5wcm9wYWdhdGVDaGFuZ2UsIHRoaXMgKTtcblxuXHRcdGlmICggdGhpcy5pbnN0YW5jZS51bmRvTWFuYWdlciApIHtcblx0XHRcdGVkaXRvci5vbiggJ2NoYW5nZScsIHRoaXMucHJvcGFnYXRlQ2hhbmdlLCB0aGlzICk7XG5cdFx0fVxuXHRcdC8vIElmICd1bmRvJyBwbHVnaW4gaXMgbm90IGxvYWRlZCwgbGlzdGVuIHRvICdzZWxlY3Rpb25DaGVjaycgZXZlbnQgaW5zdGVhZC4gKCM1NCkuXG5cdFx0ZWxzZSB7XG5cdFx0XHRlZGl0b3Iub24oICdzZWxlY3Rpb25DaGVjaycsIHRoaXMucHJvcGFnYXRlQ2hhbmdlLCB0aGlzICk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBwcm9wYWdhdGVDaGFuZ2UoIGV2ZW50OiBhbnkgKTogdm9pZCB7XG5cdFx0dGhpcy5uZ1pvbmUucnVuKCAoKSA9PiB7XG5cdFx0XHRjb25zdCBuZXdEYXRhID0gdGhpcy5pbnN0YW5jZS5nZXREYXRhKCk7XG5cblx0XHRcdGlmICggZXZlbnQubmFtZSA9PSAnY2hhbmdlJyApIHtcblx0XHRcdFx0dGhpcy5jaGFuZ2UuZW1pdCggZXZlbnQgKTtcblx0XHRcdH0gZWxzZSBpZiAoIGV2ZW50Lm5hbWUgPT0gJ2RhdGFSZWFkeScgKSB7XG5cdFx0XHRcdHRoaXMuZGF0YVJlYWR5LmVtaXQoIGV2ZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggbmV3RGF0YSA9PT0gdGhpcy5kYXRhICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuX2RhdGEgPSBuZXdEYXRhO1xuXHRcdFx0dGhpcy5kYXRhQ2hhbmdlLmVtaXQoIG5ld0RhdGEgKTtcblxuXHRcdFx0aWYgKCB0aGlzLm9uQ2hhbmdlICkge1xuXHRcdFx0XHR0aGlzLm9uQ2hhbmdlKCBuZXdEYXRhICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9XG5cblx0cHJpdmF0ZSBlbnN1cmVEaXZhcmVhUGx1Z2luKCBjb25maWc6IENLRWRpdG9yNC5Db25maWcgKTogQ0tFZGl0b3I0LkNvbmZpZyB7XG5cdFx0bGV0IHsgZXh0cmFQbHVnaW5zLCByZW1vdmVQbHVnaW5zIH0gPSBjb25maWc7XG5cblx0XHRleHRyYVBsdWdpbnMgPSB0aGlzLnJlbW92ZVBsdWdpbiggZXh0cmFQbHVnaW5zLCAnZGl2YXJlYScgKSB8fCAnJztcblx0XHRleHRyYVBsdWdpbnMgPSBleHRyYVBsdWdpbnMuY29uY2F0KCB0eXBlb2YgZXh0cmFQbHVnaW5zID09PSAnc3RyaW5nJyA/ICcsZGl2YXJlYScgOiAnZGl2YXJlYScgKTtcblxuXHRcdGlmICggcmVtb3ZlUGx1Z2lucyAmJiByZW1vdmVQbHVnaW5zLmluY2x1ZGVzKCAnZGl2YXJlYScgKSApIHtcblxuXHRcdFx0cmVtb3ZlUGx1Z2lucyA9IHRoaXMucmVtb3ZlUGx1Z2luKCByZW1vdmVQbHVnaW5zLCAnZGl2YXJlYScgKTtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnW0NLRURJVE9SXSBkaXZhcmVhIHBsdWdpbiBpcyByZXF1aXJlZCB0byBpbml0aWFsaXplIGVkaXRvciB1c2luZyBBbmd1bGFyIGludGVncmF0aW9uLicgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbigge30sIGNvbmZpZywgeyBleHRyYVBsdWdpbnMsIHJlbW92ZVBsdWdpbnMgfSApO1xuXHR9XG5cblx0cHJpdmF0ZSByZW1vdmVQbHVnaW4oIHBsdWdpbnM6IHN0cmluZyB8IHN0cmluZ1tdLCB0b1JlbW92ZTogc3RyaW5nICk6IHN0cmluZyB8IHN0cmluZ1tdIHtcblx0XHRpZiAoICFwbHVnaW5zICkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaXNTdHJpbmcgPSB0eXBlb2YgcGx1Z2lucyA9PT0gJ3N0cmluZyc7XG5cblx0XHRpZiAoIGlzU3RyaW5nICkge1xuXHRcdFx0cGx1Z2lucyA9ICggcGx1Z2lucyBhcyBzdHJpbmcgKS5zcGxpdCggJywnICk7XG5cdFx0fVxuXG5cdFx0cGx1Z2lucyA9ICggcGx1Z2lucyBhcyBzdHJpbmdbXSApLmZpbHRlciggcGx1Z2luID0+IHBsdWdpbiAhPT0gdG9SZW1vdmUgKTtcblxuXHRcdGlmICggaXNTdHJpbmcgKSB7XG5cdFx0XHRwbHVnaW5zID0gKCBwbHVnaW5zIGFzIHN0cmluZ1tdICkuam9pbiggJywnICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBsdWdpbnM7XG5cdH1cbn1cbiJdfQ==
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.

@@ -10,8 +6,3 @@ * For licensing, see LICENSE.md.

import loadScript from 'load-script';
/** @type {?} */
let promise;
/**
* @param {?} editorURL
* @return {?}
*/
export function getEditorNamespace(editorURL) {

@@ -25,13 +16,4 @@ if (editorURL.length < 1) {

else if (!promise) {
promise = new Promise((/**
* @param {?} scriptResolve
* @param {?} scriptReject
* @return {?}
*/
(scriptResolve, scriptReject) => {
loadScript(editorURL, (/**
* @param {?} err
* @return {?}
*/
err => {
promise = new Promise((scriptResolve, scriptReject) => {
loadScript(editorURL, err => {
if (err) {

@@ -44,7 +26,7 @@ scriptReject(err);

}
}));
}));
});
});
}
return promise;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3IuaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NrZWRpdG9yNC1hbmd1bGFyLyIsInNvdXJjZXMiOlsiY2tlZGl0b3IuaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUtBLE9BQU8sVUFBVSxNQUFNLGFBQWEsQ0FBQzs7SUFHakMsT0FBTzs7Ozs7QUFFWCxNQUFNLFVBQVUsa0JBQWtCLENBQUUsU0FBaUI7SUFDcEQsSUFBSyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRztRQUMzQixNQUFNLElBQUksU0FBUyxDQUFFLDBDQUEwQyxDQUFFLENBQUM7S0FDbEU7SUFFRCxJQUFLLFVBQVUsSUFBSSxNQUFNLEVBQUc7UUFDM0IsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFFLFFBQVEsQ0FBRSxDQUFDO0tBQ25DO1NBQU0sSUFBSyxDQUFDLE9BQU8sRUFBRztRQUN0QixPQUFPLEdBQUcsSUFBSSxPQUFPOzs7OztRQUFFLENBQUUsYUFBYSxFQUFFLFlBQVksRUFBRyxFQUFFO1lBQ3hELFVBQVUsQ0FBRSxTQUFTOzs7O1lBQUUsR0FBRyxDQUFDLEVBQUU7Z0JBQzVCLElBQUssR0FBRyxFQUFHO29CQUNWLFlBQVksQ0FBRSxHQUFHLENBQUUsQ0FBQztpQkFDcEI7cUJBQU07b0JBQ04sYUFBYSxDQUFFLFFBQVEsQ0FBRSxDQUFDO29CQUMxQixPQUFPLEdBQUcsU0FBUyxDQUFDO2lCQUNwQjtZQUNGLENBQUMsRUFBRSxDQUFDO1FBQ0wsQ0FBQyxFQUFFLENBQUM7S0FDSjtJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIENvcHlyaWdodCAoYykgMjAwMy0yMDE5LCBDS1NvdXJjZSAtIEZyZWRlcmljbyBLbmFiYmVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogRm9yIGxpY2Vuc2luZywgc2VlIExJQ0VOU0UubWQuXG4gKi9cblxuaW1wb3J0IGxvYWRTY3JpcHQgZnJvbSAnbG9hZC1zY3JpcHQnO1xuXG5kZWNsYXJlIGxldCBDS0VESVRPUjogYW55O1xubGV0IHByb21pc2U7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFZGl0b3JOYW1lc3BhY2UoIGVkaXRvclVSTDogc3RyaW5nICk6IFByb21pc2U8eyBbIGtleTogc3RyaW5nIF06IGFueTsgfT4ge1xuXHRpZiAoIGVkaXRvclVSTC5sZW5ndGggPCAxICkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoICdDS0VkaXRvciBVUkwgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcuJyApO1xuXHR9XG5cblx0aWYgKCAnQ0tFRElUT1InIGluIHdpbmRvdyApIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCBDS0VESVRPUiApO1xuXHR9IGVsc2UgaWYgKCAhcHJvbWlzZSApIHtcblx0XHRwcm9taXNlID0gbmV3IFByb21pc2UoICggc2NyaXB0UmVzb2x2ZSwgc2NyaXB0UmVqZWN0ICkgPT4ge1xuXHRcdFx0bG9hZFNjcmlwdCggZWRpdG9yVVJMLCBlcnIgPT4ge1xuXHRcdFx0XHRpZiAoIGVyciApIHtcblx0XHRcdFx0XHRzY3JpcHRSZWplY3QoIGVyciApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNjcmlwdFJlc29sdmUoIENLRURJVE9SICk7XG5cdFx0XHRcdFx0cHJvbWlzZSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0fVxuXG5cdHJldHVybiBwcm9taXNlO1xufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3IuaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NrZWRpdG9yNC1hbmd1bGFyLyIsInNvdXJjZXMiOlsiY2tlZGl0b3IuaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLFVBQVUsTUFBTSxhQUFhLENBQUM7QUFHckMsSUFBSSxPQUFPLENBQUM7QUFFWixNQUFNLFVBQVUsa0JBQWtCLENBQUUsU0FBaUI7SUFDcEQsSUFBSyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRztRQUMzQixNQUFNLElBQUksU0FBUyxDQUFFLDBDQUEwQyxDQUFFLENBQUM7S0FDbEU7SUFFRCxJQUFLLFVBQVUsSUFBSSxNQUFNLEVBQUc7UUFDM0IsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFFLFFBQVEsQ0FBRSxDQUFDO0tBQ25DO1NBQU0sSUFBSyxDQUFDLE9BQU8sRUFBRztRQUN0QixPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUUsQ0FBRSxhQUFhLEVBQUUsWUFBWSxFQUFHLEVBQUU7WUFDeEQsVUFBVSxDQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDNUIsSUFBSyxHQUFHLEVBQUc7b0JBQ1YsWUFBWSxDQUFFLEdBQUcsQ0FBRSxDQUFDO2lCQUNwQjtxQkFBTTtvQkFDTixhQUFhLENBQUUsUUFBUSxDQUFFLENBQUM7b0JBQzFCLE9BQU8sR0FBRyxTQUFTLENBQUM7aUJBQ3BCO1lBQ0YsQ0FBQyxDQUFFLENBQUM7UUFDTCxDQUFDLENBQUUsQ0FBQztLQUNKO0lBRUQsT0FBTyxPQUFPLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgQ29weXJpZ2h0IChjKSAyMDAzLTIwMTksIENLU291cmNlIC0gRnJlZGVyaWNvIEtuYWJiZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBGb3IgbGljZW5zaW5nLCBzZWUgTElDRU5TRS5tZC5cbiAqL1xuXG5pbXBvcnQgbG9hZFNjcmlwdCBmcm9tICdsb2FkLXNjcmlwdCc7XG5cbmRlY2xhcmUgbGV0IENLRURJVE9SOiBhbnk7XG5sZXQgcHJvbWlzZTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVkaXRvck5hbWVzcGFjZSggZWRpdG9yVVJMOiBzdHJpbmcgKTogUHJvbWlzZTx7IFsga2V5OiBzdHJpbmcgXTogYW55OyB9PiB7XG5cdGlmICggZWRpdG9yVVJMLmxlbmd0aCA8IDEgKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvciggJ0NLRWRpdG9yIFVSTCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy4nICk7XG5cdH1cblxuXHRpZiAoICdDS0VESVRPUicgaW4gd2luZG93ICkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoIENLRURJVE9SICk7XG5cdH0gZWxzZSBpZiAoICFwcm9taXNlICkge1xuXHRcdHByb21pc2UgPSBuZXcgUHJvbWlzZSggKCBzY3JpcHRSZXNvbHZlLCBzY3JpcHRSZWplY3QgKSA9PiB7XG5cdFx0XHRsb2FkU2NyaXB0KCBlZGl0b3JVUkwsIGVyciA9PiB7XG5cdFx0XHRcdGlmICggZXJyICkge1xuXHRcdFx0XHRcdHNjcmlwdFJlamVjdCggZXJyICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2NyaXB0UmVzb2x2ZSggQ0tFRElUT1IgKTtcblx0XHRcdFx0XHRwcm9taXNlID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0cmV0dXJuIHByb21pc2U7XG59XG4iXX0=
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/
/**
* Basic typings for the CKEditor4 elements.
*/
export var CKEditor4;
(function (CKEditor4) {
/**
* The CKEditor4 editor constructor.
* @record
*/
function Config() { }
CKEditor4.Config = Config;
/**
* The event object passed to CKEditor4 event callbacks.
*
* See https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_eventInfo.html
* to learn more.
* @record
*/
function EventInfo() { }
CKEditor4.EventInfo = EventInfo;
if (false) {
/** @type {?} */
EventInfo.prototype.name;
/** @type {?} */
EventInfo.prototype.editor;
/** @type {?} */
EventInfo.prototype.data;
/** @type {?} */
EventInfo.prototype.listenerData;
/** @type {?} */
EventInfo.prototype.sender;
/**
* @return {?}
*/
EventInfo.prototype.cancel = function () { };
/**
* @return {?}
*/
EventInfo.prototype.removeListener = function () { };
/**
* @return {?}
*/
EventInfo.prototype.stop = function () { };
}
})(CKEditor4 || (CKEditor4 = {}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3IuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9ja2VkaXRvcjQtYW5ndWxhci8iLCJzb3VyY2VzIjpbImNrZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBUUEsTUFBTSxLQUFXLFNBQVMsQ0E0Q3pCO0FBNUNELFdBQWlCLFNBQVM7Ozs7O0lBS3pCLHFCQUVDOzs7Ozs7Ozs7SUFrQkQsd0JBa0JDOzs7O1FBakJBLHlCQUFzQjs7UUFDdEIsMkJBQXFCOztRQUNyQix5QkFFRTs7UUFDRixpQ0FFRTs7UUFDRiwyQkFFRTs7OztRQUVGLDZDQUFlOzs7O1FBRWYscURBQXVCOzs7O1FBRXZCLDJDQUFhOztBQUVmLENBQUMsRUE1Q2dCLFNBQVMsS0FBVCxTQUFTLFFBNEN6QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgQ29weXJpZ2h0IChjKSAyMDAzLTIwMTksIENLU291cmNlIC0gRnJlZGVyaWNvIEtuYWJiZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBGb3IgbGljZW5zaW5nLCBzZWUgTElDRU5TRS5tZC5cbiAqL1xuXG4vKipcbiAqIEJhc2ljIHR5cGluZ3MgZm9yIHRoZSBDS0VkaXRvcjQgZWxlbWVudHMuXG4gKi9cbmV4cG9ydCBuYW1lc3BhY2UgQ0tFZGl0b3I0IHtcblxuXHQvKipcblx0ICogVGhlIENLRWRpdG9yNCBlZGl0b3IgY29uc3RydWN0b3IuXG5cdCAqL1xuXHRleHBvcnQgaW50ZXJmYWNlIENvbmZpZyB7XG5cdFx0WyBrZXk6IHN0cmluZyBdOiBhbnk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIENLRWRpdG9yNCBlZGl0b3IgaW50ZXJmYWNlIHR5cGUuXG5cdCAqIFNlZSBodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNC9sYXRlc3QvZ3VpZGUvZGV2X3VpdHlwZXMuaHRtbFxuXHQgKiB0byBsZWFybiBtb3JlLlxuXHQgKi9cblx0ZXhwb3J0IGNvbnN0IGVudW0gRWRpdG9yVHlwZSB7XG5cdFx0RElWQVJFQSA9ICdkaXZhcmVhJyxcblx0XHRJTkxJTkUgPSAnaW5saW5lJ1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBldmVudCBvYmplY3QgcGFzc2VkIHRvIENLRWRpdG9yNCBldmVudCBjYWxsYmFja3MuXG5cdCAqXG5cdCAqIFNlZSBodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNC9sYXRlc3QvYXBpL0NLRURJVE9SX2V2ZW50SW5mby5odG1sXG5cdCAqIHRvIGxlYXJuIG1vcmUuXG5cdCAqL1xuXHRleHBvcnQgaW50ZXJmYWNlIEV2ZW50SW5mbyB7XG5cdFx0cmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXHRcdHJlYWRvbmx5IGVkaXRvcjogYW55O1xuXHRcdHJlYWRvbmx5IGRhdGE6IHtcblx0XHRcdFsga2V5OiBzdHJpbmcgXTogYW55O1xuXHRcdH07XG5cdFx0cmVhZG9ubHkgbGlzdGVuZXJEYXRhOiB7XG5cdFx0XHRbIGtleTogc3RyaW5nIF06IGFueTtcblx0XHR9O1xuXHRcdHJlYWRvbmx5IHNlbmRlcjoge1xuXHRcdFx0WyBrZXk6IHN0cmluZyBdOiBhbnk7XG5cdFx0fTtcblxuXHRcdGNhbmNlbCgpOiB2b2lkO1xuXG5cdFx0cmVtb3ZlTGlzdGVuZXIoKTogdm9pZDtcblxuXHRcdHN0b3AoKTogdm9pZDtcblx0fVxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3IuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9ja2VkaXRvcjQtYW5ndWxhci8iLCJzb3VyY2VzIjpbImNrZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgQ29weXJpZ2h0IChjKSAyMDAzLTIwMTksIENLU291cmNlIC0gRnJlZGVyaWNvIEtuYWJiZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBGb3IgbGljZW5zaW5nLCBzZWUgTElDRU5TRS5tZC5cbiAqL1xuXG4vKipcbiAqIEJhc2ljIHR5cGluZ3MgZm9yIHRoZSBDS0VkaXRvcjQgZWxlbWVudHMuXG4gKi9cbmV4cG9ydCBuYW1lc3BhY2UgQ0tFZGl0b3I0IHtcblx0LyoqXG5cdCAqIFRoZSBDS0VkaXRvcjQgZWRpdG9yIGNvbnN0cnVjdG9yLlxuXHQgKi9cblx0ZXhwb3J0IGludGVyZmFjZSBDb25maWcge1xuXHRcdFsga2V5OiBzdHJpbmcgXTogYW55O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBDS0VkaXRvcjQgZWRpdG9yLlxuXHQgKi9cblx0ZXhwb3J0IGludGVyZmFjZSBFZGl0b3Ige1xuXHRcdFsga2V5OiBzdHJpbmcgXTogYW55O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBDS0VkaXRvcjQgZWRpdG9yIGludGVyZmFjZSB0eXBlLlxuXHQgKiBTZWUgaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjQvbGF0ZXN0L2d1aWRlL2Rldl91aXR5cGVzLmh0bWxcblx0ICogdG8gbGVhcm4gbW9yZS5cblx0ICovXG5cdGV4cG9ydCBjb25zdCBlbnVtIEVkaXRvclR5cGUge1xuXHRcdERJVkFSRUEgPSAnZGl2YXJlYScsXG5cdFx0SU5MSU5FID0gJ2lubGluZScsXG5cdFx0Q0xBU1NJQyA9ICdjbGFzc2ljJ1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBldmVudCBvYmplY3QgcGFzc2VkIHRvIENLRWRpdG9yNCBldmVudCBjYWxsYmFja3MuXG5cdCAqXG5cdCAqIFNlZSBodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNC9sYXRlc3QvYXBpL0NLRURJVE9SX2V2ZW50SW5mby5odG1sXG5cdCAqIHRvIGxlYXJuIG1vcmUuXG5cdCAqL1xuXHRleHBvcnQgaW50ZXJmYWNlIEV2ZW50SW5mbyB7XG5cdFx0cmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXHRcdHJlYWRvbmx5IGVkaXRvcjogYW55O1xuXHRcdHJlYWRvbmx5IGRhdGE6IHtcblx0XHRcdFsga2V5OiBzdHJpbmcgXTogYW55O1xuXHRcdH07XG5cdFx0cmVhZG9ubHkgbGlzdGVuZXJEYXRhOiB7XG5cdFx0XHRbIGtleTogc3RyaW5nIF06IGFueTtcblx0XHR9O1xuXHRcdHJlYWRvbmx5IHNlbmRlcjoge1xuXHRcdFx0WyBrZXk6IHN0cmluZyBdOiBhbnk7XG5cdFx0fTtcblxuXHRcdGNhbmNlbCgpOiB2b2lkO1xuXG5cdFx0cmVtb3ZlTGlzdGVuZXIoKTogdm9pZDtcblxuXHRcdHN0b3AoKTogdm9pZDtcblx0fVxufVxuIl19
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/
import * as tslib_1 from "tslib";
import { NgModule } from '@angular/core';

@@ -13,13 +10,14 @@ import { CommonModule } from '@angular/common';

import { CKEditorComponent } from './ckeditor.component';
export class CKEditorModule {
}
CKEditorModule.decorators = [
{ type: NgModule, args: [{
imports: [FormsModule, CommonModule],
declarations: [CKEditorComponent],
exports: [CKEditorComponent]
},] }
];
export { CKEditor4 } from './ckeditor';
let CKEditorModule = class CKEditorModule {
};
CKEditorModule = tslib_1.__decorate([
NgModule({
imports: [FormsModule, CommonModule],
declarations: [CKEditorComponent],
exports: [CKEditorComponent]
})
], CKEditorModule);
export { CKEditorModule };
export * from './ckeditor';
export { CKEditorComponent } from './ckeditor.component';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3IubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vY2tlZGl0b3I0LWFuZ3VsYXIvIiwic291cmNlcyI6WyJja2VkaXRvci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFLQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFPekQsTUFBTSxPQUFPLGNBQWM7OztZQUwxQixRQUFRLFNBQUU7Z0JBQ1YsT0FBTyxFQUFFLENBQUUsV0FBVyxFQUFFLFlBQVksQ0FBRTtnQkFDdEMsWUFBWSxFQUFFLENBQUUsaUJBQWlCLENBQUU7Z0JBQ25DLE9BQU8sRUFBRSxDQUFFLGlCQUFpQixDQUFFO2FBQzlCOztBQUdELDBCQUFjLFlBQVksQ0FBQztBQUMzQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgQ29weXJpZ2h0IChjKSAyMDAzLTIwMTksIENLU291cmNlIC0gRnJlZGVyaWNvIEtuYWJiZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBGb3IgbGljZW5zaW5nLCBzZWUgTElDRU5TRS5tZC5cbiAqL1xuXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ0tFZGl0b3JDb21wb25lbnQgfSBmcm9tICcuL2NrZWRpdG9yLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSgge1xuXHRpbXBvcnRzOiBbIEZvcm1zTW9kdWxlLCBDb21tb25Nb2R1bGUgXSxcblx0ZGVjbGFyYXRpb25zOiBbIENLRWRpdG9yQ29tcG9uZW50IF0sXG5cdGV4cG9ydHM6IFsgQ0tFZGl0b3JDb21wb25lbnQgXVxufSApXG5leHBvcnQgY2xhc3MgQ0tFZGl0b3JNb2R1bGUge1xufVxuZXhwb3J0ICogZnJvbSAnLi9ja2VkaXRvcic7XG5leHBvcnQgeyBDS0VkaXRvckNvbXBvbmVudCB9IGZyb20gJy4vY2tlZGl0b3IuY29tcG9uZW50JztcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3IubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vY2tlZGl0b3I0LWFuZ3VsYXIvIiwic291cmNlcyI6WyJja2VkaXRvci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHOztBQUVILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQU96RCxJQUFhLGNBQWMsR0FBM0IsTUFBYSxjQUFjO0NBQzFCLENBQUE7QUFEWSxjQUFjO0lBTDFCLFFBQVEsQ0FBRTtRQUNWLE9BQU8sRUFBRSxDQUFFLFdBQVcsRUFBRSxZQUFZLENBQUU7UUFDdEMsWUFBWSxFQUFFLENBQUUsaUJBQWlCLENBQUU7UUFDbkMsT0FBTyxFQUFFLENBQUUsaUJBQWlCLENBQUU7S0FDOUIsQ0FBRTtHQUNVLGNBQWMsQ0FDMUI7U0FEWSxjQUFjO0FBRTNCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBDb3B5cmlnaHQgKGMpIDIwMDMtMjAxOSwgQ0tTb3VyY2UgLSBGcmVkZXJpY28gS25hYmJlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEZvciBsaWNlbnNpbmcsIHNlZSBMSUNFTlNFLm1kLlxuICovXG5cbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDS0VkaXRvckNvbXBvbmVudCB9IGZyb20gJy4vY2tlZGl0b3IuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKCB7XG5cdGltcG9ydHM6IFsgRm9ybXNNb2R1bGUsIENvbW1vbk1vZHVsZSBdLFxuXHRkZWNsYXJhdGlvbnM6IFsgQ0tFZGl0b3JDb21wb25lbnQgXSxcblx0ZXhwb3J0czogWyBDS0VkaXRvckNvbXBvbmVudCBdXG59IClcbmV4cG9ydCBjbGFzcyBDS0VkaXRvck1vZHVsZSB7XG59XG5leHBvcnQgKiBmcm9tICcuL2NrZWRpdG9yJztcbmV4cG9ydCB7IENLRWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9ja2VkaXRvci5jb21wb25lbnQnO1xuIl19
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* Generated bundle index. Do not edit.
*/
export { CKEditorModule, CKEditorComponent, CKEditor4 } from './ckeditor.module';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3I0LWFuZ3VsYXIuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9ja2VkaXRvcjQtYW5ndWxhci8iLCJzb3VyY2VzIjpbImNrZWRpdG9yNC1hbmd1bGFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFJQSw2REFBYyxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9ja2VkaXRvci5tb2R1bGUnO1xuIl19
export * from './ckeditor.module';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3I0LWFuZ3VsYXIuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9ja2VkaXRvcjQtYW5ndWxhci8iLCJzb3VyY2VzIjpbImNrZWRpdG9yNC1hbmd1bGFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9ja2VkaXRvci5tb2R1bGUnO1xuIl19
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/
import { Component, NgZone, Input, Output, EventEmitter, forwardRef, ElementRef } from '@angular/core';
import * as tslib_1 from "tslib";
import { Component, NgZone, Input, Output, EventEmitter, forwardRef, ElementRef, AfterViewInit, OnDestroy } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';

@@ -32,3 +29,3 @@ import { getEditorNamespace } from './ckeditor.helpers';

*/
this.type = "divarea" /* DIVAREA */;
this.type = "classic" /* CLASSIC */;
/**

@@ -41,5 +38,14 @@ * Fires when the editor is ready. It corresponds with the `editor#instanceReady`

/**
* Fires when the editor data is loaded, e.g. after calling setData()
* https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-setData
* editor's method. It corresponds with the `editor#dataReady`
* https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#event-dataReady event.
*/
this.dataReady = new EventEmitter();
/**
* Fires when the content of the editor has changed. It corresponds with the `editor#change`
* https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#event-change
* event. For performance reasons this event may be called even when data didn't really changed.
* Please note that this event will only be fired when `undo` plugin is loaded. If you need to
* listen for editor changes (e.g. for two-way data binding), use `dataChange` event instead.
*/

@@ -75,11 +81,9 @@ this.change = new EventEmitter();

*
* Defaults to 'https://cdn.ckeditor.com/4.12.1/standard-all/ckeditor.js'
* Defaults to 'https://cdn.ckeditor.com/4.13.0/standard-all/ckeditor.js'
*/
this.editorUrl = 'https://cdn.ckeditor.com/4.12.1/standard-all/ckeditor.js';
this.editorUrl = 'https://cdn.ckeditor.com/4.13.0/standard-all/ckeditor.js';
}
CKEditorComponent_1 = CKEditorComponent;
Object.defineProperty(CKEditorComponent.prototype, "data", {
get: /**
* @return {?}
*/
function () {
get: function () {
return this._data;

@@ -94,12 +98,3 @@ },

*/
set: /**
* Keeps track of the editor's data.
*
* It's also decorated as an input which is useful when not using the ngModel.
*
* See https://angular.io/api/forms/NgModel to learn more.
* @param {?} data
* @return {?}
*/
function (data) {
set: function (data) {
if (data === this._data) {

@@ -120,6 +115,3 @@ return;

Object.defineProperty(CKEditorComponent.prototype, "readOnly", {
get: /**
* @return {?}
*/
function () {
get: function () {
if (this.instance) {

@@ -135,10 +127,3 @@ return this.instance.readOnly;

*/
set: /**
* When set `true`, the editor becomes read-only.
* https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#property-readOnly
* to learn more.
* @param {?} isReadOnly
* @return {?}
*/
function (isReadOnly) {
set: function (isReadOnly) {
if (this.instance) {

@@ -154,29 +139,11 @@ this.instance.setReadOnly(isReadOnly);

});
/**
* @return {?}
*/
CKEditorComponent.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
CKEditorComponent.prototype.ngAfterViewInit = function () {
var _this = this;
getEditorNamespace(this.editorUrl).then((/**
* @return {?}
*/
function () {
getEditorNamespace(this.editorUrl).then(function () {
_this.ngZone.runOutsideAngular(_this.createEditor.bind(_this));
})).catch(window.console.error);
}).catch(window.console.error);
};
/**
* @return {?}
*/
CKEditorComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
CKEditorComponent.prototype.ngOnDestroy = function () {
var _this = this;
this.ngZone.runOutsideAngular((/**
* @return {?}
*/
function () {
this.ngZone.runOutsideAngular(function () {
if (_this.instance) {

@@ -186,118 +153,59 @@ _this.instance.destroy();

}
}));
});
};
/**
* @param {?} value
* @return {?}
*/
CKEditorComponent.prototype.writeValue = /**
* @param {?} value
* @return {?}
*/
function (value) {
CKEditorComponent.prototype.writeValue = function (value) {
this.data = value;
};
/**
* @param {?} callback
* @return {?}
*/
CKEditorComponent.prototype.registerOnChange = /**
* @param {?} callback
* @return {?}
*/
function (callback) {
CKEditorComponent.prototype.registerOnChange = function (callback) {
this.onChange = callback;
};
/**
* @param {?} callback
* @return {?}
*/
CKEditorComponent.prototype.registerOnTouched = /**
* @param {?} callback
* @return {?}
*/
function (callback) {
CKEditorComponent.prototype.registerOnTouched = function (callback) {
this.onTouched = callback;
};
/**
* @private
* @return {?}
*/
CKEditorComponent.prototype.createEditor = /**
* @private
* @return {?}
*/
function () {
/** @type {?} */
var element = this.createInitialElement();
this.config = this.ensureDivareaPlugin(this.config || {});
/** @type {?} */
var instance = this.type === "inline" /* INLINE */ ?
CKEDITOR.inline(element, this.config)
CKEditorComponent.prototype.createEditor = function () {
var _this = this;
var element = document.createElement(this.tagName);
this.elementRef.nativeElement.appendChild(element);
if (this.type === "divarea" /* DIVAREA */) {
this.config = this.ensureDivareaPlugin(this.config || {});
}
var instance = this.type === "inline" /* INLINE */
? CKEDITOR.inline(element, this.config)
: CKEDITOR.replace(element, this.config);
instance.once('instanceReady', (/**
* @param {?} evt
* @return {?}
*/
function (evt) {
var _this = this;
this.instance = instance;
this.wrapper.removeAttribute('style');
this.elementRef.nativeElement.appendChild(this.wrapper);
instance.once('instanceReady', function (evt) {
_this.instance = instance;
// Read only state may change during instance initialization.
this.readOnly = this._readOnly !== null ? this._readOnly : this.instance.readOnly;
this.subscribe(this.instance);
/** @type {?} */
_this.readOnly = _this._readOnly !== null ? _this._readOnly : _this.instance.readOnly;
_this.subscribe(_this.instance);
var undo = instance.undoManager;
if (this.data !== null) {
if (_this.data !== null) {
undo && undo.lock();
instance.setData(this.data);
// Locking undoManager prevents 'change' event.
// Trigger it manually to updated bound data.
if (this.data !== instance.getData()) {
instance.fire('change');
}
undo && undo.unlock();
instance.setData(_this.data, { callback: function () {
// Locking undoManager prevents 'change' event.
// Trigger it manually to updated bound data.
if (_this.data !== instance.getData()) {
undo ? instance.fire('change') : instance.fire('dataReady');
}
undo && undo.unlock();
_this.ngZone.run(function () {
_this.ready.emit(evt);
});
} });
}
this.ngZone.run((/**
* @return {?}
*/
function () {
_this.ready.emit(evt);
}));
}), this);
else {
_this.ngZone.run(function () {
_this.ready.emit(evt);
});
}
});
};
/**
* @private
* @param {?} editor
* @return {?}
*/
CKEditorComponent.prototype.subscribe = /**
* @private
* @param {?} editor
* @return {?}
*/
function (editor) {
CKEditorComponent.prototype.subscribe = function (editor) {
var _this = this;
editor.on('focus', (/**
* @param {?} evt
* @return {?}
*/
function (evt) {
_this.ngZone.run((/**
* @return {?}
*/
function () {
editor.on('focus', function (evt) {
_this.ngZone.run(function () {
_this.focus.emit(evt);
}));
}));
editor.on('blur', (/**
* @param {?} evt
* @return {?}
*/
function (evt) {
_this.ngZone.run((/**
* @return {?}
*/
function () {
});
});
editor.on('blur', function (evt) {
_this.ngZone.run(function () {
if (_this.onTouched) {

@@ -307,38 +215,34 @@ _this.onTouched();

_this.blur.emit(evt);
}));
}));
editor.on('change', (/**
* @param {?} evt
* @return {?}
*/
function (evt) {
_this.ngZone.run((/**
* @return {?}
*/
function () {
/** @type {?} */
var newData = editor.getData();
_this.change.emit(evt);
if (newData === _this.data) {
return;
}
_this._data = newData;
_this.dataChange.emit(newData);
if (_this.onChange) {
_this.onChange(newData);
}
}));
}));
});
});
editor.on('dataReady', this.propagateChange, this);
if (this.instance.undoManager) {
editor.on('change', this.propagateChange, this);
}
// If 'undo' plugin is not loaded, listen to 'selectionCheck' event instead. (#54).
else {
editor.on('selectionCheck', this.propagateChange, this);
}
};
/**
* @private
* @param {?} config
* @return {?}
*/
CKEditorComponent.prototype.ensureDivareaPlugin = /**
* @private
* @param {?} config
* @return {?}
*/
function (config) {
CKEditorComponent.prototype.propagateChange = function (event) {
var _this = this;
this.ngZone.run(function () {
var newData = _this.instance.getData();
if (event.name == 'change') {
_this.change.emit(event);
}
else if (event.name == 'dataReady') {
_this.dataReady.emit(event);
}
if (newData === _this.data) {
return;
}
_this._data = newData;
_this.dataChange.emit(newData);
if (_this.onChange) {
_this.onChange(newData);
}
});
};
CKEditorComponent.prototype.ensureDivareaPlugin = function (config) {
var extraPlugins = config.extraPlugins, removePlugins = config.removePlugins;

@@ -353,68 +257,17 @@ extraPlugins = this.removePlugin(extraPlugins, 'divarea') || '';

};
/**
* @private
* @param {?} plugins
* @param {?} toRemove
* @return {?}
*/
CKEditorComponent.prototype.removePlugin = /**
* @private
* @param {?} plugins
* @param {?} toRemove
* @return {?}
*/
function (plugins, toRemove) {
CKEditorComponent.prototype.removePlugin = function (plugins, toRemove) {
if (!plugins) {
return null;
}
/** @type {?} */
var isString = typeof plugins === 'string';
if (isString) {
plugins = ((/** @type {?} */ (plugins))).split(',');
plugins = plugins.split(',');
}
plugins = ((/** @type {?} */ (plugins))).filter((/**
* @param {?} plugin
* @return {?}
*/
function (plugin) { return plugin !== toRemove; }));
plugins = plugins.filter(function (plugin) { return plugin !== toRemove; });
if (isString) {
plugins = ((/** @type {?} */ (plugins))).join(',');
plugins = plugins.join(',');
}
return plugins;
};
/**
* @private
* @return {?}
*/
CKEditorComponent.prototype.createInitialElement = /**
* @private
* @return {?}
*/
function () {
// Render editor outside of component so it won't be removed from DOM before `instanceReady`.
this.wrapper = document.createElement('div');
/** @type {?} */
var element = document.createElement(this.tagName);
this.wrapper.setAttribute('style', 'display:none;');
document.body.appendChild(this.wrapper);
this.wrapper.appendChild(element);
return element;
};
CKEditorComponent.decorators = [
{ type: Component, args: [{
selector: 'ckeditor',
template: '<ng-template></ng-template>',
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef((/**
* @return {?}
*/
function () { return CKEditorComponent; })),
multi: true,
}
]
}] }
];
/** @nocollapse */
var CKEditorComponent_1;
CKEditorComponent.ctorParameters = function () { return [

@@ -424,137 +277,54 @@ { type: ElementRef },

]; };
CKEditorComponent.propDecorators = {
config: [{ type: Input }],
tagName: [{ type: Input }],
type: [{ type: Input }],
data: [{ type: Input }],
readOnly: [{ type: Input }],
ready: [{ type: Output }],
change: [{ type: Output }],
dataChange: [{ type: Output }],
focus: [{ type: Output }],
blur: [{ type: Output }],
editorUrl: [{ type: Input }]
};
tslib_1.__decorate([
Input()
], CKEditorComponent.prototype, "config", void 0);
tslib_1.__decorate([
Input()
], CKEditorComponent.prototype, "tagName", void 0);
tslib_1.__decorate([
Input()
], CKEditorComponent.prototype, "type", void 0);
tslib_1.__decorate([
Input()
], CKEditorComponent.prototype, "data", null);
tslib_1.__decorate([
Input()
], CKEditorComponent.prototype, "readOnly", null);
tslib_1.__decorate([
Output()
], CKEditorComponent.prototype, "ready", void 0);
tslib_1.__decorate([
Output()
], CKEditorComponent.prototype, "dataReady", void 0);
tslib_1.__decorate([
Output()
], CKEditorComponent.prototype, "change", void 0);
tslib_1.__decorate([
Output()
], CKEditorComponent.prototype, "dataChange", void 0);
tslib_1.__decorate([
Output()
], CKEditorComponent.prototype, "focus", void 0);
tslib_1.__decorate([
Output()
], CKEditorComponent.prototype, "blur", void 0);
tslib_1.__decorate([
Input()
], CKEditorComponent.prototype, "editorUrl", void 0);
CKEditorComponent = CKEditorComponent_1 = tslib_1.__decorate([
Component({
selector: 'ckeditor',
template: '<ng-template></ng-template>',
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(function () { return CKEditorComponent_1; }),
multi: true,
}
]
})
], CKEditorComponent);
return CKEditorComponent;
}());
export { CKEditorComponent };
if (false) {
/**
* The configuration of the editor.
* See https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html
* to learn more.
* @type {?}
*/
CKEditorComponent.prototype.config;
/**
* Tag name of the editor component.
*
* The default tag is `textarea`.
* @type {?}
*/
CKEditorComponent.prototype.tagName;
/**
* The type of the editor interface.
*
* By default editor interface will be initialized as `divarea` editor which is an inline editor with fixed UI.
* You can change interface type by choosing between `divarea` and `inline` editor interface types.
*
* See https://ckeditor.com/docs/ckeditor4/latest/guide/dev_uitypes.html
* and https://ckeditor.com/docs/ckeditor4/latest/examples/fixedui.html
* to learn more.
* @type {?}
*/
CKEditorComponent.prototype.type;
/**
* Fires when the editor is ready. It corresponds with the `editor#instanceReady`
* https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#event-instanceReady
* event.
* @type {?}
*/
CKEditorComponent.prototype.ready;
/**
* Fires when the content of the editor has changed. It corresponds with the `editor#change`
* https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#event-change
* event. For performance reasons this event may be called even when data didn't really changed.
* @type {?}
*/
CKEditorComponent.prototype.change;
/**
* Fires when the content of the editor has changed. In contrast to `change` - only emits when
* data really changed thus can be successfully used with `[data]` and two way `[(data)]` binding.
*
* See more: https://angular.io/guide/template-syntax#two-way-binding---
* @type {?}
*/
CKEditorComponent.prototype.dataChange;
/**
* Fires when the editing view of the editor is focused. It corresponds with the `editor#focus`
* https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#event-focus
* event.
* @type {?}
*/
CKEditorComponent.prototype.focus;
/**
* Fires when the editing view of the editor is blurred. It corresponds with the `editor#blur`
* https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#event-blur
* event.
* @type {?}
*/
CKEditorComponent.prototype.blur;
/**
* The instance of the editor created by this component.
* @type {?}
*/
CKEditorComponent.prototype.instance;
/**
* Wrapper element used to initialize editor.
* @type {?}
*/
CKEditorComponent.prototype.wrapper;
/**
* If the component is read–only before the editor instance is created, it remembers that state,
* so the editor can become read–only once it is ready.
* @type {?}
* @private
*/
CKEditorComponent.prototype._readOnly;
/**
* A callback executed when the content of the editor changes. Part of the
* `ControlValueAccessor` (https://angular.io/api/forms/ControlValueAccessor) interface.
*
* Note: Unset unless the component uses the `ngModel`.
* @type {?}
*/
CKEditorComponent.prototype.onChange;
/**
* A callback executed when the editor has been blurred. Part of the
* `ControlValueAccessor` (https://angular.io/api/forms/ControlValueAccessor) interface.
*
* Note: Unset unless the component uses the `ngModel`.
* @type {?}
*/
CKEditorComponent.prototype.onTouched;
/**
* @type {?}
* @private
*/
CKEditorComponent.prototype._data;
/**
* CKEditor 4 script url address. Script will be loaded only if CKEDITOR namespace is missing.
*
* Defaults to 'https://cdn.ckeditor.com/4.12.1/standard-all/ckeditor.js'
* @type {?}
*/
CKEditorComponent.prototype.editorUrl;
/**
* @type {?}
* @private
*/
CKEditorComponent.prototype.elementRef;
/**
* @type {?}
* @private
*/
CKEditorComponent.prototype.ngZone;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vY2tlZGl0b3I0LWFuZ3VsYXIvIiwic291cmNlcyI6WyJja2VkaXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFLQSxPQUFPLEVBQ04sU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixVQUFVLEVBQ1YsVUFBVSxFQUVWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFFTixpQkFBaUIsRUFDakIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQU14RDtJQXNLQywyQkFBcUIsVUFBbUMsRUFBVSxNQUFjO1FBQTNELGVBQVUsR0FBVixVQUFVLENBQXlCO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUTs7Ozs7O1FBN0l2RSxZQUFPLEdBQUcsVUFBVSxDQUFDOzs7Ozs7Ozs7OztRQVlyQixTQUFJLDJCQUFzRDs7Ozs7O1FBeUR6RCxVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQXVCLENBQUM7Ozs7OztRQU9oRCxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQXVCLENBQUM7Ozs7Ozs7UUFRakQsZUFBVSxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDOzs7Ozs7UUFPckQsVUFBSyxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDOzs7Ozs7UUFPaEQsU0FBSSxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDOzs7OztRQWdCakQsY0FBUyxHQUFZLElBQUksQ0FBQztRQWtCMUIsVUFBSyxHQUFXLElBQUksQ0FBQzs7Ozs7O1FBT3BCLGNBQVMsR0FBRywwREFBMEQsQ0FBQztJQUdoRixDQUFDO0lBekhELHNCQUFhLG1DQUFJOzs7O1FBZ0JqQjtZQUNDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNuQixDQUFDO1FBekJEOzs7Ozs7V0FNRzs7Ozs7Ozs7OztRQUNI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M0QsdUNBQStEOzs7Ozs7O0lBTy9ELGtDQUEwRDs7Ozs7OztJQU8xRCxpQ0FBeUQ7Ozs7O0lBS3pELHFDQUFjOzs7OztJQUtkLG9DQUFxQjs7Ozs7OztJQU1yQixzQ0FBa0M7Ozs7Ozs7O0lBUWxDLHFDQUFvQzs7Ozs7Ozs7SUFRcEMsc0NBQXVCOzs7OztJQUV2QixrQ0FBNkI7Ozs7Ozs7SUFPN0Isc0NBQWdGOzs7OztJQUVuRSx1Q0FBMkM7Ozs7O0lBQUUsbUNBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBDb3B5cmlnaHQgKGMpIDIwMDMtMjAxOSwgQ0tTb3VyY2UgLSBGcmVkZXJpY28gS25hYmJlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEZvciBsaWNlbnNpbmcsIHNlZSBMSUNFTlNFLm1kLlxuICovXG5cbmltcG9ydCB7XG5cdENvbXBvbmVudCxcblx0Tmdab25lLFxuXHRJbnB1dCxcblx0T3V0cHV0LFxuXHRFdmVudEVtaXR0ZXIsXG5cdGZvcndhcmRSZWYsXG5cdEVsZW1lbnRSZWYsXG5cdEFmdGVyVmlld0luaXQsIE9uRGVzdHJveVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtcblx0Q29udHJvbFZhbHVlQWNjZXNzb3IsXG5cdE5HX1ZBTFVFX0FDQ0VTU09SXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgZ2V0RWRpdG9yTmFtZXNwYWNlIH0gZnJvbSAnLi9ja2VkaXRvci5oZWxwZXJzJztcblxuaW1wb3J0IHsgQ0tFZGl0b3I0IH0gZnJvbSAnLi9ja2VkaXRvcic7XG5cbmRlY2xhcmUgbGV0IENLRURJVE9SOiBhbnk7XG5cbkBDb21wb25lbnQoIHtcblx0c2VsZWN0b3I6ICdja2VkaXRvcicsXG5cdHRlbXBsYXRlOiAnPG5nLXRlbXBsYXRlPjwvbmctdGVtcGxhdGU+JyxcblxuXHRwcm92aWRlcnM6IFtcblx0XHR7XG5cdFx0XHRwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcblx0XHRcdHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCAoKSA9PiBDS0VkaXRvckNvbXBvbmVudCApLFxuXHRcdFx0bXVsdGk6IHRydWUsXG5cdFx0fVxuXHRdXG59IClcbmV4cG9ydCBjbGFzcyBDS0VkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXHQvKipcblx0ICogVGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGVkaXRvci5cblx0ICogU2VlIGh0dHBzOi8vY2tlZGl0b3IuY29tL2RvY3MvY2tlZGl0b3I0L2xhdGVzdC9hcGkvQ0tFRElUT1JfY29uZmlnLmh0bWxcblx0ICogdG8gbGVhcm4gbW9yZS5cblx0ICovXG5cdEBJbnB1dCgpIGNvbmZpZz86IENLRWRpdG9yNC5Db25maWc7XG5cblx0LyoqXG5cdCAqIFRhZyBuYW1lIG9mIHRoZSBlZGl0b3IgY29tcG9uZW50LlxuXHQgKlxuXHQgKiBUaGUgZGVmYXVsdCB0YWcgaXMgYHRleHRhcmVhYC5cblx0ICovXG5cdEBJbnB1dCgpIHRhZ05hbWUgPSAndGV4dGFyZWEnO1xuXG5cdC8qKlxuXHQgKiBUaGUgdHlwZSBvZiB0aGUgZWRpdG9yIGludGVyZmFjZS5cblx0ICpcblx0ICogQnkgZGVmYXVsdCBlZGl0b3IgaW50ZXJmYWNlIHdpbGwgYmUgaW5pdGlhbGl6ZWQgYXMgYGRpdmFyZWFgIGVkaXRvciB3aGljaCBpcyBhbiBpbmxpbmUgZWRpdG9yIHdpdGggZml4ZWQgVUkuXG5cdCAqIFlvdSBjYW4gY2hhbmdlIGludGVyZmFjZSB0eXBlIGJ5IGNob29zaW5nIGJldHdlZW4gYGRpdmFyZWFgIGFuZCBgaW5saW5lYCBlZGl0b3IgaW50ZXJmYWNlIHR5cGVzLlxuXHQgKlxuXHQgKiBTZWUgaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjQvbGF0ZXN0L2d1aWRlL2Rldl91aXR5cGVzLmh0bWxcblx0ICogYW5kIGh0dHBzOi8vY2tlZGl0b3IuY29tL2RvY3MvY2tlZGl0b3I0L2xhdGVzdC9leGFtcGxlcy9maXhlZHVpLmh0bWxcblx0ICogdG8gbGVhcm4gbW9yZS5cblx0ICovXG5cdEBJbnB1dCgpIHR5cGU6IENLRWRpdG9yNC5FZGl0b3JUeXBlID0gQ0tFZGl0b3I0LkVkaXRvclR5cGUuRElWQVJFQTtcblxuXHQvKipcblx0ICogS2VlcHMgdHJhY2sgb2YgdGhlIGVkaXRvcidzIGRhdGEuXG5cdCAqXG5cdCAqIEl0J3MgYWxzbyBkZWNvcmF0ZWQgYXMgYW4gaW5wdXQgd2hpY2ggaXMgdXNlZnVsIHdoZW4gbm90IHVzaW5nIHRoZSBuZ01vZGVsLlxuXHQgKlxuXHQgKiBTZWUgaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9mb3Jtcy9OZ01vZGVsIHRvIGxlYXJuIG1vcmUuXG5cdCAqL1xuXHRASW5wdXQoKSBzZXQgZGF0YSggZGF0YTogc3RyaW5nICkge1xuXHRcdGlmICggZGF0YSA9PT0gdGhpcy5fZGF0YSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuaW5zdGFuY2UgKSB7XG5cdFx0XHR0aGlzLmluc3RhbmNlLnNldERhdGEoIGRhdGEgKTtcblx0XHRcdC8vIERhdGEgbWF5IGJlIGNoYW5nZWQgYnkgQUNGLlxuXHRcdFx0dGhpcy5fZGF0YSA9IHRoaXMuaW5zdGFuY2UuZ2V0RGF0YSgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuX2RhdGEgPSBkYXRhO1xuXG5cdH1cblxuXHRnZXQgZGF0YSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9kYXRhO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdoZW4gc2V0IGB0cnVlYCwgdGhlIGVkaXRvciBiZWNvbWVzIHJlYWQtb25seS5cblx0ICogaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjQvbGF0ZXN0L2FwaS9DS0VESVRPUl9lZGl0b3IuaHRtbCNwcm9wZXJ0eS1yZWFkT25seVxuXHQgKiB0byBsZWFybiBtb3JlLlxuXHQgKi9cblx0QElucHV0KCkgc2V0IHJlYWRPbmx5KCBpc1JlYWRPbmx5OiBib29sZWFuICkge1xuXHRcdGlmICggdGhpcy5pbnN0YW5jZSApIHtcblx0XHRcdHRoaXMuaW5zdGFuY2Uuc2V0UmVhZE9ubHkoIGlzUmVhZE9ubHkgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZWxheSBzZXR0aW5nIHJlYWQtb25seSBzdGF0ZSB1bnRpbCBlZGl0b3IgaW5pdGlhbGl6YXRpb24uXG5cdFx0dGhpcy5fcmVhZE9ubHkgPSBpc1JlYWRPbmx5O1xuXHR9XG5cblx0Z2V0IHJlYWRPbmx5KCk6IGJvb2xlYW4ge1xuXHRcdGlmICggdGhpcy5pbnN0YW5jZSApIHtcblx0XHRcdHJldHVybiB0aGlzLmluc3RhbmNlLnJlYWRPbmx5O1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLl9yZWFkT25seTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGaXJlcyB3aGVuIHRoZSBlZGl0b3IgaXMgcmVhZHkuIEl0IGNvcnJlc3BvbmRzIHdpdGggdGhlIGBlZGl0b3IjaW5zdGFuY2VSZWFkeWBcblx0ICogaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjQvbGF0ZXN0L2FwaS9DS0VESVRPUl9lZGl0b3IuaHRtbCNldmVudC1pbnN0YW5jZVJlYWR5XG5cdCAqIGV2ZW50LlxuXHQgKi9cblx0QE91dHB1dCgpIHJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxDS0VkaXRvcjQuRXZlbnRJbmZvPigpO1xuXG5cdC8qKlxuXHQgKiBGaXJlcyB3aGVuIHRoZSBjb250ZW50IG9mIHRoZSBlZGl0b3IgaGFzIGNoYW5nZWQuIEl0IGNvcnJlc3BvbmRzIHdpdGggdGhlIGBlZGl0b3IjY2hhbmdlYFxuXHQgKiBodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNC9sYXRlc3QvYXBpL0NLRURJVE9SX2VkaXRvci5odG1sI2V2ZW50LWNoYW5nZVxuXHQgKiBldmVudC4gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgdGhpcyBldmVudCBtYXkgYmUgY2FsbGVkIGV2ZW4gd2hlbiBkYXRhIGRpZG4ndCByZWFsbHkgY2hhbmdlZC5cblx0ICovXG5cdEBPdXRwdXQoKSBjaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPENLRWRpdG9yNC5FdmVudEluZm8+KCk7XG5cblx0LyoqXG5cdCAqIEZpcmVzIHdoZW4gdGhlIGNvbnRlbnQgb2YgdGhlIGVkaXRvciBoYXMgY2hhbmdlZC4gSW4gY29udHJhc3QgdG8gYGNoYW5nZWAgLSBvbmx5IGVtaXRzIHdoZW5cblx0ICogZGF0YSByZWFsbHkgY2hhbmdlZCB0aHVzIGNhbiBiZSBzdWNjZXNzZnVsbHkgdXNlZCB3aXRoIGBbZGF0YV1gIGFuZCB0d28gd2F5IGBbKGRhdGEpXWAgYmluZGluZy5cblx0ICpcblx0ICogU2VlIG1vcmU6IGh0dHBzOi8vYW5ndWxhci5pby9ndWlkZS90ZW1wbGF0ZS1zeW50YXgjdHdvLXdheS1iaW5kaW5nLS0tXG5cdCAqL1xuXHRAT3V0cHV0KCkgZGF0YUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q0tFZGl0b3I0LkV2ZW50SW5mbz4oKTtcblxuXHQvKipcblx0ICogRmlyZXMgd2hlbiB0aGUgZWRpdGluZyB2aWV3IG9mIHRoZSBlZGl0b3IgaXMgZm9jdXNlZC4gSXQgY29ycmVzcG9uZHMgd2l0aCB0aGUgYGVkaXRvciNmb2N1c2Bcblx0ICogaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjQvbGF0ZXN0L2FwaS9DS0VESVRPUl9lZGl0b3IuaHRtbCNldmVudC1mb2N1c1xuXHQgKiBldmVudC5cblx0ICovXG5cdEBPdXRwdXQoKSBmb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXI8Q0tFZGl0b3I0LkV2ZW50SW5mbz4oKTtcblxuXHQvKipcblx0ICogRmlyZXMgd2hlbiB0aGUgZWRpdGluZyB2aWV3IG9mIHRoZSBlZGl0b3IgaXMgYmx1cnJlZC4gSXQgY29ycmVzcG9uZHMgd2l0aCB0aGUgYGVkaXRvciNibHVyYFxuXHQgKiBodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNC9sYXRlc3QvYXBpL0NLRURJVE9SX2VkaXRvci5odG1sI2V2ZW50LWJsdXJcblx0ICogZXZlbnQuXG5cdCAqL1xuXHRAT3V0cHV0KCkgYmx1ciA9IG5ldyBFdmVudEVtaXR0ZXI8Q0tFZGl0b3I0LkV2ZW50SW5mbz4oKTtcblxuXHQvKipcblx0ICogVGhlIGluc3RhbmNlIG9mIHRoZSBlZGl0b3IgY3JlYXRlZCBieSB0aGlzIGNvbXBvbmVudC5cblx0ICovXG5cdGluc3RhbmNlOiBhbnk7XG5cblx0LyoqXG5cdCAqIFdyYXBwZXIgZWxlbWVudCB1c2VkIHRvIGluaXRpYWxpemUgZWRpdG9yLlxuXHQgKi9cblx0d3JhcHBlcjogSFRNTEVsZW1lbnQ7XG5cblx0LyoqXG5cdCAqIElmIHRoZSBjb21wb25lbnQgaXMgcmVhZOKAk29ubHkgYmVmb3JlIHRoZSBlZGl0b3IgaW5zdGFuY2UgaXMgY3JlYXRlZCwgaXQgcmVtZW1iZXJzIHRoYXQgc3RhdGUsXG5cdCAqIHNvIHRoZSBlZGl0b3IgY2FuIGJlY29tZSByZWFk4oCTb25seSBvbmNlIGl0IGlzIHJlYWR5LlxuXHQgKi9cblx0cHJpdmF0ZSBfcmVhZE9ubHk6IGJvb2xlYW4gPSBudWxsO1xuXG5cdC8qKlxuXHQgKiBBIGNhbGxiYWNrIGV4ZWN1dGVkIHdoZW4gdGhlIGNvbnRlbnQgb2YgdGhlIGVkaXRvciBjaGFuZ2VzLiBQYXJ0IG9mIHRoZVxuXHQgKiBgQ29udHJvbFZhbHVlQWNjZXNzb3JgIChodHRwczovL2FuZ3VsYXIuaW8vYXBpL2Zvcm1zL0NvbnRyb2xWYWx1ZUFjY2Vzc29yKSBpbnRlcmZhY2UuXG5cdCAqXG5cdCAqIE5vdGU6IFVuc2V0IHVubGVzcyB0aGUgY29tcG9uZW50IHVzZXMgdGhlIGBuZ01vZGVsYC5cblx0ICovXG5cdG9uQ2hhbmdlPzogKCBkYXRhOiBzdHJpbmcgKSA9PiB2b2lkO1xuXG5cdC8qKlxuXHQgKiBBIGNhbGxiYWNrIGV4ZWN1dGVkIHdoZW4gdGhlIGVkaXRvciBoYXMgYmVlbiBibHVycmVkLiBQYXJ0IG9mIHRoZVxuXHQgKiBgQ29udHJvbFZhbHVlQWNjZXNzb3JgIChodHRwczovL2FuZ3VsYXIuaW8vYXBpL2Zvcm1zL0NvbnRyb2xWYWx1ZUFjY2Vzc29yKSBpbnRlcmZhY2UuXG5cdCAqXG5cdCAqIE5vdGU6IFVuc2V0IHVubGVzcyB0aGUgY29tcG9uZW50IHVzZXMgdGhlIGBuZ01vZGVsYC5cblx0ICovXG5cdG9uVG91Y2hlZD86ICgpID0+IHZvaWQ7XG5cblx0cHJpdmF0ZSBfZGF0YTogc3RyaW5nID0gbnVsbDtcblxuXHQvKipcblx0ICogQ0tFZGl0b3IgNCBzY3JpcHQgdXJsIGFkZHJlc3MuIFNjcmlwdCB3aWxsIGJlIGxvYWRlZCBvbmx5IGlmIENLRURJVE9SIG5hbWVzcGFjZSBpcyBtaXNzaW5nLlxuXHQgKlxuXHQgKiBEZWZhdWx0cyB0byAnaHR0cHM6Ly9jZG4uY2tlZGl0b3IuY29tLzQuMTIuMS9zdGFuZGFyZC1hbGwvY2tlZGl0b3IuanMnXG5cdCAqL1xuXHRASW5wdXQoKSBlZGl0b3JVcmwgPSAnaHR0cHM6Ly9jZG4uY2tlZGl0b3IuY29tLzQuMTIuMS9zdGFuZGFyZC1hbGwvY2tlZGl0b3IuanMnO1xuXG5cdGNvbnN0cnVjdG9yKCBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LCBwcml2YXRlIG5nWm9uZTogTmdab25lICkge1xuXHR9XG5cblx0bmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuXHRcdGdldEVkaXRvck5hbWVzcGFjZSggdGhpcy5lZGl0b3JVcmwgKS50aGVuKCAoKSA9PiB7XG5cdFx0XHR0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhciggdGhpcy5jcmVhdGVFZGl0b3IuYmluZCggdGhpcyApICk7XG5cdFx0fSApLmNhdGNoKCB3aW5kb3cuY29uc29sZS5lcnJvciApO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoICgpID0+IHtcblx0XHRcdGlmICggdGhpcy5pbnN0YW5jZSApIHtcblx0XHRcdFx0dGhpcy5pbnN0YW5jZS5kZXN0cm95KCk7XG5cdFx0XHRcdHRoaXMuaW5zdGFuY2UgPSBudWxsO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxuXG5cdHdyaXRlVmFsdWUoIHZhbHVlOiBzdHJpbmcgKTogdm9pZCB7XG5cdFx0dGhpcy5kYXRhID0gdmFsdWU7XG5cdH1cblxuXHRyZWdpc3Rlck9uQ2hhbmdlKCBjYWxsYmFjazogKCBkYXRhOiBzdHJpbmcgKSA9PiB2b2lkICk6IHZvaWQge1xuXHRcdHRoaXMub25DaGFuZ2UgPSBjYWxsYmFjaztcblx0fVxuXG5cdHJlZ2lzdGVyT25Ub3VjaGVkKCBjYWxsYmFjazogKCkgPT4gdm9pZCApOiB2b2lkIHtcblx0XHR0aGlzLm9uVG91Y2hlZCA9IGNhbGxiYWNrO1xuXHR9XG5cblx0cHJpdmF0ZSBjcmVhdGVFZGl0b3IoKTogdm9pZCB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IHRoaXMuY3JlYXRlSW5pdGlhbEVsZW1lbnQoKTtcblxuXHRcdHRoaXMuY29uZmlnID0gdGhpcy5lbnN1cmVEaXZhcmVhUGx1Z2luKCB0aGlzLmNvbmZpZyB8fCB7fSApO1xuXG5cdFx0Y29uc3QgaW5zdGFuY2UgPSB0aGlzLnR5cGUgPT09IENLRWRpdG9yNC5FZGl0b3JUeXBlLklOTElORSA/XG5cdFx0XHRDS0VESVRPUi5pbmxpbmUoIGVsZW1lbnQsIHRoaXMuY29uZmlnIClcblx0XHRcdDogQ0tFRElUT1IucmVwbGFjZSggZWxlbWVudCwgdGhpcy5jb25maWcgKTtcblxuXHRcdGluc3RhbmNlLm9uY2UoICdpbnN0YW5jZVJlYWR5JywgZnVuY3Rpb24oIGV2dCApIHtcblx0XHRcdHRoaXMuaW5zdGFuY2UgPSBpbnN0YW5jZTtcblxuXHRcdFx0dGhpcy53cmFwcGVyLnJlbW92ZUF0dHJpYnV0ZSggJ3N0eWxlJyApO1xuXG5cdFx0XHR0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZCggdGhpcy53cmFwcGVyICk7XG5cblx0XHRcdC8vIFJlYWQgb25seSBzdGF0ZSBtYXkgY2hhbmdlIGR1cmluZyBpbnN0YW5jZSBpbml0aWFsaXphdGlvbi5cblx0XHRcdHRoaXMucmVhZE9ubHkgPSB0aGlzLl9yZWFkT25seSAhPT0gbnVsbCA/IHRoaXMuX3JlYWRPbmx5IDogdGhpcy5pbnN0YW5jZS5yZWFkT25seTtcblxuXHRcdFx0dGhpcy5zdWJzY3JpYmUoIHRoaXMuaW5zdGFuY2UgKTtcblxuXHRcdFx0Y29uc3QgdW5kbyA9IGluc3RhbmNlLnVuZG9NYW5hZ2VyO1xuXG5cdFx0XHRpZiAoIHRoaXMuZGF0YSAhPT0gbnVsbCApIHtcblx0XHRcdFx0dW5kbyAmJiB1bmRvLmxvY2soKTtcblx0XHRcdFx0aW5zdGFuY2Uuc2V0RGF0YSggdGhpcy5kYXRhICk7XG5cblx0XHRcdFx0Ly8gTG9ja2luZyB1bmRvTWFuYWdlciBwcmV2ZW50cyAnY2hhbmdlJyBldmVudC5cblx0XHRcdFx0Ly8gVHJpZ2dlciBpdCBtYW51YWxseSB0byB1cGRhdGVkIGJvdW5kIGRhdGEuXG5cdFx0XHRcdGlmICggdGhpcy5kYXRhICE9PSBpbnN0YW5jZS5nZXREYXRhKCkgKSB7XG5cdFx0XHRcdFx0aW5zdGFuY2UuZmlyZSggJ2NoYW5nZScgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR1bmRvICYmIHVuZG8udW5sb2NrKCk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMubmdab25lLnJ1biggKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnJlYWR5LmVtaXQoIGV2dCApO1xuXHRcdFx0fSApO1xuXHRcdH0sIHRoaXMgKTtcblx0fVxuXG5cdHByaXZhdGUgc3Vic2NyaWJlKCBlZGl0b3I6IGFueSApOiB2b2lkIHtcblx0XHRlZGl0b3Iub24oICdmb2N1cycsIGV2dCA9PiB7XG5cdFx0XHR0aGlzLm5nWm9uZS5ydW4oICgpID0+IHtcblx0XHRcdFx0dGhpcy5mb2N1cy5lbWl0KCBldnQgKTtcblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cblx0XHRlZGl0b3Iub24oICdibHVyJywgZXZ0ID0+IHtcblx0XHRcdHRoaXMubmdab25lLnJ1biggKCkgPT4ge1xuXHRcdFx0XHRpZiAoIHRoaXMub25Ub3VjaGVkICkge1xuXHRcdFx0XHRcdHRoaXMub25Ub3VjaGVkKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLmJsdXIuZW1pdCggZXZ0ICk7XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXG5cdFx0ZWRpdG9yLm9uKCAnY2hhbmdlJywgZXZ0ID0+IHtcblx0XHRcdHRoaXMubmdab25lLnJ1biggKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBuZXdEYXRhID0gZWRpdG9yLmdldERhdGEoKTtcblxuXHRcdFx0XHR0aGlzLmNoYW5nZS5lbWl0KCBldnQgKTtcblxuXHRcdFx0XHRpZiAoIG5ld0RhdGEgPT09IHRoaXMuZGF0YSApIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLl9kYXRhID0gbmV3RGF0YTtcblx0XHRcdFx0dGhpcy5kYXRhQ2hhbmdlLmVtaXQoIG5ld0RhdGEgKTtcblxuXHRcdFx0XHRpZiAoIHRoaXMub25DaGFuZ2UgKSB7XG5cdFx0XHRcdFx0dGhpcy5vbkNoYW5nZSggbmV3RGF0YSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0cHJpdmF0ZSBlbnN1cmVEaXZhcmVhUGx1Z2luKCBjb25maWc6IENLRWRpdG9yNC5Db25maWcgKTogQ0tFZGl0b3I0LkNvbmZpZyB7XG5cdFx0bGV0IHsgZXh0cmFQbHVnaW5zLCByZW1vdmVQbHVnaW5zIH0gPSBjb25maWc7XG5cblx0XHRleHRyYVBsdWdpbnMgPSB0aGlzLnJlbW92ZVBsdWdpbiggZXh0cmFQbHVnaW5zLCAnZGl2YXJlYScgKSB8fCAnJztcblx0XHRleHRyYVBsdWdpbnMgPSBleHRyYVBsdWdpbnMuY29uY2F0KCB0eXBlb2YgZXh0cmFQbHVnaW5zID09PSAnc3RyaW5nJyA/ICcsZGl2YXJlYScgOiAnZGl2YXJlYScgKTtcblxuXHRcdGlmICggcmVtb3ZlUGx1Z2lucyAmJiByZW1vdmVQbHVnaW5zLmluY2x1ZGVzKCAnZGl2YXJlYScgKSApIHtcblxuXHRcdFx0cmVtb3ZlUGx1Z2lucyA9IHRoaXMucmVtb3ZlUGx1Z2luKCByZW1vdmVQbHVnaW5zLCAnZGl2YXJlYScgKTtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnW0NLRURJVE9SXSBkaXZhcmVhIHBsdWdpbiBpcyByZXF1aXJlZCB0byBpbml0aWFsaXplIGVkaXRvciB1c2luZyBBbmd1bGFyIGludGVncmF0aW9uLicgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbigge30sIGNvbmZpZywgeyBleHRyYVBsdWdpbnMsIHJlbW92ZVBsdWdpbnMgfSApO1xuXHR9XG5cblx0cHJpdmF0ZSByZW1vdmVQbHVnaW4oIHBsdWdpbnM6IHN0cmluZyB8IHN0cmluZ1tdLCB0b1JlbW92ZTogc3RyaW5nICk6IHN0cmluZyB8IHN0cmluZ1tdIHtcblx0XHRpZiAoICFwbHVnaW5zICkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaXNTdHJpbmcgPSB0eXBlb2YgcGx1Z2lucyA9PT0gJ3N0cmluZyc7XG5cblx0XHRpZiAoIGlzU3RyaW5nICkge1xuXHRcdFx0cGx1Z2lucyA9ICggcGx1Z2lucyBhcyBzdHJpbmcgKS5zcGxpdCggJywnICk7XG5cdFx0fVxuXG5cdFx0cGx1Z2lucyA9ICggcGx1Z2lucyBhcyBzdHJpbmdbXSApLmZpbHRlciggcGx1Z2luID0+IHBsdWdpbiAhPT0gdG9SZW1vdmUgKTtcblxuXHRcdGlmICggaXNTdHJpbmcgKSB7XG5cdFx0XHRwbHVnaW5zID0gKCBwbHVnaW5zIGFzIHN0cmluZ1tdICkuam9pbiggJywnICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBsdWdpbnM7XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZUluaXRpYWxFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcblx0XHQvLyBSZW5kZXIgZWRpdG9yIG91dHNpZGUgb2YgY29tcG9uZW50IHNvIGl0IHdvbid0IGJlIHJlbW92ZWQgZnJvbSBET00gYmVmb3JlIGBpbnN0YW5jZVJlYWR5YC5cblx0XHR0aGlzLndyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApO1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCB0aGlzLnRhZ05hbWUgKTtcblxuXHRcdHRoaXMud3JhcHBlci5zZXRBdHRyaWJ1dGUoICdzdHlsZScsICdkaXNwbGF5Om5vbmU7JyApO1xuXG5cdFx0ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggdGhpcy53cmFwcGVyICk7XG5cdFx0dGhpcy53cmFwcGVyLmFwcGVuZENoaWxkKCBlbGVtZW50ICk7XG5cblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vY2tlZGl0b3I0LWFuZ3VsYXIvIiwic291cmNlcyI6WyJja2VkaXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHOztBQUVILE9BQU8sRUFDTixTQUFTLEVBQ1QsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLFVBQVUsRUFDVixVQUFVLEVBQ1YsYUFBYSxFQUFFLFNBQVMsRUFDeEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUVOLGlCQUFpQixFQUNqQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBa0J4RDtJQStKQywyQkFBcUIsVUFBc0IsRUFBVSxNQUFjO1FBQTlDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBdkpuRTs7OztXQUlHO1FBQ00sWUFBTyxHQUFHLFVBQVUsQ0FBQztRQUU5Qjs7Ozs7Ozs7O1dBU0c7UUFDTSxTQUFJLDJCQUFzRDtRQW9EbkU7Ozs7V0FJRztRQUNPLFVBQUssR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUUxRDs7Ozs7V0FLRztRQUNPLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUU5RDs7Ozs7O1dBTUc7UUFDTyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQXVCLENBQUM7UUFFM0Q7Ozs7O1dBS0c7UUFDTyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQXVCLENBQUM7UUFFL0Q7Ozs7V0FJRztRQUNPLFVBQUssR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUUxRDs7OztXQUlHO1FBQ08sU0FBSSxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDO1FBT3pEOzs7V0FHRztRQUNLLGNBQVMsR0FBWSxJQUFJLENBQUM7UUFrQjFCLFVBQUssR0FBVyxJQUFJLENBQUM7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QUU7d0RBQXFEO0lBU3BEO1FBQVQsTUFBTSxFQUFFO3FEQUFrRDtJQVFqRDtRQUFULE1BQU0sRUFBRTt5REFBc0Q7SUFPckQ7UUFBVCxNQUFNLEVBQUU7b0RBQWlEO0lBT2hEO1FBQVQsTUFBTSxFQUFFO21EQUFnRDtJQW9DaEQ7UUFBUixLQUFLLEVBQUU7d0RBQXdFO0lBN0pwRSxpQkFBaUI7UUFaN0IsU0FBUyxDQUFFO1lBQ1gsUUFBUSxFQUFFLFVBQVU7WUFDcEIsUUFBUSxFQUFFLDZCQUE2QjtZQUV2QyxTQUFTLEVBQUU7Z0JBQ1Y7b0JBQ0MsT0FBTyxFQUFFLGlCQUFpQjtvQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBRSxjQUFNLE9BQUEsbUJBQWlCLEVBQWpCLENBQWlCLENBQUU7b0JBQ2xELEtBQUssRUFBRSxJQUFJO2lCQUNYO2FBQ0Q7U0FDRCxDQUFFO09BQ1UsaUJBQWlCLENBZ1U3QjtJQUFELHdCQUFDO0NBQUEsQUFoVUQsSUFnVUM7U0FoVVksaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBDb3B5cmlnaHQgKGMpIDIwMDMtMjAxOSwgQ0tTb3VyY2UgLSBGcmVkZXJpY28gS25hYmJlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIEZvciBsaWNlbnNpbmcsIHNlZSBMSUNFTlNFLm1kLlxuICovXG5cbmltcG9ydCB7XG5cdENvbXBvbmVudCxcblx0Tmdab25lLFxuXHRJbnB1dCxcblx0T3V0cHV0LFxuXHRFdmVudEVtaXR0ZXIsXG5cdGZvcndhcmRSZWYsXG5cdEVsZW1lbnRSZWYsXG5cdEFmdGVyVmlld0luaXQsIE9uRGVzdHJveVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtcblx0Q29udHJvbFZhbHVlQWNjZXNzb3IsXG5cdE5HX1ZBTFVFX0FDQ0VTU09SXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgZ2V0RWRpdG9yTmFtZXNwYWNlIH0gZnJvbSAnLi9ja2VkaXRvci5oZWxwZXJzJztcblxuaW1wb3J0IHsgQ0tFZGl0b3I0IH0gZnJvbSAnLi9ja2VkaXRvcic7XG5cbmRlY2xhcmUgbGV0IENLRURJVE9SOiBhbnk7XG5cbkBDb21wb25lbnQoIHtcblx0c2VsZWN0b3I6ICdja2VkaXRvcicsXG5cdHRlbXBsYXRlOiAnPG5nLXRlbXBsYXRlPjwvbmctdGVtcGxhdGU+JyxcblxuXHRwcm92aWRlcnM6IFtcblx0XHR7XG5cdFx0XHRwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcblx0XHRcdHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCAoKSA9PiBDS0VkaXRvckNvbXBvbmVudCApLFxuXHRcdFx0bXVsdGk6IHRydWUsXG5cdFx0fVxuXHRdXG59IClcbmV4cG9ydCBjbGFzcyBDS0VkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXHQvKipcblx0ICogVGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGVkaXRvci5cblx0ICogU2VlIGh0dHBzOi8vY2tlZGl0b3IuY29tL2RvY3MvY2tlZGl0b3I0L2xhdGVzdC9hcGkvQ0tFRElUT1JfY29uZmlnLmh0bWxcblx0ICogdG8gbGVhcm4gbW9yZS5cblx0ICovXG5cdEBJbnB1dCgpIGNvbmZpZz86IENLRWRpdG9yNC5Db25maWc7XG5cblx0LyoqXG5cdCAqIFRhZyBuYW1lIG9mIHRoZSBlZGl0b3IgY29tcG9uZW50LlxuXHQgKlxuXHQgKiBUaGUgZGVmYXVsdCB0YWcgaXMgYHRleHRhcmVhYC5cblx0ICovXG5cdEBJbnB1dCgpIHRhZ05hbWUgPSAndGV4dGFyZWEnO1xuXG5cdC8qKlxuXHQgKiBUaGUgdHlwZSBvZiB0aGUgZWRpdG9yIGludGVyZmFjZS5cblx0ICpcblx0ICogQnkgZGVmYXVsdCBlZGl0b3IgaW50ZXJmYWNlIHdpbGwgYmUgaW5pdGlhbGl6ZWQgYXMgYGRpdmFyZWFgIGVkaXRvciB3aGljaCBpcyBhbiBpbmxpbmUgZWRpdG9yIHdpdGggZml4ZWQgVUkuXG5cdCAqIFlvdSBjYW4gY2hhbmdlIGludGVyZmFjZSB0eXBlIGJ5IGNob29zaW5nIGJldHdlZW4gYGRpdmFyZWFgIGFuZCBgaW5saW5lYCBlZGl0b3IgaW50ZXJmYWNlIHR5cGVzLlxuXHQgKlxuXHQgKiBTZWUgaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjQvbGF0ZXN0L2d1aWRlL2Rldl91aXR5cGVzLmh0bWxcblx0ICogYW5kIGh0dHBzOi8vY2tlZGl0b3IuY29tL2RvY3MvY2tlZGl0b3I0L2xhdGVzdC9leGFtcGxlcy9maXhlZHVpLmh0bWxcblx0ICogdG8gbGVhcm4gbW9yZS5cblx0ICovXG5cdEBJbnB1dCgpIHR5cGU6IENLRWRpdG9yNC5FZGl0b3JUeXBlID0gQ0tFZGl0b3I0LkVkaXRvclR5cGUuQ0xBU1NJQztcblxuXHQvKipcblx0ICogS2VlcHMgdHJhY2sgb2YgdGhlIGVkaXRvcidzIGRhdGEuXG5cdCAqXG5cdCAqIEl0J3MgYWxzbyBkZWNvcmF0ZWQgYXMgYW4gaW5wdXQgd2hpY2ggaXMgdXNlZnVsIHdoZW4gbm90IHVzaW5nIHRoZSBuZ01vZGVsLlxuXHQgKlxuXHQgKiBTZWUgaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9mb3Jtcy9OZ01vZGVsIHRvIGxlYXJuIG1vcmUuXG5cdCAqL1xuXHRASW5wdXQoKSBzZXQgZGF0YSggZGF0YTogc3RyaW5nICkge1xuXHRcdGlmICggZGF0YSA9PT0gdGhpcy5fZGF0YSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuaW5zdGFuY2UgKSB7XG5cdFx0XHR0aGlzLmluc3RhbmNlLnNldERhdGEoIGRhdGEgKTtcblx0XHRcdC8vIERhdGEgbWF5IGJlIGNoYW5nZWQgYnkgQUNGLlxuXHRcdFx0dGhpcy5fZGF0YSA9IHRoaXMuaW5zdGFuY2UuZ2V0RGF0YSgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuX2RhdGEgPSBkYXRhO1xuXG5cdH1cblxuXHRnZXQgZGF0YSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9kYXRhO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdoZW4gc2V0IGB0cnVlYCwgdGhlIGVkaXRvciBiZWNvbWVzIHJlYWQtb25seS5cblx0ICogaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjQvbGF0ZXN0L2FwaS9DS0VESVRPUl9lZGl0b3IuaHRtbCNwcm9wZXJ0eS1yZWFkT25seVxuXHQgKiB0byBsZWFybiBtb3JlLlxuXHQgKi9cblx0QElucHV0KCkgc2V0IHJlYWRPbmx5KCBpc1JlYWRPbmx5OiBib29sZWFuICkge1xuXHRcdGlmICggdGhpcy5pbnN0YW5jZSApIHtcblx0XHRcdHRoaXMuaW5zdGFuY2Uuc2V0UmVhZE9ubHkoIGlzUmVhZE9ubHkgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZWxheSBzZXR0aW5nIHJlYWQtb25seSBzdGF0ZSB1bnRpbCBlZGl0b3IgaW5pdGlhbGl6YXRpb24uXG5cdFx0dGhpcy5fcmVhZE9ubHkgPSBpc1JlYWRPbmx5O1xuXHR9XG5cblx0Z2V0IHJlYWRPbmx5KCk6IGJvb2xlYW4ge1xuXHRcdGlmICggdGhpcy5pbnN0YW5jZSApIHtcblx0XHRcdHJldHVybiB0aGlzLmluc3RhbmNlLnJlYWRPbmx5O1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLl9yZWFkT25seTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGaXJlcyB3aGVuIHRoZSBlZGl0b3IgaXMgcmVhZHkuIEl0IGNvcnJlc3BvbmRzIHdpdGggdGhlIGBlZGl0b3IjaW5zdGFuY2VSZWFkeWBcblx0ICogaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjQvbGF0ZXN0L2FwaS9DS0VESVRPUl9lZGl0b3IuaHRtbCNldmVudC1pbnN0YW5jZVJlYWR5XG5cdCAqIGV2ZW50LlxuXHQgKi9cblx0QE91dHB1dCgpIHJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxDS0VkaXRvcjQuRXZlbnRJbmZvPigpO1xuXG5cdC8qKlxuXHQgKiBGaXJlcyB3aGVuIHRoZSBlZGl0b3IgZGF0YSBpcyBsb2FkZWQsIGUuZy4gYWZ0ZXIgY2FsbGluZyBzZXREYXRhKClcblx0ICogaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjQvbGF0ZXN0L2FwaS9DS0VESVRPUl9lZGl0b3IuaHRtbCNtZXRob2Qtc2V0RGF0YVxuXHQgKiBlZGl0b3IncyBtZXRob2QuIEl0IGNvcnJlc3BvbmRzIHdpdGggdGhlIGBlZGl0b3IjZGF0YVJlYWR5YFxuXHQgKiBodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNC9sYXRlc3QvYXBpL0NLRURJVE9SX2VkaXRvci5odG1sI2V2ZW50LWRhdGFSZWFkeSBldmVudC5cblx0ICovXG5cdEBPdXRwdXQoKSBkYXRhUmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPENLRWRpdG9yNC5FdmVudEluZm8+KCk7XG5cblx0LyoqXG5cdCAqIEZpcmVzIHdoZW4gdGhlIGNvbnRlbnQgb2YgdGhlIGVkaXRvciBoYXMgY2hhbmdlZC4gSXQgY29ycmVzcG9uZHMgd2l0aCB0aGUgYGVkaXRvciNjaGFuZ2VgXG5cdCAqIGh0dHBzOi8vY2tlZGl0b3IuY29tL2RvY3MvY2tlZGl0b3I0L2xhdGVzdC9hcGkvQ0tFRElUT1JfZWRpdG9yLmh0bWwjZXZlbnQtY2hhbmdlXG5cdCAqIGV2ZW50LiBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucyB0aGlzIGV2ZW50IG1heSBiZSBjYWxsZWQgZXZlbiB3aGVuIGRhdGEgZGlkbid0IHJlYWxseSBjaGFuZ2VkLlxuXHQgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgZXZlbnQgd2lsbCBvbmx5IGJlIGZpcmVkIHdoZW4gYHVuZG9gIHBsdWdpbiBpcyBsb2FkZWQuIElmIHlvdSBuZWVkIHRvXG5cdCAqIGxpc3RlbiBmb3IgZWRpdG9yIGNoYW5nZXMgKGUuZy4gZm9yIHR3by13YXkgZGF0YSBiaW5kaW5nKSwgdXNlIGBkYXRhQ2hhbmdlYCBldmVudCBpbnN0ZWFkLlxuXHQgKi9cblx0QE91dHB1dCgpIGNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q0tFZGl0b3I0LkV2ZW50SW5mbz4oKTtcblxuXHQvKipcblx0ICogRmlyZXMgd2hlbiB0aGUgY29udGVudCBvZiB0aGUgZWRpdG9yIGhhcyBjaGFuZ2VkLiBJbiBjb250cmFzdCB0byBgY2hhbmdlYCAtIG9ubHkgZW1pdHMgd2hlblxuXHQgKiBkYXRhIHJlYWxseSBjaGFuZ2VkIHRodXMgY2FuIGJlIHN1Y2Nlc3NmdWxseSB1c2VkIHdpdGggYFtkYXRhXWAgYW5kIHR3byB3YXkgYFsoZGF0YSldYCBiaW5kaW5nLlxuXHQgKlxuXHQgKiBTZWUgbW9yZTogaHR0cHM6Ly9hbmd1bGFyLmlvL2d1aWRlL3RlbXBsYXRlLXN5bnRheCN0d28td2F5LWJpbmRpbmctLS1cblx0ICovXG5cdEBPdXRwdXQoKSBkYXRhQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxDS0VkaXRvcjQuRXZlbnRJbmZvPigpO1xuXG5cdC8qKlxuXHQgKiBGaXJlcyB3aGVuIHRoZSBlZGl0aW5nIHZpZXcgb2YgdGhlIGVkaXRvciBpcyBmb2N1c2VkLiBJdCBjb3JyZXNwb25kcyB3aXRoIHRoZSBgZWRpdG9yI2ZvY3VzYFxuXHQgKiBodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNC9sYXRlc3QvYXBpL0NLRURJVE9SX2VkaXRvci5odG1sI2V2ZW50LWZvY3VzXG5cdCAqIGV2ZW50LlxuXHQgKi9cblx0QE91dHB1dCgpIGZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcjxDS0VkaXRvcjQuRXZlbnRJbmZvPigpO1xuXG5cdC8qKlxuXHQgKiBGaXJlcyB3aGVuIHRoZSBlZGl0aW5nIHZpZXcgb2YgdGhlIGVkaXRvciBpcyBibHVycmVkLiBJdCBjb3JyZXNwb25kcyB3aXRoIHRoZSBgZWRpdG9yI2JsdXJgXG5cdCAqIGh0dHBzOi8vY2tlZGl0b3IuY29tL2RvY3MvY2tlZGl0b3I0L2xhdGVzdC9hcGkvQ0tFRElUT1JfZWRpdG9yLmh0bWwjZXZlbnQtYmx1clxuXHQgKiBldmVudC5cblx0ICovXG5cdEBPdXRwdXQoKSBibHVyID0gbmV3IEV2ZW50RW1pdHRlcjxDS0VkaXRvcjQuRXZlbnRJbmZvPigpO1xuXG5cdC8qKlxuXHQgKiBUaGUgaW5zdGFuY2Ugb2YgdGhlIGVkaXRvciBjcmVhdGVkIGJ5IHRoaXMgY29tcG9uZW50LlxuXHQgKi9cblx0aW5zdGFuY2U6IGFueTtcblxuXHQvKipcblx0ICogSWYgdGhlIGNvbXBvbmVudCBpcyByZWFk4oCTb25seSBiZWZvcmUgdGhlIGVkaXRvciBpbnN0YW5jZSBpcyBjcmVhdGVkLCBpdCByZW1lbWJlcnMgdGhhdCBzdGF0ZSxcblx0ICogc28gdGhlIGVkaXRvciBjYW4gYmVjb21lIHJlYWTigJNvbmx5IG9uY2UgaXQgaXMgcmVhZHkuXG5cdCAqL1xuXHRwcml2YXRlIF9yZWFkT25seTogYm9vbGVhbiA9IG51bGw7XG5cblx0LyoqXG5cdCAqIEEgY2FsbGJhY2sgZXhlY3V0ZWQgd2hlbiB0aGUgY29udGVudCBvZiB0aGUgZWRpdG9yIGNoYW5nZXMuIFBhcnQgb2YgdGhlXG5cdCAqIGBDb250cm9sVmFsdWVBY2Nlc3NvcmAgKGh0dHBzOi8vYW5ndWxhci5pby9hcGkvZm9ybXMvQ29udHJvbFZhbHVlQWNjZXNzb3IpIGludGVyZmFjZS5cblx0ICpcblx0ICogTm90ZTogVW5zZXQgdW5sZXNzIHRoZSBjb21wb25lbnQgdXNlcyB0aGUgYG5nTW9kZWxgLlxuXHQgKi9cblx0b25DaGFuZ2U/OiAoIGRhdGE6IHN0cmluZyApID0+IHZvaWQ7XG5cblx0LyoqXG5cdCAqIEEgY2FsbGJhY2sgZXhlY3V0ZWQgd2hlbiB0aGUgZWRpdG9yIGhhcyBiZWVuIGJsdXJyZWQuIFBhcnQgb2YgdGhlXG5cdCAqIGBDb250cm9sVmFsdWVBY2Nlc3NvcmAgKGh0dHBzOi8vYW5ndWxhci5pby9hcGkvZm9ybXMvQ29udHJvbFZhbHVlQWNjZXNzb3IpIGludGVyZmFjZS5cblx0ICpcblx0ICogTm90ZTogVW5zZXQgdW5sZXNzIHRoZSBjb21wb25lbnQgdXNlcyB0aGUgYG5nTW9kZWxgLlxuXHQgKi9cblx0b25Ub3VjaGVkPzogKCkgPT4gdm9pZDtcblxuXHRwcml2YXRlIF9kYXRhOiBzdHJpbmcgPSBudWxsO1xuXG5cdC8qKlxuXHQgKiBDS0VkaXRvciA0IHNjcmlwdCB1cmwgYWRkcmVzcy4gU2NyaXB0IHdpbGwgYmUgbG9hZGVkIG9ubHkgaWYgQ0tFRElUT1IgbmFtZXNwYWNlIGlzIG1pc3NpbmcuXG5cdCAqXG5cdCAqIERlZmF1bHRzIHRvICdodHRwczovL2Nkbi5ja2VkaXRvci5jb20vNC4xMy4wL3N0YW5kYXJkLWFsbC9ja2VkaXRvci5qcydcblx0ICovXG5cdEBJbnB1dCgpIGVkaXRvclVybCA9ICdodHRwczovL2Nkbi5ja2VkaXRvci5jb20vNC4xMy4wL3N0YW5kYXJkLWFsbC9ja2VkaXRvci5qcyc7XG5cblx0Y29uc3RydWN0b3IoIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSApIHtcblx0fVxuXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcblx0XHRnZXRFZGl0b3JOYW1lc3BhY2UoIHRoaXMuZWRpdG9yVXJsICkudGhlbiggKCkgPT4ge1xuXHRcdFx0dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoIHRoaXMuY3JlYXRlRWRpdG9yLmJpbmQoIHRoaXMgKSApO1xuXHRcdH0gKS5jYXRjaCggd2luZG93LmNvbnNvbGUuZXJyb3IgKTtcblx0fVxuXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xuXHRcdHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCAoKSA9PiB7XG5cdFx0XHRpZiAoIHRoaXMuaW5zdGFuY2UgKSB7XG5cdFx0XHRcdHRoaXMuaW5zdGFuY2UuZGVzdHJveSgpO1xuXHRcdFx0XHR0aGlzLmluc3RhbmNlID0gbnVsbDtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cblxuXHR3cml0ZVZhbHVlKCB2YWx1ZTogc3RyaW5nICk6IHZvaWQge1xuXHRcdHRoaXMuZGF0YSA9IHZhbHVlO1xuXHR9XG5cblx0cmVnaXN0ZXJPbkNoYW5nZSggY2FsbGJhY2s6ICggZGF0YTogc3RyaW5nICkgPT4gdm9pZCApOiB2b2lkIHtcblx0XHR0aGlzLm9uQ2hhbmdlID0gY2FsbGJhY2s7XG5cdH1cblxuXHRyZWdpc3Rlck9uVG91Y2hlZCggY2FsbGJhY2s6ICgpID0+IHZvaWQgKTogdm9pZCB7XG5cdFx0dGhpcy5vblRvdWNoZWQgPSBjYWxsYmFjaztcblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlRWRpdG9yKCk6IHZvaWQge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCB0aGlzLnRhZ05hbWUgKTtcblx0XHR0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZCggZWxlbWVudCApO1xuXG5cdFx0aWYgKCB0aGlzLnR5cGUgPT09IENLRWRpdG9yNC5FZGl0b3JUeXBlLkRJVkFSRUEgKSB7XG5cdFx0XHR0aGlzLmNvbmZpZyA9IHRoaXMuZW5zdXJlRGl2YXJlYVBsdWdpbiggdGhpcy5jb25maWcgfHwge30gKTtcblx0XHR9XG5cblx0XHRjb25zdCBpbnN0YW5jZTogQ0tFZGl0b3I0LkVkaXRvciA9IHRoaXMudHlwZSA9PT0gQ0tFZGl0b3I0LkVkaXRvclR5cGUuSU5MSU5FXG5cdFx0XHQ/IENLRURJVE9SLmlubGluZSggZWxlbWVudCwgdGhpcy5jb25maWcgKVxuXHRcdFx0OiBDS0VESVRPUi5yZXBsYWNlKCBlbGVtZW50LCB0aGlzLmNvbmZpZyApO1xuXG5cdFx0aW5zdGFuY2Uub25jZSggJ2luc3RhbmNlUmVhZHknLCBldnQgPT4ge1xuXHRcdFx0dGhpcy5pbnN0YW5jZSA9IGluc3RhbmNlO1xuXG5cdFx0XHQvLyBSZWFkIG9ubHkgc3RhdGUgbWF5IGNoYW5nZSBkdXJpbmcgaW5zdGFuY2UgaW5pdGlhbGl6YXRpb24uXG5cdFx0XHR0aGlzLnJlYWRPbmx5ID0gdGhpcy5fcmVhZE9ubHkgIT09IG51bGwgPyB0aGlzLl9yZWFkT25seSA6IHRoaXMuaW5zdGFuY2UucmVhZE9ubHk7XG5cblx0XHRcdHRoaXMuc3Vic2NyaWJlKCB0aGlzLmluc3RhbmNlICk7XG5cblx0XHRcdGNvbnN0IHVuZG8gPSBpbnN0YW5jZS51bmRvTWFuYWdlcjtcblxuXHRcdFx0aWYgKCB0aGlzLmRhdGEgIT09IG51bGwgKSB7XG5cdFx0XHRcdHVuZG8gJiYgdW5kby5sb2NrKCk7XG5cblx0XHRcdFx0aW5zdGFuY2Uuc2V0RGF0YSggdGhpcy5kYXRhLCB7IGNhbGxiYWNrOiAoKSA9PiB7XG5cdFx0XHRcdFx0Ly8gTG9ja2luZyB1bmRvTWFuYWdlciBwcmV2ZW50cyAnY2hhbmdlJyBldmVudC5cblx0XHRcdFx0XHQvLyBUcmlnZ2VyIGl0IG1hbnVhbGx5IHRvIHVwZGF0ZWQgYm91bmQgZGF0YS5cblx0XHRcdFx0XHRpZiAoIHRoaXMuZGF0YSAhPT0gaW5zdGFuY2UuZ2V0RGF0YSgpICkge1xuXHRcdFx0XHRcdFx0dW5kbyA/IGluc3RhbmNlLmZpcmUoICdjaGFuZ2UnICkgOiBpbnN0YW5jZS5maXJlKCAnZGF0YVJlYWR5JyApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR1bmRvICYmIHVuZG8udW5sb2NrKCk7XG5cblx0XHRcdFx0XHR0aGlzLm5nWm9uZS5ydW4oICgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucmVhZHkuZW1pdCggZXZ0ICk7XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9IH0gKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMubmdab25lLnJ1biggKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucmVhZHkuZW1pdCggZXZ0ICk7XG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cblxuXHRwcml2YXRlIHN1YnNjcmliZSggZWRpdG9yOiBhbnkgKTogdm9pZCB7XG5cdFx0ZWRpdG9yLm9uKCAnZm9jdXMnLCBldnQgPT4ge1xuXHRcdFx0dGhpcy5uZ1pvbmUucnVuKCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZm9jdXMuZW1pdCggZXZ0ICk7XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXG5cdFx0ZWRpdG9yLm9uKCAnYmx1cicsIGV2dCA9PiB7XG5cdFx0XHR0aGlzLm5nWm9uZS5ydW4oICgpID0+IHtcblx0XHRcdFx0aWYgKCB0aGlzLm9uVG91Y2hlZCApIHtcblx0XHRcdFx0XHR0aGlzLm9uVG91Y2hlZCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5ibHVyLmVtaXQoIGV2dCApO1xuXHRcdFx0fSApO1xuXHRcdH0gKTtcblxuXHRcdGVkaXRvci5vbiggJ2RhdGFSZWFkeScsIHRoaXMucHJvcGFnYXRlQ2hhbmdlLCB0aGlzICk7XG5cblx0XHRpZiAoIHRoaXMuaW5zdGFuY2UudW5kb01hbmFnZXIgKSB7XG5cdFx0XHRlZGl0b3Iub24oICdjaGFuZ2UnLCB0aGlzLnByb3BhZ2F0ZUNoYW5nZSwgdGhpcyApO1xuXHRcdH1cblx0XHQvLyBJZiAndW5kbycgcGx1Z2luIGlzIG5vdCBsb2FkZWQsIGxpc3RlbiB0byAnc2VsZWN0aW9uQ2hlY2snIGV2ZW50IGluc3RlYWQuICgjNTQpLlxuXHRcdGVsc2Uge1xuXHRcdFx0ZWRpdG9yLm9uKCAnc2VsZWN0aW9uQ2hlY2snLCB0aGlzLnByb3BhZ2F0ZUNoYW5nZSwgdGhpcyApO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcHJvcGFnYXRlQ2hhbmdlKCBldmVudDogYW55ICk6IHZvaWQge1xuXHRcdHRoaXMubmdab25lLnJ1biggKCkgPT4ge1xuXHRcdFx0Y29uc3QgbmV3RGF0YSA9IHRoaXMuaW5zdGFuY2UuZ2V0RGF0YSgpO1xuXG5cdFx0XHRpZiAoIGV2ZW50Lm5hbWUgPT0gJ2NoYW5nZScgKSB7XG5cdFx0XHRcdHRoaXMuY2hhbmdlLmVtaXQoIGV2ZW50ICk7XG5cdFx0XHR9IGVsc2UgaWYgKCBldmVudC5uYW1lID09ICdkYXRhUmVhZHknICkge1xuXHRcdFx0XHR0aGlzLmRhdGFSZWFkeS5lbWl0KCBldmVudCApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIG5ld0RhdGEgPT09IHRoaXMuZGF0YSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLl9kYXRhID0gbmV3RGF0YTtcblx0XHRcdHRoaXMuZGF0YUNoYW5nZS5lbWl0KCBuZXdEYXRhICk7XG5cblx0XHRcdGlmICggdGhpcy5vbkNoYW5nZSApIHtcblx0XHRcdFx0dGhpcy5vbkNoYW5nZSggbmV3RGF0YSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxuXG5cdHByaXZhdGUgZW5zdXJlRGl2YXJlYVBsdWdpbiggY29uZmlnOiBDS0VkaXRvcjQuQ29uZmlnICk6IENLRWRpdG9yNC5Db25maWcge1xuXHRcdGxldCB7IGV4dHJhUGx1Z2lucywgcmVtb3ZlUGx1Z2lucyB9ID0gY29uZmlnO1xuXG5cdFx0ZXh0cmFQbHVnaW5zID0gdGhpcy5yZW1vdmVQbHVnaW4oIGV4dHJhUGx1Z2lucywgJ2RpdmFyZWEnICkgfHwgJyc7XG5cdFx0ZXh0cmFQbHVnaW5zID0gZXh0cmFQbHVnaW5zLmNvbmNhdCggdHlwZW9mIGV4dHJhUGx1Z2lucyA9PT0gJ3N0cmluZycgPyAnLGRpdmFyZWEnIDogJ2RpdmFyZWEnICk7XG5cblx0XHRpZiAoIHJlbW92ZVBsdWdpbnMgJiYgcmVtb3ZlUGx1Z2lucy5pbmNsdWRlcyggJ2RpdmFyZWEnICkgKSB7XG5cblx0XHRcdHJlbW92ZVBsdWdpbnMgPSB0aGlzLnJlbW92ZVBsdWdpbiggcmVtb3ZlUGx1Z2lucywgJ2RpdmFyZWEnICk7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1tDS0VESVRPUl0gZGl2YXJlYSBwbHVnaW4gaXMgcmVxdWlyZWQgdG8gaW5pdGlhbGl6ZSBlZGl0b3IgdXNpbmcgQW5ndWxhciBpbnRlZ3JhdGlvbi4nICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oIHt9LCBjb25maWcsIHsgZXh0cmFQbHVnaW5zLCByZW1vdmVQbHVnaW5zIH0gKTtcblx0fVxuXG5cdHByaXZhdGUgcmVtb3ZlUGx1Z2luKCBwbHVnaW5zOiBzdHJpbmcgfCBzdHJpbmdbXSwgdG9SZW1vdmU6IHN0cmluZyApOiBzdHJpbmcgfCBzdHJpbmdbXSB7XG5cdFx0aWYgKCAhcGx1Z2lucyApIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGNvbnN0IGlzU3RyaW5nID0gdHlwZW9mIHBsdWdpbnMgPT09ICdzdHJpbmcnO1xuXG5cdFx0aWYgKCBpc1N0cmluZyApIHtcblx0XHRcdHBsdWdpbnMgPSAoIHBsdWdpbnMgYXMgc3RyaW5nICkuc3BsaXQoICcsJyApO1xuXHRcdH1cblxuXHRcdHBsdWdpbnMgPSAoIHBsdWdpbnMgYXMgc3RyaW5nW10gKS5maWx0ZXIoIHBsdWdpbiA9PiBwbHVnaW4gIT09IHRvUmVtb3ZlICk7XG5cblx0XHRpZiAoIGlzU3RyaW5nICkge1xuXHRcdFx0cGx1Z2lucyA9ICggcGx1Z2lucyBhcyBzdHJpbmdbXSApLmpvaW4oICcsJyApO1xuXHRcdH1cblxuXHRcdHJldHVybiBwbHVnaW5zO1xuXHR9XG59XG4iXX0=
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.

@@ -10,8 +6,3 @@ * For licensing, see LICENSE.md.

import loadScript from 'load-script';
/** @type {?} */
var promise;
/**
* @param {?} editorURL
* @return {?}
*/
export function getEditorNamespace(editorURL) {

@@ -25,13 +16,4 @@ if (editorURL.length < 1) {

else if (!promise) {
promise = new Promise((/**
* @param {?} scriptResolve
* @param {?} scriptReject
* @return {?}
*/
function (scriptResolve, scriptReject) {
loadScript(editorURL, (/**
* @param {?} err
* @return {?}
*/
function (err) {
promise = new Promise(function (scriptResolve, scriptReject) {
loadScript(editorURL, function (err) {
if (err) {

@@ -44,7 +26,7 @@ scriptReject(err);

}
}));
}));
});
});
}
return promise;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3IuaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NrZWRpdG9yNC1hbmd1bGFyLyIsInNvdXJjZXMiOlsiY2tlZGl0b3IuaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUtBLE9BQU8sVUFBVSxNQUFNLGFBQWEsQ0FBQzs7SUFHakMsT0FBTzs7Ozs7QUFFWCxNQUFNLFVBQVUsa0JBQWtCLENBQUUsU0FBaUI7SUFDcEQsSUFBSyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRztRQUMzQixNQUFNLElBQUksU0FBUyxDQUFFLDBDQUEwQyxDQUFFLENBQUM7S0FDbEU7SUFFRCxJQUFLLFVBQVUsSUFBSSxNQUFNLEVBQUc7UUFDM0IsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFFLFFBQVEsQ0FBRSxDQUFDO0tBQ25DO1NBQU0sSUFBSyxDQUFDLE9BQU8sRUFBRztRQUN0QixPQUFPLEdBQUcsSUFBSSxPQUFPOzs7OztRQUFFLFVBQUUsYUFBYSxFQUFFLFlBQVk7WUFDbkQsVUFBVSxDQUFFLFNBQVM7Ozs7WUFBRSxVQUFBLEdBQUc7Z0JBQ3pCLElBQUssR0FBRyxFQUFHO29CQUNWLFlBQVksQ0FBRSxHQUFHLENBQUUsQ0FBQztpQkFDcEI7cUJBQU07b0JBQ04sYUFBYSxDQUFFLFFBQVEsQ0FBRSxDQUFDO29CQUMxQixPQUFPLEdBQUcsU0FBUyxDQUFDO2lCQUNwQjtZQUNGLENBQUMsRUFBRSxDQUFDO1FBQ0wsQ0FBQyxFQUFFLENBQUM7S0FDSjtJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIENvcHlyaWdodCAoYykgMjAwMy0yMDE5LCBDS1NvdXJjZSAtIEZyZWRlcmljbyBLbmFiYmVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogRm9yIGxpY2Vuc2luZywgc2VlIExJQ0VOU0UubWQuXG4gKi9cblxuaW1wb3J0IGxvYWRTY3JpcHQgZnJvbSAnbG9hZC1zY3JpcHQnO1xuXG5kZWNsYXJlIGxldCBDS0VESVRPUjogYW55O1xubGV0IHByb21pc2U7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFZGl0b3JOYW1lc3BhY2UoIGVkaXRvclVSTDogc3RyaW5nICk6IFByb21pc2U8eyBbIGtleTogc3RyaW5nIF06IGFueTsgfT4ge1xuXHRpZiAoIGVkaXRvclVSTC5sZW5ndGggPCAxICkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoICdDS0VkaXRvciBVUkwgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcuJyApO1xuXHR9XG5cblx0aWYgKCAnQ0tFRElUT1InIGluIHdpbmRvdyApIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCBDS0VESVRPUiApO1xuXHR9IGVsc2UgaWYgKCAhcHJvbWlzZSApIHtcblx0XHRwcm9taXNlID0gbmV3IFByb21pc2UoICggc2NyaXB0UmVzb2x2ZSwgc2NyaXB0UmVqZWN0ICkgPT4ge1xuXHRcdFx0bG9hZFNjcmlwdCggZWRpdG9yVVJMLCBlcnIgPT4ge1xuXHRcdFx0XHRpZiAoIGVyciApIHtcblx0XHRcdFx0XHRzY3JpcHRSZWplY3QoIGVyciApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNjcmlwdFJlc29sdmUoIENLRURJVE9SICk7XG5cdFx0XHRcdFx0cHJvbWlzZSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0fVxuXG5cdHJldHVybiBwcm9taXNlO1xufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3IuaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NrZWRpdG9yNC1hbmd1bGFyLyIsInNvdXJjZXMiOlsiY2tlZGl0b3IuaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLFVBQVUsTUFBTSxhQUFhLENBQUM7QUFHckMsSUFBSSxPQUFPLENBQUM7QUFFWixNQUFNLFVBQVUsa0JBQWtCLENBQUUsU0FBaUI7SUFDcEQsSUFBSyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRztRQUMzQixNQUFNLElBQUksU0FBUyxDQUFFLDBDQUEwQyxDQUFFLENBQUM7S0FDbEU7SUFFRCxJQUFLLFVBQVUsSUFBSSxNQUFNLEVBQUc7UUFDM0IsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFFLFFBQVEsQ0FBRSxDQUFDO0tBQ25DO1NBQU0sSUFBSyxDQUFDLE9BQU8sRUFBRztRQUN0QixPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUUsVUFBRSxhQUFhLEVBQUUsWUFBWTtZQUNuRCxVQUFVLENBQUUsU0FBUyxFQUFFLFVBQUEsR0FBRztnQkFDekIsSUFBSyxHQUFHLEVBQUc7b0JBQ1YsWUFBWSxDQUFFLEdBQUcsQ0FBRSxDQUFDO2lCQUNwQjtxQkFBTTtvQkFDTixhQUFhLENBQUUsUUFBUSxDQUFFLENBQUM7b0JBQzFCLE9BQU8sR0FBRyxTQUFTLENBQUM7aUJBQ3BCO1lBQ0YsQ0FBQyxDQUFFLENBQUM7UUFDTCxDQUFDLENBQUUsQ0FBQztLQUNKO0lBRUQsT0FBTyxPQUFPLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgQ29weXJpZ2h0IChjKSAyMDAzLTIwMTksIENLU291cmNlIC0gRnJlZGVyaWNvIEtuYWJiZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBGb3IgbGljZW5zaW5nLCBzZWUgTElDRU5TRS5tZC5cbiAqL1xuXG5pbXBvcnQgbG9hZFNjcmlwdCBmcm9tICdsb2FkLXNjcmlwdCc7XG5cbmRlY2xhcmUgbGV0IENLRURJVE9SOiBhbnk7XG5sZXQgcHJvbWlzZTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVkaXRvck5hbWVzcGFjZSggZWRpdG9yVVJMOiBzdHJpbmcgKTogUHJvbWlzZTx7IFsga2V5OiBzdHJpbmcgXTogYW55OyB9PiB7XG5cdGlmICggZWRpdG9yVVJMLmxlbmd0aCA8IDEgKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvciggJ0NLRWRpdG9yIFVSTCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy4nICk7XG5cdH1cblxuXHRpZiAoICdDS0VESVRPUicgaW4gd2luZG93ICkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoIENLRURJVE9SICk7XG5cdH0gZWxzZSBpZiAoICFwcm9taXNlICkge1xuXHRcdHByb21pc2UgPSBuZXcgUHJvbWlzZSggKCBzY3JpcHRSZXNvbHZlLCBzY3JpcHRSZWplY3QgKSA9PiB7XG5cdFx0XHRsb2FkU2NyaXB0KCBlZGl0b3JVUkwsIGVyciA9PiB7XG5cdFx0XHRcdGlmICggZXJyICkge1xuXHRcdFx0XHRcdHNjcmlwdFJlamVjdCggZXJyICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2NyaXB0UmVzb2x2ZSggQ0tFRElUT1IgKTtcblx0XHRcdFx0XHRwcm9taXNlID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0cmV0dXJuIHByb21pc2U7XG59XG4iXX0=
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/
/**
* Basic typings for the CKEditor4 elements.
*/
export var CKEditor4;
(function (CKEditor4) {
/**
* The CKEditor4 editor constructor.
* @record
*/
function Config() { }
CKEditor4.Config = Config;
/**
* The event object passed to CKEditor4 event callbacks.
*
* See https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_eventInfo.html
* to learn more.
* @record
*/
function EventInfo() { }
CKEditor4.EventInfo = EventInfo;
if (false) {
/** @type {?} */
EventInfo.prototype.name;
/** @type {?} */
EventInfo.prototype.editor;
/** @type {?} */
EventInfo.prototype.data;
/** @type {?} */
EventInfo.prototype.listenerData;
/** @type {?} */
EventInfo.prototype.sender;
/**
* @return {?}
*/
EventInfo.prototype.cancel = function () { };
/**
* @return {?}
*/
EventInfo.prototype.removeListener = function () { };
/**
* @return {?}
*/
EventInfo.prototype.stop = function () { };
}
})(CKEditor4 || (CKEditor4 = {}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3IuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9ja2VkaXRvcjQtYW5ndWxhci8iLCJzb3VyY2VzIjpbImNrZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBUUEsTUFBTSxLQUFXLFNBQVMsQ0E0Q3pCO0FBNUNELFdBQWlCLFNBQVM7Ozs7O0lBS3pCLHFCQUVDOzs7Ozs7Ozs7SUFrQkQsd0JBa0JDOzs7O1FBakJBLHlCQUFzQjs7UUFDdEIsMkJBQXFCOztRQUNyQix5QkFFRTs7UUFDRixpQ0FFRTs7UUFDRiwyQkFFRTs7OztRQUVGLDZDQUFlOzs7O1FBRWYscURBQXVCOzs7O1FBRXZCLDJDQUFhOztBQUVmLENBQUMsRUE1Q2dCLFNBQVMsS0FBVCxTQUFTLFFBNEN6QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgQ29weXJpZ2h0IChjKSAyMDAzLTIwMTksIENLU291cmNlIC0gRnJlZGVyaWNvIEtuYWJiZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBGb3IgbGljZW5zaW5nLCBzZWUgTElDRU5TRS5tZC5cbiAqL1xuXG4vKipcbiAqIEJhc2ljIHR5cGluZ3MgZm9yIHRoZSBDS0VkaXRvcjQgZWxlbWVudHMuXG4gKi9cbmV4cG9ydCBuYW1lc3BhY2UgQ0tFZGl0b3I0IHtcblxuXHQvKipcblx0ICogVGhlIENLRWRpdG9yNCBlZGl0b3IgY29uc3RydWN0b3IuXG5cdCAqL1xuXHRleHBvcnQgaW50ZXJmYWNlIENvbmZpZyB7XG5cdFx0WyBrZXk6IHN0cmluZyBdOiBhbnk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIENLRWRpdG9yNCBlZGl0b3IgaW50ZXJmYWNlIHR5cGUuXG5cdCAqIFNlZSBodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNC9sYXRlc3QvZ3VpZGUvZGV2X3VpdHlwZXMuaHRtbFxuXHQgKiB0byBsZWFybiBtb3JlLlxuXHQgKi9cblx0ZXhwb3J0IGNvbnN0IGVudW0gRWRpdG9yVHlwZSB7XG5cdFx0RElWQVJFQSA9ICdkaXZhcmVhJyxcblx0XHRJTkxJTkUgPSAnaW5saW5lJ1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBldmVudCBvYmplY3QgcGFzc2VkIHRvIENLRWRpdG9yNCBldmVudCBjYWxsYmFja3MuXG5cdCAqXG5cdCAqIFNlZSBodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNC9sYXRlc3QvYXBpL0NLRURJVE9SX2V2ZW50SW5mby5odG1sXG5cdCAqIHRvIGxlYXJuIG1vcmUuXG5cdCAqL1xuXHRleHBvcnQgaW50ZXJmYWNlIEV2ZW50SW5mbyB7XG5cdFx0cmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXHRcdHJlYWRvbmx5IGVkaXRvcjogYW55O1xuXHRcdHJlYWRvbmx5IGRhdGE6IHtcblx0XHRcdFsga2V5OiBzdHJpbmcgXTogYW55O1xuXHRcdH07XG5cdFx0cmVhZG9ubHkgbGlzdGVuZXJEYXRhOiB7XG5cdFx0XHRbIGtleTogc3RyaW5nIF06IGFueTtcblx0XHR9O1xuXHRcdHJlYWRvbmx5IHNlbmRlcjoge1xuXHRcdFx0WyBrZXk6IHN0cmluZyBdOiBhbnk7XG5cdFx0fTtcblxuXHRcdGNhbmNlbCgpOiB2b2lkO1xuXG5cdFx0cmVtb3ZlTGlzdGVuZXIoKTogdm9pZDtcblxuXHRcdHN0b3AoKTogdm9pZDtcblx0fVxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3IuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9ja2VkaXRvcjQtYW5ndWxhci8iLCJzb3VyY2VzIjpbImNrZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgQ29weXJpZ2h0IChjKSAyMDAzLTIwMTksIENLU291cmNlIC0gRnJlZGVyaWNvIEtuYWJiZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBGb3IgbGljZW5zaW5nLCBzZWUgTElDRU5TRS5tZC5cbiAqL1xuXG4vKipcbiAqIEJhc2ljIHR5cGluZ3MgZm9yIHRoZSBDS0VkaXRvcjQgZWxlbWVudHMuXG4gKi9cbmV4cG9ydCBuYW1lc3BhY2UgQ0tFZGl0b3I0IHtcblx0LyoqXG5cdCAqIFRoZSBDS0VkaXRvcjQgZWRpdG9yIGNvbnN0cnVjdG9yLlxuXHQgKi9cblx0ZXhwb3J0IGludGVyZmFjZSBDb25maWcge1xuXHRcdFsga2V5OiBzdHJpbmcgXTogYW55O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBDS0VkaXRvcjQgZWRpdG9yLlxuXHQgKi9cblx0ZXhwb3J0IGludGVyZmFjZSBFZGl0b3Ige1xuXHRcdFsga2V5OiBzdHJpbmcgXTogYW55O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBDS0VkaXRvcjQgZWRpdG9yIGludGVyZmFjZSB0eXBlLlxuXHQgKiBTZWUgaHR0cHM6Ly9ja2VkaXRvci5jb20vZG9jcy9ja2VkaXRvcjQvbGF0ZXN0L2d1aWRlL2Rldl91aXR5cGVzLmh0bWxcblx0ICogdG8gbGVhcm4gbW9yZS5cblx0ICovXG5cdGV4cG9ydCBjb25zdCBlbnVtIEVkaXRvclR5cGUge1xuXHRcdERJVkFSRUEgPSAnZGl2YXJlYScsXG5cdFx0SU5MSU5FID0gJ2lubGluZScsXG5cdFx0Q0xBU1NJQyA9ICdjbGFzc2ljJ1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBldmVudCBvYmplY3QgcGFzc2VkIHRvIENLRWRpdG9yNCBldmVudCBjYWxsYmFja3MuXG5cdCAqXG5cdCAqIFNlZSBodHRwczovL2NrZWRpdG9yLmNvbS9kb2NzL2NrZWRpdG9yNC9sYXRlc3QvYXBpL0NLRURJVE9SX2V2ZW50SW5mby5odG1sXG5cdCAqIHRvIGxlYXJuIG1vcmUuXG5cdCAqL1xuXHRleHBvcnQgaW50ZXJmYWNlIEV2ZW50SW5mbyB7XG5cdFx0cmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXHRcdHJlYWRvbmx5IGVkaXRvcjogYW55O1xuXHRcdHJlYWRvbmx5IGRhdGE6IHtcblx0XHRcdFsga2V5OiBzdHJpbmcgXTogYW55O1xuXHRcdH07XG5cdFx0cmVhZG9ubHkgbGlzdGVuZXJEYXRhOiB7XG5cdFx0XHRbIGtleTogc3RyaW5nIF06IGFueTtcblx0XHR9O1xuXHRcdHJlYWRvbmx5IHNlbmRlcjoge1xuXHRcdFx0WyBrZXk6IHN0cmluZyBdOiBhbnk7XG5cdFx0fTtcblxuXHRcdGNhbmNlbCgpOiB2b2lkO1xuXG5cdFx0cmVtb3ZlTGlzdGVuZXIoKTogdm9pZDtcblxuXHRcdHN0b3AoKTogdm9pZDtcblx0fVxufVxuIl19
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/
import * as tslib_1 from "tslib";
import { NgModule } from '@angular/core';

@@ -16,14 +13,14 @@ import { CommonModule } from '@angular/common';

}
CKEditorModule.decorators = [
{ type: NgModule, args: [{
imports: [FormsModule, CommonModule],
declarations: [CKEditorComponent],
exports: [CKEditorComponent]
},] }
];
CKEditorModule = tslib_1.__decorate([
NgModule({
imports: [FormsModule, CommonModule],
declarations: [CKEditorComponent],
exports: [CKEditorComponent]
})
], CKEditorModule);
return CKEditorModule;
}());
export { CKEditorModule };
export { CKEditor4 } from './ckeditor';
export * from './ckeditor';
export { CKEditorComponent } from './ckeditor.component';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3IubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vY2tlZGl0b3I0LWFuZ3VsYXIvIiwic291cmNlcyI6WyJja2VkaXRvci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFLQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFekQ7SUFBQTtJQU1BLENBQUM7O2dCQU5BLFFBQVEsU0FBRTtvQkFDVixPQUFPLEVBQUUsQ0FBRSxXQUFXLEVBQUUsWUFBWSxDQUFFO29CQUN0QyxZQUFZLEVBQUUsQ0FBRSxpQkFBaUIsQ0FBRTtvQkFDbkMsT0FBTyxFQUFFLENBQUUsaUJBQWlCLENBQUU7aUJBQzlCOztJQUVELHFCQUFDO0NBQUEsQUFORCxJQU1DO1NBRFksY0FBYztBQUUzQiwwQkFBYyxZQUFZLENBQUM7QUFDM0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIENvcHlyaWdodCAoYykgMjAwMy0yMDE5LCBDS1NvdXJjZSAtIEZyZWRlcmljbyBLbmFiYmVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogRm9yIGxpY2Vuc2luZywgc2VlIExJQ0VOU0UubWQuXG4gKi9cblxuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENLRWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9ja2VkaXRvci5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoIHtcblx0aW1wb3J0czogWyBGb3Jtc01vZHVsZSwgQ29tbW9uTW9kdWxlIF0sXG5cdGRlY2xhcmF0aW9uczogWyBDS0VkaXRvckNvbXBvbmVudCBdLFxuXHRleHBvcnRzOiBbIENLRWRpdG9yQ29tcG9uZW50IF1cbn0gKVxuZXhwb3J0IGNsYXNzIENLRWRpdG9yTW9kdWxlIHtcbn1cbmV4cG9ydCAqIGZyb20gJy4vY2tlZGl0b3InO1xuZXhwb3J0IHsgQ0tFZGl0b3JDb21wb25lbnQgfSBmcm9tICcuL2NrZWRpdG9yLmNvbXBvbmVudCc7XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3IubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vY2tlZGl0b3I0LWFuZ3VsYXIvIiwic291cmNlcyI6WyJja2VkaXRvci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHOztBQUVILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQU96RDtJQUFBO0lBQ0EsQ0FBQztJQURZLGNBQWM7UUFMMUIsUUFBUSxDQUFFO1lBQ1YsT0FBTyxFQUFFLENBQUUsV0FBVyxFQUFFLFlBQVksQ0FBRTtZQUN0QyxZQUFZLEVBQUUsQ0FBRSxpQkFBaUIsQ0FBRTtZQUNuQyxPQUFPLEVBQUUsQ0FBRSxpQkFBaUIsQ0FBRTtTQUM5QixDQUFFO09BQ1UsY0FBYyxDQUMxQjtJQUFELHFCQUFDO0NBQUEsQUFERCxJQUNDO1NBRFksY0FBYztBQUUzQixjQUFjLFlBQVksQ0FBQztBQUMzQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgQ29weXJpZ2h0IChjKSAyMDAzLTIwMTksIENLU291cmNlIC0gRnJlZGVyaWNvIEtuYWJiZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBGb3IgbGljZW5zaW5nLCBzZWUgTElDRU5TRS5tZC5cbiAqL1xuXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ0tFZGl0b3JDb21wb25lbnQgfSBmcm9tICcuL2NrZWRpdG9yLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSgge1xuXHRpbXBvcnRzOiBbIEZvcm1zTW9kdWxlLCBDb21tb25Nb2R1bGUgXSxcblx0ZGVjbGFyYXRpb25zOiBbIENLRWRpdG9yQ29tcG9uZW50IF0sXG5cdGV4cG9ydHM6IFsgQ0tFZGl0b3JDb21wb25lbnQgXVxufSApXG5leHBvcnQgY2xhc3MgQ0tFZGl0b3JNb2R1bGUge1xufVxuZXhwb3J0ICogZnJvbSAnLi9ja2VkaXRvcic7XG5leHBvcnQgeyBDS0VkaXRvckNvbXBvbmVudCB9IGZyb20gJy4vY2tlZGl0b3IuY29tcG9uZW50JztcbiJdfQ==
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* Generated bundle index. Do not edit.
*/
export { CKEditorModule, CKEditorComponent, CKEditor4 } from './ckeditor.module';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3I0LWFuZ3VsYXIuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9ja2VkaXRvcjQtYW5ndWxhci8iLCJzb3VyY2VzIjpbImNrZWRpdG9yNC1hbmd1bGFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFJQSw2REFBYyxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9ja2VkaXRvci5tb2R1bGUnO1xuIl19
export * from './ckeditor.module';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2tlZGl0b3I0LWFuZ3VsYXIuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9ja2VkaXRvcjQtYW5ndWxhci8iLCJzb3VyY2VzIjpbImNrZWRpdG9yNC1hbmd1bGFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9ja2VkaXRvci5tb2R1bGUnO1xuIl19

@@ -0,3 +1,4 @@

import { __decorate } from 'tslib';
import { EventEmitter, ElementRef, NgZone, Input, Output, Component, forwardRef, NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { Component, NgZone, Input, Output, EventEmitter, forwardRef, ElementRef, NgModule } from '@angular/core';
import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';

@@ -7,11 +8,6 @@ import loadScript from 'load-script';

/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/
/** @type {?} */
let promise;
/**
* @param {?} editorURL
* @return {?}
*/
function getEditorNamespace(editorURL) {

@@ -25,13 +21,4 @@ if (editorURL.length < 1) {

else if (!promise) {
promise = new Promise((/**
* @param {?} scriptResolve
* @param {?} scriptReject
* @return {?}
*/
(scriptResolve, scriptReject) => {
loadScript(editorURL, (/**
* @param {?} err
* @return {?}
*/
err => {
promise = new Promise((scriptResolve, scriptReject) => {
loadScript(editorURL, err => {
if (err) {

@@ -44,4 +31,4 @@ scriptReject(err);

}
}));
}));
});
});
}

@@ -52,10 +39,7 @@ return promise;

/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/
class CKEditorComponent {
/**
* @param {?} elementRef
* @param {?} ngZone
*/
var CKEditorComponent_1;
let CKEditorComponent = CKEditorComponent_1 = class CKEditorComponent {
constructor(elementRef, ngZone) {

@@ -80,3 +64,3 @@ this.elementRef = elementRef;

*/
this.type = "divarea" /* DIVAREA */;
this.type = "classic" /* CLASSIC */;
/**

@@ -89,5 +73,14 @@ * Fires when the editor is ready. It corresponds with the `editor#instanceReady`

/**
* Fires when the editor data is loaded, e.g. after calling setData()
* https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-setData
* editor's method. It corresponds with the `editor#dataReady`
* https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#event-dataReady event.
*/
this.dataReady = new EventEmitter();
/**
* Fires when the content of the editor has changed. It corresponds with the `editor#change`
* https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#event-change
* event. For performance reasons this event may be called even when data didn't really changed.
* Please note that this event will only be fired when `undo` plugin is loaded. If you need to
* listen for editor changes (e.g. for two-way data binding), use `dataChange` event instead.
*/

@@ -123,5 +116,5 @@ this.change = new EventEmitter();

*
* Defaults to 'https://cdn.ckeditor.com/4.12.1/standard-all/ckeditor.js'
* Defaults to 'https://cdn.ckeditor.com/4.13.0/standard-all/ckeditor.js'
*/
this.editorUrl = 'https://cdn.ckeditor.com/4.12.1/standard-all/ckeditor.js';
this.editorUrl = 'https://cdn.ckeditor.com/4.13.0/standard-all/ckeditor.js';
}

@@ -134,4 +127,2 @@ /**

* See https://angular.io/api/forms/NgModel to learn more.
* @param {?} data
* @return {?}
*/

@@ -150,5 +141,2 @@ set data(data) {

}
/**
* @return {?}
*/
get data() {

@@ -161,4 +149,2 @@ return this._data;

* to learn more.
* @param {?} isReadOnly
* @return {?}
*/

@@ -173,5 +159,2 @@ set readOnly(isReadOnly) {

}
/**
* @return {?}
*/
get readOnly() {

@@ -183,21 +166,9 @@ if (this.instance) {

}
/**
* @return {?}
*/
ngAfterViewInit() {
getEditorNamespace(this.editorUrl).then((/**
* @return {?}
*/
() => {
getEditorNamespace(this.editorUrl).then(() => {
this.ngZone.runOutsideAngular(this.createEditor.bind(this));
})).catch(window.console.error);
}).catch(window.console.error);
}
/**
* @return {?}
*/
ngOnDestroy() {
this.ngZone.runOutsideAngular((/**
* @return {?}
*/
() => {
this.ngZone.runOutsideAngular(() => {
if (this.instance) {

@@ -207,95 +178,57 @@ this.instance.destroy();

}
}));
});
}
/**
* @param {?} value
* @return {?}
*/
writeValue(value) {
this.data = value;
}
/**
* @param {?} callback
* @return {?}
*/
registerOnChange(callback) {
this.onChange = callback;
}
/**
* @param {?} callback
* @return {?}
*/
registerOnTouched(callback) {
this.onTouched = callback;
}
/**
* @private
* @return {?}
*/
createEditor() {
/** @type {?} */
const element = this.createInitialElement();
this.config = this.ensureDivareaPlugin(this.config || {});
/** @type {?} */
const instance = this.type === "inline" /* INLINE */ ?
CKEDITOR.inline(element, this.config)
const element = document.createElement(this.tagName);
this.elementRef.nativeElement.appendChild(element);
if (this.type === "divarea" /* DIVAREA */) {
this.config = this.ensureDivareaPlugin(this.config || {});
}
const instance = this.type === "inline" /* INLINE */
? CKEDITOR.inline(element, this.config)
: CKEDITOR.replace(element, this.config);
instance.once('instanceReady', (/**
* @param {?} evt
* @return {?}
*/
function (evt) {
instance.once('instanceReady', evt => {
this.instance = instance;
this.wrapper.removeAttribute('style');
this.elementRef.nativeElement.appendChild(this.wrapper);
// Read only state may change during instance initialization.
this.readOnly = this._readOnly !== null ? this._readOnly : this.instance.readOnly;
this.subscribe(this.instance);
/** @type {?} */
const undo = instance.undoManager;
if (this.data !== null) {
undo && undo.lock();
instance.setData(this.data);
// Locking undoManager prevents 'change' event.
// Trigger it manually to updated bound data.
if (this.data !== instance.getData()) {
instance.fire('change');
}
undo && undo.unlock();
instance.setData(this.data, { callback: () => {
// Locking undoManager prevents 'change' event.
// Trigger it manually to updated bound data.
if (this.data !== instance.getData()) {
undo ? instance.fire('change') : instance.fire('dataReady');
}
undo && undo.unlock();
this.ngZone.run(() => {
this.ready.emit(evt);
});
} });
}
this.ngZone.run((/**
* @return {?}
*/
() => {
this.ready.emit(evt);
}));
}), this);
else {
this.ngZone.run(() => {
this.ready.emit(evt);
});
}
});
}
/**
* @private
* @param {?} editor
* @return {?}
*/
subscribe(editor) {
editor.on('focus', (/**
* @param {?} evt
* @return {?}
*/
evt => {
this.ngZone.run((/**
* @return {?}
*/
() => {
editor.on('focus', evt => {
this.ngZone.run(() => {
this.focus.emit(evt);
}));
}));
editor.on('blur', (/**
* @param {?} evt
* @return {?}
*/
evt => {
this.ngZone.run((/**
* @return {?}
*/
() => {
});
});
editor.on('blur', evt => {
this.ngZone.run(() => {
if (this.onTouched) {

@@ -305,32 +238,32 @@ this.onTouched();

this.blur.emit(evt);
}));
}));
editor.on('change', (/**
* @param {?} evt
* @return {?}
*/
evt => {
this.ngZone.run((/**
* @return {?}
*/
() => {
/** @type {?} */
const newData = editor.getData();
this.change.emit(evt);
if (newData === this.data) {
return;
}
this._data = newData;
this.dataChange.emit(newData);
if (this.onChange) {
this.onChange(newData);
}
}));
}));
});
});
editor.on('dataReady', this.propagateChange, this);
if (this.instance.undoManager) {
editor.on('change', this.propagateChange, this);
}
// If 'undo' plugin is not loaded, listen to 'selectionCheck' event instead. (#54).
else {
editor.on('selectionCheck', this.propagateChange, this);
}
}
/**
* @private
* @param {?} config
* @return {?}
*/
propagateChange(event) {
this.ngZone.run(() => {
const newData = this.instance.getData();
if (event.name == 'change') {
this.change.emit(event);
}
else if (event.name == 'dataReady') {
this.dataReady.emit(event);
}
if (newData === this.data) {
return;
}
this._data = newData;
this.dataChange.emit(newData);
if (this.onChange) {
this.onChange(newData);
}
});
}
ensureDivareaPlugin(config) {

@@ -346,8 +279,2 @@ let { extraPlugins, removePlugins } = config;

}
/**
* @private
* @param {?} plugins
* @param {?} toRemove
* @return {?}
*/
removePlugin(plugins, toRemove) {

@@ -357,49 +284,13 @@ if (!plugins) {

}
/** @type {?} */
const isString = typeof plugins === 'string';
if (isString) {
plugins = ((/** @type {?} */ (plugins))).split(',');
plugins = plugins.split(',');
}
plugins = ((/** @type {?} */ (plugins))).filter((/**
* @param {?} plugin
* @return {?}
*/
plugin => plugin !== toRemove));
plugins = plugins.filter(plugin => plugin !== toRemove);
if (isString) {
plugins = ((/** @type {?} */ (plugins))).join(',');
plugins = plugins.join(',');
}
return plugins;
}
/**
* @private
* @return {?}
*/
createInitialElement() {
// Render editor outside of component so it won't be removed from DOM before `instanceReady`.
this.wrapper = document.createElement('div');
/** @type {?} */
const element = document.createElement(this.tagName);
this.wrapper.setAttribute('style', 'display:none;');
document.body.appendChild(this.wrapper);
this.wrapper.appendChild(element);
return element;
}
}
CKEditorComponent.decorators = [
{ type: Component, args: [{
selector: 'ckeditor',
template: '<ng-template></ng-template>',
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef((/**
* @return {?}
*/
() => CKEditorComponent)),
multi: true,
}
]
}] }
];
/** @nocollapse */
};
CKEditorComponent.ctorParameters = () => [

@@ -409,67 +300,76 @@ { type: ElementRef },

];
CKEditorComponent.propDecorators = {
config: [{ type: Input }],
tagName: [{ type: Input }],
type: [{ type: Input }],
data: [{ type: Input }],
readOnly: [{ type: Input }],
ready: [{ type: Output }],
change: [{ type: Output }],
dataChange: [{ type: Output }],
focus: [{ type: Output }],
blur: [{ type: Output }],
editorUrl: [{ type: Input }]
};
__decorate([
Input()
], CKEditorComponent.prototype, "config", void 0);
__decorate([
Input()
], CKEditorComponent.prototype, "tagName", void 0);
__decorate([
Input()
], CKEditorComponent.prototype, "type", void 0);
__decorate([
Input()
], CKEditorComponent.prototype, "data", null);
__decorate([
Input()
], CKEditorComponent.prototype, "readOnly", null);
__decorate([
Output()
], CKEditorComponent.prototype, "ready", void 0);
__decorate([
Output()
], CKEditorComponent.prototype, "dataReady", void 0);
__decorate([
Output()
], CKEditorComponent.prototype, "change", void 0);
__decorate([
Output()
], CKEditorComponent.prototype, "dataChange", void 0);
__decorate([
Output()
], CKEditorComponent.prototype, "focus", void 0);
__decorate([
Output()
], CKEditorComponent.prototype, "blur", void 0);
__decorate([
Input()
], CKEditorComponent.prototype, "editorUrl", void 0);
CKEditorComponent = CKEditorComponent_1 = __decorate([
Component({
selector: 'ckeditor',
template: '<ng-template></ng-template>',
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => CKEditorComponent_1),
multi: true,
}
]
})
], CKEditorComponent);
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/
/**
* Basic typings for the CKEditor4 elements.
*/
var CKEditor4;
(function (CKEditor4) {
/**
* The CKEditor4 editor constructor.
* @record
*/
function Config() { }
CKEditor4.Config = Config;
/**
* The event object passed to CKEditor4 event callbacks.
*
* See https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_eventInfo.html
* to learn more.
* @record
*/
function EventInfo() { }
CKEditor4.EventInfo = EventInfo;
})(CKEditor4 || (CKEditor4 = {}));
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/
class CKEditorModule {
}
CKEditorModule.decorators = [
{ type: NgModule, args: [{
imports: [FormsModule, CommonModule],
declarations: [CKEditorComponent],
exports: [CKEditorComponent]
},] }
];
let CKEditorModule = class CKEditorModule {
};
CKEditorModule = __decorate([
NgModule({
imports: [FormsModule, CommonModule],
declarations: [CKEditorComponent],
exports: [CKEditorComponent]
})
], CKEditorModule);
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* Generated bundle index. Do not edit.
*/
export { CKEditorModule, CKEditorComponent, CKEditor4 };
//# sourceMappingURL=ckeditor4-angular.js.map
export { CKEditorComponent, CKEditorModule };
//# sourceMappingURL=ckeditor4-angular.js.map

@@ -0,3 +1,4 @@

import { __decorate } from 'tslib';
import { EventEmitter, ElementRef, NgZone, Input, Output, Component, forwardRef, NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { Component, NgZone, Input, Output, EventEmitter, forwardRef, ElementRef, NgModule } from '@angular/core';
import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';

@@ -7,11 +8,6 @@ import loadScript from 'load-script';

/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/
/** @type {?} */
var promise;
/**
* @param {?} editorURL
* @return {?}
*/
function getEditorNamespace(editorURL) {

@@ -25,13 +21,4 @@ if (editorURL.length < 1) {

else if (!promise) {
promise = new Promise((/**
* @param {?} scriptResolve
* @param {?} scriptReject
* @return {?}
*/
function (scriptResolve, scriptReject) {
loadScript(editorURL, (/**
* @param {?} err
* @return {?}
*/
function (err) {
promise = new Promise(function (scriptResolve, scriptReject) {
loadScript(editorURL, function (err) {
if (err) {

@@ -44,4 +31,4 @@ scriptReject(err);

}
}));
}));
});
});
}

@@ -52,4 +39,4 @@ return promise;

/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/

@@ -76,3 +63,3 @@ var CKEditorComponent = /** @class */ (function () {

*/
this.type = "divarea" /* DIVAREA */;
this.type = "classic" /* CLASSIC */;
/**

@@ -85,5 +72,14 @@ * Fires when the editor is ready. It corresponds with the `editor#instanceReady`

/**
* Fires when the editor data is loaded, e.g. after calling setData()
* https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-setData
* editor's method. It corresponds with the `editor#dataReady`
* https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#event-dataReady event.
*/
this.dataReady = new EventEmitter();
/**
* Fires when the content of the editor has changed. It corresponds with the `editor#change`
* https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#event-change
* event. For performance reasons this event may be called even when data didn't really changed.
* Please note that this event will only be fired when `undo` plugin is loaded. If you need to
* listen for editor changes (e.g. for two-way data binding), use `dataChange` event instead.
*/

@@ -119,11 +115,9 @@ this.change = new EventEmitter();

*
* Defaults to 'https://cdn.ckeditor.com/4.12.1/standard-all/ckeditor.js'
* Defaults to 'https://cdn.ckeditor.com/4.13.0/standard-all/ckeditor.js'
*/
this.editorUrl = 'https://cdn.ckeditor.com/4.12.1/standard-all/ckeditor.js';
this.editorUrl = 'https://cdn.ckeditor.com/4.13.0/standard-all/ckeditor.js';
}
CKEditorComponent_1 = CKEditorComponent;
Object.defineProperty(CKEditorComponent.prototype, "data", {
get: /**
* @return {?}
*/
function () {
get: function () {
return this._data;

@@ -138,12 +132,3 @@ },

*/
set: /**
* Keeps track of the editor's data.
*
* It's also decorated as an input which is useful when not using the ngModel.
*
* See https://angular.io/api/forms/NgModel to learn more.
* @param {?} data
* @return {?}
*/
function (data) {
set: function (data) {
if (data === this._data) {

@@ -164,6 +149,3 @@ return;

Object.defineProperty(CKEditorComponent.prototype, "readOnly", {
get: /**
* @return {?}
*/
function () {
get: function () {
if (this.instance) {

@@ -179,10 +161,3 @@ return this.instance.readOnly;

*/
set: /**
* When set `true`, the editor becomes read-only.
* https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#property-readOnly
* to learn more.
* @param {?} isReadOnly
* @return {?}
*/
function (isReadOnly) {
set: function (isReadOnly) {
if (this.instance) {

@@ -198,29 +173,11 @@ this.instance.setReadOnly(isReadOnly);

});
/**
* @return {?}
*/
CKEditorComponent.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
CKEditorComponent.prototype.ngAfterViewInit = function () {
var _this = this;
getEditorNamespace(this.editorUrl).then((/**
* @return {?}
*/
function () {
getEditorNamespace(this.editorUrl).then(function () {
_this.ngZone.runOutsideAngular(_this.createEditor.bind(_this));
})).catch(window.console.error);
}).catch(window.console.error);
};
/**
* @return {?}
*/
CKEditorComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
CKEditorComponent.prototype.ngOnDestroy = function () {
var _this = this;
this.ngZone.runOutsideAngular((/**
* @return {?}
*/
function () {
this.ngZone.runOutsideAngular(function () {
if (_this.instance) {

@@ -230,118 +187,59 @@ _this.instance.destroy();

}
}));
});
};
/**
* @param {?} value
* @return {?}
*/
CKEditorComponent.prototype.writeValue = /**
* @param {?} value
* @return {?}
*/
function (value) {
CKEditorComponent.prototype.writeValue = function (value) {
this.data = value;
};
/**
* @param {?} callback
* @return {?}
*/
CKEditorComponent.prototype.registerOnChange = /**
* @param {?} callback
* @return {?}
*/
function (callback) {
CKEditorComponent.prototype.registerOnChange = function (callback) {
this.onChange = callback;
};
/**
* @param {?} callback
* @return {?}
*/
CKEditorComponent.prototype.registerOnTouched = /**
* @param {?} callback
* @return {?}
*/
function (callback) {
CKEditorComponent.prototype.registerOnTouched = function (callback) {
this.onTouched = callback;
};
/**
* @private
* @return {?}
*/
CKEditorComponent.prototype.createEditor = /**
* @private
* @return {?}
*/
function () {
/** @type {?} */
var element = this.createInitialElement();
this.config = this.ensureDivareaPlugin(this.config || {});
/** @type {?} */
var instance = this.type === "inline" /* INLINE */ ?
CKEDITOR.inline(element, this.config)
CKEditorComponent.prototype.createEditor = function () {
var _this = this;
var element = document.createElement(this.tagName);
this.elementRef.nativeElement.appendChild(element);
if (this.type === "divarea" /* DIVAREA */) {
this.config = this.ensureDivareaPlugin(this.config || {});
}
var instance = this.type === "inline" /* INLINE */
? CKEDITOR.inline(element, this.config)
: CKEDITOR.replace(element, this.config);
instance.once('instanceReady', (/**
* @param {?} evt
* @return {?}
*/
function (evt) {
var _this = this;
this.instance = instance;
this.wrapper.removeAttribute('style');
this.elementRef.nativeElement.appendChild(this.wrapper);
instance.once('instanceReady', function (evt) {
_this.instance = instance;
// Read only state may change during instance initialization.
this.readOnly = this._readOnly !== null ? this._readOnly : this.instance.readOnly;
this.subscribe(this.instance);
/** @type {?} */
_this.readOnly = _this._readOnly !== null ? _this._readOnly : _this.instance.readOnly;
_this.subscribe(_this.instance);
var undo = instance.undoManager;
if (this.data !== null) {
if (_this.data !== null) {
undo && undo.lock();
instance.setData(this.data);
// Locking undoManager prevents 'change' event.
// Trigger it manually to updated bound data.
if (this.data !== instance.getData()) {
instance.fire('change');
}
undo && undo.unlock();
instance.setData(_this.data, { callback: function () {
// Locking undoManager prevents 'change' event.
// Trigger it manually to updated bound data.
if (_this.data !== instance.getData()) {
undo ? instance.fire('change') : instance.fire('dataReady');
}
undo && undo.unlock();
_this.ngZone.run(function () {
_this.ready.emit(evt);
});
} });
}
this.ngZone.run((/**
* @return {?}
*/
function () {
_this.ready.emit(evt);
}));
}), this);
else {
_this.ngZone.run(function () {
_this.ready.emit(evt);
});
}
});
};
/**
* @private
* @param {?} editor
* @return {?}
*/
CKEditorComponent.prototype.subscribe = /**
* @private
* @param {?} editor
* @return {?}
*/
function (editor) {
CKEditorComponent.prototype.subscribe = function (editor) {
var _this = this;
editor.on('focus', (/**
* @param {?} evt
* @return {?}
*/
function (evt) {
_this.ngZone.run((/**
* @return {?}
*/
function () {
editor.on('focus', function (evt) {
_this.ngZone.run(function () {
_this.focus.emit(evt);
}));
}));
editor.on('blur', (/**
* @param {?} evt
* @return {?}
*/
function (evt) {
_this.ngZone.run((/**
* @return {?}
*/
function () {
});
});
editor.on('blur', function (evt) {
_this.ngZone.run(function () {
if (_this.onTouched) {

@@ -351,38 +249,34 @@ _this.onTouched();

_this.blur.emit(evt);
}));
}));
editor.on('change', (/**
* @param {?} evt
* @return {?}
*/
function (evt) {
_this.ngZone.run((/**
* @return {?}
*/
function () {
/** @type {?} */
var newData = editor.getData();
_this.change.emit(evt);
if (newData === _this.data) {
return;
}
_this._data = newData;
_this.dataChange.emit(newData);
if (_this.onChange) {
_this.onChange(newData);
}
}));
}));
});
});
editor.on('dataReady', this.propagateChange, this);
if (this.instance.undoManager) {
editor.on('change', this.propagateChange, this);
}
// If 'undo' plugin is not loaded, listen to 'selectionCheck' event instead. (#54).
else {
editor.on('selectionCheck', this.propagateChange, this);
}
};
/**
* @private
* @param {?} config
* @return {?}
*/
CKEditorComponent.prototype.ensureDivareaPlugin = /**
* @private
* @param {?} config
* @return {?}
*/
function (config) {
CKEditorComponent.prototype.propagateChange = function (event) {
var _this = this;
this.ngZone.run(function () {
var newData = _this.instance.getData();
if (event.name == 'change') {
_this.change.emit(event);
}
else if (event.name == 'dataReady') {
_this.dataReady.emit(event);
}
if (newData === _this.data) {
return;
}
_this._data = newData;
_this.dataChange.emit(newData);
if (_this.onChange) {
_this.onChange(newData);
}
});
};
CKEditorComponent.prototype.ensureDivareaPlugin = function (config) {
var extraPlugins = config.extraPlugins, removePlugins = config.removePlugins;

@@ -397,68 +291,17 @@ extraPlugins = this.removePlugin(extraPlugins, 'divarea') || '';

};
/**
* @private
* @param {?} plugins
* @param {?} toRemove
* @return {?}
*/
CKEditorComponent.prototype.removePlugin = /**
* @private
* @param {?} plugins
* @param {?} toRemove
* @return {?}
*/
function (plugins, toRemove) {
CKEditorComponent.prototype.removePlugin = function (plugins, toRemove) {
if (!plugins) {
return null;
}
/** @type {?} */
var isString = typeof plugins === 'string';
if (isString) {
plugins = ((/** @type {?} */ (plugins))).split(',');
plugins = plugins.split(',');
}
plugins = ((/** @type {?} */ (plugins))).filter((/**
* @param {?} plugin
* @return {?}
*/
function (plugin) { return plugin !== toRemove; }));
plugins = plugins.filter(function (plugin) { return plugin !== toRemove; });
if (isString) {
plugins = ((/** @type {?} */ (plugins))).join(',');
plugins = plugins.join(',');
}
return plugins;
};
/**
* @private
* @return {?}
*/
CKEditorComponent.prototype.createInitialElement = /**
* @private
* @return {?}
*/
function () {
// Render editor outside of component so it won't be removed from DOM before `instanceReady`.
this.wrapper = document.createElement('div');
/** @type {?} */
var element = document.createElement(this.tagName);
this.wrapper.setAttribute('style', 'display:none;');
document.body.appendChild(this.wrapper);
this.wrapper.appendChild(element);
return element;
};
CKEditorComponent.decorators = [
{ type: Component, args: [{
selector: 'ckeditor',
template: '<ng-template></ng-template>',
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef((/**
* @return {?}
*/
function () { return CKEditorComponent; })),
multi: true,
}
]
}] }
];
/** @nocollapse */
var CKEditorComponent_1;
CKEditorComponent.ctorParameters = function () { return [

@@ -468,15 +311,51 @@ { type: ElementRef },

]; };
CKEditorComponent.propDecorators = {
config: [{ type: Input }],
tagName: [{ type: Input }],
type: [{ type: Input }],
data: [{ type: Input }],
readOnly: [{ type: Input }],
ready: [{ type: Output }],
change: [{ type: Output }],
dataChange: [{ type: Output }],
focus: [{ type: Output }],
blur: [{ type: Output }],
editorUrl: [{ type: Input }]
};
__decorate([
Input()
], CKEditorComponent.prototype, "config", void 0);
__decorate([
Input()
], CKEditorComponent.prototype, "tagName", void 0);
__decorate([
Input()
], CKEditorComponent.prototype, "type", void 0);
__decorate([
Input()
], CKEditorComponent.prototype, "data", null);
__decorate([
Input()
], CKEditorComponent.prototype, "readOnly", null);
__decorate([
Output()
], CKEditorComponent.prototype, "ready", void 0);
__decorate([
Output()
], CKEditorComponent.prototype, "dataReady", void 0);
__decorate([
Output()
], CKEditorComponent.prototype, "change", void 0);
__decorate([
Output()
], CKEditorComponent.prototype, "dataChange", void 0);
__decorate([
Output()
], CKEditorComponent.prototype, "focus", void 0);
__decorate([
Output()
], CKEditorComponent.prototype, "blur", void 0);
__decorate([
Input()
], CKEditorComponent.prototype, "editorUrl", void 0);
CKEditorComponent = CKEditorComponent_1 = __decorate([
Component({
selector: 'ckeditor',
template: '<ng-template></ng-template>',
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(function () { return CKEditorComponent_1; }),
multi: true,
}
]
})
], CKEditorComponent);
return CKEditorComponent;

@@ -486,34 +365,9 @@ }());

/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/
/**
* Basic typings for the CKEditor4 elements.
*/
var CKEditor4;
(function (CKEditor4) {
/**
* The CKEditor4 editor constructor.
* @record
*/
function Config() { }
CKEditor4.Config = Config;
/**
* The event object passed to CKEditor4 event callbacks.
*
* See https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_eventInfo.html
* to learn more.
* @record
*/
function EventInfo() { }
CKEditor4.EventInfo = EventInfo;
})(CKEditor4 || (CKEditor4 = {}));
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/

@@ -523,9 +377,9 @@ var CKEditorModule = /** @class */ (function () {

}
CKEditorModule.decorators = [
{ type: NgModule, args: [{
imports: [FormsModule, CommonModule],
declarations: [CKEditorComponent],
exports: [CKEditorComponent]
},] }
];
CKEditorModule = __decorate([
NgModule({
imports: [FormsModule, CommonModule],
declarations: [CKEditorComponent],
exports: [CKEditorComponent]
})
], CKEditorModule);
return CKEditorModule;

@@ -535,8 +389,6 @@ }());

/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* Generated bundle index. Do not edit.
*/
export { CKEditorModule, CKEditorComponent, CKEditor4 };
//# sourceMappingURL=ckeditor4-angular.js.map
export { CKEditorComponent, CKEditorModule };
//# sourceMappingURL=ckeditor4-angular.js.map
Software License Agreement
==========================
**CKEditor 4 component for Angular** – https://github.com/ckeditor/ckeditor4-angular <br>
Copyright (c) 2003-2019, [CKSource](http://cksource.com) Frederico Knabben. All rights reserved.
**CKEditor 4 WYSIWYG editor Angular component** – https://github.com/ckeditor/ckeditor4-angular <br>
Copyright (c) 2003-2019, [CKSource](https://cksource.com/) Frederico Knabben. All rights reserved.

@@ -26,8 +26,4 @@ Licensed under the terms of any of the following licenses at your

- Angular Copyright (c) 2010-2019 Google LLC. [MIT](http://angular.io/license)
- core-js Copyright (c) 2014-2019 Denis Pushkarev [MIT](https://github.com/zloirock/core-js/blob/master/LICENSE)
- load-script [MIT](https://github.com/eldargab/load-script#license)
- RxJS: Reactive Extensions For JavaScript [Apache-2.0](https://github.com/ReactiveX/rxjs/blob/master/LICENSE.txt)
- tslib Copyright (c) 2012-2019 Microsoft [Apache-2.0](https://github.com/Microsoft/tslib/blob/master/LICENSE.txt)
- Zone.js Copyright (c) 2016-2018 Google, Inc. [MIT](https://github.com/angular/zone.js/blob/master/LICENSE)

@@ -37,2 +33,2 @@ Trademarks

**CKEditor** is a trademark of [CKSource](http://cksource.com) Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders.
**CKEditor** is a trademark of [CKSource](https://cksource.com/) Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders.
{
"name": "ckeditor4-angular",
"version": "1.0.0-beta.2",
"description": "Official Angular 2+ component for CKEditor 4.",
"version": "1.0.0",
"description": "Official CKEditor 4 component for Angular.",
"keywords": [
"wysiwyg",
"rich text",
"rich text editor",
"rte",
"editor",

@@ -13,3 +14,3 @@ "html",

"angular",
"angular2",
"angular5",
"ng",

@@ -26,5 +27,5 @@ "component",

},
"author": "CKSource (http://cksource.com/)",
"author": "CKSource (https://cksource.com/)",
"license": "(GPL-2.0-or-later OR LGPL-2.1-or-later OR MPL-1.1-or-later)",
"homepage": "https://ckeditor.com",
"homepage": "https://ckeditor.com/",
"bugs": "https://github.com/ckeditor/ckeditor4-angular/issues",

@@ -31,0 +32,0 @@ "repository": {

@@ -1,13 +0,17 @@

# CKEditor 4 WYSIWYG editor Angular component
# CKEditor 4 WYSIWYG editor Angular component [![Tweet](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/intent/tweet?text=Check%20out%20CKEditor%204%20Angular%20integration&url=https%3A%2F%2Fwww.npmjs.com%2Fpackage%2Fckeditor4-angular)
[![npm version](https://badge.fury.io/js/ckeditor4-angular.svg)](https://www.npmjs.com/package/ckeditor4-angular)
[![GitHub tag](https://img.shields.io/github/tag/ckeditor/ckeditor4-angular.svg)](https://github.com/ckeditor/ckeditor4-angular)
[![Build Status](https://travis-ci.org/ckeditor/ckeditor4-angular.svg?branch=master)](https://travis-ci.org/ckeditor/ckeditor4-angular)
<br>
[![Dependency Status](https://david-dm.org/ckeditor/ckeditor4-angular/status.svg)](https://david-dm.org/ckeditor/ckeditor4-angular)
[![devDependency Status](https://david-dm.org/ckeditor/ckeditor4-angular/dev-status.svg)](https://david-dm.org/ckeditor/ckeditor4-angular?type=dev)
The official [CKEditor 4](https://ckeditor.com/ckeditor-4/) WYSIWYG editor component for Angular.
[![Join newsletter](https://img.shields.io/badge/join-newsletter-00cc99.svg)](http://eepurl.com/c3zRPr)
[![Follow Twitter](https://img.shields.io/badge/follow-twitter-00cc99.svg)](https://twitter.com/ckeditor)
This is the beta version of the CKEditor 4 Angular integration. We are looking forward to your feedback! You can report any issues, ideas or feature requests on the [integration issues page](https://github.com/ckeditor/ckeditor4-angular/issues/new).
Official [CKEditor 4](https://ckeditor.com/ckeditor-4/) WYSIWYG editor component for Angular.
We are looking forward to your feedback! You can report any issues, ideas or feature requests on the [integration issues page](https://github.com/ckeditor/ckeditor4-angular/issues/new).
![CKEditor 4 screenshot](https://c.cksource.com/a/1/img/npm/ckeditor4.png)

@@ -48,3 +52,3 @@

See the [CKEditor 4 Angular Integration](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_angular.html) article and [Angular examples](https://ckeditor.com/docs/ckeditor4/latest/examples/angular.html) in the [CKEditor 4 documentation](https://ckeditor.com/docs/ckeditor4/latest).
See the [CKEditor 4 Angular Integration](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_angular.html) article and [Angular examples](https://ckeditor.com/docs/ckeditor4/latest/examples/angular.html) in the [CKEditor 4 documentation](https://ckeditor.com/docs/ckeditor4/latest/).

@@ -55,2 +59,12 @@ ## Browser support

## Supported Angular versions
The integration can be used together with Angular at version 5.0.0 and higher. It is an implication of Angular metadata produced for this package by the Angular builder. Note that the `package.json` used in the main repository isn't published on NPM (the production one is present in `src/ckeditor/package.json`), so there are only a few peer dependencies:
* `@angular/core` >= 5.0.0
* `@angular/common` >= 5.0.0
* `@angular/forms` >= 5.0.0
required by this package.
## Contributing

@@ -91,4 +105,15 @@

Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
Run `npm test` to execute unit tests via [Karma](https://karma-runner.github.io).
There are two options available to alternate the testing process:
* `url` / `u` - pass custom URL to Karma, for example custom CKEditor 4 build.
* `watch` / `w` - tell Karma to watch for changes.
For example:
```
npm run test -- -u http://localhost:5000/ckeditor.js -w
```
#### Running end-to-end tests

@@ -108,2 +133,8 @@

For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
Licensed under the terms of any of the following licenses at your choice:
* [GNU General Public License Version 2 or later](http://www.gnu.org/licenses/gpl.html),
* [GNU Lesser General Public License Version 2.1 or later](http://www.gnu.org/licenses/lgpl.html),
* [Mozilla Public License Version 1.1 or later (the "MPL")](http://www.mozilla.org/MPL/MPL-1.1.html).
For full details about the license, please check the `LICENSE.md` file.

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc