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

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: FCKeditor.java
  12.  *  FCKeditor control class.
  13.  *
  14.  * Version:  2.2
  15.  * Modified: 2005-04-26 16:30:00
  16.  *
  17.  * File Authors:
  18.  *  Simone Chiaretta (simo@users.sourceforge.net)
  19.  */
  20. package com.fredck.FCKeditor;
  21. import javax.servlet.http.HttpServletRequest;
  22. /**
  23.  * The main class of the class lib.<br>
  24.  * It's the container for all properties and the class that generate the output based on browser capabilities and configurations passed by the developer.
  25.  *
  26.  * @author Simone Chiaretta (simo@users.sourceforge.net)
  27.  */
  28. public class FCKeditor {
  29.   private FCKeditorConfigurations oConfig;
  30.   private String instanceName;
  31.   private String value = "";
  32.   private String basePath;
  33.   private String toolbarSet = "Default";
  34.   private String width = "100%";
  35.   private String height = "200";
  36.   HttpServletRequest request;
  37.   /**
  38.    * Get the unique name of the editor
  39.    *
  40.    * @return name
  41.    */
  42.   public String getInstanceName() {
  43.     return instanceName;
  44.   }
  45.   /**
  46.    * Set the unique name of the editor
  47.    *
  48.    * @param value name
  49.    */
  50.   public void setInstanceName(String value) {
  51.     instanceName = value;
  52.   }
  53.   /**
  54.    * Get the initial value to be edited.<br>
  55.    * In HTML code
  56.    *
  57.    * @return value
  58.    */
  59.   public String getValue() {
  60.     return value;
  61.   }
  62.   /**
  63.    * Set the initial value to be edited.<br>
  64.    * In HTML code
  65.    *
  66.    * @param value value
  67.    */
  68.   public void setValue(String value) {
  69.     this.value = value;
  70.   }
  71.   /**
  72.    * Get the dir where the FCKeditor files reside on the server
  73.    *
  74.    * @return path
  75.    */
  76.   public String getBasePath() {
  77.     return basePath;
  78.   }
  79.   /**
  80.    * Set the dir where the FCKeditor files reside on the server.<br>
  81.    *<b>Remarks</b>:<br>
  82.    *Avoid using relative paths. It is preferable to set the base path starting from the root (/).<br>
  83.    *Always finish the path with a slash (/).
  84.    *
  85.    * @param value path
  86.    */
  87.   public void setBasePath(String value) {
  88.     basePath = value;
  89.   }
  90.   /**
  91.    * Get the name of the toolbar to display
  92.    *
  93.    * @return toolbar name
  94.    */
  95.   public String getToolbarSet() {
  96.     return toolbarSet;
  97.   }
  98.   /**
  99.    * Set the name of the toolbar to display
  100.    *
  101.    * @param value toolbar name
  102.    */
  103.   public void setToolbarSet(String value) {
  104.     toolbarSet = value;
  105.   }
  106.   /**
  107.    * Get the width of the textarea
  108.    *
  109.    * @return width
  110.    */
  111.   public String getWidth() {
  112.     return width;
  113.   }
  114.   /**
  115.    * Set the width of the textarea
  116.    *
  117.    * @param value width
  118.    */
  119.   public void setWidth(String value) {
  120.     width = value;
  121.   }
  122.   /**
  123.    * Get the height of the textarea
  124.    *
  125.    * @return height
  126.    */
  127.   public String getHeight() {
  128.     return height;
  129.   }
  130.   /**
  131.    * Set the height of the textarea
  132.    *
  133.    * @param value height
  134.    */
  135.   public void setHeight(String value) {
  136.     height = value;
  137.   }
  138.   /**
  139.    * Get the advanced configuation set.<br>
  140.    * Adding element to this collection you can override the settings specified in the config.js file.
  141.    *
  142.    * @return configuration collection
  143.    */
  144.   public FCKeditorConfigurations getConfig() {
  145.     return oConfig;
  146.   }
  147.   /**
  148.    * Set the advanced configuation set.
  149.    *
  150.    * @param value configuration collection
  151.    */
  152.   public void setConfig(FCKeditorConfigurations value) {
  153.     oConfig = value;
  154.   }
  155.   /**
  156.    * Initialize the object setting all value to the default ones.
  157.    * <p>
  158.    * <ul>
  159.    * <li>width: 100%</li>
  160.    * <li>height: 200</li>
  161.    * <li>toolbar name: Default</li>
  162.    * <li>basePath: context root + "/FCKeditor/"</li>
  163.    * </ul>
  164.    * </p>
  165.    *
  166.    * @param req request object
  167.    */
  168.   public FCKeditor(HttpServletRequest req) {
  169.     request = req;
  170.     basePath = request.getContextPath() + "/FCKeditor/";
  171.     oConfig = new FCKeditorConfigurations();
  172.   }
  173.   /**
  174.    * Initialize the object setting the unique name and then all value to the default ones.
  175.    * <p>
  176.    * <ul>
  177.    * <li>width: 100%</li>
  178.    * <li>height: 200</li>
  179.    * <li>toolbar name: Default</li>
  180.    * <li>basePath: context root + "/FCKeditor/"</li>
  181.    * </ul>
  182.    * </p>
  183.    *
  184.    * @param req request object
  185.    * @param parInstanceName unique name
  186.    */
  187.   public FCKeditor(HttpServletRequest req, String parInstanceName) {
  188.     request = req;
  189.     basePath = request.getContextPath() + "/FCKeditor/";
  190.     instanceName = parInstanceName;
  191.     oConfig = new FCKeditorConfigurations();
  192.   }
  193.   /**
  194.    * Initialize the object setting all basic configurations.<br>
  195.    *
  196.    * The basePath is context root + "/FCKeditor/"
  197.    *
  198.    * @param req request object
  199.    * @param parInstanceName unique name
  200.    * @param parWidth width
  201.    * @param parHeight height
  202.    * @param parToolbarSet toolbarSet name
  203.    * @param parValue initial value
  204.    */
  205.   public FCKeditor(HttpServletRequest req, String parInstanceName, String parWidth,
  206.                    String parHeight, String parToolbarSet, String parValue) {
  207.     request = req;
  208.     basePath = request.getContextPath() + "/FCKeditor/";
  209.     instanceName = parInstanceName;
  210.     width = parWidth;
  211.     height = parHeight;
  212.     toolbarSet = parToolbarSet;
  213.     value = parValue;
  214.     oConfig = new FCKeditorConfigurations();
  215.   }
  216.   private boolean isCompatible() {
  217.     String userAgent = request.getHeader("user-agent");
  218.     if (userAgent == null) {
  219.       return false;
  220.     }
  221.     userAgent = userAgent.toLowerCase();
  222.     if ( (userAgent.indexOf("msie") != -1) && (userAgent.indexOf("mac") == -1) &&
  223.         (userAgent.indexOf("opera") == -1)) {
  224.       if (retrieveBrowserVersion(userAgent) >= 5.5) {
  225.         return true;
  226.       }
  227.     }
  228.     else if (userAgent.indexOf("gecko") != -1) {
  229.       if (retrieveBrowserVersion(userAgent) >= 20030210) {
  230.         return true;
  231.       }
  232.     }
  233.     return false;
  234.   }
  235.   private double retrieveBrowserVersion(String userAgent) {
  236.     if (userAgent.indexOf("msie") > -1) {
  237.       String str = userAgent.substring(userAgent.indexOf("msie") + 5);
  238.       return Double.parseDouble(str.substring(0, str.indexOf(";")));
  239.     }
  240.     else {
  241.       String str = userAgent.substring(userAgent.indexOf("gecko") + 6);
  242.       return Double.parseDouble(str.substring(0, 8));
  243.     }
  244.   }
  245.   private String HTMLEncode(String txt) {
  246.     txt = txt.replaceAll("&", "&amp;");
  247.     txt = txt.replaceAll("<", "&lt;");
  248.     txt = txt.replaceAll(">", "&gt;");
  249.     txt = txt.replaceAll(""", "&quot;");
  250.     txt = txt.replaceAll("'", "&#146;");
  251.     return txt;
  252.   }
  253.   /**
  254.    * Generate the HTML Code for the editor.
  255.    * <br>
  256.    * Evalute the browser capabilities and generate the editor if IE 5.5 or Gecko 20030210 or greater,
  257.    * or a simple textarea otherwise.
  258.    *
  259.    * @return html code
  260.    */
  261.   public String create() {
  262.     StringBuffer strEditor = new StringBuffer();
  263.     strEditor.append("<div>");
  264.     String encodedValue = HTMLEncode(value);
  265.     if (isCompatible()) {
  266.       strEditor.append("<input type="hidden" id="" + instanceName + "" name="" + instanceName +
  267.                        "" value="" + encodedValue + "">");
  268.       strEditor.append(createConfigHTML());
  269.       strEditor.append(createIFrameHTML());
  270.     }
  271.     else {
  272.       strEditor.append("<TEXTAREA name="" + instanceName +
  273.                        "" rows="4" cols="40" style="WIDTH: " + width + "; HEIGHT: " + height +
  274.                        "" wrap="virtual">" + encodedValue + "</TEXTAREA>");
  275.     }
  276.     strEditor.append("</div>");
  277.     return strEditor.toString();
  278.   }
  279.   private String createConfigHTML() {
  280.     String configStr = oConfig.getUrlParams();
  281.     if (!configStr.equals("")) {
  282.       configStr = configStr.substring(1);
  283.     }
  284.     return "<input type="hidden" id="" + instanceName + "___Config" value="" + configStr +
  285.         "">";
  286.   }
  287.   private String createIFrameHTML() {
  288.     String sLink = basePath + "editor/fckeditor.html?InstanceName=" + instanceName;
  289.     if (!toolbarSet.equals("")) {
  290.       sLink += "&Toolbar=" + toolbarSet;
  291.     }
  292.     return "<iframe id="" + instanceName + "___Frame" src="" + sLink + "" width="" + width +
  293.         "" height="" + height + "" frameborder="no" scrolling="no"></iframe>";
  294.   }
  295. }