FCKeditorTag.java
上传用户:wlfwy2004
上传日期:2016-12-12
资源大小:33978k
文件大小:20k
源码类别:

Jsp/Servlet

开发平台:

Java

  1. /*
  2.  * FCKeditor - The text editor for internet
  3.  * Copyright (C) 2003-2005 Frederico Caldeira Knabben
  4.  * 
  5.  * Licensed under the terms of the GNU Lesser General Public License:
  6.  *  http://www.opensource.org/licenses/lgpl-license.php
  7.  * 
  8.  * For further information visit:
  9.  *  http://www.fckeditor.net/
  10.  * 
  11.  * File Name: FCKeditorTag.java
  12.  *  FCKeditor tag library.
  13.  * 
  14.  * Version:  2.1
  15.  * Modified: 2005-03-29 21:30:00
  16.  * 
  17.  * File Authors:
  18.  *  Simone Chiaretta (simo@users.sourceforge.net)
  19.  */
  20.  
  21.  
  22. package com.fredck.FCKeditor.tags;
  23. import com.fredck.FCKeditor.FCKeditor;
  24. import java.io.IOException;
  25. import javax.servlet.http.HttpServletRequest;
  26. import javax.servlet.jsp.PageContext;
  27. import javax.servlet.jsp.JspException;
  28. import javax.servlet.jsp.JspWriter;
  29. import javax.servlet.jsp.JspTagException;
  30. import javax.servlet.jsp.tagext.BodyContent;
  31. import javax.servlet.jsp.tagext.BodyTagSupport;
  32. /**
  33.  * Custom Tag class to access the {@linkplain com.fredck.FCKeditor.FCKeditor container}.<br>
  34.  *<p>
  35.  * <b>Simple usage</b>:
  36.  * <pre>
  37.  * &lt;FCK:editor
  38.  * id="EditorAccessibility"
  39.  * width="80%"
  40.  * height="120"
  41.  * toolbarSet="Accessibility"
  42.  * "&gt;This is another test. &lt;BR&gt;&lt;BR&gt;The "Second" row.&lt;/BR&gt;&lt;/FCK:editor"&gt;
  43.  * </pre>
  44.  *
  45.  *<p>In this example we set all the attribute for the fckedit tag.
  46.  *
  47.  *<p>
  48.  *  <b>Advanced usage of the tag</b>:
  49.  *  <pre>
  50.  * &lt;FCK:editor id="EditorDefault" basePath="/FCKeditor/"
  51.  * styleNames=";Style 1;Style 2; Style 3" 
  52.  * fontNames=";Arial;Courier New;Times New Roman;Verdana" &gt;
  53.  * This is some &lt;B&gt;sample text&lt;/B&gt;.
  54.  * &lt;/FCK:editor&gt;
  55. *  </pre>
  56.  *<p>In this example we set the id and the basePath of the editor (since it is /FCKeditor/
  57.  * we could have omitted it because it's already the default value).<br>
  58.  * Then we used the the optional attributes to set some advanced configuration settings.
  59.  *
  60.  * @author Simone Chiaretta (simo@users.sourceforge.net)
  61.  */
  62. public class FCKeditorTag extends BodyTagSupport  {
  63. private String id;
  64. private String value = "";
  65. private String basePath = null;
  66. private String toolbarSet = null;
  67. private String width = null;
  68. private String height = null;
  69. private String customConfigurationsPath = null;
  70. private String editorAreaCSS = null;
  71. private String baseHref = null;
  72. private String skinPath = null;
  73. private String pluginsPath = null;
  74. private String fullPage = null;
  75. private String debug = null;
  76. private String autoDetectLanguage = null;
  77. private String defaultLanguage = null;
  78. private String contentLangDirection = null;
  79. private String enableXHTML = null;
  80. private String enableSourceXHTML = null;
  81. private String fillEmptyBlocks = null;
  82. private String formatSource = null;
  83. private String formatOutput = null;
  84. private String formatIndentator = null;
  85. private String geckoUseSPAN = null;
  86. private String startupFocus = null;
  87. private String forcePasteAsPlainText = null;
  88. private String forceSimpleAmpersand = null;
  89. private String tabSpaces = null;
  90. private String useBROnCarriageReturn = null;
  91. private String toolbarStartExpanded = null;
  92. private String toolbarCanCollapse = null;
  93. private String fontColors = null;
  94. private String fontNames = null;
  95. private String fontSizes = null;
  96. private String fontFormats = null;
  97. private String stylesXmlPath = null;
  98. private String linkBrowserURL = null;
  99. private String imageBrowserURL = null;
  100.    /**
  101.      * The underlying FCKeditor object
  102.      *
  103.      */
  104. protected FCKeditor fcked = null;
  105.     /**
  106.      * Set the unique id of the editor
  107.      *
  108.      * @param value name
  109.      */
  110. public void setId(String value) {
  111. id=value;
  112. }
  113.     /**
  114.      * Set the dir where the FCKeditor files reside on the server
  115.      *
  116.      * @param value path
  117.      */
  118. public void setBasePath(String value) {
  119. basePath=value;
  120. }
  121.     /**
  122.      * Set the name of the toolbar to display
  123.      *
  124.      * @param value toolbar name
  125.      */
  126. public void setToolbarSet(String value) {
  127. toolbarSet=value;
  128. }
  129.     /**
  130.      * Set the width of the textarea
  131.      *
  132.      * @param value width
  133.      */
  134. public void setWidth(String value) {
  135. width=value;
  136. }
  137.     /**
  138.      * Set the height of the textarea
  139.      *
  140.      * @param value height
  141.      */
  142. public void setHeight(String value) {
  143. height=value;
  144. }
  145. /**
  146.  * Set the path of a custom file that can override some configurations.<br>
  147.  * It is recommended to use absolute paths (starting with /), like "/myfckconfig.js".
  148.  *
  149.  * @param value path
  150.  */
  151. public void setCustomConfigurationsPath(String value) {
  152. customConfigurationsPath=value;
  153. }
  154. /**
  155.  * Set the CSS styles file to be used in the editing area.<br>
  156.  * In this way you can point to a file that reflects your web site styles.
  157.  *
  158.  * @param value path
  159.  */
  160. public void setEditorAreaCSS(String value) {
  161. editorAreaCSS=value;
  162. }
  163. /**
  164.  * Base URL used to resolve links (on images, links, styles, etc.).<br>
  165.  * For example, if BaseHref is set to 'http://www.fredck.com', an image that points to "/images/Logo.gif" will be interpreted by the editor as "http://www.fredck.com/images/Logo.gif", without touching the "src" attribute of the image.
  166.  *
  167.  * @param value URL
  168.  */
  169. public void setBaseHref(String value) {
  170. baseHref=value;
  171. }
  172. /**
  173.  * Sets the path to the skin (graphical interface settings) to be used by the editor.
  174.  *
  175.  * @param value path
  176.  */
  177. public void setSkinPath(String value) {
  178. skinPath=value;
  179. }
  180. /**
  181.  * Sets the base path used when looking for registered plugins.
  182.  *
  183.  * @param value path
  184.  */
  185. public void setPluginsPath(String value) {
  186. pluginsPath=value;
  187. }
  188. /**
  189.  * Enables full page editing (from &lt;HTML&gt; to &lt;/HTML&gt;).<br>
  190.  * It also enables the "Page Properties" toolbar button.
  191.  *
  192.  * @param value true/false
  193.  * @throws JspException if value is not true or false
  194.  */
  195. public void setFullPage(String value) throws JspException {
  196. if(! value.equals("true") && ! value.equals("false"))
  197. throw new JspException("fullPage attribute can only be true or false");
  198. fullPage=value;
  199. }
  200. /**
  201.  * Enables the debug window to be shown when calling the FCKDebug.Output() function.
  202.  *
  203.  * @param value true/false
  204.  * @throws JspException if value is not true or false
  205.  */
  206. public void setDebug(String value) throws JspException {
  207. if(! value.equals("true") && ! value.equals("false"))
  208. throw new JspException("debug attribute can only be true or false");
  209. debug=value;
  210. }
  211. /**
  212.  * Tells the editor to automatically detect the user language preferences to adapt its interface language.<br>
  213.  * With Internet Explorer, the language configured in the Windows Control Panel is used.<br>
  214.  * With Firefox, the browser language is used.
  215.  *
  216.  * @param value true/false
  217.  * @throws JspException if value is not true or false
  218.  */
  219. public void setAutoDetectLanguage(String value) throws JspException {
  220. if(! value.equals("true") && ! value.equals("false"))
  221. throw new JspException("autoDetectLanguage attribute can only be true or false: here was " + value);
  222. autoDetectLanguage=value;
  223. }
  224. /**
  225.  * Sets the default language used for the editor's interface localization.<br>
  226.  * The default language is used when the AutoDetectLanguage options is disabled or when the user language is not available.
  227.  *
  228.  * @param value language code
  229.  */
  230. public void setDefaultLanguage(String value) {
  231. defaultLanguage=value;
  232. }
  233. /**
  234.  * Sets the direction of the editor area contents.<br>
  235.  * The possible values are:
  236.  * <ul>
  237.      * <li>ltr - Left to Right
  238.      * <li>rtl - Right to Left
  239.      * </ul>
  240.  *
  241.  * @param value ltr/rtl
  242.  * @throws JspException if value is not ltr or rtl
  243.  */
  244. public void setContentLangDirection(String value) throws JspException {
  245. if(! value.equals("true") && ! value.equals("false"))
  246. throw new JspException("debug attribute can only be ltr or rtl");
  247. contentLangDirection=value;
  248. }
  249. /**
  250.  * Tells the editor to process the HTML source to XHTML on form post.
  251.  *
  252.  * @param value true/false
  253.  * @throws JspException if value is not true or false
  254.  */
  255. public void setEnableXHTML(String value) throws JspException {
  256. if(! value.equals("true") && ! value.equals("false"))
  257. throw new JspException("enableXHTML attribute can only be true or false");
  258. enableXHTML=value;
  259. }
  260. /**
  261.  * Tells the editor to process the HTML source to XHTML when switching from WYSIWYG to Source view
  262.  *
  263.  * @param value true/false
  264.  * @throws JspException if value is not true or false
  265.  */
  266. public void setEnableSourceXHTML(String value) throws JspException {
  267. if(! value.equals("true") && ! value.equals("false"))
  268. throw new JspException("enableSourceXHTML attribute can only be true or false");
  269. enableSourceXHTML=value;
  270. }
  271. /**
  272.  * Block elements (like P, DIV, H1, PRE, etc...) are forced to have content (a &amp;nbsp;).<br>
  273.  * Empty blocks are "collapsed" by while browsing, so a empty &lt;p&gt;&lt;/p&gt; is not visible.<br>
  274.  * While editing, the editor "expand" empty blocks so you can insert content inside then.<br>
  275.  * Setting this option to "true" results useful to reflect the same output when browsing and editing.
  276.  *
  277.  * @param value true/false
  278.  * @throws JspException if value is not true or false
  279.  */
  280. public void setFillEmptyBlocks(String value) throws JspException {
  281. if(! value.equals("true") && ! value.equals("false"))
  282. throw new JspException("fillEmptyBlocks attribute can only be true or false");
  283. fillEmptyBlocks=value;
  284. }
  285. /**
  286.  * The HTML shown by the editor, while switching from WYSIWYG to Source views, will be processed and formatted
  287.  *
  288.  * @param value true/false
  289.  * @throws JspException if value is not true or false
  290.  */
  291. public void setFormatSource(String value) throws JspException {
  292. if(! value.equals("true") && ! value.equals("false"))
  293. throw new JspException("formatSource attribute can only be true or false");
  294. formatSource=value;
  295. }
  296. /**
  297.  * The output HTML generated by the editor will be processed and formatted.
  298.  *
  299.  * @param value true/false
  300.  * @throws JspException if value is not true or false
  301.  */
  302. public void setFormatOutput(String value) throws JspException {
  303. if(! value.equals("true") && ! value.equals("false"))
  304. throw new JspException("formatOutput attribute can only be true or false");
  305. formatOutput=value;
  306. }
  307. /**
  308.  * Sets the characters to be used when indenting the HTML source when formatting it.<BR>
  309.  * Useful values are a sequence of spaces ('     ') or a tab char ('t').
  310.  *
  311.  * @param value indentator
  312.  */
  313. public void setFormatIndentator(String value) {
  314. formatIndentator=value;
  315. }
  316. /**
  317.  * Tells Gecko browsers to use SPAN instead of &lt;B&gt;, &lt;I&gt; and &lt;U&gt; for bold, italic an underline
  318.  *
  319.  * @param value true/false
  320.  * @throws JspException if value is not true or false
  321.  */
  322. public void setGeckoUseSPAN(String value) throws JspException {
  323. if(! value.equals("true") && ! value.equals("false"))
  324. throw new JspException("GeckoUseSPAN attribute can only be true or false");
  325. geckoUseSPAN=value;
  326. }
  327. /**
  328.  * Forces the editor to get the keyboard input focus on startup (page load)
  329.  *
  330.  * @param value true/false
  331.  * @throws JspException if value is not true or false
  332.  */
  333. public void setStartupFocus(String value) throws JspException {
  334. if(! value.equals("true") && ! value.equals("false"))
  335. throw new JspException("startupFocus attribute can only be true or false");
  336. startupFocus=value;
  337. }
  338. /**
  339.  * Converts the clipboard contents to pure text on pasting operations
  340.  *
  341.  * @param value true/false
  342.  * @throws JspException if value is not true or false
  343.  */
  344. public void setForcePasteAsPlainText(String value) throws JspException {
  345. if(! value.equals("true") && ! value.equals("false"))
  346. throw new JspException("forcePasteAsPlainText attribute can only be true or false");
  347. forcePasteAsPlainText=value;
  348. }
  349. /**
  350.  * Forces the ampersands (&) on tags attributes to not be converted to "&amp;amp;"<BR>
  351.  * This conversion is a W3C requirement for XHTML, so it is recommended to leave this option to "false".
  352.  *
  353.  * @param value true/false
  354.  * @throws JspException if value is not true or false
  355.  */
  356. public void setForceSimpleAmpersand(String value) throws JspException {
  357. if(! value.equals("true") && ! value.equals("false"))
  358. throw new JspException("forceSimpleAmpersand attribute can only be true or false");
  359. forceSimpleAmpersand=value;
  360. }
  361. /**
  362.  * Set the number of spaces (&amp;nbsp;) to be inserted when the user hits the "tab" key.<BR>
  363.  * This is an Internet Explorer only feature. Other browsers insert spaces automatically by default.
  364.  *
  365.  * @param value number of spaces
  366.  */
  367. public void setTabSpaces(String value) {
  368. tabSpaces=value;
  369. }
  370. /**
  371.  * Inserts a &lt;BR&gt; tag when the user hits the "enter" key, instead of starting a new paragraph (&lt;P&gt; or &lt;DIV&gt;).<BR>
  372.  * This is an Internet Explorer only feature. Other browsers insert the &lt;BR&gt; tag by default.
  373.  *
  374.  * @param value true/false
  375.  * @throws JspException if value is not true or false
  376.  */
  377. public void setUseBROnCarriageReturn(String value)  throws JspException {
  378. if(! value.equals("true") && ! value.equals("false"))
  379. throw new JspException("useBROnCarriageReturn attribute can only be true or false");
  380. useBROnCarriageReturn=value;
  381. }
  382. /**
  383.  * The toolbar is Expanded on startup, otherwise it is Collapsed and the user must click on it to show it.
  384.  *
  385.  * @param value true/false
  386.  * @throws JspException if value is not true or false
  387.  */
  388. public void setToolbarStartExpanded(String value)   throws JspException {
  389. if(! value.equals("true") && ! value.equals("false"))
  390. throw new JspException("ToolbarStartExpanded attribute can only be true or false");
  391. toolbarStartExpanded=value;
  392. }
  393. /**
  394.  * Tells the editor that the toolbar can be Collapsed/Expanded by the user when clicking the vertical bar placed on the left of it (on the right for "rtl" languages).
  395.  *
  396.  * @param value true/false
  397.  * @throws JspException if value is not true or false
  398.  */
  399. public void setToolbarCanCollapse(String value)    throws JspException {
  400. if(! value.equals("true") && ! value.equals("false"))
  401. throw new JspException("ToolbarCanCollapse attribute can only be true or false");
  402. toolbarCanCollapse=value;
  403. }
  404. /**
  405.  * Sets the colors that must be shown in the colors panels (in the toolbar).
  406.  *
  407.  * @param value colors
  408.  */
  409. public void setFontColors(String value) {
  410. fontColors=value;
  411. }
  412. /**
  413.  * Sets the list of fonts to be shown in the "Font" toolbar command.
  414.  *
  415.  * @param value fonts
  416.  */
  417. public void setFontNames(String value) {
  418. fontNames=value;
  419. }
  420. /**
  421.  * Sets the list of font sizes to be shown in the "Size" toolbar command.
  422.  *
  423.  * @param value sizes
  424.  */
  425. public void setFontSizes(String value) {
  426. fontSizes=value;
  427. }
  428. /**
  429.  * Sets the list of formats to be shown in the "Format" toolbar command.
  430.  *
  431.  * @param value format list
  432.  */
  433. public void setFontFormats(String value) {
  434. fontFormats=value;
  435. }
  436. /**
  437.  * Sets the path to the XML file that has the definitions and rules of the styles used by the "Style" toolbar command
  438.  *
  439.  * @param value path
  440.  */
  441. public void setStylesXmlPath(String value) {
  442. stylesXmlPath=value;
  443. }
  444. /**
  445.  * Sets the URL of the page called when the user clicks the "Browse Server" button in the "Link" dialog window.<BR>
  446.  * In this way, you can create your custom File Browser that is well integrated with your system.
  447.  *
  448.  * @param value path
  449.  */
  450. public void setLinkBrowserURL(String value) {
  451. linkBrowserURL=value;
  452. }
  453. /**
  454.  * Sets the URL of the page called when the user clicks the "Browse Server" button in the "Image" dialog window.<BR>
  455.  * In this way, you can create your custom Image Browser that is well integrated with your system.
  456.  *
  457.  * @param value path
  458.  */
  459. public void setImageBrowserURL(String value) {
  460. imageBrowserURL=value;
  461. }
  462. /**
  463.  * Initialize the FCKeditor container and set attributes
  464.  *
  465.  * @return EVAL_BODY_BUFFERED
  466.  */
  467. public int doStartTag() throws JspException {
  468. fcked=new FCKeditor((HttpServletRequest)pageContext.getRequest(),id);
  469. if(toolbarSet!=null)
  470. fcked.setToolbarSet(toolbarSet);
  471. if(basePath!=null)
  472. fcked.setBasePath(basePath);
  473. if(width!=null)
  474. fcked.setWidth(width);
  475. if(height!=null)
  476. fcked.setHeight(height);
  477. if (customConfigurationsPath != null)
  478. fcked.getConfig().put("CustomConfigurationsPath",customConfigurationsPath);
  479. if (editorAreaCSS != null)
  480. fcked.getConfig().put("EditorAreaCSS",editorAreaCSS);
  481. if (baseHref != null)
  482. fcked.getConfig().put("BaseHref",baseHref);
  483. if (skinPath != null)
  484. fcked.getConfig().put("SkinPath",skinPath);
  485. if (pluginsPath != null)
  486. fcked.getConfig().put("PluginsPath",pluginsPath);
  487. if (fullPage != null)
  488. fcked.getConfig().put("FullPage",fullPage);
  489. if (debug != null)
  490. fcked.getConfig().put("Debug",debug);
  491. if (autoDetectLanguage != null)
  492. fcked.getConfig().put("AutoDetectLanguage",autoDetectLanguage);
  493. if (defaultLanguage != null)
  494. fcked.getConfig().put("DefaultLanguage",defaultLanguage);
  495. if (contentLangDirection != null)
  496. fcked.getConfig().put("ContentLangDirection",contentLangDirection);
  497. if (enableXHTML != null)
  498. fcked.getConfig().put("EnableXHTML",enableXHTML);
  499. if (enableSourceXHTML != null)
  500. fcked.getConfig().put("EnableSourceXHTML",enableSourceXHTML);
  501. if (fillEmptyBlocks != null)
  502. fcked.getConfig().put("FillEmptyBlocks",fillEmptyBlocks);
  503. if (formatSource != null)
  504. fcked.getConfig().put("FormatSource",formatSource);
  505. if (formatOutput != null)
  506. fcked.getConfig().put("FormatOutput",formatOutput);
  507. if (formatIndentator != null)
  508. fcked.getConfig().put("FormatIndentator",formatIndentator);
  509. if (geckoUseSPAN != null)
  510. fcked.getConfig().put("GeckoUseSPAN",geckoUseSPAN);
  511. if (startupFocus != null)
  512. fcked.getConfig().put("StartupFocus",startupFocus);
  513. if (forcePasteAsPlainText != null)
  514. fcked.getConfig().put("ForcePasteAsPlainText",forcePasteAsPlainText);
  515. if (forceSimpleAmpersand != null)
  516. fcked.getConfig().put("ForceSimpleAmpersand",forceSimpleAmpersand);
  517. if (tabSpaces != null)
  518. fcked.getConfig().put("TabSpaces",tabSpaces);
  519. if (useBROnCarriageReturn != null)
  520. fcked.getConfig().put("UseBROnCarriageReturn",useBROnCarriageReturn);
  521. if (toolbarStartExpanded != null)
  522. fcked.getConfig().put("ToolbarStartExpanded",toolbarStartExpanded);
  523. if (toolbarCanCollapse != null)
  524. fcked.getConfig().put("ToolbarCanCollapse",toolbarCanCollapse);
  525. if (fontColors != null)
  526. fcked.getConfig().put("FontColors",fontColors);
  527. if (fontNames != null)
  528. fcked.getConfig().put("FontNames",fontNames);
  529. if (fontSizes != null)
  530. fcked.getConfig().put("FontSizes",fontSizes);
  531. if (fontFormats != null)
  532. fcked.getConfig().put("FontFormats",fontFormats);
  533. if (stylesXmlPath != null)
  534. fcked.getConfig().put("StylesXmlPath",stylesXmlPath);
  535. if (linkBrowserURL != null)
  536. fcked.getConfig().put("LinkBrowserURL",linkBrowserURL);
  537. if (imageBrowserURL != null)
  538. fcked.getConfig().put("ImageBrowserURL",imageBrowserURL);
  539.  return EVAL_BODY_BUFFERED;
  540. }
  541. /**
  542.  * Retrive initial value to be edited and writes the HTML code in the page
  543.  *
  544.  * @return SKIP_BODY
  545.  * @throws JspException if an error occurs while writing to the out buffer
  546.  */
  547. public int doAfterBody()  throws JspException {
  548. BodyContent body = getBodyContent();
  549. JspWriter writer = body.getEnclosingWriter();
  550. String bodyString = body.getString();
  551. fcked.setValue(bodyString);
  552. try {
  553. writer.println(fcked.create());
  554. }catch(IOException ioe) {
  555. throw new JspException("Error: IOException while writing to the user");
  556. }
  557. return SKIP_BODY;
  558. }
  559. }