import { Class_NodeElement } from './Node'; import { Class_Tag } from '../types/Tag'; import { Type_JSON } from '../types/Utils'; import { Class_LevelTagGroup, Class_ViewTagGroup } from '../types/TagGroup'; /** * Class that handles all tag management operations for NodeElement */ export declare class NodeTagsManager { private _node; constructor(node: Class_NodeElement); cleanForDeletion(): void; copyTagsFrom(node_to_copy: Class_NodeElement): void; copyTagsReferencingFrom(node_to_copy: Class_NodeElement, matching_tagg: { [_: string]: string; }, matching_tags: { [_: string]: { [_: string]: string; }; }): void; private addTagsReferencingFrom; addAsAntiTagged(_: Class_LevelTagGroup): void; removeAsAntiTagged(_: Class_LevelTagGroup): void; /** * Marque le nœud comme EXCLU d'un groupe de view tags (anti-tag « 0 »). Pas de * cross-référence (contrairement aux level anti-tags) : la visibilité est lue * directement par Node.viewTagVisibility(). */ addAsViewExcluded(_: Class_ViewTagGroup): void; /** * Retire l'exclusion de vue (symétrique d'`addAsViewExcluded`). Ajoutée au lot sa#283/6 : * sans elle, l'état de tags n'était pas RÉVERSIBLE — on savait exclure un nœud d'un groupe * de view tags, jamais l'y remettre. */ removeAsViewExcluded(_: Class_ViewTagGroup): void; toJSON(json_object: Type_JSON): void; fromJSON(json_node_object: Type_JSON): void; /** * sa#283 lot 6 — ÉTAT DE TAGS de ce nœud, sur la forme EXACTE de `toJSON` : * `{ '': ['', …] }`, anti-tags de niveau et exclusions de vue compris * (ils s'y écrivent `['0']`). * * C'est la CINQUIÈME catégorie de données qui peut différer d'une tranche à l'autre, à * côté des attributs du sac `_storage`, de la présence de l'élément, de la hiérarchie de * dimension et de l'ordre des flux. Elle ne vit PAS dans `_storage` (rien ne la * capturait) et gouverne la visibilité par `are_related_node_tags_selected` — dont les * tags de NIVEAU (`dimension 1`), qui décident du niveau d'agrégation affiché. * * @param group_ids restreint le résultat à ces groupes ; un groupe cité dont le nœud ne * porte aucun tag vaut `[]` (= n'appartient à aucune étiquette du groupe). Sans * argument, tous les groupes écrits par `toJSON`. */ tagsStateToJSON(group_ids?: string[]): Type_JSON; /** * sa#283 lot 6 — REMPLACE l'appartenance de ce nœud aux GROUPES CITÉS, et à eux seuls. * Exactement réversible : `applyTagsState(tagsStateToJSON(ids))` est un no-op, et rejouer * l'état mémorisé avant l'écriture rend l'état d'origine. * * Par groupe cité : TABLE RASE (retrait de tous les tags du nœud dans ce groupe, de * l'anti-tag de niveau et de l'exclusion de vue), puis ré-inscription de la liste donnée. * Un groupe inconnu du diagramme est ignoré, une étiquette inconnue du groupe aussi * (jamais de création d'étiquette ici, contrairement à `fromJSON` : un contexte est une * surcouche de présentation, il n'invente pas de vocabulaire). `'0'` sur un groupe de * niveau = anti-tag, sur un groupe de vue = exclusion — même convention que `fromJSON`. * * INVALIDATION DES CACHES DE VISIBILITÉ — le piège de cette famille, exactement comme au * lot 5, et MESURÉ ici plutôt que supposé (cf. les deux tests « le cache … est invalide » * de nodeContextState.test.ts, chacun vérifié en retirant l'appel correspondant) : * - `_are_related_node_tags_selected` est déjà rattrapé par la CROSS-RÉFÉRENCE tag ↔ nœud * (`Class_Tag.addReference` appelle `Class_NodeElement.addTag`, qui invalide) ; * `tagsUpdated()` reste appelé ici pour ne pas dépendre de ce détour ; * - `_are_related_dimensions_selected` n'a AUCUNE empreinte de secours et n'est touché * par aucun de ces chemins : sans `dimensionsUpdated()` explicite, changer les tags de * NIVEAU d'un nœud (ou son anti-tag, qui ne passe par aucun `addTag`) le laisse replié * à l'écran alors que son état a bel et bien changé — l'overlay SANS EFFET VISIBLE. * `dimensionsUpdated()` renouvelle en outre l'empreinte de visibilité, dont les VOISINS * dérivent la leur (`getLinksVisibilitiesFingerprint`). */ applyTagsState(state: Type_JSON): void; /** * While adding a root level we must shift the previous level * 1->2 2->3 ... * @memberof Class_NodeDimension */ /** * For nodes wich are leaf for a given dimesion anf for which the level tag is not the lower * it creates some additional parent child relation so that the node is displayed for several level * (2 and 3 for example) * @memberof Class_NodeDimension */ /** * Check if given tag is referenced by node */ hasGivenTag(tag: Class_Tag): boolean; /** * Add and cross-reference a Tag with node */ addTag(tag: Class_Tag): void; /** * Remove tag and its cross-reference from node */ removeTag(tag: Class_Tag): void; /** * Add tag to dict of tag sorted by group */ private addTagToGroupTagDict; /** * Remove tag from dict of tag sorted by group */ private removeTagFromGroupTagDict; }