UNPKG

ng2-json-editor

Version:

Angular2 component for editing large json documents

69 lines 3.33 kB
import { Injectable } from '@angular/core'; import { List, Map } from 'immutable'; var FindReplaceAllService = (function () { function FindReplaceAllService() { } // TODO: fix compiler errors when type of immutable `List<any> | Map<string, any>` /** * Does deep replace when it finds the occurance in an immutable List and Map * uses schema to skip disabled properties * * @param {List<any> | Map<string, any} immutable * @param {Object} schema * @param {string} find * @param {replace} replace * @param {boolean} matchWhole - looks for whole match to a string property of immutable * @param {Array<any> | Object} diffHtml - TODO: describe */ FindReplaceAllService.prototype.findReplaceInImmutable = function (immutable, schema, find, replace, exact, diffHtml) { var _this = this; if (exact === void 0) { exact = false; } var immutableAsMutable = immutable.asMutable(); var isList = List.isList(immutable); // create empty array or object for the immutable to store diff diffHtml = isList ? [] : {}; immutableAsMutable.forEach(function (value, key) { var innerSchema = isList ? schema.items : schema.properties[key]; // ignore disabled and ref fields if (innerSchema.disabled || innerSchema.hidden || key === '$ref') { return; // TODO: is `schema.type === 'string'` better? } else if (typeof value === 'string') { // assign value to diff as initial, if nothing has changed it will remain same var diff = value; // create html diff for each possible change var singleDiffHtml = "<strong style='color: green;'>" + replace + "</strong><del><em style='color: red;'>" + find + "</em></del>"; if (!exact) { var regExp = new RegExp(find, 'g'); var replaced = value.replace(regExp, replace); immutableAsMutable.set(key, replaced); // create diff for multiple changes in value diff = diff.replace(regExp, singleDiffHtml); } else if (value === find) { immutableAsMutable.set(key, replace); diff = singleDiffHtml; } diffHtml[key] = diff; // TODO: is `schema.type === 'object' || schema.type === 'array'` better? } else if (List.isList(value) || Map.isMap(value)) { // create empty array or object for the value in diffHtml var result = _this. findReplaceInImmutable(immutableAsMutable.get(key), innerSchema, find, replace, exact, diffHtml[key]); diffHtml[key] = result.diffHtml; immutableAsMutable.set(key, result.replaced); } }); return { replaced: immutableAsMutable.asImmutable(), diffHtml: diffHtml }; }; return FindReplaceAllService; }()); export { FindReplaceAllService }; FindReplaceAllService.decorators = [ { type: Injectable }, ]; /** @nocollapse */ FindReplaceAllService.ctorParameters = function () { return []; }; //# sourceMappingURL=find-replace-all.service.js.map