/* * This library is part of OpenCms - * the Open Source Content Management System * * Copyright (c) Alkacon Software GmbH (http://www.alkacon.com) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * For further information about Alkacon Software, please see the * company website: http://www.alkacon.com * * For further information about OpenCms, please see the * project website: http://www.opencms.org * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package org.opencms.ade.galleries.client.preview.ui; import org.opencms.ade.galleries.client.Messages; import org.opencms.ade.galleries.client.preview.CmsImagePreviewHandler.Attribute; import org.opencms.ade.galleries.client.ui.css.I_CmsLayoutBundle; import org.opencms.ade.galleries.shared.CmsImageInfoBean; import org.opencms.gwt.client.CmsCoreProvider; import org.opencms.gwt.client.ui.I_CmsButton.Size; import org.opencms.gwt.client.ui.input.CmsSelectBox; import org.opencms.gwt.client.ui.input.CmsTextBox; import org.opencms.gwt.client.ui.input.CmsVfsLinkWidget; import org.opencms.gwt.client.ui.input.I_CmsFormWidget; import org.opencms.gwt.client.util.CmsJSONMap; import org.opencms.util.CmsStringUtil; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import com.google.gwt.core.client.GWT; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Widget; /** * Advanced image tag properties form, use in editor mode only.<p> * * @since 8.0. */ public class CmsImageAdvancedForm extends Composite { /** The ui binder interface. */ interface I_CmsImageAdvancedFormUiBinder extends UiBinder<Widget, CmsImageAdvancedForm> { // GWT interface, nothing to do } /** Ui binder instance. */ private static I_CmsImageAdvancedFormUiBinder m_uiBinder = GWT.create(I_CmsImageAdvancedFormUiBinder.class); /** Description input field. */ @UiField protected CmsTextBox m_inputDescription; /** Id input field. */ @UiField protected CmsTextBox m_inputId; /** Language code input field. */ @UiField protected CmsTextBox m_inputLanguageCode; /** Style input field. */ @UiField protected CmsTextBox m_inputStyle; /** Style classes input field. */ @UiField protected CmsTextBox m_inputStyleClasses; /** URL input field. */ @UiField protected CmsVfsLinkWidget m_inputUrl; /** Description field label. */ @UiField protected Label m_labelDescription; /** Id field label. */ @UiField protected Label m_labelId; /** Language code field label. */ @UiField protected Label m_labelLanguageCode; /** Set link checkbox label. */ @UiField protected Label m_labelSetLink; /** Style field label. */ @UiField protected Label m_labelStyle; /** Style classes field label. */ @UiField protected Label m_labelStyleClasses; /** Additional attributes label. */ @UiField protected Label m_labelTagAttributes; /** Target field label. */ @UiField protected Label m_labelTarget; /** Language direction field label. */ @UiField protected Label m_labelTextDirection; /** URL field label. */ @UiField protected Label m_labelUrl; /** Target select box. */ @UiField protected CmsSelectBox m_selectTarget; /** Language direction select box. */ @UiField protected CmsSelectBox m_selectTextDirection; /** The form fields. */ private Map<Attribute, I_CmsFormWidget> m_fields; /** * The constructor.<p> */ public CmsImageAdvancedForm() { initWidget(m_uiBinder.createAndBindUi(this)); m_labelUrl.setText(Messages.get().key(Messages.GUI_ADVANCED_TAB_LABEL_URL_0)); m_labelTarget.setText(Messages.get().key(Messages.GUI_ADVANCED_TAB_LABEL_TARGET_0)); m_labelId.setText(Messages.get().key(Messages.GUI_ADVANCED_TAB_LABEL_ID_0)); m_labelStyleClasses.setText(Messages.get().key(Messages.GUI_ADVANCED_TAB_LABEL_STYLE_CLASSES_0)); m_labelStyle.setText(Messages.get().key(Messages.GUI_ADVANCED_TAB_LABEL_STYLE_RULES_0)); m_labelSetLink.setText(Messages.get().key(Messages.GUI_ADVANCED_TAB_LABEL_SET_LINK_0)); m_labelTagAttributes.setText(Messages.get().key(Messages.GUI_ADVANCED_TAB_LABEL_ATTRIBUTES_0)); m_labelDescription.setText(Messages.get().key(Messages.GUI_ADVANCED_TAB_LABEL_DESCRIPTION_0)); m_labelLanguageCode.setText(Messages.get().key(Messages.GUI_ADVANCED_TAB_LABEL_LANGUAGE_CODE_0)); m_labelTextDirection.setText(Messages.get().key(Messages.GUI_ADVANCED_TAB_LABEL_TEXT_DIRECTION_0)); m_selectTarget.addOption("", Messages.get().key(Messages.GUI_ADVANCED_TAB_VALUE_NOT_SET_0)); m_selectTarget.addOption("_blank", Messages.get().key(Messages.GUI_ADVANCED_TAB_VALUE_NEW_WINDOW_0)); m_selectTarget.addOption("_top", Messages.get().key(Messages.GUI_ADVANCED_TAB_VALUE_TOP_WINDOW_0)); m_selectTarget.addOption("_self", Messages.get().key(Messages.GUI_ADVANCED_TAB_VALUE_SELF_WINDOW_0)); m_selectTarget.addOption("_parent", Messages.get().key(Messages.GUI_ADVANCED_TAB_VALUE_PARENT_WINDOW_0)); m_selectTextDirection.addOption("ltr", Messages.get().key(Messages.GUI_ADVANCED_TAB_VALUE_LEFT_TO_RIGHT_0)); m_selectTextDirection.addOption("rtl", Messages.get().key(Messages.GUI_ADVANCED_TAB_VALUE_RIGHT_TO_LEFT_0)); m_inputUrl.setButtonSize(Size.small); m_inputUrl.addInputStyleName(I_CmsLayoutBundle.INSTANCE.imageAdvancedFormCss().input()); m_fields = new HashMap<Attribute, I_CmsFormWidget>(); m_fields.put(Attribute.linkTarget, m_selectTarget); m_fields.put(Attribute.dir, m_selectTextDirection); m_fields.put(Attribute.linkPath, m_inputUrl); m_fields.put(Attribute.longDesc, m_inputDescription); m_fields.put(Attribute.style, m_inputStyle); m_fields.put(Attribute.clazz, m_inputStyleClasses); m_fields.put(Attribute.id, m_inputId); m_fields.put(Attribute.lang, m_inputLanguageCode); } /** * Displays the provided image information.<p> * * @param imageInfo the image information * @param imageAttributes the image attributes * @param initialFill flag to indicate that a new image has been selected */ public void fillContent(CmsImageInfoBean imageInfo, CmsJSONMap imageAttributes, boolean initialFill) { for (Entry<Attribute, I_CmsFormWidget> entry : m_fields.entrySet()) { String val = imageAttributes.getString(entry.getKey().name()); if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(val)) { if ((entry.getKey() == Attribute.linkPath) && val.startsWith(CmsCoreProvider.get().getVfsPrefix())) { entry.getValue().setFormValueAsString(val.substring(CmsCoreProvider.get().getVfsPrefix().length())); } else { entry.getValue().setFormValueAsString(val); } } } } /** * Adds necessary attributes to the map.<p> * * @param attributes the attribute map * @return the attribute map */ public Map<String, String> getImageAttributes(Map<String, String> attributes) { for (Entry<Attribute, I_CmsFormWidget> entry : m_fields.entrySet()) { String val = entry.getValue().getFormValueAsString(); if (CmsStringUtil.isEmptyOrWhitespaceOnly(val)) { continue; } if (entry.getKey() == Attribute.linkPath) { attributes.put(entry.getKey().name(), CmsCoreProvider.get().substituteLinkForRootPath(val)); } else { attributes.put(entry.getKey().name(), val); } } return attributes; } }