protected void registerSynchronizers()

in cell/src/main/java/jetbrains/jetpad/cell/toDom/CellContainerToDomMapper.java [243:312]


  protected void registerSynchronizers(SynchronizersConfiguration conf) {
    super.registerSynchronizers(conf);

    conf.add(Synchronizers.forSingleRole(this, Properties.<Cell>constant(getSource().root), new WritableProperty<Element>() {
      @Override
      public void set(Element value) {
        if (value != null) {
          $(myContent).append(value);
        } else {
          $(myContent).html("");
        }
      }
    }, new MapperFactory<Cell, Element>() {
      @Override
      public Mapper<? extends Cell, ? extends Element> createMapper(Cell source) {
        return CellMappers.createMapper(source, myCellToDomContext);
      }
    }));

    conf.add(Synchronizers.forRegistration(new Supplier<Registration>() {
      @Override
      public Registration get() {
        return getSource().addListener(new CellContainerAdapter() {
          @Override
          public void onCellPropertyChanged(Cell cell, CellPropertySpec<?> prop, PropertyChangeEvent<?> event) {
            BaseCellMapper<?> mapper = (BaseCellMapper<?>) rootMapper().getDescendantMapper(cell);
            if (mapper != null) {
              if (Cell.isPopupProp(prop)) {
                if (mapper.isAutoPopupManagement()) {
                  mapper.onEvent((PropertyChangeEvent<Cell>) event);
                }
              } else {
                mapper.refreshProperties();
                if (cell.isPopup() && mapper.isAutoPopupManagement()) {
                  mapper.onPopupPropertyChanged(prop, event);
                }
              }
            }

            invalidateLineHighlight();
          }

          @Override
          public void onChildAdded(Cell parent, CollectionItemEvent<? extends Cell> change) {
            BaseCellMapper<?> mapper = (BaseCellMapper<?>) rootMapper().getDescendantMapper(parent);
            if (mapper == null) return;
            mapper.childAdded(change.getIndex(), change.getNewItem());
            invalidateLineHighlight();
          }

          @Override
          public void onChildRemoved(Cell parent, CollectionItemEvent<? extends Cell> change) {
            BaseCellMapper<?> mapper = (BaseCellMapper<?>) rootMapper().getDescendantMapper(parent);
            if (mapper == null) return;
            mapper.childRemoved(change.getIndex(), change.getNewItem());
            invalidateLineHighlight();
          }
        });
      }
    }));

    if (!myCellToDomContext.eventsDisabled) {
      conf.add(Synchronizers.forRegistration(new Supplier<Registration>() {
        @Override
        public Registration get() {
          return registerListeners();
        }
      }));
    }
  }