Author: pyaschenko
Date: 2008-11-14 07:33:56 -0500 (Fri, 14 Nov 2008)
New Revision: 11167
Modified:
trunk/sandbox/samples/editor-sample/src/main/java/org/richfaces/EditorBean.java
trunk/sandbox/samples/editor-sample/src/main/resources/editorFull.properties
trunk/sandbox/samples/editor-sample/src/main/webapp/pages/editor.jsp
trunk/sandbox/ui/editor/src/main/config/component/editor.xml
trunk/sandbox/ui/editor/src/main/java/org/richfaces/component/UIEditor.java
trunk/sandbox/ui/editor/src/main/java/org/richfaces/renderkit/EditorRendererBase.java
trunk/sandbox/ui/editor/src/main/resources/org/richfaces/renderkit/html/scripts/tiny_mce/themes/simple/skins/richfaces/content.xcss
trunk/sandbox/ui/editor/src/main/resources/org/richfaces/renderkit/html/scripts/tiny_mce/themes/simple/skins/richfaces/ui.xcss
trunk/sandbox/ui/editor/src/main/resources/org/richfaces/renderkit/html/scripts/tiny_mce/tiny_mce_src.js
trunk/sandbox/ui/editor/src/main/templates/editor.jspx
Log:
custom plugins support && sample
Modified: trunk/sandbox/samples/editor-sample/src/main/java/org/richfaces/EditorBean.java
===================================================================
---
trunk/sandbox/samples/editor-sample/src/main/java/org/richfaces/EditorBean.java 2008-11-14
12:32:39 UTC (rev 11166)
+++
trunk/sandbox/samples/editor-sample/src/main/java/org/richfaces/EditorBean.java 2008-11-14
12:33:56 UTC (rev 11167)
@@ -10,6 +10,11 @@
private String value = "Some value....";
private UIEditor editor;
private boolean rendered = true;
+ private String theme = "advanced";
+ private String skin = "richfaces";
+ private String language = "en";
+ private boolean readonly = false;
+ private String viewMode = "vision";
private Map<String, Object> dataMap;
@@ -67,6 +72,46 @@
public void setRendered(boolean rendered) {
this.rendered = rendered;
}
+
+ public String getTheme() {
+ return theme;
+ }
+
+ public void setTheme(String theme) {
+ this.theme = theme;
+ }
+
+ public String getSkin() {
+ return skin;
+ }
+
+ public void setSkin(String skin) {
+ this.skin = skin;
+ }
+
+ public String getLanguage() {
+ return language;
+ }
+
+ public void setLanguage(String language) {
+ this.language = language;
+ }
+
+ public boolean isReadonly() {
+ return readonly;
+ }
+
+ public void setReadonly(boolean readonly) {
+ this.readonly = readonly;
+ }
+
+ public String getViewMode() {
+ return viewMode;
+ }
+
+ public void setViewMode(String viewMode) {
+ this.viewMode = viewMode;
+ }
}
Modified: trunk/sandbox/samples/editor-sample/src/main/resources/editorFull.properties
===================================================================
---
trunk/sandbox/samples/editor-sample/src/main/resources/editorFull.properties 2008-11-14
12:32:39 UTC (rev 11166)
+++
trunk/sandbox/samples/editor-sample/src/main/resources/editorFull.properties 2008-11-14
12:33:56 UTC (rev 11167)
@@ -7,5 +7,4 @@
theme_advanced_toolbar_location = "top"
theme_advanced_toolbar_align = "left"
theme_advanced_statusbar_location = "bottom"
-theme_advanced_resizing = true
-skin = "richfaces"
\ No newline at end of file
+theme_advanced_resizing = true
\ No newline at end of file
Modified: trunk/sandbox/samples/editor-sample/src/main/webapp/pages/editor.jsp
===================================================================
--- trunk/sandbox/samples/editor-sample/src/main/webapp/pages/editor.jsp 2008-11-14
12:32:39 UTC (rev 11166)
+++ trunk/sandbox/samples/editor-sample/src/main/webapp/pages/editor.jsp 2008-11-14
12:33:56 UTC (rev 11167)
@@ -30,13 +30,46 @@
height="400"
rendered="#{editorBean.rendered}"
binding="#{editorBean.editor}"
- theme="advanced"
- language="en"
-
plugins="safari,spellchecker,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,myemotions"
+ theme="#{editorBean.theme}"
+ language="#{editorBean.language}"
configuration="editorFull"
- skin="richfaces"
+ skin="#{editorBean.skin}"
customPlugins="myplugins"
- />
+ readonly="#{editorBean.readonly}"
+ viewMode="#{editorBean.viewMode}"
+
plugins="safari,spellchecker,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,myemotions"
+ >
+ </ed:editor>
+
+ <hr/>
+ <h:panelGrid columns="2">
+ <h:outputText value="Select theme:" />
+ <h:selectOneRadio onchange="submit()"
value="#{editorBean.theme}">
+ <f:selectItem itemLabel="simple" itemValue="simple"/>
+ <f:selectItem itemLabel="advanced"
itemValue="advanced"/>
+ </h:selectOneRadio>
+ <h:outputText value="Select skin:" />
+ <h:selectOneRadio onchange="submit()"
value="#{editorBean.skin}">
+ <f:selectItem itemLabel="default" itemValue="default"/>
+ <f:selectItem itemLabel="o2k7" itemValue="o2k7"/>
+ <f:selectItem itemLabel="richfaces"
itemValue="richfaces"/>
+ </h:selectOneRadio>
+ <h:outputText value="Select language:" />
+ <h:selectOneRadio onchange="submit()"
value="#{editorBean.language}">
+ <f:selectItem itemLabel="default" itemValue="default"/>
+ <f:selectItem itemLabel="o2k7" itemValue="o2k7"/>
+ <f:selectItem itemLabel="richfaces"
itemValue="richfaces"/>
+ </h:selectOneRadio>
+ <h:outputText value="Is readonly:" />
+ <h:selectBooleanCheckbox value="#{editorBean.readonly}"
onclick="submit()">
+ </h:selectBooleanCheckbox>
+ <h:outputText value="View mode:" />
+ <h:selectOneRadio onchange="submit()"
value="#{editorBean.viewMode}">
+ <f:selectItem itemLabel="vision" itemValue="vision"/>
+ <f:selectItem itemLabel="source" itemValue="source"/>
+ </h:selectOneRadio>
+ </h:panelGrid>
+ <hr/>
<h:outputText value="Editor value: #{editorBean.value}" />
<br/>
Modified: trunk/sandbox/ui/editor/src/main/config/component/editor.xml
===================================================================
--- trunk/sandbox/ui/editor/src/main/config/component/editor.xml 2008-11-14 12:32:39 UTC
(rev 11166)
+++ trunk/sandbox/ui/editor/src/main/config/component/editor.xml 2008-11-14 12:33:56 UTC
(rev 11167)
@@ -148,6 +148,13 @@
Attribute defines configuration properties file name
</description>
</property>
+ <property>
+ <name>customplugins</name>
+ <classname>java.lang.String</classname>
+ <description>
+ Attribute defines property file name witch contains descriptors of custom plugins
+ </description>
+ </property>
<property hidden="true">
<name>localValueSet</name>
<classname>boolean</classname>
Modified: trunk/sandbox/ui/editor/src/main/java/org/richfaces/component/UIEditor.java
===================================================================
--- trunk/sandbox/ui/editor/src/main/java/org/richfaces/component/UIEditor.java 2008-11-14
12:32:39 UTC (rev 11166)
+++ trunk/sandbox/ui/editor/src/main/java/org/richfaces/component/UIEditor.java 2008-11-14
12:33:56 UTC (rev 11167)
@@ -105,6 +105,10 @@
public abstract String getConfiguration();
+ public abstract String getCustomPlugins();
+
+ public abstract void setCustomPlugins(String customplugins);
+
public abstract void setSkin(String skin);
public abstract String getSkin();
Modified:
trunk/sandbox/ui/editor/src/main/java/org/richfaces/renderkit/EditorRendererBase.java
===================================================================
---
trunk/sandbox/ui/editor/src/main/java/org/richfaces/renderkit/EditorRendererBase.java 2008-11-14
12:32:39 UTC (rev 11166)
+++
trunk/sandbox/ui/editor/src/main/java/org/richfaces/renderkit/EditorRendererBase.java 2008-11-14
12:33:56 UTC (rev 11167)
@@ -108,7 +108,7 @@
}
return suffix;
}
-
+
public void writeEditorConfigurationParameters(FacesContext context,
UIEditor component) throws IOException {
ResponseWriter writer = context.getResponseWriter();
@@ -129,7 +129,7 @@
+ "' was not found in class path");
}
parameters.load(is);
- writer.writeText(convertProperties(parameters), null);
+ writer.writeText(this.convertProperties(parameters), null);
writer.writeText(";\n", null);
} catch (IOException e) {
throw new FacesException(e);
@@ -139,7 +139,36 @@
writer.writeText("{};\n", null);
}
}
+
+ public void writeEditorCustomPluginsParameters(FacesContext context,
+ UIEditor component) throws IOException {
+ ResponseWriter writer = context.getResponseWriter();
+ String configName = component.getCustomPlugins();
+ if (configName != null) {
+ Properties parameters = new Properties();
+ try {
+ ClassLoader loader = Thread.currentThread()
+ .getContextClassLoader();
+ InputStream is = loader.getResourceAsStream(configName
+ + ".properties");
+ if (is == null) {
+ throw new FacesException(
+ "Editor configuration properties file with name '"
+ + configName
+ + "' was not found in class path");
+ }
+ parameters.load(is);
+ writer.writeText("\n", null);
+ writer.writeText(this.getCustomPluginsCode(context, parameters), null);
+ writer.writeText("\n", null);
+ } catch (IOException e) {
+ throw new FacesException(e);
+ }
+
+ }
+ }
+
@SuppressWarnings("unchecked")
private String convertProperties(Map map) {
StringBuilder ret = new StringBuilder("{");
@@ -159,6 +188,22 @@
return ret.append("} ").toString();
}
+ @SuppressWarnings("unchecked")
+ private String getCustomPluginsCode(FacesContext context, Map map) {
+ StringBuilder ret = new StringBuilder();
+ for (Iterator<Map.Entry<Object, Object>> iter = map.entrySet()
+ .iterator(); iter.hasNext();) {
+ Map.Entry<Object, Object> entry = iter.next();
+
+ ret.append("tinymce.PluginManager.load('");
+ ret.append(entry.getKey());
+ ret.append("','");
+ ret.append(context.getExternalContext().getRequestContextPath()+entry.getValue());
+ ret.append("',null,{richfaces:true});");
+ }
+ return ret.toString();
+ }
+
public void writeEditorConfigurationAttributes(FacesContext context,
UIEditor component) throws IOException {
ResponseWriter writer = context.getResponseWriter();
Modified:
trunk/sandbox/ui/editor/src/main/resources/org/richfaces/renderkit/html/scripts/tiny_mce/themes/simple/skins/richfaces/content.xcss
===================================================================
---
trunk/sandbox/ui/editor/src/main/resources/org/richfaces/renderkit/html/scripts/tiny_mce/themes/simple/skins/richfaces/content.xcss 2008-11-14
12:32:39 UTC (rev 11166)
+++
trunk/sandbox/ui/editor/src/main/resources/org/richfaces/renderkit/html/scripts/tiny_mce/themes/simple/skins/richfaces/content.xcss 2008-11-14
12:33:56 UTC (rev 11167)
@@ -4,23 +4,37 @@
xmlns="http://www.w3.org/1999/xhtml" >
<f:verbatim><![CDATA[
-body, td, pre {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}
-body {background: #FFF;}
-.mceVisualAid {border: 1px dashed #BBB;}
+]]>
+</f:verbatim>
+<u:selector name="body, td, pre">
+ <u:style name="color" skin="generalTextColor"/>
+ <u:style name="font-family" skin="generalFamilyFont"/>
+ <u:style name="font-size" value="10px"/>
+</u:selector>
+
+<u:selector name="body">
+ <u:style name="background" skin="tableBackgroundColor"/>
+</u:selector>
+
+<u:selector name=".mceVisualAid">
+ <u:style name="border-color" value="#BBB"/>
+ <u:style name="border-style" value="dashed"/>
+ <u:style name="border-width" value="1px"/>
+</u:selector>
+
/* IE */
-* html body {
-scrollbar-3dlight-color: #F0F0EE;
-scrollbar-arrow-color: #676662;
-scrollbar-base-color: #F0F0EE;
-scrollbar-darkshadow-color: #DDDDDD;
-scrollbar-face-color: #E0E0DD;
-scrollbar-highlight-color: #F0F0EE;
-scrollbar-shadow-color: #F0F0EE;
-scrollbar-track-color: #F5F5F5;
-}
-]]>
-</f:verbatim>
+<u:selector name="* html body">
+ <u:style name="scrollbar-3dlight-color" value="#F0F0EE"/>
+ <u:style name="scrollbar-arrow-color" value="#676662"/>
+ <u:style name="scrollbar-base-color" value="#F0F0EE"/>
+ <u:style name="scrollbar-darkshadow-color" value="#DDD"/>
+ <u:style name="scrollbar-face-color" value="#E0E0DD"/>
+ <u:style name="scrollbar-highlight-color" value="#F0F0EE"/>
+ <u:style name="scrollbar-shadow-color" value="#F0F0EE"/>
+ <u:style name="scrollbar-track-color" value="#F5F5F5"/>
+</u:selector>
+
</f:template>
Modified:
trunk/sandbox/ui/editor/src/main/resources/org/richfaces/renderkit/html/scripts/tiny_mce/themes/simple/skins/richfaces/ui.xcss
===================================================================
---
trunk/sandbox/ui/editor/src/main/resources/org/richfaces/renderkit/html/scripts/tiny_mce/themes/simple/skins/richfaces/ui.xcss 2008-11-14
12:32:39 UTC (rev 11166)
+++
trunk/sandbox/ui/editor/src/main/resources/org/richfaces/renderkit/html/scripts/tiny_mce/themes/simple/skins/richfaces/ui.xcss 2008-11-14
12:33:56 UTC (rev 11167)
@@ -3,42 +3,75 @@
xmlns:u='http:/jsf.exadel.com/template/util'
xmlns="http://www.w3.org/1999/xhtml" >
-<f:verbatim><![CDATA[
/* Reset */
-.richfacesSimpleSkin table, .richfacesSimpleSkin tbody, .richfacesSimpleSkin a,
.richfacesSimpleSkin img, .richfacesSimpleSkin tr, .richfacesSimpleSkin div,
.richfacesSimpleSkin td, .richfacesSimpleSkin iframe, .richfacesSimpleSkin span,
.richfacesSimpleSkin * {border:0; margin:0; padding:0; background:transparent;
white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000}
+<u:selector name=".richfacesSimpleSkin table, .richSimplefacesSkin tbody,
.richfacesSimpleSkin a, .richfacesSimpleSkin img, .richfacesSimpleSkin tr,
.richfacesSimpleSkin div, .richfacesSimpleSkin td, .richfacesSimpleSkin iframe,
.richfacesSimpleSkin span, .richfacesSimpleSkin *">
+ <u:style name="color" skin="generalTextColor"/>
+ <u:style name="border" value="0"/>
+ <u:style name="margin" value="0"/>
+ <u:style name="padding" value="0"/>
+ <u:style name="background" value="transparent"/>
+ <u:style name="white-space" value="nowrap"/>
+ <u:style name="text-decoration" value="none"/>
+ <u:style name="font-weight" value="normal"/>
+ <u:style name="cursor" value="default"/>
+</u:selector>
+
+<f:verbatim><![CDATA[
/* Containers */
.richfacesSimpleSkin {position:relative}
-.richfacesSimpleSkin table.mceLayout {background:#E5EFFD; border:1px solid #ABC6DD;}
-.richfacesSimpleSkin iframe {display:block; background:#FFF; border-bottom:1px solid
#ABC6DD;}
+]]>
+</f:verbatim>
+
+<u:selector name=".richfacesSimpleSkin table.mceLayout">
+ <u:style name="border-width" value="1"/>
+ <u:style name="border-style" value="solid"/>
+ <u:style name="border-color" skin="panelBorderColor"/>
+ <u:style name="background" skin="additionalBackgroundColor"/>
+</u:selector>
+
+<u:selector name=".richfacesSimpleSkin iframe">
+ <u:style name="display" value="block"/>
+ <u:style name="background" skin="tableBackgroundColor"/>
+ <u:style name="border-bottom-width" value="1"/>
+ <u:style name="border-bottom-style" value="solid"/>
+ <u:style name="border-bottom-color" skin="panelBorderColor"/>
+</u:selector>
+
+<f:verbatim><![CDATA[
.richfacesSimpleSkin .mceToolbar {height:26px;}
/* Layout */
.richfacesSimpleSkin .mceToolbar .mceToolbarStart span {display:block; width:1px;
height:22px; }
]]>
</f:verbatim>
+
<u:selector name=".richfacesSimpleSkin .mceToolbar .mceToolbarStart
span">
<u:style name="background-image">
<f:resource
f:key="/org/richfaces/renderkit/html/scripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png"/>
</u:style>
<u:style name="background-position" value="-22px 0"/>
</u:selector>
+
<f:verbatim>
<![CDATA[
.richfacesSimpleSkin .mceToolbar .mceToolbarEnd span {display:block; width:1px;
height:22px}
]]>
</f:verbatim>
+
<u:selector name=".richfacesSimpleSkin .mceToolbar .mceToolbarEnd span">
<u:style name="background-image">
<f:resource
f:key="/org/richfaces/renderkit/html/scripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png"/>
</u:style>
<u:style name="background-position" value="-22px 0"/>
</u:selector>
+
<f:verbatim>
<![CDATA[
.richfacesSimpleSkin span.mceIcon, .richfacesSimpleSkin img.mceIcon {display:block;
width:20px; height:20px}
]]>
</f:verbatim>
+
<u:selector name=".richfacesSimpleSkin .mceIcon">
<u:style name="background-image">
<f:resource
f:key="/org/richfaces/renderkit/html/scripts/tiny_mce/themes/simple/img/icons.gif"/>
@@ -46,6 +79,7 @@
<u:style name="background-repeat" value="no-repeat"/>
<u:style name="background-position" value="20px 20px"/>
</u:selector>
+
<f:verbatim>
<![CDATA[
@@ -53,15 +87,26 @@
.richfacesSimpleSkin .mceButton {display:block; width:22px; height:22px}
]]>
</f:verbatim>
+
<u:selector name=".richfacesSimpleSkin .mceButton">
<u:style name="background-image">
<f:resource
f:key="/org/richfaces/renderkit/html/scripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png"/>
</u:style>
</u:selector>
+
<f:verbatim>
<![CDATA[
.richfacesSimpleSkin a.mceButton span, .richfacesSimpleSkin a.mceButton img {margin:1px 0
0 1px}
-.richfacesSimpleSkin a.mceButtonEnabled:hover {background-color:#B2BBD0;
background-position:0 -22px}
+]]>
+</f:verbatim>
+
+<u:selector name=".richfacesSimpleSkin a.mceButtonEnabled:hover">
+ <u:style name="background-color" value="#B2BBD0"/>
+ <u:style name="background-position" value="0 -22px"/>
+</u:selector>
+
+<f:verbatim>
+<![CDATA[
.richfacesSimpleSkin a.mceButtonActive {background-position:0 -44px}
.richfacesSimpleSkin .mceButtonDisabled span {opacity:0.3; filter:alpha(opacity=30)}
@@ -69,12 +114,14 @@
.richfacesSimpleSkin .mceSeparator {display:block; width:5px; height:22px}
]]>
</f:verbatim>
+
<u:selector name=".richfacesSimpleSkin .mceSeparator">
<u:style name="background-image">
<f:resource
f:key="/org/richfaces/renderkit/html/scripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png"/>
</u:style>
<u:style name="background-position" value="-22px 0"/>
</u:selector>
+
<f:verbatim>
<![CDATA[
@@ -90,4 +137,5 @@
.richfacesSimpleSkin span.mce_insertorderedlist {background-position:-80px 0}
]]>
</f:verbatim>
+
</f:template>
Modified:
trunk/sandbox/ui/editor/src/main/resources/org/richfaces/renderkit/html/scripts/tiny_mce/tiny_mce_src.js
===================================================================
---
trunk/sandbox/ui/editor/src/main/resources/org/richfaces/renderkit/html/scripts/tiny_mce/tiny_mce_src.js 2008-11-14
12:32:39 UTC (rev 11166)
+++
trunk/sandbox/ui/editor/src/main/resources/org/richfaces/renderkit/html/scripts/tiny_mce/tiny_mce_src.js 2008-11-14
12:33:56 UTC (rev 11167)
@@ -410,8 +410,11 @@
// RF: added by PY
var isCSS = false;
- u = u.replace(Richfaces.Editor.REGEXP_CSS, function($1,$2,$3){isCSS=true; return
$2+($3=='c' ? "xcss":"XCSS");});
- if (Richfaces && Richfaces.Editor) u += (isCSS ? Richfaces.Editor.extCssSuffix
: Richfaces.Editor.extScriptSuffix);
+ if (u.indexOf(tinymce.baseURL)==0)
+ {
+ u = u.replace(Richfaces.Editor.REGEXP_CSS, function($1,$2,$3){isCSS=true; return
$2+($3=='c' ? "xcss":"XCSS");});
+ if (Richfaces && Richfaces.Editor) u += (isCSS ?
Richfaces.Editor.extCssSuffix : Richfaces.Editor.extScriptSuffix);
+ }
// RF: end
if (!this.query)
Modified: trunk/sandbox/ui/editor/src/main/templates/editor.jspx
===================================================================
--- trunk/sandbox/ui/editor/src/main/templates/editor.jspx 2008-11-14 12:32:39 UTC (rev
11166)
+++ trunk/sandbox/ui/editor/src/main/templates/editor.jspx 2008-11-14 12:33:56 UTC (rev
11167)
@@ -27,12 +27,12 @@
</textarea>
<script type="text/javascript">
+ <f:call name="writeEditorCustomPluginsParameters" />
<f:call name="writeEditorConfigurationParameters" />
<f:call name="writeEditorConfigurationAttributes" />
<f:call name="writeEditorParameters" />
- var richParams =
{extScriptSuffix:'#{this:getSriptMappingSuffix(context)}',
- extCssSuffix:'#{this:getCssMappingSuffix(context)}'}
+ var richParams =
{extScriptSuffix:'#{this:getSriptMappingSuffix(context)}',
extCssSuffix:'#{this:getCssMappingSuffix(context)}'}
new RichEditor('#{clientId}', richParams, tinyMceParams);
</script>