/// import angular from "angular"; import coreModule from "../core_module"; export class DeltaCtrl { observer: any; /** @ngInject */ constructor(private $rootScope) { const waitForCompile = mutations => { if (mutations.length === 1) { this.$rootScope.appEvent("json-diff-ready"); } }; this.observer = new MutationObserver(waitForCompile); const observerConfig = { attributes: true, attributeFilter: ["class"], characterData: false, childList: true, subtree: false }; this.observer.observe(angular.element(".delta-html")[0], observerConfig); } $onDestroy() { this.observer.disconnect(); } } export function delta() { return { controller: DeltaCtrl, replace: false, restrict: "A" }; } coreModule.directive("diffDelta", delta); // Link to JSON line number export class LinkJSONCtrl { /** @ngInject */ constructor(private $scope, private $rootScope, private $anchorScroll) {} goToLine(line: number) { let unbind; const scroll = () => { this.$anchorScroll(`l${line}`); unbind(); }; this.$scope.switchView().then(() => { unbind = this.$rootScope.$on("json-diff-ready", scroll.bind(this)); }); } } export function linkJson() { return { controller: LinkJSONCtrl, controllerAs: "ctrl", replace: true, restrict: "E", scope: { line: "@lineDisplay", link: "@lineLink", switchView: "&" }, template: `Line {{ line }}` }; } coreModule.directive("diffLinkJson", linkJson);