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();
}
}));
}
}