/*
* Copyright (C) 2010---2014 星星(wuweixing)<349446658@qq.com>
*
* This file is part of Wabacus
*
* Wabacus 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 3 of the License, or
* (at your option) any later version.
*
* This program 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 program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.wabacus.system.inputbox;
import java.util.HashMap;
import java.util.Map;
import com.wabacus.config.Config;
import com.wabacus.config.xml.XmlElementBean;
import com.wabacus.system.ReportRequest;
import com.wabacus.util.Consts_Private;
import com.wabacus.util.RegexTools;
import com.wabacus.util.Tools;
public class RichTextBox extends AbsInputBox
{
public RichTextBox(String typename)
{
super(typename);
}
protected String doGetDisplayStringValue(ReportRequest rrequest,String value,String style_property,boolean isReadonly)
{
StringBuffer resultBuf=new StringBuffer();
resultBuf.append(this.getBeforedescription(rrequest));
String inputboxid=getInputBoxId(rrequest);
resultBuf.append("<textarea typename='"+typename+"' name='"+inputboxid+"' id='"+inputboxid+"' ");
if(style_property!=null) resultBuf.append(" ").append(style_property);
resultBuf.append(">").append(getInputBoxValue(rrequest,value)).append("</textarea>");
resultBuf.append(this.getAfterdescription(rrequest));
String params=Tools.replaceAll(this.inputboxparams,"#INPUTBOXID#",inputboxid);
if(isReadonly)
{
params=Tools.replaceAll(params,"#READONLY#","true");
}else
{
params=Tools.replaceAll(params,"#READONLY#","false");
}
rrequest.getWResponse().addOnloadMethod("tinyMCE.init",params,true);
return resultBuf.toString();
}
public String filledInContainer()
{
return "";
}
public String getIndependentDisplayString(ReportRequest rrequest,String value,String dynstyleproperty,Object specificDataObj,boolean isReadonly)
{
return null;
}
public String createGetInputboxValueJs(boolean isGetLabel)
{
return "return tinyMCE.get(boxId).getContent();";
}
public String createSetInputboxValueJs(boolean isSetLabel)
{
return "isCommonFlag=false;tinyMCE.get(boxId).setContent(newValue);";
}
public void loadInputBoxConfig(XmlElementBean eleInputboxBean)
{
super.loadInputBoxConfig(eleInputboxBean);
if(this.language!=null&&!this.language.trim().equals(""))
{
String dynparams=null;
if(this.language.equals(Consts_Private.LANGUAGE_ZH))
{
dynparams="language:'cn'";
}else
{
dynparams="language:'en'";
}
this.inputboxparams=Tools.mergeJsonValue(dynparams,this.inputboxparams);
}
}
protected String getDefaultStylePropertyForDisplayMode2()
{
return "";
}
public void doPostLoad()
{
super.doPostLoad();
this.inputboxparams=Tools.mergeJsonValue("elements:'#INPUTBOXID#',readonly:#READONLY#,init_instance_callback:\"initTinymce\"",this.inputboxparams);
String defaultparams=Config.getInstance().getResourceString(null,null,"${richtextbox.params.default}",false);
if(defaultparams!=null&&!defaultparams.trim().equals(""))
{//配置了全局默认参数
defaultparams=Tools.formatStringBlank(defaultparams);
this.inputboxparams=Tools.mergeJsonValue(defaultparams,this.inputboxparams);
}
this.inputboxparams=Tools.replaceAll(this.inputboxparams,"\"","'");//因为稍后要把它们显示在<span/>的一个属性中,因此出现了"号会有问题,对于json字符串,用"和用'意义一样,所以这里做替换
this.inputboxparams="{"+this.inputboxparams+"}";
String tinymcejs=Config.webroot+"/webresources/component/tiny_mce/tiny_mce.js";
tinymcejs=Tools.replaceAll(tinymcejs,"//","/");
owner.getReportBean().getPageBean().addMyJavascriptFile(tinymcejs,0);
processRichTextBoxCssFiles();
}
private void processRichTextBoxCssFiles()
{
Map<String,String> mParams=new HashMap<String,String>();
RegexTools.parseJsonValue(this.inputboxparams,mParams);
if(mParams==null||mParams.size()==0) return;
String themename=mParams.get("theme");
themename=themename==null?"":themename.trim();
if(themename.startsWith("'")&&themename.endsWith("'")) themename=themename.substring(1,themename.length()-1);
if(themename.startsWith("\"")&&themename.endsWith("\"")) themename=themename.substring(1,themename.length()-1);
String skinname=mParams.get("skin");
skinname=skinname==null?"":skinname.trim();
if(skinname.startsWith("'")&&skinname.endsWith("'")) skinname=skinname.substring(1,skinname.length()-1);
if(skinname.startsWith("\"")&&skinname.endsWith("\"")) skinname=skinname.substring(1,skinname.length()-1);
if(themename.equals("")||skinname.equals("")) return;
String cssprex=Config.webroot+"/webresources/component/tiny_mce/themes/"+themename+"/skins/"+skinname+"/";
cssprex=Tools.replaceAll(cssprex,"//","/");
owner.getReportBean().getPageBean().addMyCss(cssprex+"ui.css");
owner.getReportBean().getPageBean().addMyCss(cssprex+"content.css");
}
protected void addJsValidateOnBlurEvent()
{
if(this.isDisplayOnClick()) return;
super.addJsValidateOnBlurEvent();
}
}