diff --git a/ccm-cms-types-glossaryitem/src/ccm-cms-types-glossaryitem.config b/ccm-cms-types-glossaryitem/src/ccm-cms-types-glossaryitem.config index adfdba100..512aee506 100755 --- a/ccm-cms-types-glossaryitem/src/ccm-cms-types-glossaryitem.config +++ b/ccm-cms-types-glossaryitem/src/ccm-cms-types-glossaryitem.config @@ -1,4 +1,5 @@ - + diff --git a/ccm-cms-types-glossaryitem/src/com/arsdigita/cms/contenttypes/GlossaryItem.java b/ccm-cms-types-glossaryitem/src/com/arsdigita/cms/contenttypes/GlossaryItem.java index 6fb69df89..63edb2da3 100755 --- a/ccm-cms-types-glossaryitem/src/com/arsdigita/cms/contenttypes/GlossaryItem.java +++ b/ccm-cms-types-glossaryitem/src/com/arsdigita/cms/contenttypes/GlossaryItem.java @@ -42,6 +42,14 @@ public class GlossaryItem extends ContentPage { /** Data object type for this domain object */ public static final String BASE_DATA_OBJECT_TYPE = "com.arsdigita.cms.contenttypes.GlossaryItem"; + + private static GlossaryItemConfig config = new GlossaryItemConfig(); + static { + config.load(); + } + public static GlossaryItemConfig getConfig() { + return config; + } public GlossaryItem() { this( BASE_DATA_OBJECT_TYPE ); diff --git a/ccm-cms-types-glossaryitem/src/com/arsdigita/cms/contenttypes/GlossaryItemConfig.java b/ccm-cms-types-glossaryitem/src/com/arsdigita/cms/contenttypes/GlossaryItemConfig.java new file mode 100644 index 000000000..da78a2fd3 --- /dev/null +++ b/ccm-cms-types-glossaryitem/src/com/arsdigita/cms/contenttypes/GlossaryItemConfig.java @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2009 Permeance Technologies Ptd Ltd. All Rights Reserved. + * + * 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. + * + * 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 com.arsdigita.cms.contenttypes; + +import com.arsdigita.runtime.AbstractConfig; +import com.arsdigita.util.parameter.EnumerationParameter; +import com.arsdigita.util.parameter.Parameter; +import com.arsdigita.util.parameter.StringParameter; + +/** + * Config options for GlossaryItem. + * @author timcarpenter + */ +public class GlossaryItemConfig extends AbstractConfig { + private final EnumerationParameter definitionEditorType; + private final Parameter fckEditorConfig; + + /** + * Enum of the types of editor that can be used. + */ + public enum EDITOR_TYPE { + WYSIWYG, + TEXT; + } + + public GlossaryItemConfig() { + definitionEditorType = new EnumerationParameter( + "com.arsdigita.cms.contenttypes.glossaryitem.definition.editor", + Parameter.REQUIRED, + EDITOR_TYPE.TEXT); + definitionEditorType.put(EDITOR_TYPE.WYSIWYG.name().toLowerCase(), + EDITOR_TYPE.WYSIWYG); + definitionEditorType.put(EDITOR_TYPE.TEXT.name().toLowerCase(), + EDITOR_TYPE.TEXT); + + fckEditorConfig = new StringParameter( + "com.arsdigita.cms.contenttypes.glossaryitem.fck_editor_config", + Parameter.REQUIRED, + "/assets/fckeditor/config/fckconfig_glossaryitem.js"); + + register(definitionEditorType); + register(fckEditorConfig); + + loadInfo(); + } + + public final EDITOR_TYPE getDefinitionEditorType() { + return ((EDITOR_TYPE) get(definitionEditorType)); + } + + public final String getFckEditorConfig() { + return (String) get(fckEditorConfig); + } +} diff --git a/ccm-cms-types-glossaryitem/src/com/arsdigita/cms/contenttypes/GlossaryItemConfig_parameter.properties b/ccm-cms-types-glossaryitem/src/com/arsdigita/cms/contenttypes/GlossaryItemConfig_parameter.properties new file mode 100644 index 000000000..1a3785a8c --- /dev/null +++ b/ccm-cms-types-glossaryitem/src/com/arsdigita/cms/contenttypes/GlossaryItemConfig_parameter.properties @@ -0,0 +1,9 @@ +com.arsdigita.cms.contenttypes.glossaryitem.definition.editor.title=Type of editor for the definition field +com.arsdigita.cms.contenttypes.glossaryitem.definition.editor.purpose=Choose the type of editor that should be used for the definition field +com.arsdigita.cms.contenttypes.glossaryitem.definition.editor.example=text +com.arsdigita.cms.contenttypes.glossaryitem.definition.editor.format=[text|wysiwyg] + +com.arsdigita.cms.contenttypes.glossaryitem.fck_editor_config.title=FCK Editor Config +com.arsdigita.cms.contenttypes.glossaryitem.fck_editor_config.purpose=Configuration JS for the FCK Editor +com.arsdigita.cms.contenttypes.glossaryitem.fck_editor_config.example=/assets/fckeditor/config/fckconfig_glossaryitem.js +com.arsdigita.cms.contenttypes.glossaryitem.fck_editor_config.format=[string] diff --git a/ccm-cms-types-glossaryitem/src/com/arsdigita/cms/contenttypes/GlossaryItemInitializer.java b/ccm-cms-types-glossaryitem/src/com/arsdigita/cms/contenttypes/GlossaryItemInitializer.java index 8897507c4..65789aafd 100755 --- a/ccm-cms-types-glossaryitem/src/com/arsdigita/cms/contenttypes/GlossaryItemInitializer.java +++ b/ccm-cms-types-glossaryitem/src/com/arsdigita/cms/contenttypes/GlossaryItemInitializer.java @@ -20,6 +20,7 @@ package com.arsdigita.cms.contenttypes; import org.apache.log4j.Logger; + /** * The CMS initializer. * @@ -27,10 +28,6 @@ import org.apache.log4j.Logger; * @version $Id: GlossaryItemInitializer.java 757 2005-09-02 14:12:21Z sskracic $ */ public class GlossaryItemInitializer extends ContentTypeInitializer { - public final static String versionId = - "$Id: GlossaryItemInitializer.java 757 2005-09-02 14:12:21Z sskracic $" + - "$Author: sskracic $" + - "$DateTime: 2004/08/17 23:15:09 $"; private static final Logger s_log = Logger.getLogger(GlossaryItemInitializer.class); diff --git a/ccm-cms-types-glossaryitem/src/com/arsdigita/cms/contenttypes/ui/GlossaryItemPropertyForm.java b/ccm-cms-types-glossaryitem/src/com/arsdigita/cms/contenttypes/ui/GlossaryItemPropertyForm.java index 9d0b8ac70..88b58b7cc 100755 --- a/ccm-cms-types-glossaryitem/src/com/arsdigita/cms/contenttypes/ui/GlossaryItemPropertyForm.java +++ b/ccm-cms-types-glossaryitem/src/com/arsdigita/cms/contenttypes/ui/GlossaryItemPropertyForm.java @@ -19,22 +19,14 @@ package com.arsdigita.cms.contenttypes.ui; import com.arsdigita.cms.contenttypes.GlossaryItem; -import com.arsdigita.cms.contenttypes.util.GlossaryGlobalizationUtil; import com.arsdigita.bebop.FormData; -import com.arsdigita.bebop.Label; import com.arsdigita.bebop.event.FormInitListener; import com.arsdigita.bebop.event.FormProcessListener; import com.arsdigita.bebop.event.FormSectionEvent; import com.arsdigita.bebop.event.FormSubmissionListener; -import com.arsdigita.bebop.form.TextArea; -import com.arsdigita.bebop.parameters.NotNullValidationListener; -import com.arsdigita.bebop.parameters.ParameterModel; -import com.arsdigita.bebop.parameters.ParameterModel; -import com.arsdigita.bebop.parameters.StringParameter; import com.arsdigita.cms.ItemSelectionModel; import com.arsdigita.cms.ui.authoring.BasicPageForm; - /** * Form to edit the basic properties of an GlossaryItem. This form can be * extended to create forms for GlossaryItem subclasses. @@ -50,7 +42,7 @@ public class GlossaryItemPropertyForm /** Name of this form */ public static final String ID = "GlossaryItem_edit"; - + /** * Creates a new form to edit the GlossaryItem object specified by the item * selection model passed in. @@ -82,16 +74,9 @@ public class GlossaryItemPropertyForm protected void addWidgets() { super.addWidgets(); - add( new Label(GlossaryGlobalizationUtil.globalize("cms.contenttypes.ui.glossary.definition") )); - ParameterModel definitionParam - = new StringParameter( DEFINITION ); - definitionParam - .addParameterListener( new NotNullValidationListener() ); - TextArea definition = new TextArea( definitionParam ); - definition.setCols( 40 ); - definition.setRows( 5 ); - add( definition ); - + GlossaryItemWidgetBuilder builder = new GlossaryItemWidgetBuilder(); + add(builder.makeDefinitionLabel()); + add(builder.makeDefinitionArea()); } /** Form initialisation hook. Fills widgets with data. */ diff --git a/ccm-cms-types-glossaryitem/src/com/arsdigita/cms/contenttypes/ui/GlossaryItemWidgetBuilder.java b/ccm-cms-types-glossaryitem/src/com/arsdigita/cms/contenttypes/ui/GlossaryItemWidgetBuilder.java new file mode 100644 index 000000000..9a7927a88 --- /dev/null +++ b/ccm-cms-types-glossaryitem/src/com/arsdigita/cms/contenttypes/ui/GlossaryItemWidgetBuilder.java @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2009 Permeance Technologies Ptd Ltd. All Rights Reserved. + * + * 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. + * + * 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 com.arsdigita.cms.contenttypes.ui; + +import com.arsdigita.bebop.Bebop; +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.form.DHTMLEditor; +import com.arsdigita.bebop.form.TextArea; +import com.arsdigita.bebop.parameters.NotNullValidationListener; +import com.arsdigita.bebop.util.BebopConstants; +import com.arsdigita.cms.contenttypes.GlossaryItem; +import com.arsdigita.cms.contenttypes.ui.authoring.GlossaryItemCreate; +import com.arsdigita.cms.contenttypes.util.GlossaryGlobalizationUtil; +import com.arsdigita.cms.ui.CMSDHTMLEditor; + +import static com.arsdigita.cms.contenttypes.ui.GlossaryItemPropertyForm.DEFINITION; + +/** + * Helps to build some of the widgets for {@link GlossaryItemPropertyForm} + * and {@link GlossaryItemCreate} + * @author timcarpenter + */ +public class GlossaryItemWidgetBuilder { + public TextArea makeDefinitionArea() { + TextArea definition = null; + switch (GlossaryItem.getConfig().getDefinitionEditorType()) { + case WYSIWYG: + definition = new CMSDHTMLEditor(DEFINITION); + ((CMSDHTMLEditor) definition).setWrap(DHTMLEditor.SOFT); + if (Bebop.getConfig().getDHTMLEditor() + .equals(BebopConstants.BEBOP_FCKEDITOR)) + { + ((CMSDHTMLEditor) definition).setConfig( + new DHTMLEditor.Config("glossaryitem", + GlossaryItem.getConfig().getFckEditorConfig())); + } else { + // remove this so end users cannot browse through back end + // folder system + ((CMSDHTMLEditor) definition).hideButton("insertlink"); + } + break; + default: + definition = new TextArea(DEFINITION); + definition.setWrap(TextArea.SOFT); + break; + } + + definition.addValidationListener(new NotNullValidationListener()); + definition.setCols(40); + definition.setRows(5); + return definition; + } + + public Label makeDefinitionLabel() { + return new Label(GlossaryGlobalizationUtil + .globalize("cms.contenttypes.ui.glossary.definition")); + } +} diff --git a/ccm-cms-types-glossaryitem/src/com/arsdigita/cms/contenttypes/ui/authoring/GlossaryItemCreate.java b/ccm-cms-types-glossaryitem/src/com/arsdigita/cms/contenttypes/ui/authoring/GlossaryItemCreate.java index a92a0f075..235c92be8 100755 --- a/ccm-cms-types-glossaryitem/src/com/arsdigita/cms/contenttypes/ui/authoring/GlossaryItemCreate.java +++ b/ccm-cms-types-glossaryitem/src/com/arsdigita/cms/contenttypes/ui/authoring/GlossaryItemCreate.java @@ -21,18 +21,14 @@ package com.arsdigita.cms.contenttypes.ui.authoring; import com.arsdigita.cms.contenttypes.GlossaryItem; import com.arsdigita.cms.Folder; import com.arsdigita.cms.ContentBundle; -import com.arsdigita.cms.ContentSection; import com.arsdigita.cms.ItemSelectionModel; import com.arsdigita.cms.ui.authoring.PageCreate; import com.arsdigita.cms.ui.authoring.CreationSelector; -import com.arsdigita.bebop.Label; -import com.arsdigita.bebop.form.TextArea; import com.arsdigita.bebop.event.FormSectionEvent; -import com.arsdigita.bebop.parameters.NotNullValidationListener; import com.arsdigita.bebop.FormProcessException; import com.arsdigita.bebop.FormData; import com.arsdigita.bebop.PageState; -import com.arsdigita.cms.contenttypes.util.GlossaryGlobalizationUtil; +import com.arsdigita.cms.contenttypes.ui.GlossaryItemWidgetBuilder; /* * A page that will create a new GlossaryItem. @@ -55,27 +51,20 @@ public class GlossaryItemCreate extends PageCreate { } protected void addWidgets() { - super.addWidgets(); - TextArea definition = new TextArea(DEFINITION); - definition.addValidationListener(new NotNullValidationListener()); - definition.setCols(40); - definition.setRows(5); - - add(new Label(GlossaryGlobalizationUtil.globalize("cms.contenttypes.ui.glossary.definition"))); - add(definition); + GlossaryItemWidgetBuilder builder = new GlossaryItemWidgetBuilder(); + add(builder.makeDefinitionLabel()); + add(builder.makeDefinitionArea()); } public void process(FormSectionEvent e) throws FormProcessException { FormData data = e.getFormData(); PageState state = e.getPageState(); - ItemSelectionModel m = getItemSelectionModel(); // Try to get the content section from the state parameter Folder f = m_parent.getFolder(state); - ContentSection sec = m_parent.getContentSection(state); GlossaryItem item = (GlossaryItem)createContentPage(state); item.setLanguage((String) data.get(LANGUAGE)); item.setName((String)data.get(NAME)); diff --git a/ccm-cms-types-glossaryitem/web/assets/fckeditor/config/fckconfig_glossaryitem.js b/ccm-cms-types-glossaryitem/web/assets/fckeditor/config/fckconfig_glossaryitem.js new file mode 100644 index 000000000..42f2219fe --- /dev/null +++ b/ccm-cms-types-glossaryitem/web/assets/fckeditor/config/fckconfig_glossaryitem.js @@ -0,0 +1,32 @@ +/* + * FCKeditor - The text editor for internet + * Copyright (C) 2003-2005 Frederico Caldeira Knabben + * + * Custom amendments for Forum application. + */ +FCKConfig.FillEmptyBlocks = false ; + +FCKConfig.ToolbarSets["Basic"] = [ + ['Source','-','Preview','-'], + ['Bold','Italic','Underline','StrikeThrough','-','Subscript','Superscript'], + ['Cut','Copy','Paste','PasteText','PasteWord','-','Print'], + '/', + ['OrderedList','UnorderedList','-','Outdent','Indent'], + ['Link','Unlink'], + ['Undo','Redo','-','SelectAll'], + ['TextColor','BGColor'], + ['Rule','SpecialChar','Smiley'], + '/', + ['FontFormat','FontName','FontSize'] +] ; + +//only licenced for private use +//FCKConfig.SpellChecker = 'ieSpell' ; // 'ieSpell' | 'SpellerPages' +//FCKConfig.IeSpellDownloadUrl = 'http://www.iespell.com/rel/ieSpellSetup211325.exe' ; + +FCKConfig.LinkUpload = false ; +FCKConfig.LinkBrowser = false ; // forum - don't allow users to browse content centre or server file system +FCKConfig.ImageBrowser = false ; +FCKConfig.FlashBrowser = false ; + +FCKConfig.SmileyImages = ['regular_smile.gif','sad_smile.gif','wink_smile.gif','teeth_smile.gif','confused_smile.gif','tounge_smile.gif','embaressed_smile.gif','omg_smile.gif','whatchutalkingabout_smile.gif','angry_smile.gif','angel_smile.gif','shades_smile.gif','devil_smile.gif','cry_smile.gif','lightbulb.gif','thumbs_down.gif','thumbs_up.gif','heart.gif','broken_heart.gif','kiss.gif','envelope.gif'] ;