code: protected List<ImageDropTarget> findImageTargets() {
  
          List<ImageDropTarget> result = Lists.newArrayList();
          List<CmsContainerPageElementPanel> modelGroups = CmsContainerpageController.get().getModelGroups();
          elementLoop: for (Element element : CmsDomUtil.nodeListToList(
              CmsDomUtil.querySelectorAll("*[" + ATTR_DATA_IMAGEDND + "]", RootPanel.getBodyElement()))) {
              Optional<CmsContainerPageElementPanel> optElemWidget = CmsContainerpageController.get().getContainerElementWidgetForElement(
                  element);
              if (optElemWidget.isPresent()) {
                  CmsContainerPageElementPanel elemWidget = optElemWidget.get();
                  if (!elemWidget.hasViewPermission()) {
                      continue elementLoop;
                  }
                  String noEditReason = elemWidget.getNoEditReason();
                  if ((noEditReason != null) && !elemWidget.hasWritePermission()) {
                      continue elementLoop;
                  }
              }
              if (!CmsContainerpageController.get().getData().isModelGroup()) {
                  // Don't make images in model groups into drop targets, except when we are in model group editing mode
                  for (CmsContainerPageElementPanel modelGroup : modelGroups) {
                      if (modelGroup.getElement().isOrHasChild(element)) {
                          continue elementLoop;
                      }
                  }
              }
              ImageDropTarget target = new ImageDropTarget(element, optElemWidget);
              result.add(target);
          }
          return result;
  
      }
docs: Collects the valid drop targets for images from the page and initializes them.<p>
  
  @return the list of drop targets