Index: xinha-frontend/src/main/java/org/hippoecm/frontend/plugins/richtext/RichTextProcessor.java =================================================================== --- xinha-frontend/src/main/java/org/hippoecm/frontend/plugins/richtext/RichTextProcessor.java (revision 25399) +++ xinha-frontend/src/main/java/org/hippoecm/frontend/plugins/richtext/RichTextProcessor.java (working copy) @@ -15,16 +15,16 @@ */ package org.hippoecm.frontend.plugins.richtext; +import org.apache.wicket.RequestCycle; +import org.apache.wicket.ResourceReference; +import org.apache.wicket.protocol.http.WicketURLDecoder; +import org.hippoecm.frontend.plugins.xinha.services.links.ExternalXinhaLink; + import java.util.Set; import java.util.TreeSet; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.apache.wicket.RequestCycle; -import org.apache.wicket.ResourceReference; -import org.apache.wicket.protocol.http.WicketURLDecoder; -import org.hippoecm.frontend.plugins.xinha.services.links.ExternalXinhaLink; - public class RichTextProcessor { @SuppressWarnings("unused") private final static String SVN_ID = "$Id$"; @@ -34,7 +34,7 @@ private static Pattern IMG_PATTERN = Pattern.compile("]+>", Pattern.CASE_INSENSITIVE); private static Pattern SRC_PATTERN = Pattern.compile("src=\"([^\"]+)\"", Pattern.CASE_INSENSITIVE); private static Pattern FACET_SELECT_PATTERN = Pattern.compile("facetselect=\"([^\"]+)\"", Pattern.CASE_INSENSITIVE); - private static Pattern FACET_SELECT_OR_SRC_PATTERN = Pattern.compile("(facetselect|src)=\"([^\"]+)\"", + private static Pattern FACET_SELECT_OR_SRC_PATTERN = Pattern.compile("(facetselect|type|src)=\"([^\"]+)\"", Pattern.CASE_INSENSITIVE); private static Pattern LINK_PATTERN = Pattern.compile("]+>", Pattern.CASE_INSENSITIVE); @@ -60,6 +60,7 @@ String link = s.group(1); if (!link.startsWith("http:") && !link.startsWith("https:")) { + String type = link.substring(link.lastIndexOf("/")+1); String url; try { url = decorator.getURL(link); @@ -71,6 +72,9 @@ newImg.append("facetselect=\""); newImg.append(link); newImg.append("\" "); + newImg.append("type=\""); + newImg.append(type); + newImg.append("\" "); } else { s.appendReplacement(newImg, src.replace("\\", "\\\\").replace("$", "\\$")); } @@ -96,16 +100,19 @@ String src = null; String facet = null; + String type = null; while (s.find()) { String srcOrFacet = s.group(); if (srcOrFacet.startsWith("src")) { src = srcOrFacet; - } else { + } else if(srcOrFacet.startsWith("facetselect")) { facet = srcOrFacet; + } else{ + type = srcOrFacet; } s.appendReplacement(newImg, ""); } - if (src != null && facet != null) { + if (src != null && facet != null && type != null) { Matcher fs = FACET_SELECT_PATTERN.matcher(facet); if (fs.find()) { fs.appendReplacement(newImg, ("src=\"" + fs.group(1) + "\"").replace("\\", "\\\\").replace("$", @@ -116,6 +123,8 @@ newImg.append(src); } else if (facet != null) { newImg.append(facet); + } else if (type != null) { + newImg.append(type); } s.appendTail(newImg); m.appendReplacement(processed, newImg.toString().replace("\\", "\\\\").replace("$", "\\$")); Index: xinha-frontend/src/main/java/org/hippoecm/frontend/plugins/xinha/dialog/images/ImageBrowserDialog.css =================================================================== --- xinha-frontend/src/main/java/org/hippoecm/frontend/plugins/xinha/dialog/images/ImageBrowserDialog.css (revision 25399) +++ xinha-frontend/src/main/java/org/hippoecm/frontend/plugins/xinha/dialog/images/ImageBrowserDialog.css (working copy) @@ -21,4 +21,19 @@ .hippo-root .upload-wrapper .upload-button-osx { position: relative; +}.hippo-dialog-type select, .hippo-dialog-align select{ + margin-top:5px; +} +.hippo-dialog-type, .hippo-dialog-align{ + float:left; + margin-right: 20px; +} +.hippo-dialog-alt{ + float:right; +} +.hippo-dialog-alt .text-input{ + float:left; +} +body .hippo-picker-properties div.hippo-dialog-alt div.text-input input { + width: 282px; } \ No newline at end of file Index: xinha-frontend/src/main/java/org/hippoecm/frontend/plugins/xinha/dialog/images/ImageBrowserDialog.html =================================================================== --- xinha-frontend/src/main/java/org/hippoecm/frontend/plugins/xinha/dialog/images/ImageBrowserDialog.html (revision 25399) +++ xinha-frontend/src/main/java/org/hippoecm/frontend/plugins/xinha/dialog/images/ImageBrowserDialog.html (working copy) @@ -28,20 +28,26 @@
-
- +
+
+
- - -
[Alt text box]
-
\ No newline at end of file Index: xinha-frontend/src/main/java/org/hippoecm/frontend/plugins/xinha/dialog/images/ImageBrowserDialog.java =================================================================== --- xinha-frontend/src/main/java/org/hippoecm/frontend/plugins/xinha/dialog/images/ImageBrowserDialog.java (revision 25399) +++ xinha-frontend/src/main/java/org/hippoecm/frontend/plugins/xinha/dialog/images/ImageBrowserDialog.java (working copy) @@ -16,15 +16,6 @@ package org.hippoecm.frontend.plugins.xinha.dialog.images; -import java.io.IOException; -import java.io.InputStream; -import java.util.Arrays; -import java.util.List; - -import javax.jcr.Node; -import javax.jcr.RepositoryException; -import javax.servlet.http.HttpServletRequest; - import org.apache.wicket.RequestCycle; import org.apache.wicket.ResourceReference; import org.apache.wicket.Session; @@ -56,18 +47,19 @@ import org.hippoecm.frontend.service.ISettingsService; import org.hippoecm.frontend.session.UserSession; import org.hippoecm.frontend.widgets.ThrottledTextFieldWidget; -import org.hippoecm.repository.api.Document; -import org.hippoecm.repository.api.HippoNode; -import org.hippoecm.repository.api.MappingException; -import org.hippoecm.repository.api.StringCodec; -import org.hippoecm.repository.api.StringCodecFactory; -import org.hippoecm.repository.api.WorkflowException; -import org.hippoecm.repository.api.WorkflowManager; +import org.hippoecm.repository.api.*; import org.hippoecm.repository.gallery.GalleryWorkflow; import org.hippoecm.repository.standardworkflow.DefaultWorkflow; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.jcr.Node; +import javax.jcr.RepositoryException; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.io.InputStream; +import java.util.*; + public class ImageBrowserDialog extends AbstractBrowserDialog implements IHeaderContributor { private static final long serialVersionUID = 1L; @@ -82,7 +74,59 @@ public ImageBrowserDialog(IPluginContext context, final IPluginConfig config, final IModel model) { super(context, config, model); + //Type setting: + //TODO translations + String[] names = {"thumbnail", "picture"}; + String[] values = {"hippogallery:thumbnail", "hippogallery:picture"}; + final Map m = new HashMap(); + if (config.get("type.names") != null && config.get("type.values") != null) { + names = (String[]) config.get("type.names"); + values = (String[]) config.get("type.values"); + } + + String defaultImage = values[0]; + + if (defaultImage != null + && (model.getObject().get(XinhaImage.TYPE).equals("") || model.getObject().get(XinhaImage.TYPE) == null)) { + model.getObject().put(XinhaImage.TYPE, defaultImage); + } + + if (names.length == values.length) { + for (int i = 0; i < names.length; i++) { + m.put(values[i], names[i]); + } + } + + List typeList = new ArrayList(m.keySet()); + + DropDownChoice type = new DropDownChoice("type", new StringPropertyModel(model, XinhaImage.TYPE), typeList, new IChoiceRenderer() { + private static final long serialVersionUID = 1L; + + public Object getDisplayValue(String object) { + return m.get(object); + } + + public String getIdValue(String object, int index) { + return object; + } + + }); + type.add(new AjaxFormComponentUpdatingBehavior("onChange") { + private static final long serialVersionUID = 1L; + + @Override + protected void onUpdate(AjaxRequestTarget target) { + checkState(); + } + }); + + type.setOutputMarkupId(true); + type.setNullValid(false); + add(type); + + //End Type Settings + settings = new ImagePickerSettings(); if (config.containsKey("preferred.resource.names")) { settings.setPreferredResourceNames(config.getStringArray("preferred.resource.names")); Index: xinha-frontend/src/main/java/org/hippoecm/frontend/plugins/xinha/dialog/images/ImageBrowserDialog.properties =================================================================== --- xinha-frontend/src/main/java/org/hippoecm/frontend/plugins/xinha/dialog/images/ImageBrowserDialog.properties (revision 25399) +++ xinha-frontend/src/main/java/org/hippoecm/frontend/plugins/xinha/dialog/images/ImageBrowserDialog.properties (working copy) @@ -3,6 +3,7 @@ alt-text-label: Alternative text: align-label: Align: +type-label: Size: top: Top middle: Middle Index: xinha-frontend/src/main/java/org/hippoecm/frontend/plugins/xinha/dialog/images/ImageBrowserDialog_nl.properties =================================================================== --- xinha-frontend/src/main/java/org/hippoecm/frontend/plugins/xinha/dialog/images/ImageBrowserDialog_nl.properties (revision 25399) +++ xinha-frontend/src/main/java/org/hippoecm/frontend/plugins/xinha/dialog/images/ImageBrowserDialog_nl.properties (working copy) @@ -3,6 +3,7 @@ alt-text-label: Alternatieve tekst: align-label: Uitlijning: +type-label: Grootte: top: Boven middle: Midden Index: xinha-frontend/src/main/java/org/hippoecm/frontend/plugins/xinha/model/DocumentLink.java =================================================================== --- xinha-frontend/src/main/java/org/hippoecm/frontend/plugins/xinha/model/DocumentLink.java (revision 25399) +++ xinha-frontend/src/main/java/org/hippoecm/frontend/plugins/xinha/model/DocumentLink.java (working copy) @@ -16,24 +16,26 @@ package org.hippoecm.frontend.plugins.xinha.model; -import java.util.Map; - import org.apache.wicket.model.IDetachable; import org.hippoecm.frontend.plugins.xinha.services.links.XinhaLink; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.Map; + public abstract class DocumentLink extends XinhaLink { private static final long serialVersionUID = 1L; @SuppressWarnings("unused") private final static String SVN_ID = "$Id$"; - + protected static final Logger log = LoggerFactory.getLogger(DocumentLink.class); - + private IDetachable initialModel; private IDetachable selectedModel; + private String initType; + public DocumentLink(Map values, IDetachable model) { super(values); @@ -73,4 +75,12 @@ this.selectedModel = model; } + public void setInitType(String type) { + this.initType = type; + } + + public boolean isSameType(String type) { + return this.initType.endsWith(type); + } + } Index: xinha-frontend/src/main/java/org/hippoecm/frontend/plugins/xinha/services/images/XinhaImage.java =================================================================== --- xinha-frontend/src/main/java/org/hippoecm/frontend/plugins/xinha/services/images/XinhaImage.java (revision 25399) +++ xinha-frontend/src/main/java/org/hippoecm/frontend/plugins/xinha/services/images/XinhaImage.java (working copy) @@ -15,13 +15,13 @@ */ package org.hippoecm.frontend.plugins.xinha.services.images; -import java.util.Map; - import org.apache.wicket.model.IDetachable; import org.hippoecm.frontend.plugins.xinha.model.DocumentLink; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.Map; + public abstract class XinhaImage extends DocumentLink { private static final long serialVersionUID = 1L; @@ -39,6 +39,7 @@ public static final String HORIZONTAL_SPACE = "f_horiz"; public static final String WIDTH = "f_width"; public static final String HEIGHT = "f_height"; + public static final String TYPE = "f_type"; public XinhaImage(Map values, IDetachable targetId) { super(values, targetId); @@ -60,6 +61,14 @@ return get(FACET_SELECT); } + public void setType(String type){ + put(TYPE, type); + } + + public String getType(){ + return (String) get(TYPE); + } + @Override public void setLinkTarget(IDetachable model) { super.setLinkTarget(model); Index: xinha-frontend/src/main/java/org/hippoecm/frontend/plugins/xinha/services/images/XinhaImageService.java =================================================================== --- xinha-frontend/src/main/java/org/hippoecm/frontend/plugins/xinha/services/images/XinhaImageService.java (revision 25399) +++ xinha-frontend/src/main/java/org/hippoecm/frontend/plugins/xinha/services/images/XinhaImageService.java (working copy) @@ -15,8 +15,6 @@ */ package org.hippoecm.frontend.plugins.xinha.services.images; -import java.util.Map; - import org.apache.wicket.model.IDetachable; import org.apache.wicket.util.string.Strings; import org.hippoecm.frontend.model.JcrNodeModel; @@ -27,6 +25,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.Map; + public class XinhaImageService implements IDetachable { private static final long serialVersionUID = 1L; @@ -74,11 +74,13 @@ @Override public void setLinkTarget(IDetachable model) { super.setLinkTarget(model); + //todo path moet standaard op de config staan setFacetSelectPath(factory.getDefaultFacetSelectPath(model)); + setInitType(getType()); } public void save() { - if (isAttacheable()) { + if (isAttacheable() || !isSameType(getType())) { if (isReplacing()) { RichTextImage remove = loadImageItem(getInitialValues()); if (remove != null) { @@ -87,11 +89,21 @@ } try { RichTextImage item = createImageItem(getLinkTarget()); + // get the type/resourceDefinition from dropdown or + // fallback to default fallback should be made better in sync with the settrgetlink method + final String type = getType(); + if(!isSameType(type)|| !isExisting()){ + put(WIDTH, ""); + put(HEIGHT, ""); + String facetSelect = getFacetSelectPath(); if (facetSelect != null) { - String resource = facetSelect.substring(facetSelect.lastIndexOf('/') + 1); - item.setSelectedResourceDefinition(resource); + String stdResource = facetSelect.substring(facetSelect.lastIndexOf('/') + 1); + facetSelect = facetSelect.replace(stdResource, type); + setFacetSelectPath(facetSelect); + item.setSelectedResourceDefinition(type); } + } setUrl(item.getUrl()); } catch (RichTextException e) { log.error("Could not create link"); Index: xinha/webResources/xinha/plugins/InsertImage/InsertImage.js =================================================================== --- xinha/webResources/xinha/plugins/InsertImage/InsertImage.js (revision 25399) +++ xinha/webResources/xinha/plugins/InsertImage/InsertImage.js (working copy) @@ -113,6 +113,7 @@ { f_url : this.stripBaseURL(image.getAttribute('src',2)), // the second parameter makes IE return the value as it is set, as opposed to an "interpolated" (as MSDN calls it) value f_facetselect : getSpecifiedAttribute(image,'facetselect'), + f_type : getSpecifiedAttribute(image,'type'), f_alt : image.alt, f_border : image.border, f_align : image.align, @@ -128,6 +129,7 @@ { f_url : '', f_facetselect : '', + f_type : '', f_alt : '', f_border : '', f_align : '', @@ -196,6 +198,12 @@ else img.removeAttribute("facetselect"); break; + case "f_type": + if (value) + img.setAttribute("type",value); + else + img.removeAttribute("type"); + break; case "f_alt": if (value) img.alt = value;