Commit 04429643 authored by 刘文胜's avatar 刘文胜

first commit

parents
./target
.classpath
.project
./settings
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.hdp.customerservice</groupId>
<artifactId>com.hdp.customerservice</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>com.hdp.customerservice</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<start-class>com.hdp.customerservice.APP</start-class>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
<version>1.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
<version>1.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>1.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>1.2.3.RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.9</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.5</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.3.RELEASE</version>
</dependency>
</dependencies>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
package com.baidu.ueditor;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import com.baidu.ueditor.define.ActionMap;
import com.baidu.ueditor.define.AppInfo;
import com.baidu.ueditor.define.BaseState;
import com.baidu.ueditor.define.State;
import com.baidu.ueditor.hunter.FileManager;
import com.baidu.ueditor.hunter.ImageHunter;
import com.baidu.ueditor.upload.Uploader;
public class ActionEnter {
private HttpServletRequest request = null;
private String rootPath = null;
private String contextPath = null;
private String actionType = null;
private ConfigManager configManager = null;
public ActionEnter ( HttpServletRequest request, String rootPath ) {
this.request = request;
this.rootPath = rootPath;
this.actionType = request.getParameter( "action" );
this.contextPath = request.getContextPath();
this.configManager = ConfigManager.getInstance( this.rootPath, this.contextPath, request.getRequestURI() );
}
public String exec () {
String callbackName = this.request.getParameter("callback");
if ( callbackName != null ) {
if ( !validCallbackName( callbackName ) ) {
return new BaseState( false, AppInfo.ILLEGAL ).toJSONString();
}
return callbackName+"("+this.invoke()+");";
} else {
return this.invoke();
}
}
public String invoke() {
if ( actionType == null || !ActionMap.mapping.containsKey( actionType ) ) {
return new BaseState( false, AppInfo.INVALID_ACTION ).toJSONString();
}
if ( this.configManager == null || !this.configManager.valid() ) {
return new BaseState( false, AppInfo.CONFIG_ERROR ).toJSONString();
}
State state = null;
int actionCode = ActionMap.getType( this.actionType );
Map<String, Object> conf = null;
switch ( actionCode ) {
case ActionMap.CONFIG:
return this.configManager.getAllConfig().toString();
case ActionMap.UPLOAD_IMAGE:
case ActionMap.UPLOAD_SCRAWL:
case ActionMap.UPLOAD_VIDEO:
case ActionMap.UPLOAD_FILE:
conf = this.configManager.getConfig( actionCode );
state = new Uploader( request, conf ).doExec();
break;
case ActionMap.CATCH_IMAGE:
conf = configManager.getConfig( actionCode );
String[] list = this.request.getParameterValues( (String)conf.get( "fieldName" ) );
state = new ImageHunter( conf ).capture( list );
break;
case ActionMap.LIST_IMAGE:
case ActionMap.LIST_FILE:
conf = configManager.getConfig( actionCode );
int start = this.getStartIndex();
state = new FileManager( conf ).listFile( start );
break;
}
return state.toJSONString();
}
public int getStartIndex () {
String start = this.request.getParameter( "start" );
try {
return Integer.parseInt( start );
} catch ( Exception e ) {
return 0;
}
}
/**
* callback参数验证
*/
public boolean validCallbackName ( String name ) {
if ( name.matches( "^[a-zA-Z_]+[\\w0-9_]*$" ) ) {
return true;
}
return false;
}
}
\ No newline at end of file
package com.baidu.ueditor;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baidu.ueditor.define.ActionMap;
/**
* 配置管理器
* @author hancong03@baidu.com
*
*/
public final class ConfigManager {
private final String rootPath;
private final String originalPath;
private final String contextPath;
private static final String configFileName = "config.json";
private String parentPath = null;
private JSONObject jsonConfig = null;
// 涂鸦上传filename定义
private final static String SCRAWL_FILE_NAME = "scrawl";
// 远程图片抓取filename定义
private final static String REMOTE_FILE_NAME = "remote";
/*
* 通过一个给定的路径构建一个配置管理器, 该管理器要求地址路径所在目录下必须存在config.properties文件
*/
private ConfigManager ( String rootPath, String contextPath, String uri ) throws FileNotFoundException, IOException {
rootPath = rootPath.replace( "\\", "/" );
this.rootPath = rootPath;
this.contextPath = contextPath;
if ( contextPath.length() > 0 ) {
this.originalPath = this.rootPath + uri.substring( contextPath.length() );
} else {
this.originalPath = this.rootPath + uri;
}
this.initEnv();
}
/**
* 配置管理器构造工厂
* @param rootPath 服务器根路径
* @param contextPath 服务器所在项目路径
* @param uri 当前访问的uri
* @return 配置管理器实例或者null
*/
public static ConfigManager getInstance ( String rootPath, String contextPath, String uri ) {
try {
return new ConfigManager(rootPath, contextPath, uri);
} catch ( Exception e ) {
return null;
}
}
// 验证配置文件加载是否正确
public boolean valid () {
return this.jsonConfig != null;
}
public JSONObject getAllConfig () {
return this.jsonConfig;
}
public Map<String, Object> getConfig ( int type ) {
Map<String, Object> conf = new HashMap<String, Object>();
String savePath = null;
switch ( type ) {
case ActionMap.UPLOAD_FILE:
conf.put( "isBase64", "false" );
conf.put( "maxSize", this.jsonConfig.getLong( "fileMaxSize" ) );
conf.put( "allowFiles", this.getArray( "fileAllowFiles" ) );
conf.put( "fieldName", this.jsonConfig.getString( "fileFieldName" ) );
savePath = this.jsonConfig.getString( "filePathFormat" );
break;
case ActionMap.UPLOAD_IMAGE:
conf.put( "isBase64", "false" );
conf.put( "maxSize", this.jsonConfig.getLong( "imageMaxSize" ) );
conf.put( "allowFiles", this.getArray( "imageAllowFiles" ) );
conf.put( "fieldName", this.jsonConfig.getString( "imageFieldName" ) );
savePath = this.jsonConfig.getString( "imagePathFormat" );
break;
case ActionMap.UPLOAD_VIDEO:
conf.put( "maxSize", this.jsonConfig.getLong( "videoMaxSize" ) );
conf.put( "allowFiles", this.getArray( "videoAllowFiles" ) );
conf.put( "fieldName", this.jsonConfig.getString( "videoFieldName" ) );
savePath = this.jsonConfig.getString( "videoPathFormat" );
break;
case ActionMap.UPLOAD_SCRAWL:
conf.put( "filename", ConfigManager.SCRAWL_FILE_NAME );
conf.put( "maxSize", this.jsonConfig.getLong( "scrawlMaxSize" ) );
conf.put( "fieldName", this.jsonConfig.getString( "scrawlFieldName" ) );
conf.put( "isBase64", "true" );
savePath = this.jsonConfig.getString( "scrawlPathFormat" );
break;
case ActionMap.CATCH_IMAGE:
conf.put( "filename", ConfigManager.REMOTE_FILE_NAME );
conf.put( "filter", this.getArray( "catcherLocalDomain" ) );
conf.put( "maxSize", this.jsonConfig.getLong( "catcherMaxSize" ) );
conf.put( "allowFiles", this.getArray( "catcherAllowFiles" ) );
conf.put( "fieldName", this.jsonConfig.getString( "catcherFieldName" ) + "[]" );
savePath = this.jsonConfig.getString( "catcherPathFormat" );
break;
case ActionMap.LIST_IMAGE:
conf.put( "allowFiles", this.getArray( "imageManagerAllowFiles" ) );
conf.put( "dir", this.jsonConfig.getString( "imageManagerListPath" ) );
conf.put( "count", this.jsonConfig.getIntValue( "imageManagerListSize" ) );
break;
case ActionMap.LIST_FILE:
conf.put( "allowFiles", this.getArray( "fileManagerAllowFiles" ) );
conf.put( "dir", this.jsonConfig.getString( "fileManagerListPath" ) );
conf.put( "count", this.jsonConfig.getIntValue( "fileManagerListSize" ) );
break;
}
conf.put( "savePath", savePath );
conf.put( "rootPath", this.rootPath );
return conf;
}
private void initEnv () throws FileNotFoundException, IOException {
File file = new File( this.originalPath );
if ( !file.isAbsolute() ) {
file = new File( file.getAbsolutePath() );
}
this.parentPath = file.getParent();
String configContent = this.readFile( this.getConfigPath() );
try{
JSONObject jsonConfig = JSONObject.parseObject( configContent );
this.jsonConfig = jsonConfig;
} catch ( Exception e ) {
this.jsonConfig = null;
}
}
private String getConfigPath () {
return /*this.parentPath + File.separator + */ConfigManager.configFileName;
}
private String[] getArray ( String key ) {
JSONArray jsonArray = this.jsonConfig.getJSONArray( key );
String[] result = new String[ jsonArray.size() ];
for ( int i = 0, len = jsonArray.size(); i < len; i++ ) {
result[i] = jsonArray.getString( i );
}
return result;
}
private String readFile ( String path ) throws IOException {
StringBuilder builder = new StringBuilder();
try {
InputStream is=this.getClass().getClassLoader().getResourceAsStream(ConfigManager.configFileName);
InputStreamReader reader = new InputStreamReader( is, "UTF-8" );
BufferedReader bfReader = new BufferedReader( reader );
String tmpContent = null;
while ( ( tmpContent = bfReader.readLine() ) != null ) {
builder.append( tmpContent );
}
bfReader.close();
} catch ( UnsupportedEncodingException e ) {
// 忽略
}
return this.filter( builder.toString() );
}
// 过滤输入字符串, 剔除多行注释以及替换掉反斜杠
private String filter ( String input ) {
return input.replaceAll( "/\\*[\\s\\S]*?\\*/", "" );
}
}
package com.baidu.ueditor;
public class Encoder {
public static String toUnicode ( String input ) {
StringBuilder builder = new StringBuilder();
char[] chars = input.toCharArray();
for ( char ch : chars ) {
if ( ch < 256 ) {
builder.append( ch );
} else {
builder.append( "\\u" + Integer.toHexString( ch& 0xffff ) );
}
}
return builder.toString();
}
}
\ No newline at end of file
package com.baidu.ueditor;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PathFormat {
private static final String TIME = "time";
private static final String FULL_YEAR = "yyyy";
private static final String YEAR = "yy";
private static final String MONTH = "mm";
private static final String DAY = "dd";
private static final String HOUR = "hh";
private static final String MINUTE = "ii";
private static final String SECOND = "ss";
private static final String RAND = "rand";
private static Date currentDate = null;
public static String parse ( String input ) {
Pattern pattern = Pattern.compile( "\\{([^\\}]+)\\}", Pattern.CASE_INSENSITIVE );
Matcher matcher = pattern.matcher(input);
PathFormat.currentDate = new Date();
StringBuffer sb = new StringBuffer();
while ( matcher.find() ) {
matcher.appendReplacement(sb, PathFormat.getString( matcher.group( 1 ) ) );
}
matcher.appendTail(sb);
return sb.toString();
}
/**
* 格式化路径, 把windows路径替换成标准路径
* @param input 待格式化的路径
* @return 格式化后的路径
*/
public static String format ( String input ) {
return input.replace( "\\", "/" );
}
public static String parse ( String input, String filename ) {
Pattern pattern = Pattern.compile( "\\{([^\\}]+)\\}", Pattern.CASE_INSENSITIVE );
Matcher matcher = pattern.matcher(input);
String matchStr = null;
PathFormat.currentDate = new Date();
StringBuffer sb = new StringBuffer();
while ( matcher.find() ) {
matchStr = matcher.group( 1 );
if ( matchStr.indexOf( "filename" ) != -1 ) {
filename = filename.replace( "$", "\\$" ).replaceAll( "[\\/:*?\"<>|]", "" );
matcher.appendReplacement(sb, filename );
} else {
matcher.appendReplacement(sb, PathFormat.getString( matchStr ) );
}
}
matcher.appendTail(sb);
return sb.toString();
}
private static String getString ( String pattern ) {
pattern = pattern.toLowerCase();
// time 处理
if ( pattern.indexOf( PathFormat.TIME ) != -1 ) {
return PathFormat.getTimestamp();
} else if ( pattern.indexOf( PathFormat.FULL_YEAR ) != -1 ) {
return PathFormat.getFullYear();
} else if ( pattern.indexOf( PathFormat.YEAR ) != -1 ) {
return PathFormat.getYear();
} else if ( pattern.indexOf( PathFormat.MONTH ) != -1 ) {
return PathFormat.getMonth();
} else if ( pattern.indexOf( PathFormat.DAY ) != -1 ) {
return PathFormat.getDay();
} else if ( pattern.indexOf( PathFormat.HOUR ) != -1 ) {
return PathFormat.getHour();
} else if ( pattern.indexOf( PathFormat.MINUTE ) != -1 ) {
return PathFormat.getMinute();
} else if ( pattern.indexOf( PathFormat.SECOND ) != -1 ) {
return PathFormat.getSecond();
} else if ( pattern.indexOf( PathFormat.RAND ) != -1 ) {
return PathFormat.getRandom( pattern );
}
return pattern;
}
private static String getTimestamp () {
return System.currentTimeMillis() + "";
}
private static String getFullYear () {
return new SimpleDateFormat( "yyyy" ).format( PathFormat.currentDate );
}
private static String getYear () {
return new SimpleDateFormat( "yy" ).format( PathFormat.currentDate );
}
private static String getMonth () {
return new SimpleDateFormat( "MM" ).format( PathFormat.currentDate );
}
private static String getDay () {
return new SimpleDateFormat( "dd" ).format( PathFormat.currentDate );
}
private static String getHour () {
return new SimpleDateFormat( "HH" ).format( PathFormat.currentDate );
}
private static String getMinute () {
return new SimpleDateFormat( "mm" ).format( PathFormat.currentDate );
}
private static String getSecond () {
return new SimpleDateFormat( "ss" ).format( PathFormat.currentDate );
}
private static String getRandom ( String pattern ) {
int length = 0;
pattern = pattern.split( ":" )[ 1 ].trim();
length = Integer.parseInt( pattern );
return ( Math.random() + "" ).replace( ".", "" ).substring( 0, length );
}
}
package com.baidu.ueditor.define;
import java.util.Map;
import java.util.HashMap;
/**
* 定义请求action类型
* @author hancong03@baidu.com
*
*/
@SuppressWarnings("serial")
public final class ActionMap {
public static final Map<String, Integer> mapping;
// 获取配置请求
public static final int CONFIG = 0;
public static final int UPLOAD_IMAGE = 1;
public static final int UPLOAD_SCRAWL = 2;
public static final int UPLOAD_VIDEO = 3;
public static final int UPLOAD_FILE = 4;
public static final int CATCH_IMAGE = 5;
public static final int LIST_FILE = 6;
public static final int LIST_IMAGE = 7;
static {
mapping = new HashMap<String, Integer>(){{
put( "config", ActionMap.CONFIG );
put( "uploadimage", ActionMap.UPLOAD_IMAGE );
put( "uploadscrawl", ActionMap.UPLOAD_SCRAWL );
put( "uploadvideo", ActionMap.UPLOAD_VIDEO );
put( "uploadfile", ActionMap.UPLOAD_FILE );
put( "catchimage", ActionMap.CATCH_IMAGE );
put( "listfile", ActionMap.LIST_FILE );
put( "listimage", ActionMap.LIST_IMAGE );
}};
}
public static int getType ( String key ) {
return ActionMap.mapping.get( key );
}
}
package com.baidu.ueditor.define;
public enum ActionState {
UNKNOW_ERROR
}
package com.baidu.ueditor.define;
import java.util.HashMap;
import java.util.Map;
public final class AppInfo {
public static final int SUCCESS = 0;
public static final int MAX_SIZE = 1;
public static final int PERMISSION_DENIED = 2;
public static final int FAILED_CREATE_FILE = 3;
public static final int IO_ERROR = 4;
public static final int NOT_MULTIPART_CONTENT = 5;
public static final int PARSE_REQUEST_ERROR = 6;
public static final int NOTFOUND_UPLOAD_DATA = 7;
public static final int NOT_ALLOW_FILE_TYPE = 8;
public static final int INVALID_ACTION = 101;
public static final int CONFIG_ERROR = 102;
public static final int PREVENT_HOST = 201;
public static final int CONNECTION_ERROR = 202;
public static final int REMOTE_FAIL = 203;
public static final int NOT_DIRECTORY = 301;
public static final int NOT_EXIST = 302;
public static final int ILLEGAL = 401;
public static Map<Integer, String> info = new HashMap<Integer, String>(){{
put( AppInfo.SUCCESS, "SUCCESS" );
// 无效的Action
put( AppInfo.INVALID_ACTION, "\u65E0\u6548\u7684Action" );
// 配置文件初始化失败
put( AppInfo.CONFIG_ERROR, "\u914D\u7F6E\u6587\u4EF6\u521D\u59CB\u5316\u5931\u8D25" );
// 抓取远程图片失败
put( AppInfo.REMOTE_FAIL, "\u6293\u53D6\u8FDC\u7A0B\u56FE\u7247\u5931\u8D25" );
// 被阻止的远程主机
put( AppInfo.PREVENT_HOST, "\u88AB\u963B\u6B62\u7684\u8FDC\u7A0B\u4E3B\u673A" );
// 远程连接出错
put( AppInfo.CONNECTION_ERROR, "\u8FDC\u7A0B\u8FDE\u63A5\u51FA\u9519" );
// "文件大小超出限制"
put( AppInfo.MAX_SIZE, "\u6587\u4ef6\u5927\u5c0f\u8d85\u51fa\u9650\u5236" );
// 权限不足, 多指写权限
put( AppInfo.PERMISSION_DENIED, "\u6743\u9650\u4E0D\u8DB3" );
// 创建文件失败
put( AppInfo.FAILED_CREATE_FILE, "\u521B\u5EFA\u6587\u4EF6\u5931\u8D25" );
// IO错误
put( AppInfo.IO_ERROR, "IO\u9519\u8BEF" );
// 上传表单不是multipart/form-data类型
put( AppInfo.NOT_MULTIPART_CONTENT, "\u4E0A\u4F20\u8868\u5355\u4E0D\u662Fmultipart/form-data\u7C7B\u578B" );
// 解析上传表单错误
put( AppInfo.PARSE_REQUEST_ERROR, "\u89E3\u6790\u4E0A\u4F20\u8868\u5355\u9519\u8BEF" );
// 未找到上传数据
put( AppInfo.NOTFOUND_UPLOAD_DATA, "\u672A\u627E\u5230\u4E0A\u4F20\u6570\u636E" );
// 不允许的文件类型
put( AppInfo.NOT_ALLOW_FILE_TYPE, "\u4E0D\u5141\u8BB8\u7684\u6587\u4EF6\u7C7B\u578B" );
// 指定路径不是目录
put( AppInfo.NOT_DIRECTORY, "\u6307\u5B9A\u8DEF\u5F84\u4E0D\u662F\u76EE\u5F55" );
// 指定路径并不存在
put( AppInfo.NOT_EXIST, "\u6307\u5B9A\u8DEF\u5F84\u5E76\u4E0D\u5B58\u5728" );
// callback参数名不合法
put( AppInfo.ILLEGAL, "Callback\u53C2\u6570\u540D\u4E0D\u5408\u6CD5" );
}};
public static String getStateInfo ( int key ) {
return AppInfo.info.get( key );
}
}
package com.baidu.ueditor.define;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import com.baidu.ueditor.Encoder;
public class BaseState implements State {
private boolean state = false;
private String info = null;
private Map<String, String> infoMap = new HashMap<String, String>();
public BaseState () {
this.state = true;
}
public BaseState ( boolean state ) {
this.setState( state );
}
public BaseState ( boolean state, String info ) {
this.setState( state );
this.info = info;
}
public BaseState ( boolean state, int infoCode ) {
this.setState( state );
this.info = AppInfo.getStateInfo( infoCode );
}
public boolean isSuccess () {
return this.state;
}
public void setState ( boolean state ) {
this.state = state;
}
public void setInfo ( String info ) {
this.info = info;
}
public void setInfo ( int infoCode ) {
this.info = AppInfo.getStateInfo( infoCode );
}
public String toJSONString() {
return this.toString();
}
public String toString () {
String key = null;
String stateVal = this.isSuccess() ? AppInfo.getStateInfo( AppInfo.SUCCESS ) : this.info;
StringBuilder builder = new StringBuilder();
builder.append( "{\"state\": \"" + stateVal + "\"" );
Iterator<String> iterator = this.infoMap.keySet().iterator();
while ( iterator.hasNext() ) {
key = iterator.next();
builder.append( ",\"" + key + "\": \"" + this.infoMap.get(key) + "\"" );
}
builder.append( "}" );
return Encoder.toUnicode( builder.toString() );
}
public void putInfo(String name, String val) {
this.infoMap.put(name, val);
}
public void putInfo(String name, long val) {
this.putInfo(name, val+"");
}
}
package com.baidu.ueditor.define;
import java.util.HashMap;
import java.util.Map;
public class FileType {
public static final String JPG = "JPG";
private static final Map<String, String> types = new HashMap<String, String>(){{
put( FileType.JPG, ".jpg" );
}};
public static String getSuffix ( String key ) {
return FileType.types.get( key );
}
/**
* 根据给定的文件名,获取其后缀信息
* @param filename
* @return
*/
public static String getSuffixByFilename ( String filename ) {
return filename.substring( filename.lastIndexOf( "." ) ).toLowerCase();
}
}
package com.baidu.ueditor.define;
import java.util.HashMap;
import java.util.Map;
public class MIMEType {
public static final Map<String, String> types = new HashMap<String, String>(){{
put( "image/gif", ".gif" );
put( "image/jpeg", ".jpg" );
put( "image/jpg", ".jpg" );
put( "image/png", ".png" );
put( "image/bmp", ".bmp" );
}};
public static String getSuffix ( String mime ) {
return MIMEType.types.get( mime );
}
}
package com.baidu.ueditor.define;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import com.baidu.ueditor.Encoder;
/**
* 多状态集合状态
* 其包含了多个状态的集合, 其本身自己也是一个状态
* @author hancong03@baidu.com
*
*/
public class MultiState implements State {
private boolean state = false;
private String info = null;
private Map<String, Long> intMap = new HashMap<String, Long>();
private Map<String, String> infoMap = new HashMap<String, String>();
private List<String> stateList = new ArrayList<String>();
public MultiState ( boolean state ) {
this.state = state;
}
public MultiState ( boolean state, String info ) {
this.state = state;
this.info = info;
}
public MultiState ( boolean state, int infoKey ) {
this.state = state;
this.info = AppInfo.getStateInfo( infoKey );
}
public boolean isSuccess() {
return this.state;
}
public void addState ( State state ) {
stateList.add( state.toJSONString() );
}
/**
* 该方法调用无效果
*/
public void putInfo(String name, String val) {
this.infoMap.put(name, val);
}
public String toJSONString() {
String stateVal = this.isSuccess() ? AppInfo.getStateInfo( AppInfo.SUCCESS ) : this.info;
StringBuilder builder = new StringBuilder();
builder.append( "{\"state\": \"" + stateVal + "\"" );
// 数字转换
Iterator<String> iterator = this.intMap.keySet().iterator();
while ( iterator.hasNext() ) {
stateVal = iterator.next();
builder.append( ",\""+ stateVal +"\": " + this.intMap.get( stateVal ) );
}
iterator = this.infoMap.keySet().iterator();
while ( iterator.hasNext() ) {
stateVal = iterator.next();
builder.append( ",\""+ stateVal +"\": \"" + this.infoMap.get( stateVal ) + "\"" );
}
builder.append( ", list: [" );
iterator = this.stateList.iterator();
while ( iterator.hasNext() ) {
builder.append( iterator.next() + "," );
}
if ( this.stateList.size() > 0 ) {
builder.deleteCharAt( builder.length() - 1 );
}
builder.append( " ]}" );
return Encoder.toUnicode( builder.toString() );
}
public void putInfo(String name, long val) {
this.intMap.put( name, val );
}
}
package com.baidu.ueditor.define;
/**
* 处理状态接口
* @author hancong03@baidu.com
*
*/
public interface State {
public boolean isSuccess ();
public void putInfo( String name, String val );
public void putInfo ( String name, long val );
public String toJSONString ();
}
package com.baidu.ueditor.hunter;
import java.io.File;
import java.util.Arrays;
import java.util.Collection;
import java.util.Map;
import org.apache.commons.io.FileUtils;
import com.baidu.ueditor.PathFormat;
import com.baidu.ueditor.define.AppInfo;
import com.baidu.ueditor.define.BaseState;
import com.baidu.ueditor.define.MultiState;
import com.baidu.ueditor.define.State;
public class FileManager {
private String dir = null;
private String rootPath = null;
private String[] allowFiles = null;
private int count = 0;
public FileManager ( Map<String, Object> conf ) {
this.rootPath = (String)conf.get( "rootPath" );
this.dir = this.rootPath + (String)conf.get( "dir" );
this.allowFiles = this.getAllowFiles( conf.get("allowFiles") );
this.count = (Integer)conf.get( "count" );
}
public State listFile ( int index ) {
File dir = new File( this.dir );
State state = null;
if ( !dir.exists() ) {
return new BaseState( false, AppInfo.NOT_EXIST );
}
if ( !dir.isDirectory() ) {
return new BaseState( false, AppInfo.NOT_DIRECTORY );
}
Collection<File> list = FileUtils.listFiles( dir, this.allowFiles, true );
if ( index < 0 || index > list.size() ) {
state = new MultiState( true );
} else {
Object[] fileList = Arrays.copyOfRange( list.toArray(), index, index + this.count );
state = this.getState( fileList );
}
state.putInfo( "start", index );
state.putInfo( "total", list.size() );
return state;
}
private State getState ( Object[] files ) {
MultiState state = new MultiState( true );
BaseState fileState = null;
File file = null;
for ( Object obj : files ) {
if ( obj == null ) {
break;
}
file = (File)obj;
fileState = new BaseState( true );
fileState.putInfo( "url", PathFormat.format( this.getPath( file ) ) );
state.addState( fileState );
}
return state;
}
private String getPath ( File file ) {
String path = file.getAbsolutePath();
return path.replace( this.rootPath, "/" );
}
private String[] getAllowFiles ( Object fileExt ) {
String[] exts = null;
String ext = null;
if ( fileExt == null ) {
return new String[ 0 ];
}
exts = (String[])fileExt;
for ( int i = 0, len = exts.length; i < len; i++ ) {
ext = exts[ i ];
exts[ i ] = ext.replace( ".", "" );
}
return exts;
}
}
package com.baidu.ueditor.hunter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import com.baidu.ueditor.PathFormat;
import com.baidu.ueditor.define.AppInfo;
import com.baidu.ueditor.define.BaseState;
import com.baidu.ueditor.define.MIMEType;
import com.baidu.ueditor.define.MultiState;
import com.baidu.ueditor.define.State;
import com.baidu.ueditor.upload.StorageManager;
/**
* 图片抓取器
* @author hancong03@baidu.com
*
*/
public class ImageHunter {
private String filename = null;
private String savePath = null;
private String rootPath = null;
private List<String> allowTypes = null;
private long maxSize = -1;
private List<String> filters = null;
public ImageHunter ( Map<String, Object> conf ) {
this.filename = (String)conf.get( "filename" );
this.savePath = (String)conf.get( "savePath" );
this.rootPath = (String)conf.get( "rootPath" );
this.maxSize = (Long)conf.get( "maxSize" );
this.allowTypes = Arrays.asList( (String[])conf.get( "allowFiles" ) );
this.filters = Arrays.asList( (String[])conf.get( "filter" ) );
}
public State capture ( String[] list ) {
MultiState state = new MultiState( true );
for ( String source : list ) {
state.addState( captureRemoteData( source ) );
}
return state;
}
public State captureRemoteData ( String urlStr ) {
HttpURLConnection connection = null;
URL url = null;
String suffix = null;
try {
url = new URL( urlStr );
if ( !validHost( url.getHost() ) ) {
return new BaseState( false, AppInfo.PREVENT_HOST );
}
connection = (HttpURLConnection) url.openConnection();
connection.setInstanceFollowRedirects( true );
connection.setUseCaches( true );
if ( !validContentState( connection.getResponseCode() ) ) {
return new BaseState( false, AppInfo.CONNECTION_ERROR );
}
suffix = MIMEType.getSuffix( connection.getContentType() );
if ( !validFileType( suffix ) ) {
return new BaseState( false, AppInfo.NOT_ALLOW_FILE_TYPE );
}
if ( !validFileSize( connection.getContentLength() ) ) {
return new BaseState( false, AppInfo.MAX_SIZE );
}
String savePath = this.getPath( this.savePath, this.filename, suffix );
String physicalPath = this.rootPath + savePath;
State state = StorageManager.saveFileByInputStream( connection.getInputStream(), physicalPath );
if ( state.isSuccess() ) {
state.putInfo( "url", PathFormat.format( savePath ) );
state.putInfo( "source", urlStr );
}
return state;
} catch ( Exception e ) {
return new BaseState( false, AppInfo.REMOTE_FAIL );
}
}
private String getPath ( String savePath, String filename, String suffix ) {
return PathFormat.parse( savePath + suffix, filename );
}
private boolean validHost ( String hostname ) {
return !filters.contains( hostname );
}
private boolean validContentState ( int code ) {
return HttpURLConnection.HTTP_OK == code;
}
private boolean validFileType ( String type ) {
return this.allowTypes.contains( type );
}
private boolean validFileSize ( int size ) {
return size < this.maxSize;
}
}
package com.baidu.ueditor.upload;
import com.baidu.ueditor.PathFormat;
import com.baidu.ueditor.define.AppInfo;
import com.baidu.ueditor.define.BaseState;
import com.baidu.ueditor.define.FileType;
import com.baidu.ueditor.define.State;
import java.util.Map;
import org.apache.commons.codec.binary.Base64;
public final class Base64Uploader {
public static State save(String content, Map<String, Object> conf) {
byte[] data = decode(content);
long maxSize = ((Long) conf.get("maxSize")).longValue();
if (!validSize(data, maxSize)) {
return new BaseState(false, AppInfo.MAX_SIZE);
}
String suffix = FileType.getSuffix("JPG");
String savePath = PathFormat.parse((String) conf.get("savePath"),
(String) conf.get("filename"));
savePath = savePath + suffix;
String physicalPath = (String) conf.get("rootPath") + savePath;
State storageState = StorageManager.saveBinaryFile(data, physicalPath);
if (storageState.isSuccess()) {
storageState.putInfo("url", PathFormat.format(savePath));
storageState.putInfo("type", suffix);
storageState.putInfo("original", "");
}
return storageState;
}
private static byte[] decode(String content) {
return Base64.decodeBase64(content);
}
private static boolean validSize(byte[] data, long length) {
return data.length <= length;
}
}
\ No newline at end of file
package com.baidu.ueditor.upload;
import com.baidu.ueditor.PathFormat;
import com.baidu.ueditor.define.AppInfo;
import com.baidu.ueditor.define.BaseState;
import com.baidu.ueditor.define.FileType;
import com.baidu.ueditor.define.State;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class BinaryUploader {
public static final State save(HttpServletRequest request,
Map<String, Object> conf) {
FileItemStream fileStream = null;
boolean isAjaxUpload = request.getHeader( "X_Requested_With" ) != null;
if (!ServletFileUpload.isMultipartContent(request)) {
return new BaseState(false, AppInfo.NOT_MULTIPART_CONTENT);
}
ServletFileUpload upload = new ServletFileUpload(
new DiskFileItemFactory());
if ( isAjaxUpload ) {
upload.setHeaderEncoding( "UTF-8" );
}
try {
FileItemIterator iterator = upload.getItemIterator(request);
while (iterator.hasNext()) {
fileStream = iterator.next();
if (!fileStream.isFormField())
break;
fileStream = null;
}
if (fileStream == null) {
return new BaseState(false, AppInfo.NOTFOUND_UPLOAD_DATA);
}
String savePath = (String) conf.get("savePath");
String originFileName = fileStream.getName();
String suffix = FileType.getSuffixByFilename(originFileName);
originFileName = originFileName.substring(0,
originFileName.length() - suffix.length());
savePath = savePath + suffix;
long maxSize = ((Long) conf.get("maxSize")).longValue();
if (!validType(suffix, (String[]) conf.get("allowFiles"))) {
return new BaseState(false, AppInfo.NOT_ALLOW_FILE_TYPE);
}
savePath = PathFormat.parse(savePath, originFileName);
String physicalPath = (String) conf.get("rootPath") + savePath;
InputStream is = fileStream.openStream();
State storageState = StorageManager.saveFileByInputStream(is,
physicalPath, maxSize);
is.close();
if (storageState.isSuccess()) {
storageState.putInfo("url", PathFormat.format(savePath));
storageState.putInfo("type", suffix);
storageState.putInfo("original", originFileName + suffix);
}
return storageState;
} catch (FileUploadException e) {
return new BaseState(false, AppInfo.PARSE_REQUEST_ERROR);
} catch (IOException e) {
}
return new BaseState(false, AppInfo.IO_ERROR);
}
private static boolean validType(String type, String[] allowTypes) {
List<String> list = Arrays.asList(allowTypes);
return list.contains(type);
}
}
package com.baidu.ueditor.upload;
import com.baidu.ueditor.define.AppInfo;
import com.baidu.ueditor.define.BaseState;
import com.baidu.ueditor.define.State;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.io.FileUtils;
public class StorageManager {
public static final int BUFFER_SIZE = 8192;
public StorageManager() {
}
public static State saveBinaryFile(byte[] data, String path) {
File file = new File(path);
State state = valid(file);
if (!state.isSuccess()) {
return state;
}
try {
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(file));
bos.write(data);
bos.flush();
bos.close();
} catch (IOException ioe) {
return new BaseState(false, AppInfo.IO_ERROR);
}
state = new BaseState(true, file.getAbsolutePath());
state.putInfo( "size", data.length );
state.putInfo( "title", file.getName() );
return state;
}
public static State saveFileByInputStream(InputStream is, String path,
long maxSize) {
State state = null;
File tmpFile = getTmpFile();
byte[] dataBuf = new byte[ 2048 ];
BufferedInputStream bis = new BufferedInputStream(is, StorageManager.BUFFER_SIZE);
try {
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(tmpFile), StorageManager.BUFFER_SIZE);
int count = 0;
while ((count = bis.read(dataBuf)) != -1) {
bos.write(dataBuf, 0, count);
}
bos.flush();
bos.close();
if (tmpFile.length() > maxSize) {
tmpFile.delete();
return new BaseState(false, AppInfo.MAX_SIZE);
}
state = saveTmpFile(tmpFile, path);
if (!state.isSuccess()) {
tmpFile.delete();
}
return state;
} catch (IOException e) {
}
return new BaseState(false, AppInfo.IO_ERROR);
}
public static State saveFileByInputStream(InputStream is, String path) {
State state = null;
File tmpFile = getTmpFile();
byte[] dataBuf = new byte[ 2048 ];
BufferedInputStream bis = new BufferedInputStream(is, StorageManager.BUFFER_SIZE);
try {
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(tmpFile), StorageManager.BUFFER_SIZE);
int count = 0;
while ((count = bis.read(dataBuf)) != -1) {
bos.write(dataBuf, 0, count);
}
bos.flush();
bos.close();
state = saveTmpFile(tmpFile, path);
if (!state.isSuccess()) {
tmpFile.delete();
}
return state;
} catch (IOException e) {
}
return new BaseState(false, AppInfo.IO_ERROR);
}
private static File getTmpFile() {
File tmpDir = FileUtils.getTempDirectory();
String tmpFileName = (Math.random() * 10000 + "").replace(".", "");
return new File(tmpDir, tmpFileName);
}
private static State saveTmpFile(File tmpFile, String path) {
State state = null;
File targetFile = new File(path);
if (targetFile.canWrite()) {
return new BaseState(false, AppInfo.PERMISSION_DENIED);
}
try {
FileUtils.moveFile(tmpFile, targetFile);
} catch (IOException e) {
return new BaseState(false, AppInfo.IO_ERROR);
}
state = new BaseState(true);
state.putInfo( "size", targetFile.length() );
state.putInfo( "title", targetFile.getName() );
return state;
}
private static State valid(File file) {
File parentPath = file.getParentFile();
if ((!parentPath.exists()) && (!parentPath.mkdirs())) {
return new BaseState(false, AppInfo.FAILED_CREATE_FILE);
}
if (!parentPath.canWrite()) {
return new BaseState(false, AppInfo.PERMISSION_DENIED);
}
return new BaseState(true);
}
}
package com.baidu.ueditor.upload;
import com.baidu.ueditor.define.State;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
public class Uploader {
private HttpServletRequest request = null;
private Map<String, Object> conf = null;
public Uploader(HttpServletRequest request, Map<String, Object> conf) {
this.request = request;
this.conf = conf;
}
public final State doExec() {
String filedName = (String) this.conf.get("fieldName");
State state = null;
if ("true".equals(this.conf.get("isBase64"))) {
state = Base64Uploader.save(this.request.getParameter(filedName),
this.conf);
} else {
state = BinaryUploader.save(this.request, this.conf);
}
return state;
}
}
/*
* Copyright 2012-2013 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.hdp.customerservice;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.PropertySource;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.listener.PatternTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
import redis.clients.jedis.JedisPoolConfig;
import com.hdp.customerservice.websocket.*;
@PropertySource(value="classpath:application.development.properties")
@ComponentScan
@EnableAutoConfiguration
@EnableWebMvc
@EnableWebSocket
public class APP extends WebMvcAutoConfiguration
implements WebSocketConfigurer {
private static final Logger LOGGER = LoggerFactory.getLogger(APP.class);
@Value("${redis.channel}")
private String channel;
@Value("${redis.host}")
private String host;
@Value("${redis.pass}")
private String password;
@Value("${redis.port}")
private String port;
@Value("${redis.idle}")
private String idle;
@Value("${redis.maxActive}")
private String maxActive;
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
LOGGER.info("这里可以注册websocket路由~~~~");
}
@Bean
public IMWebSocketEndpoint reverseWebSocketEndpoint() {
return new IMWebSocketEndpoint();
}
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter){
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.addMessageListener(listenerAdapter, new PatternTopic(channel));
return container;
}
@Bean
MessageListenerAdapter listenerAdapter(Subscriber subscriber) {
return new MessageListenerAdapter(subscriber, "receiveMessage");
}
@Bean
Subscriber subcriber() {
LOGGER.info("启动监听者");
return new Subscriber();
}
@Bean
RedisConnectionFactory connectionFactory() {
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxIdle(Integer.parseInt(idle));
poolConfig.setMaxTotal(Integer.parseInt(maxActive));
poolConfig.setTestWhileIdle(true);
poolConfig.setNumTestsPerEvictionRun(3);
JedisConnectionFactory connectionFactory = new JedisConnectionFactory(poolConfig);
connectionFactory.setHostName(host);
connectionFactory.setPassword(password);
connectionFactory.setUsePool(true);
connectionFactory.setTimeout(5000);
connectionFactory.setPort(Integer.parseInt(port));
return connectionFactory;
}
public static void main(String[] args) {
SpringApplication.run(APP.class, args);
}
}
package com.hdp.customerservice;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Node;
import com.hdp.pi.wechat.handler.*;
import java.util.concurrent.ConcurrentHashMap;
/**
* Created by Veal on 2015/5/11.
*/
public class Subscriber {
public ConcurrentHashMap<String,MessageHandler> handlers = new ConcurrentHashMap<String, MessageHandler>();
public Subscriber(){
handlers.put("text", new TextMessageHandler());
handlers.put("image", new ImageMessageHandler());
handlers.put("voice", new VoiceMessageHander());
handlers.put("video", new VideoMessageHandler());
handlers.put("shortvideo", new ShortVideoMessageHandler());
handlers.put("location", new LocationHandler());
handlers.put("link", new LinkMessageHandler());
}
public boolean receiveMessage(String message) {
String type="";
boolean result=Boolean.TRUE;
try {
type = getMsgType(message);
MessageHandler handler=handlers.get(type);
result = null!=handler && handler.onMessage(type,message);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
private static synchronized String getMsgType(String message) throws DocumentException{
String[] msgType=new String[2];
Document doc = DocumentHelper.parseText(message);
Node typeNode= doc.getRootElement().selectSingleNode("/xml/MsgType");
Node eventNode= doc.getRootElement().selectSingleNode("/xml/Event");
msgType[0]= typeNode!=null?typeNode.getText():"";
msgType[1]= eventNode!=null?eventNode.getText():"";
return join(msgType, "|");
}
private static String join(String[] strings, String separator) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < strings.length; i++) {
String s=strings[i];
if (i > 0 && null != s && !"".equals(s)) {
sb.append(separator);
}
sb.append(strings[i]);
}
return sb.toString();
}
}
/**
* @Title: TestController.java
* @Package com.hdp.customerservice.api
* @Description: TODO
* @author new12304508_163_com
* @date 2015年6月3日 下午4:01:53
* @version V1.0
*/
package com.hdp.customerservice.api;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class TestController {
/**
* @Title: TestController.java
* @Package com.hdp.customerservice.api
* @Description: TODO
* @author new12304508_163_com
* @date 2015年6月3日 下午4:01:53
* @version V1.0
*/
@RequestMapping("/test")
public @ResponseBody String test(){
return "woshiyizhixiaoxiaoyayiyayiyayo";
}
}
/**
* @Title: UEditorConfigController.java
* @Package com.hdp.customerservice.api
* @Description: TODO
* @author new12304508_163_com
* @date 2015年6月10日 上午10:18:00
* @version V1.0
*/
package com.hdp.customerservice.api;
import java.io.File;
import java.io.FileOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import com.baidu.ueditor.ActionEnter;
@Controller
public class UEditorConfigController {
/**
* @Title: UEditorConfigController.java
* @Package com.hdp.customerservice.api
* @Description: TODO
* @author new12304508_163_com
* @date 2015年6月10日 上午10:18:00
* @version V1.0
*/
@RequestMapping(value="/ueditor",method=RequestMethod.GET)
public @ResponseBody String config(HttpServletRequest request){
return new ActionEnter( request, request.getServletContext().getRealPath("/")).exec();
}
@RequestMapping(value="/ueditor",method=RequestMethod.POST)
public @ResponseBody String upload(@RequestParam("upfile") MultipartFile upfile,HttpServletRequest request, HttpServletResponse response) throws Exception {
String result = "";
String rootPath=request.getServletContext().getRealPath("");
FileOutputStream out = null;
try {
File file = new File(rootPath);
if(!file.exists()) file.mkdirs();
String fname = ""+System.currentTimeMillis(),
oname = upfile.getOriginalFilename();
out = new FileOutputStream(rootPath + "/" + fname);
out.write(upfile.getBytes());
out.close();
result = "{\"name\":\""+ fname +"\", \"originalName\": \""+ oname +"\", \"size\": "+ upfile.getSize() +", \"state\": \"SUCCESS\", \"type\": \"PNG\", \"url\": \"/" + fname+"\"}";
result = result.replaceAll( "\\\\", "\\\\" );
} catch(Exception e) {
e.printStackTrace();
} finally {
out.close();
}
return result;
}
}
/**
* @Title: IMManager.java
* @Package com.hdp.customerservice
* @Description: TODO
* @author new12304508_163_com
* @date 2015年6月15日 下午2:59:46
* @version V1.0
*/
package com.hdp.customerservice.websocket;
import java.io.IOException;
import java.util.Iterator;
import java.util.concurrent.ConcurrentHashMap;
import javax.websocket.Session;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSON;
import com.hdp.customerservice.websocket.model.Customer;
import com.hdp.customerservice.websocket.model.Waiter;
import com.hdp.pi.wechat.model.BaseEntity;
@Component
public class IMManager {
private static Log log=LogFactory.getLog(IMManager.class);
public static ConcurrentHashMap<String,Customer>
users = new ConcurrentHashMap<String, Customer>();
public static ConcurrentHashMap<String,Waiter>
waiters = new ConcurrentHashMap<String, Waiter>();
public static void broadcast(String id,String message){
Iterator<Waiter> ws= waiters.values().iterator();
while(ws.hasNext()){
try{
Waiter w=(Waiter)ws.next();
Session s=w.session;
if(s!=null && s.isOpen() && w.id != id){
s.getBasicRemote().sendText(message);
}
}catch(Throwable e){
}
}
}
public static void pushMessage(BaseEntity message) throws InterruptedException{
String openId=message.openId;
Customer user = users.get(openId);
if(user == null){
user = new Customer();
user.openId= message.openId;
user.waiter = waiters.get("lws");
users.put(openId, user);
}
user.messages.put(message);
BaseEntity m = user.messages.poll();
if(user.waiter != null && user.waiter.session!=null && user.waiter.session.isOpen()){
try {
user.waiter.session.getBasicRemote().sendText(JSON.toJSONString(m));
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
package com.hdp.customerservice.websocket;
import java.io.IOException;
import java.util.Iterator;
import java.util.concurrent.ConcurrentHashMap;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.hdp.customerservice.websocket.model.Customer;
import com.hdp.customerservice.websocket.model.Waiter;
@ServerEndpoint("/reverse")
public class IMWebSocketEndpoint {
private static Log log=LogFactory.getLog(IMWebSocketEndpoint.class);
@OnOpen
public void handleConnect(Session session) throws IOException{
Waiter waiter = new Waiter();
waiter.name="刘文胜"+Math.random();
waiter.session = session;
Iterator<Customer> cs= IMManager.users.values().iterator();
String openId= "";
while(cs.hasNext()){
Customer c=cs.next();
if(c.waiter == null || !c.waiter.session.isOpen()){
openId = c.openId;
break;
}
}
Customer user=IMManager.users.get(openId);
if(user!=null){
user.waiter=waiter;
}
IMManager.waiters.put("lws", waiter);
}
@OnClose
public void handleClose(Session session){
log.info("关闭");
}
@OnMessage
public void handleMessage(Session session, String message) throws IOException {
}
}
/**
* @Title: Customer.java
* @Package com.hdp.customerservice.websocket.model
* @Description: TODO
* @author new12304508_163_com
* @date 2015年6月15日 下午3:01:39
* @version V1.0
*/
package com.hdp.customerservice.websocket.model;
import java.util.Date;
import java.util.concurrent.LinkedBlockingQueue;
import com.hdp.pi.wechat.model.BaseEntity;
public class Customer {
public String openId;
public String nickName;
public String headImg;
public Waiter waiter;
public Date lastTime;//最后活动时间
public LinkedBlockingQueue<BaseEntity> messages=new LinkedBlockingQueue<BaseEntity>();
}
\ No newline at end of file
/**
* @Title: Waiter.java
* @Package com.hdp.customerservice.websocket.model
* @Description: TODO
* @author new12304508_163_com
* @date 2015年6月15日 下午3:01:22
* @version V1.0
*/
package com.hdp.customerservice.websocket.model;
import javax.websocket.Session;
public class Waiter {
public String id;
public String name;
public String headImg;
public Session session;
}
package com.hdp.pi.wechat.handler;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.springframework.stereotype.Component;
import com.hdp.pi.wechat.model.BaseEntity;
import com.hdp.pi.wechat.model.ImageMessage;
/**
* Created by Veal on 2015/5/15.
*/
@Component
public class ImageMessageHandler extends MessageHandler {
@Override
protected BaseEntity decode(String message) throws DocumentException {
Document doc = DocumentHelper.parseText(message);
ImageMessage imageMessage=new ImageMessage();
imageMessage.msgId = getXMLNodeText(doc,"/xml/MsgId");
imageMessage.picUrl =getXMLNodeText(doc,"/xml/PicUrl");
imageMessage.mediaId =getXMLNodeText(doc,"/xml/MediaId");
return imageMessage;
}
}
package com.hdp.pi.wechat.handler;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.springframework.stereotype.Component;
import com.hdp.pi.wechat.model.BaseEntity;
import com.hdp.pi.wechat.model.LinkMessage;
/**
* Created by Veal on 2015/5/15.
*/
@Component
public class LinkMessageHandler extends MessageHandler {
@Override
protected BaseEntity decode(String message) throws DocumentException {
Document doc = DocumentHelper.parseText(message);
LinkMessage linkMessage=new LinkMessage();
linkMessage.msgId= getXMLNodeText(doc,"/xml/MsgId");
linkMessage.title= getXMLNodeText(doc,"/xml/Title");
linkMessage.description= getXMLNodeText(doc,"/xml/Description");
linkMessage.url= getXMLNodeText(doc,"/xml/Url");
return linkMessage;
}
}
package com.hdp.pi.wechat.handler;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.springframework.stereotype.Component;
import com.hdp.pi.wechat.model.BaseEntity;
import com.hdp.pi.wechat.model.LocationMessage;
/**
* Created by Veal on 2015/5/15.
*/
@Component
public class LocationHandler extends MessageHandler {
@Override
protected BaseEntity decode(String message) throws DocumentException {
Document doc = DocumentHelper.parseText(message);
LocationMessage location=new LocationMessage();
location.msgId= getXMLNodeText(doc,"/xml/MsgId");
location.x=getXMLNodeText(doc,"/xml/Location_X");
location.y=getXMLNodeText(doc,"/xml/Location_Y");
location.scale=getXMLNodeText(doc,"/xml/Scale");
location.label=getXMLNodeText(doc,"/xml/Label");
return location;
}
}
package com.hdp.pi.wechat.handler;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Node;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.hdp.customerservice.websocket.IMManager;
import com.hdp.pi.wechat.model.BaseEntity;
import java.util.Calendar;
/**
* Created by Veal on 2015/5/11.
*/
@Component
public abstract class MessageHandler {
/**
*不同的消息对应的解析方法
**/
protected abstract BaseEntity decode(String message) throws Exception;
/**
*处理通用信息 比如openid 日期
**/
public final void deCommonInfo(BaseEntity entity,String message) throws Exception{
Document doc = DocumentHelper.parseText(message);
Calendar calendar=Calendar.getInstance();
calendar.setTimeInMillis(Long.parseLong(getXMLNodeText(doc,"/xml/CreateTime")));
entity.openId=getXMLNodeText(doc,"/xml/FromUserName");
entity.createTime=calendar.getTime();
}
public final String getXMLNodeText(Document doc,String path){
Node node = null;
try{
node=doc.getRootElement().selectSingleNode(path);
}catch(Exception e){
}
return node!=null?node.getText():"";
}
/**
*通用的消息处理
* @throws Exception
**/
public boolean onMessage(String msgType,String message) throws Exception{
if("".equals(message)){
return false;
}
boolean result=Boolean.TRUE;//默认为处理成功
BaseEntity entity = decode(message);//特有字段需子类重写
entity.msgType = msgType;//消息类型
deCommonInfo(entity,message);//处理通用字段
if(null != entity){
IMManager.pushMessage(entity);
}
return result;
}
}
package com.hdp.pi.wechat.handler;
import org.springframework.stereotype.Component;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import com.hdp.pi.wechat.model.BaseEntity;
import com.hdp.pi.wechat.model.ShortVideoMessage;
/**
* Created by Veal on 2015/5/15.
*/
@Component
public class ShortVideoMessageHandler extends MessageHandler {
@Override
protected BaseEntity decode(String message) throws DocumentException {
Document doc= DocumentHelper.parseText(message);
ShortVideoMessage shortVideoMessage=new ShortVideoMessage();
shortVideoMessage.msgId= getXMLNodeText(doc,"/xml/MsgId");
shortVideoMessage.mediaId=getXMLNodeText(doc,"/xml/MediaId");
shortVideoMessage.thumbMediaId=getXMLNodeText(doc,"/xml/ThumbMediaId");
return shortVideoMessage;
}
}
package com.hdp.pi.wechat.handler;
import org.springframework.stereotype.Component;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import com.hdp.pi.wechat.model.BaseEntity;
import com.hdp.pi.wechat.model.TextMessage;
/**
* Created by Veal on 2015/5/15.
*/
@Component
public class TextMessageHandler extends MessageHandler {
@Override
protected BaseEntity decode(String message) throws DocumentException {
Document doc = DocumentHelper.parseText(message);
TextMessage textMessage=new TextMessage();
textMessage.msgId= getXMLNodeText(doc,"/xml/MsgId");
textMessage.content= getXMLNodeText(doc,"/xml/Content");
return textMessage;
}
}
package com.hdp.pi.wechat.handler;
import org.springframework.stereotype.Component;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import com.hdp.pi.wechat.model.BaseEntity;
import com.hdp.pi.wechat.model.VideoMessage;
/**
* Created by Veal on 2015/5/15.
*/
@Component
public class VideoMessageHandler extends MessageHandler {
@Override
protected BaseEntity decode(String message) throws DocumentException {
Document doc= DocumentHelper.parseText(message);
VideoMessage videoMessage=new VideoMessage();
videoMessage.msgId= getXMLNodeText(doc,"/xml/MsgId");
videoMessage.mediaId=getXMLNodeText(doc,"/xml/MediaId");
videoMessage.thumbMediaId=getXMLNodeText(doc,"/xml/ThumbMediaId");
return videoMessage;
}
}
package com.hdp.pi.wechat.handler;
import org.springframework.stereotype.Component;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Node;
import com.hdp.pi.wechat.model.BaseEntity;
import com.hdp.pi.wechat.model.VoiceMessage;
/**
* Created by Veal on 2015/5/15.
*/
@Component
public class VoiceMessageHander extends MessageHandler {
@Override
protected BaseEntity decode(String message) throws DocumentException {
Document doc= DocumentHelper.parseText(message);
VoiceMessage voiceMessage=new VoiceMessage();
voiceMessage.msgId= getXMLNodeText(doc,"/xml/MsgId");
voiceMessage.mediaId=getXMLNodeText(doc,"/xml/MediaId");
voiceMessage.format=getXMLNodeText(doc,"/xml/Format");
voiceMessage.recognition=getXMLNodeText(doc,"/xml/Recognition");
return voiceMessage;
}
}
package com.hdp.pi.wechat.model;
import java.io.Serializable;
import java.util.Date;
/**
* Created by Veal on 2015/5/13.
*/
public abstract class BaseEntity implements Serializable{
public String msgType;
public String openId;
public Date createTime;
}
package com.hdp.pi.wechat.model;
/**
* Created by Veal on 2015/5/12.
*/
public class ImageMessage extends BaseEntity{
public String msgId;//图文消息的id
public String picUrl;//图片url
public String mediaId;//图片id
}
package com.hdp.pi.wechat.model;
/**
* Created by Veal on 2015/5/12.
*/
public class LinkMessage extends BaseEntity{
public String msgId;
public String title;
public String description;
public String url;
}
package com.hdp.pi.wechat.model;
/**
* Created by Veal on 2015/5/12.
*/
public class LocationMessage extends BaseEntity{
public String msgId;
public String x;
public String y;
public String scale;
public String label;
}
package com.hdp.pi.wechat.model;
/**
* Created by Veal on 2015/5/12.
*/
public class ShortVideoMessage extends BaseEntity{
public String msgId;
public String thumbMediaId;
public String mediaId;
}
package com.hdp.pi.wechat.model;
/**
* Created by Veal on 2015/5/12.
*/
public class TextMessage extends BaseEntity{
public String msgId;
public String content;
}
package com.hdp.pi.wechat.model;
/**
* Created by Veal on 2015/5/12.
*/
public class VideoMessage extends BaseEntity{
public String msgId;
public String thumbMediaId;
public String mediaId;
}
package com.hdp.pi.wechat.model;
/**
* Created by Veal on 2015/5/12.
*/
public class VoiceMessage extends BaseEntity{
public String msgId;
public String format;
public String mediaId;
public String recognition;
}
redis.host = 115.29.177.177
redis.port = 6379
redis.pass = future123456
redis.idle = 1
redis.maxActive= 20
redis.channel = __http_weixin__
\ No newline at end of file
redis.host = 46826d8cc18c11e4.m.cnhza.kvstore.aliyuncs.com
redis.port = 6379
redis.pass = 46826d8cc18c11e4:xQUFLhOctr8b3ZA2RTFQ
redis.idle = 1
redis.maxAtive= 20
redis.channel = __http_monitor__
\ No newline at end of file
redis.host = 10.161.177.181
redis.port = 6379
redis.pass = future123456
redis.idle = 1
redis.maxAtive= 20
redis.channel = __http_monitor__
\ No newline at end of file
/* 前后端通信相关的配置,注释只允许使用多行方式 */
{
/* 上传图片配置项 */
"imageActionName": "uploadimage", /* 执行上传图片的action名称 */
"imageFieldName": "upfile", /* 提交的图片表单名称 */
"imageMaxSize": 2048000, /* 上传大小限制,单位B */
"imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 上传图片格式显示 */
"imageCompressEnable": true, /* 是否压缩图片,默认是true */
"imageCompressBorder": 1600, /* 图片压缩最长边限制 */
"imageInsertAlign": "none", /* 插入的图片浮动方式 */
"imageUrlPrefix": "", /* 图片访问路径前缀 */
"imagePathFormat": "/ueditor/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
/* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */
/* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */
/* {time} 会替换成时间戳 */
/* {yyyy} 会替换成四位年份 */
/* {yy} 会替换成两位年份 */
/* {mm} 会替换成两位月份 */
/* {dd} 会替换成两位日期 */
/* {hh} 会替换成两位小时 */
/* {ii} 会替换成两位分钟 */
/* {ss} 会替换成两位秒 */
/* 非法字符 \ : * ? " < > | */
/* 具请体看线上文档: fex.baidu.com/ueditor/#use-format_upload_filename */
/* 涂鸦图片上传配置项 */
"scrawlActionName": "uploadscrawl", /* 执行上传涂鸦的action名称 */
"scrawlFieldName": "upfile", /* 提交的图片表单名称 */
"scrawlPathFormat": "/ueditor/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
"scrawlMaxSize": 2048000, /* 上传大小限制,单位B */
"scrawlUrlPrefix": "", /* 图片访问路径前缀 */
"scrawlInsertAlign": "none",
/* 截图工具上传 */
"snapscreenActionName": "uploadimage", /* 执行上传截图的action名称 */
"snapscreenPathFormat": "/ueditor/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
"snapscreenUrlPrefix": "", /* 图片访问路径前缀 */
"snapscreenInsertAlign": "none", /* 插入的图片浮动方式 */
/* 抓取远程图片配置 */
"catcherLocalDomain": ["127.0.0.1", "localhost", "img.baidu.com"],
"catcherActionName": "catchimage", /* 执行抓取远程图片的action名称 */
"catcherFieldName": "source", /* 提交的图片列表表单名称 */
"catcherPathFormat": "/ueditor/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
"catcherUrlPrefix": "", /* 图片访问路径前缀 */
"catcherMaxSize": 2048000, /* 上传大小限制,单位B */
"catcherAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 抓取图片格式显示 */
/* 上传视频配置 */
"videoActionName": "uploadvideo", /* 执行上传视频的action名称 */
"videoFieldName": "upfile", /* 提交的视频表单名称 */
"videoPathFormat": "/ueditor/upload/video/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
"videoUrlPrefix": "", /* 视频访问路径前缀 */
"videoMaxSize": 102400000, /* 上传大小限制,单位B,默认100MB */
"videoAllowFiles": [
".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid"], /* 上传视频格式显示 */
/* 上传文件配置 */
"fileActionName": "uploadfile", /* controller里,执行上传视频的action名称 */
"fileFieldName": "upfile", /* 提交的文件表单名称 */
"filePathFormat": "/ueditor/upload/file/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
"fileUrlPrefix": "", /* 文件访问路径前缀 */
"fileMaxSize": 51200000, /* 上传大小限制,单位B,默认50MB */
"fileAllowFiles": [
".png", ".jpg", ".jpeg", ".gif", ".bmp",
".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
], /* 上传文件格式显示 */
/* 列出指定目录下的图片 */
"imageManagerActionName": "listimage", /* 执行图片管理的action名称 */
"imageManagerListPath": "/ueditor/upload/image/", /* 指定要列出图片的目录 */
"imageManagerListSize": 20, /* 每次列出文件数量 */
"imageManagerUrlPrefix": "", /* 图片访问路径前缀 */
"imageManagerInsertAlign": "none", /* 插入的图片浮动方式 */
"imageManagerAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 列出的文件类型 */
/* 列出指定目录下的文件 */
"fileManagerActionName": "listfile", /* 执行文件管理的action名称 */
"fileManagerListPath": "/ueditor/upload/file/", /* 指定要列出文件的目录 */
"fileManagerUrlPrefix": "", /* 文件访问路径前缀 */
"fileManagerListSize": 20, /* 每次列出文件数量 */
"fileManagerAllowFiles": [
".png", ".jpg", ".jpeg", ".gif", ".bmp",
".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
] /* 列出的文件类型 */
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!--
- Copyright 1999-2011 Alibaba Group.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-->
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{dd/MM/yy hh:mm:ss:sss z}] %t %5p %c{2}: %m%n" />
</layout>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="CONSOLE" />
</root>
</log4j:configuration>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
.S_spetxt,.S_error,a.S_ficon:hover,a:hover .S_ficon,a.current .S_ficon{color:#fa7d3c;}.S_spetxt_bg{ background-color:#fa7d3c;}.W_btn_prev:hover,.W_btn_next:hover{ border-color:#fa7d3c;}.W_btn_prev:hover,.W_btn_next:hover,a.S_ficon:hover,a:hover .S_ficon,a.current .S_ficon,a.S_txt1:hover,a.current .S_txt1,a.S_txt2:hover,.SW_fun:hover .S_func1{text-decoration:none; cursor:pointer;}.S_ficon_dis,a.S_ficon_dis:hover,a:hover .S_ficon_dis{ cursor:default;opacity:0.5; -moz-opacity:0.5;filter:alpha(opacity=50);}.WB_timeline .current em{ color:#fff;}.send_weibo{background-image:none;}.WB_miniblog{padding-top:50px;}.S_page .WB_miniblog{padding-top:50px;}.S_page .WB_frame{ background-color:transparent!important;}#js_skin_public_base{height:42px;}
body,.S_page{background-color:#b4daf0;background-image:url("images/body_repeat.png?id=1414052827385") ;background-repeat:repeat-x;background-position:center 0; }.send_weibo .ficon_swtxt{ color:#1b7fb6;}body,legend,.W_input:focus,.S_txt1,.W_btn_b,.SW_fun .S_func1{ color:#333;text-decoration:none;}.S_txt1_bg{ background-color:#333;}.S_txt1_br{ border-color:#333;}.S_txt2,.W_input,.W_btn_b_disable,.W_btn_b_disable:hover{ color:#808080;text-decoration:none;}.S_txt2_bg{ background-color:#808080;}.S_txt2_br{ border-color:#808080;}.S_ficon,.S_ficon_dis,a.S_ficon_dis:hover,a:hover .S_ficon_dis{ color:#696e78;}.S_ficon_bg{ background-color:#696e78;}.S_ficon_br{ border-color:#696e78;}a,.S_link1,a.S_txt1:hover,a.current .S_txt1,a.S_txt2:hover,.SW_fun:hover .S_func1{ color:#eb7350;}.S_link1_bg{ background-color:#eb7350;}.S_link1_br{ border-color:#eb7350;}.S_bg1,.SW_fun_bg:hover,.SW_fun_bg_active{background-color:#f2f2f5;}.S_bg1_c{color:#f2f2f5;}.S_bg1_br{border-color:#f2f2f5;}.W_btn_cardlink,.W_btn_tag_cur,.W_btn_tag_cur:hover{background-color:#f2f2f5!important;}.S_bg2,blockquote,.W_btn_b,.W_input,.SW_fun_bg{background-color:#fff;}.S_bg2_c{color:#fff;}.S_bg2_br{color:#fff;border-color:#fff;}.S_line1,.W_btn_prev,.W_btn_next,.W_btn_b{border-color:#d9d9d9;}.W_btn_b_disable,.W_btn_b_disable:hover,.W_btn_tag_cur,.W_btn_tag_cur:hover{border-color:#d9d9d9!important;}.S_line1_c{color:#d9d9d9;}.W_btn_b_disable .S_ficon{color:#d9d9d9!important;}.S_line2{border-color:#f2f2f5;}.S_line2_c{color:#f2f2f5;}.S_line3,.W_input,.send_weibo .input,.W_btn_b:hover{border-color:#cccccc;}.W_input,.send_weibo .input{background-color:#fff;}.WB_left_nav .S_txt1,.WB_left_nav a.S_txt1:hover,.WB_left_nav .S_ficon,.WB_left_nav a:hover .S_ficon,.WB_left_nav a.S_ficon:hover{color:#fff;}.WB_left_nav .lev a:hover,.WB_left_nav .lev_curr,.WB_left_nav .lev_curr:hover,.WB_left_nav .levmore .more{ background-color:#82b9dc;background-color:rgba(255,255,255,0.2);*background-color:#82b9dc;}.WB_left_nav .lev_Box,.WB_left_nav fieldset{ border-color:#82b9dc;border-color:rgba(255,255,255,0.2);*border-color:#82b9dc;}.WB_frame{ background-color:#93c5e3;background-color:rgba(70,149,194,0.3);*background-color:#93c5e3;}.WB_timeline .S{ color:#47a6d9;border-left-color:#47a6d9;}.WB_timeline .current em,.WB_timeline .S_dot,.W_gotop{ background-color:#47a6d9;}.WB_miniblog{background:url("images/body_bg.jpg?id=201503261330") no-repeat top center;}.S_page .WB_miniblog{background:url("images/body_bg_page.jpg?id=201503261330") no-repeat top center;}#js_skin_skin048_skin{height:42px;}
\ No newline at end of file
<!DOCTYPE html>
<html lang="en" data-ng-app="websocketApp">
<head>
<title>test2</title>
<link rel="stylesheet" href="css/skin.css" />
<link rel="stylesheet" href="css/frame.css" />
<link rel="stylesheet" href="css/home_A.css" />
<script src="js/angular/angular.min.js"></script>
<script src="js/angular/angular-cookies.min.js"></script>
<script src="js/angular/angular-file-upload.min.js"></script>
<script src="js/angular/angular-resource.min.js"></script>
<script src="js/angular/angular-ui-router.min.js"></script>
<script src="js/app.js"></script>
</head>
<body>
<div id="WB_webim" class="WB_webim" style="position: fixed; bottom: 200px; right: 300px; z-index: 1024;">
<div class="webim_fold clearfix" style="top: -40px; right: 0px; visibility: visible;" >
<div class="fold_bg"></div>
<p class="fold_cont clearfix"> <span class="fold_icon W_fl"></span> <em class="fold_font W_fl W_f14">你有1条新私信</em> </p>
<div class="webim_hb" style="top: -19px; left: 214px; display: none;"></div>
<div></div>
</div>
<div class="webim_chat_window clearfix" style="width: 560px; position: absolute; right: 0px; bottom: 0px; z-index: 950; display: block;">
<div class="WB_webim_page W_fl">
<div class="webim_serch">
<span class="WB_search_s"><input type="text" maxlength="20" placeholder="查找联系人" class="W_input" /><span class="pos"></span></span>
</div>
<div class="webim_contacts_mod">
<div class="webim_contacts_bd" style="position: relative; overflow: hidden;">
<div class="webim_tab_bd">
<div class="webim_contacts_group">
<div class="WB_empty" style="display: none;">
<div class="WB_innerwrap">
<div class="empty_con clearfix">
<p class="text">搜索你的联系人发条消息吧~</p>
</div>
</div>
</div>
<ul class="webim_contacts_list" ng-controller="UserListCtrl">
<li class="contacts SW_fun_bg clearfix" ng-repeat="user in users">
<div class="head W_fl">
<img width="30" height="30" src="http://tp4.sinaimg.cn/5191023095/50/5703464933/1" />
</div><p class="name W_autocut W_fl S_txt1">111</p>
<div class="number W_fr">
<em class="W_new_count">{{user.messages}}</em>
</div>
</li>
</ul>
</div>
</div>
<div class="UI_scrollBar W_scroll_y S_bg1" style="overflow: initial; right: 0px; display: none; z-index: 1000;">
<div class="bar S_txt2_bg"></div>
</div>
</div>
</div>
<div class="contacts_bottom">
<!-- <a target="blank" href="http://weibo.com/messages">查看全部私信</a>
<em style="display:none;" class="W_new"></em>
<a href="javascript:;" class="W_ficon ficon_setup S_ficon">J</a>
<div class="layer_menu_list" style="bottom: 33px; right: 24px; display: none;">
<ul>
<li><a href="javascript:;">关闭新闻提醒</a></li>
<li><a href="javascript:;">开启声音提醒</a></li>
</ul>
</div> -->
</div>
</div>
<div ng-controller="MessagesCtrl" class="private_dialogue_box W_fl">
<div class="chat_head clearfix">
<div class="chat_icon W_fr">
<a href="javascript:void(0);" onclick="return false;" class="W_ficon ficon_p_invite S_ficon" title="添加群成员" style="display: none;">&atilde;</a>
<a class="W_ficon ficon_fans S_ficon" href="javascript:void(0);" onclick="return false;" title="群管理" style="display: none;">&agrave;</a>
<a href="javascript:void(0);" onclick="return false;" class="W_ficon ficon_arrow_up S_ficon" title="菜单">c</a>
<a href="javascript:void(0);" onclick="return false;" class="W_ficon ficon_close S_ficon" title="关闭">X</a>
</div>
<!-- 下拉列表1 -->
<div class="layer_menu_list" style="display: none; top: 28px; right: 40px; visibility: hidden;">
<ul>
<li><a href="javascript:void(0);" onclick="return false;">保存到群列表</a></li>
<li><a href="javascript:void(0);" onclick="return false;">进入群主页</a></li>
<li><a href="javascript:void(0);" onclick="return false;">关闭该群提醒</a></li>
<li><a href="javascript:void(0);" onclick="return false;">退出该群</a></li>
</ul>
</div>
<!-- 下拉列表1 -->
<!-- 下拉列表2 -->
<div class="layer_menu_list" style="display: none; top: 28px; right: 40px; visibility: hidden;">
<ul>
<li><a href="javascript:void(0);" onclick="return false;">屏蔽私信</a></li>
</ul>
</div>
<!-- 下拉列表2 -->
</div>
<div class="private_dialogue_body" style="position: relative; height: 319px;">
<div class="private_tips private_tips_top" style="display: none; visibility: hidden;">
<div class="W_tips tips_warn clearfix">
<p class="icon"><span class="W_icon icon_warnS"></span></p>
<p class="txt"></p>
<p class="close"><a href="javascript:void(0);" onclick="return false;" class="W_ficon ficon_close S_ficon">X</a></p>
</div>
</div>
<div class="webim_tips" style="bottom: 34px; right: 10px; display: none; visibility: hidden;" >
<p class="txt">下方有新消息</p>
</div>
<div>
<div class="private_dialogue_cont" style="position: relative; top: 0px; overflow: hidden; display: block; visibility: visible; height: 285px;">
<div>
<!-- 退群提示 -->
<!-- <div class="private_tips">
<div class="W_tips tips_warn clearfix">
<p class="txt">对话中请勿轻信汇款、中奖信息、陌生电话。</p>
</div>
</div> -->
<!-- 对话提示 -->
<fieldset class="private_dialogue_prompt S_line1">
<legend class="prompt_font S_txt2 S_bg1">6月10日09:46</legend>
</fieldset>
<div class="msg_bubble_list bubble_l " style="display: block">
<div class="bubble_mod clearfix">
<div class="bubble_user">
<a href="http://weibo.com/u/2715025067" target="_blank" class="face default_face"><img src="http://tp4.sinaimg.cn/5191023095/50/5703464933/1" width="30" height="30" src="http://tp4.sinaimg.cn/5191023095/50/5703464933/1" /></a>
</div>
<p class="bubble_name W_autocut" style="height: 15px;display:none" href="http://weibo.com/u/2715025067" target="_blank">微博会员</p>
<p class="bubble_prompt" style="display:none;"></p>
<div class="bubble_box SW_fun ">
<div class="bubble_cont ">
<div class="bubble_arrow">
<div class="W_arrow_bor W_arrow_bor_l">
<i></i>
<em></em>
</div>
</div>
<div class="bubble_main clearfix">
<div class="cont">
<p class="page">
测试啊啊啊
</p>
</div>
</div>
</div>
<div class="space"></div>
</div>
</div>
</div>
<!-- 对话提示 -->
<fieldset class="private_dialogue_prompt S_line1">
<legend class="prompt_font S_txt2 S_bg1">以上是历史记录</legend>
</fieldset>
<div ng-repeat="m in messages" ng-class="{true:'msg_bubble_list bubble_l',false:'msg_bubble_list bubble_r'}[m.type==1]" style="display: block">
<div class="bubble_mod clearfix">
<div class="bubble_user">
<a href="http://weibo.com/u/3955027752" target="_blank" class="face default_face"><img _src="#{avatarurl}" width="30" height="30" src="http://tp1.sinaimg.cn/3955027752/30/5728607898/1" /></a>
</div>
<p class="bubble_name W_autocut" style="height: 15px;display:none" href="http://weibo.com/u/3955027752" target="_blank">海东青童鞋</p>
<p class="bubble_prompt" style="display: none;"><span class="W_icon icon_rederrorS"></span>发送失败,请输入验证码</p>
<div class="bubble_box SW_fun ">
<div class="bubble_cont ">
<div class="bubble_arrow">
<div class="W_arrow_bor W_arrow_bor_r">
<i></i>
<em></em>
</div>
</div>
<div class="bubble_main clearfix">
<div class="cont">
<p class="page">
{{m.message}}
</p>
</div>
</div>
</div>
<div class="space"></div>
</div>
</div>
</div>
</div>
<div class="UI_scrollBar W_scroll_y S_bg1" style="overflow: initial; right: 0px; z-index: 1000; height: 474px; display: none;">
<div class="bar S_txt2_bg" style="height: 164px; top: 0px;"></div>
</div>
</div>
</div>
</div>
<div class="private_send_box S_bg2" style="position:absolute; bottom:0;">
<!-- <div class="private_information S_bg2 S_line1">
<ul class="information_list clearfix information_list_three">
<li class="S_line1"><a href="javascript:void(0);" onclick="return false;" class="S_txt1"><em class="W_ficon ficon_link S_ficon">5</em>免流量</a></li>
<li class="S_line1"><a href="javascript:void(0);" onclick="return false;" class="S_txt1"><em class="W_ficon ficon_link S_ficon">5</em>会员特权</a></li>
<li class="#{iclass}"><a href="javascript:void(0);" onclick="return false;" class="S_txt1"><em class="W_ficon ficon_link S_ficon">5</em>成为会员</a></li>
</ul>
<div class="W_layer W_layer_pop" style="display: none; bottom: 42px;">
<div class="content layer_mini_info">
<p class="main_txt"> </p>
<div class="W_layer_arrow">
<span class="W_arrow_bor W_arrow_bor_b"><i class="S_line3"></i><em class="S_bg2_br"></em></span>
</div>
</div>
</div>
</div> -->
<!-- 触发textarea 时加 sendbox_mod_focus -->
<div class="sendbox_mod clearfix S_line1 ">
<!-- 私信模块 -->
<div class="sendbox_mod_l W_fl">
<div class="sendbox_annex S_bg2 S_line3" style="display: none;">
<div class="sendbox_file S_line2">
<div class="files clearfix">
<div class="private_file_mod W_fl W_autocut">
</div>
<div class="state_mod W_fr">
</div>
</div>
</div>
</div>
<div class="sendbox_area S_bg2">
<textarea ng-model="message" class="W_input" style="overflow: hidden; height: 22px;" placeholder="按回车发送"></textarea>
</div>
</div>
<!-- 私信模块 -->
<!-- 多功能区域 -->
<div class="sendbox_mod_r W_fl" style="height:30px;">
<div class="sendbox_bar">
<div class="sendbox_menu ">
<a href="javascript:void(0);" ng-click="send()" class="icon_send" title="发送">发送</a>
</div>
<p class="prompt" style="display: none;">-1000</p>
</div>
<object type="application/x-shockwave-flash" data="http://service.weibo.com/staticjs/tools/upload.swf?_version=1434097070525" width="44px" height="16px" id="webim_upload_box" style="visibility: visible; margin-left: 30px; z-index: 1500; position: relative; top: -22px; overflow: hidden;"><param name="menu" value="false"></param><param name="scale" value="noScale"></param><param name="allowFullscreen" value="true"></param><param name="allowScriptAccess" value="always"></param><param name="bgcolor" value=""></param><param name="wmode" value="transparent"></param><param name="data" value="upload.swf"></param><param name="flashvars" value="swfid=webim_upload_box&amp;maxSumSize=50&amp;maxFileSize=50&amp;maxFileNum=100&amp;multiSelect=0&amp;uploadAPI=http%3A%2F%2Fupload.api.weibo.com%2F2%2Fmss%2Fupload.json%3Fsource%3D209678993&amp;initFun=$WBIM._uploadEvent.init&amp;sucFun=$WBIM._uploadEvent.success&amp;errFun=$WBIM._uploadEvent.error&amp;beginFun=$WBIM._uploadEvent.start&amp;showTipFun=$WBIM._uploadEvent.showTip&amp;hiddenTipFun=$WBIM._uploadEvent.hideTip&amp;areaInfo=0-16|12-16&amp;fExt=*.jpg;*.gif;*.jpeg;*.png|*&amp;fExtDec=选择图片|选择文件"></param></object>
</div>
<!-- 图片预览 -->
<div class="W_layer W_layer_pop" style="display: none; bottom: 70px; right: 29px;">
<div class="content layer_mini_info">
<div class="img_cont">
<div class="img_cont_two">
<img alt="" />
</div>
<div>
<div class="W_layer_arrow">
<span class="W_arrow_bor W_arrow_bor_b"><i class="S_line3"></i><em class="S_bg2_br"></em></span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div style="display:none;" class="private_tips private_tips_top">
<div class="W_tips tips_warn clearfix"></div>
</div>
<div class="_mask" style="position: absolute; right: 0px; top: 0px; opacity: 0.3; z-index: 1001; height: 100%; width: 100%; display: none; visibility: hidden; background: rgb(0, 0, 0);"></div>
<div class="W_layer" style="z-index: 1002; display: none; visibility: hidden;">
<div class="content">
<div class="W_layer_title">
提示
</div>
<div class="W_layer_close">
<a href="javascript:void(0);" onclick="return false;" class="W_ficon ficon_close S_ficon">X</a>
</div>
<div class="layer_point">
<dl class="point clearfix">
<dt>
<span class="W_icon icon_questionB"></span>
</dt>
<dd>
<p class="S_txt1">确定要解除对xxx的屏蔽吗?</p>
</dd>
</dl>
</div>
<div class="W_layer_btn S_bg1">
<a href="javascript:void(0);" onclick="return false;" class="W_btn_a btn_34px">确认</a>
<a href="javascript:void(0);" onclick="return false;" class="W_btn_b btn_34px">取消</a>
</div>
</div>
</div>
</div>
<div class="W_layer W_layer_pop" style="bottom: 40px; left: -466px; display: none;">
<div class="content">
<div class="W_layer_close">
<a href="javascript:void(0);" onclick="return false;" class="W_ficon ficon_close S_ficon">X</a>
</div>
<!--自定义区域-->
<div class="layer_faces">
<!--tab-->
<div class="WB_minitab">
<ul class="minitb_ul S_line1 S_bg1 clearfix">
<li class="minitb_item current S_line1"><a href="javascript:void(0);" onclick="return false;" class="minitb_lk S_txt1 S_bg2 S_txt1 S_bg3">默认</a><span class="cur_block"></span></li>
<li class="minitb_item S_line1"><a href="javascript:void(0);" onclick="return false;" class="minitb_lk S_txt1">热门</a><span class="cur_block"></span></li>
<li class="minitb_item S_line1"><a href="javascript:void(0);" onclick="return false;" class="minitb_lk S_txt1">浪小花</a><span class="cur_block"></span></li>
<li class="minitb_item S_line1"><a href="javascript:void(0);" onclick="return false;" class="minitb_lk S_txt1">哆啦A梦</a><span class="cur_block"></span></li>
<li class="minitb_item S_line1"><a href="javascript:void(0);" onclick="return false;" class="minitb_lk S_txt1">暴走漫画</a><span class="cur_block"></span></li>
</ul>
<!--翻页按钮-->
<ul class="W_fr minitb_ul S_line1 S_bg1 clearfix">
<li class="minitb_more S_line1"> <a href="javascript:void(0);" onclick="return false;" class="minitb_lk S_txt1 W_btn_b_disable"><i class="W_ficon ficon_arrow_left_lite S_ficon">j</i></a></li>
<li class="minitb_more S_line1"> <a href="javascript:void(0);" onclick="return false;" class="minitb_lk S_txt1"><i class="W_ficon ficon_arrow_right_lite S_ficon">i</i></a></li>
</ul>
<!--<li class="minitb_more S_line1"> <a href="#1" class="minitb_lk S_txt1"><i class="W_ficon ficon_arrow_left_lite S_ficon">j</i></a></li> <li class="minitb_more S_line1"> <a href="#1" class="minitb_lk S_txt1 W_btn_b_disable"><i class="W_ficon ficon_arrow_right_lite S_ficon">i</i></a></li>-->
</div>
<!--/tab-->
<!--list-->
<div class="faces_list_box">
<!--滚动条组件-->
<div class="faces_list UI_scrollView " style="overflow: hidden; width: 387px; position: relative;">
<!--模块最外层,需要设置定位和高度值-->
<div class="UI_scrollContainer" style="width: 390px;">
<div class="UI_scrollContent">
<!--这里放需要滚动的模块-->
<ul>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
<li /></li>
</ul>
</div>
</div>
<div class="UI_scrollBar W_scroll_y S_bg1" style="overflow: initial; right: 0px; display: none; z-index: 1000;">
<div class="bar S_txt2_bg"></div>
</div>
</div>
<!--/滚动条组件-->
</div>
<!--/list-->
</div>
<!--/自定义区域 箭头方向-->
<div class="W_layer_arrow">
<span class="W_arrow_bor W_arrow_bor_b" style="left: 378px"><i class="S_line3"></i><em class="S_bg2_br"></em></span>
</div>
</div>
</div>
</div>
</body>
</html>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
/*
AngularJS v1.2.22
(c) 2010-2014 Google, Inc. http://angularjs.org
License: MIT
*/
(function(p,f,n){'use strict';f.module("ngCookies",["ng"]).factory("$cookies",["$rootScope","$browser",function(e,b){var c={},g={},h,k=!1,l=f.copy,m=f.isUndefined;b.addPollFn(function(){var a=b.cookies();h!=a&&(h=a,l(a,g),l(a,c),k&&e.$apply())})();k=!0;e.$watch(function(){var a,d,e;for(a in g)m(c[a])&&b.cookies(a,n);for(a in c)d=c[a],f.isString(d)||(d=""+d,c[a]=d),d!==g[a]&&(b.cookies(a,d),e=!0);if(e)for(a in d=b.cookies(),c)c[a]!==d[a]&&(m(d[a])?delete c[a]:c[a]=d[a])});return c}]).factory("$cookieStore",
["$cookies",function(e){return{get:function(b){return(b=e[b])?f.fromJson(b):b},put:function(b,c){e[b]=f.toJson(c)},remove:function(b){delete e[b]}}}])})(window,window.angular);
//# sourceMappingURL=angular-cookies.min.js.map
{
"version":3,
"file":"angular-cookies.min.js",
"lineCount":7,
"mappings":"A;;;;;aAKC,SAAQ,CAACA,CAAD,CAASC,CAAT,CAAkBC,CAAlB,CAA6B,CAmBtCD,CAAAE,OAAA,CAAe,WAAf,CAA4B,CAAC,IAAD,CAA5B,CAAAC,QAAA,CA0BW,UA1BX,CA0BuB,CAAC,YAAD,CAAe,UAAf,CAA2B,QAAS,CAACC,CAAD,CAAaC,CAAb,CAAuB,CAAA,IACxEC,EAAU,EAD8D,CAExEC,EAAc,EAF0D,CAGxEC,CAHwE,CAIxEC,EAAU,CAAA,CAJ8D,CAKxEC,EAAOV,CAAAU,KALiE,CAMxEC,EAAcX,CAAAW,YAGlBN,EAAAO,UAAA,CAAmB,QAAQ,EAAG,CAC5B,IAAIC,EAAiBR,CAAAC,QAAA,EACjBE,EAAJ,EAA0BK,CAA1B,GACEL,CAGA,CAHqBK,CAGrB,CAFAH,CAAA,CAAKG,CAAL,CAAqBN,CAArB,CAEA,CADAG,CAAA,CAAKG,CAAL,CAAqBP,CAArB,CACA,CAAIG,CAAJ,EAAaL,CAAAU,OAAA,EAJf,CAF4B,CAA9B,CAAA,EAUAL,EAAA,CAAU,CAAA,CAKVL,EAAAW,OAAA,CASAC,QAAa,EAAG,CAAA,IACVC,CADU,CAEVC,CAFU,CAIVC,CAGJ,KAAKF,CAAL,GAAaV,EAAb,CACMI,CAAA,CAAYL,CAAA,CAAQW,CAAR,CAAZ,CAAJ,EACEZ,CAAAC,QAAA,CAAiBW,CAAjB,CAAuBhB,CAAvB,CAKJ,KAAIgB,CAAJ,GAAYX,EAAZ,CACEY,CAKA,CALQZ,CAAA,CAAQW,CAAR,CAKR,CAJKjB,CAAAoB,SAAA,CAAiBF,CAAjB,CAIL,GAHEA,CACA,CADQ,EACR,CADaA,CACb,CAAAZ,CAAA,CAAQW,CAAR,CAAA,CAAgBC,CAElB,EAAIA,CAAJ,GAAcX,CAAA,CAAYU,CAAZ,CAAd,GACEZ,CAAAC,QAAA,CAAiBW,CAAjB,CAAuBC,CAAvB,CACA,CAAAC,CAAA,CAAU,CAAA,CAFZ,CAOF,IAAIA,CAAJ,CAIE,IAAKF,CAAL,GAFAI,EAEaf,CAFID,CAAAC,QAAA,EAEJA,CAAAA,CAAb,CACMA,CAAA,CAAQW,CAAR,CAAJ,GAAsBI,CAAA,CAAeJ,CAAf,CAAtB,GAEMN,CAAA,CAAYU,CAAA,CAAeJ,CAAf,CAAZ,CAAJ,CACE,OAAOX,CAAA,CAAQW,CAAR,CADT,CAGEX,CAAA,CAAQW,CAAR,CAHF,CAGkBI,CAAA,CAAeJ,CAAf,CALpB,CAhCU,CAThB,CAEA,OAAOX,EA1BqE,CAA3D,CA1BvB,CAAAH,QAAA,CAoIW,cApIX;AAoI2B,CAAC,UAAD,CAAa,QAAQ,CAACmB,CAAD,CAAW,CAErD,MAAO,KAWAC,QAAQ,CAACC,CAAD,CAAM,CAEjB,MAAO,CADHN,CACG,CADKI,CAAA,CAASE,CAAT,CACL,EAAQxB,CAAAyB,SAAA,CAAiBP,CAAjB,CAAR,CAAkCA,CAFxB,CAXd,KA0BAQ,QAAQ,CAACF,CAAD,CAAMN,CAAN,CAAa,CACxBI,CAAA,CAASE,CAAT,CAAA,CAAgBxB,CAAA2B,OAAA,CAAeT,CAAf,CADQ,CA1BrB,QAuCGU,QAAQ,CAACJ,CAAD,CAAM,CACpB,OAAOF,CAAA,CAASE,CAAT,CADa,CAvCjB,CAF8C,CAAhC,CApI3B,CAnBsC,CAArC,CAAA,CAwMEzB,MAxMF,CAwMUA,MAAAC,QAxMV;",
"sources":["angular-cookies.js"],
"names":["window","angular","undefined","module","factory","$rootScope","$browser","cookies","lastCookies","lastBrowserCookies","runEval","copy","isUndefined","addPollFn","currentCookies","$apply","$watch","push","name","value","updated","isString","browserCookies","$cookies","get","key","fromJson","put","toJson","remove"]
}
/*
angular-file-upload v1.1.1
https://github.com/nervgh/angular-file-upload
*/
!function(a,b){return"function"==typeof define&&define.amd?void define("angular-file-upload",["angular"],function(a){return b(a)}):b(a)}("undefined"==typeof angular?null:angular,function(a){var b=a.module("angularFileUpload",[]);return b.value("fileUploaderOptions",{url:"/",alias:"file",headers:{},queue:[],progress:0,autoUpload:!1,removeAfterUpload:!1,method:"POST",filters:[],formData:[],queueLimit:Number.MAX_VALUE,withCredentials:!1}).factory("FileUploader",["fileUploaderOptions","$rootScope","$http","$window","$compile",function(b,c,d,e,f){function g(c){var d=a.copy(b);a.extend(this,d,c,{isUploading:!1,_nextIndex:0,_failFilterIndex:-1,_directives:{select:[],drop:[],over:[]}}),this.filters.unshift({name:"queueLimit",fn:this._queueLimitFilter}),this.filters.unshift({name:"folder",fn:this._folderFilter})}function h(b){var c=a.isElement(b),d=c?b.value:b,e=a.isString(d)?"FakePath":"Object",f="_createFrom"+e;this[f](d)}function i(b,c,d){var e=a.isElement(c),f=e?a.element(c):null,h=e?null:c;a.extend(this,{url:b.url,alias:b.alias,headers:a.copy(b.headers),formData:a.copy(b.formData),removeAfterUpload:b.removeAfterUpload,withCredentials:b.withCredentials,method:b.method},d,{uploader:b,file:new g.FileLikeObject(c),isReady:!1,isUploading:!1,isUploaded:!1,isSuccess:!1,isCancel:!1,isError:!1,progress:0,index:null,_file:h,_input:f}),f&&this._replaceNode(f)}function j(b){a.extend(this,b),this.uploader._directives[this.prop].push(this),this._saveLinks(),this.bind()}function k(){k.super_.apply(this,arguments),this.uploader.isHTML5||this.element.removeAttr("multiple"),this.element.prop("value",null)}function l(){l.super_.apply(this,arguments)}function m(){m.super_.apply(this,arguments)}return g.prototype.isHTML5=!(!e.File||!e.FormData),g.prototype.addToQueue=function(b,c,d){var e=this.isArrayLikeObject(b)?b:[b],f=this._getFilters(d),h=this.queue.length,i=[];a.forEach(e,function(a){var b=new g.FileLikeObject(a);if(this._isValidFile(b,f,c)){var d=new g.FileItem(this,a,c);i.push(d),this.queue.push(d),this._onAfterAddingFile(d)}else{var e=this.filters[this._failFilterIndex];this._onWhenAddingFileFailed(b,e,c)}},this),this.queue.length!==h&&(this._onAfterAddingAll(i),this.progress=this._getTotalProgress()),this._render(),this.autoUpload&&this.uploadAll()},g.prototype.removeFromQueue=function(a){var b=this.getIndexOfItem(a),c=this.queue[b];c.isUploading&&c.cancel(),this.queue.splice(b,1),c._destroy(),this.progress=this._getTotalProgress()},g.prototype.clearQueue=function(){for(;this.queue.length;)this.queue[0].remove();this.progress=0},g.prototype.uploadItem=function(a){var b=this.getIndexOfItem(a),c=this.queue[b],d=this.isHTML5?"_xhrTransport":"_iframeTransport";c._prepareToUploading(),this.isUploading||(this.isUploading=!0,this[d](c))},g.prototype.cancelItem=function(a){var b=this.getIndexOfItem(a),c=this.queue[b],d=this.isHTML5?"_xhr":"_form";c&&c.isUploading&&c[d].abort()},g.prototype.uploadAll=function(){var b=this.getNotUploadedItems().filter(function(a){return!a.isUploading});b.length&&(a.forEach(b,function(a){a._prepareToUploading()}),b[0].upload())},g.prototype.cancelAll=function(){var b=this.getNotUploadedItems();a.forEach(b,function(a){a.cancel()})},g.prototype.isFile=function(a){var b=e.File;return b&&a instanceof b},g.prototype.isFileLikeObject=function(a){return a instanceof g.FileLikeObject},g.prototype.isArrayLikeObject=function(b){return a.isObject(b)&&"length"in b},g.prototype.getIndexOfItem=function(b){return a.isNumber(b)?b:this.queue.indexOf(b)},g.prototype.getNotUploadedItems=function(){return this.queue.filter(function(a){return!a.isUploaded})},g.prototype.getReadyItems=function(){return this.queue.filter(function(a){return a.isReady&&!a.isUploading}).sort(function(a,b){return a.index-b.index})},g.prototype.destroy=function(){a.forEach(this._directives,function(b){a.forEach(this._directives[b],function(a){a.destroy()},this)},this)},g.prototype.onAfterAddingAll=function(){},g.prototype.onAfterAddingFile=function(){},g.prototype.onWhenAddingFileFailed=function(){},g.prototype.onBeforeUploadItem=function(){},g.prototype.onProgressItem=function(){},g.prototype.onProgressAll=function(){},g.prototype.onSuccessItem=function(){},g.prototype.onErrorItem=function(){},g.prototype.onCancelItem=function(){},g.prototype.onCompleteItem=function(){},g.prototype.onCompleteAll=function(){},g.prototype._getTotalProgress=function(a){if(this.removeAfterUpload)return a||0;var b=this.getNotUploadedItems().length,c=b?this.queue.length-b:this.queue.length,d=100/this.queue.length,e=(a||0)*d/100;return Math.round(c*d+e)},g.prototype._getFilters=function(b){if(a.isUndefined(b))return this.filters;if(a.isArray(b))return b;var c=b.match(/[^\s,]+/g);return this.filters.filter(function(a){return-1!==c.indexOf(a.name)},this)},g.prototype._render=function(){c.$$phase||c.$apply()},g.prototype._folderFilter=function(a){return!(!a.size&&!a.type)},g.prototype._queueLimitFilter=function(){return this.queue.length<this.queueLimit},g.prototype._isValidFile=function(a,b,c){return this._failFilterIndex=-1,b.length?b.every(function(b){return this._failFilterIndex++,b.fn.call(this,a,c)},this):!0},g.prototype._isSuccessCode=function(a){return a>=200&&300>a||304===a},g.prototype._transformResponse=function(b){return a.forEach(d.defaults.transformResponse,function(a){b=a(b)}),b},g.prototype._parseHeaders=function(b){function c(a){return a.replace(/^\s+/,"").replace(/\s+$/,"")}function d(a){return a.toLowerCase()}var e,f,g,h={};return b?(a.forEach(b.split("\n"),function(a){g=a.indexOf(":"),e=d(c(a.substr(0,g))),f=c(a.substr(g+1)),e&&(h[e]=h[e]?h[e]+", "+f:f)}),h):h},g.prototype._xhrTransport=function(b){var c=b._xhr=new XMLHttpRequest,d=new FormData,e=this;e._onBeforeUploadItem(b),a.forEach(b.formData,function(b){a.forEach(b,function(a,b){d.append(b,a)})}),d.append(b.alias,b._file,b.file.name),c.upload.onprogress=function(a){var c=Math.round(a.lengthComputable?100*a.loaded/a.total:0);e._onProgressItem(b,c)},c.onload=function(){var a=e._parseHeaders(c.getAllResponseHeaders()),d=e._transformResponse(c.response),f=e._isSuccessCode(c.status)?"Success":"Error",g="_on"+f+"Item";e[g](b,d,c.status,a),e._onCompleteItem(b,d,c.status,a)},c.onerror=function(){var a=e._parseHeaders(c.getAllResponseHeaders()),d=e._transformResponse(c.response);e._onErrorItem(b,d,c.status,a),e._onCompleteItem(b,d,c.status,a)},c.onabort=function(){var a=e._parseHeaders(c.getAllResponseHeaders()),d=e._transformResponse(c.response);e._onCancelItem(b,d,c.status,a),e._onCompleteItem(b,d,c.status,a)},c.open(b.method,b.url,!0),c.withCredentials=b.withCredentials,a.forEach(b.headers,function(a,b){c.setRequestHeader(b,a)}),c.send(d),this._render()},g.prototype._iframeTransport=function(b){var c=a.element('<form style="display: none;" />'),d=a.element('<iframe name="iframeTransport'+Date.now()+'">'),e=b._input,f=this;b._form&&b._form.replaceWith(e),b._form=c,f._onBeforeUploadItem(b),e.prop("name",b.alias),a.forEach(b.formData,function(b){a.forEach(b,function(b,d){c.append(a.element('<input type="hidden" name="'+d+'" value="'+b+'" />'))})}),c.prop({action:b.url,method:"POST",target:d.prop("name"),enctype:"multipart/form-data",encoding:"multipart/form-data"}),d.bind("load",function(){try{var a=d[0].contentDocument.body.innerHTML}catch(c){}var e={response:a,status:200,dummy:!0},g=f._transformResponse(e.response),h={};f._onSuccessItem(b,g,e.status,h),f._onCompleteItem(b,g,e.status,h)}),c.abort=function(){var a,g={status:0,dummy:!0},h={};d.unbind("load").prop("src","javascript:false;"),c.replaceWith(e),f._onCancelItem(b,a,g.status,h),f._onCompleteItem(b,a,g.status,h)},e.after(c),c.append(e).append(d),c[0].submit(),this._render()},g.prototype._onWhenAddingFileFailed=function(a,b,c){this.onWhenAddingFileFailed(a,b,c)},g.prototype._onAfterAddingFile=function(a){this.onAfterAddingFile(a)},g.prototype._onAfterAddingAll=function(a){this.onAfterAddingAll(a)},g.prototype._onBeforeUploadItem=function(a){a._onBeforeUpload(),this.onBeforeUploadItem(a)},g.prototype._onProgressItem=function(a,b){var c=this._getTotalProgress(b);this.progress=c,a._onProgress(b),this.onProgressItem(a,b),this.onProgressAll(c),this._render()},g.prototype._onSuccessItem=function(a,b,c,d){a._onSuccess(b,c,d),this.onSuccessItem(a,b,c,d)},g.prototype._onErrorItem=function(a,b,c,d){a._onError(b,c,d),this.onErrorItem(a,b,c,d)},g.prototype._onCancelItem=function(a,b,c,d){a._onCancel(b,c,d),this.onCancelItem(a,b,c,d)},g.prototype._onCompleteItem=function(b,c,d,e){b._onComplete(c,d,e),this.onCompleteItem(b,c,d,e);var f=this.getReadyItems()[0];return this.isUploading=!1,a.isDefined(f)?void f.upload():(this.onCompleteAll(),this.progress=this._getTotalProgress(),void this._render())},g.isFile=g.prototype.isFile,g.isFileLikeObject=g.prototype.isFileLikeObject,g.isArrayLikeObject=g.prototype.isArrayLikeObject,g.isHTML5=g.prototype.isHTML5,g.inherit=function(a,b){a.prototype=Object.create(b.prototype),a.prototype.constructor=a,a.super_=b},g.FileLikeObject=h,g.FileItem=i,g.FileDirective=j,g.FileSelect=k,g.FileDrop=l,g.FileOver=m,h.prototype._createFromFakePath=function(a){this.lastModifiedDate=null,this.size=null,this.type="like/"+a.slice(a.lastIndexOf(".")+1).toLowerCase(),this.name=a.slice(a.lastIndexOf("/")+a.lastIndexOf("\\")+2)},h.prototype._createFromObject=function(b){this.lastModifiedDate=a.copy(b.lastModifiedDate),this.size=b.size,this.type=b.type,this.name=b.name},i.prototype.upload=function(){this.uploader.uploadItem(this)},i.prototype.cancel=function(){this.uploader.cancelItem(this)},i.prototype.remove=function(){this.uploader.removeFromQueue(this)},i.prototype.onBeforeUpload=function(){},i.prototype.onProgress=function(){},i.prototype.onSuccess=function(){},i.prototype.onError=function(){},i.prototype.onCancel=function(){},i.prototype.onComplete=function(){},i.prototype._onBeforeUpload=function(){this.isReady=!0,this.isUploading=!0,this.isUploaded=!1,this.isSuccess=!1,this.isCancel=!1,this.isError=!1,this.progress=0,this.onBeforeUpload()},i.prototype._onProgress=function(a){this.progress=a,this.onProgress(a)},i.prototype._onSuccess=function(a,b,c){this.isReady=!1,this.isUploading=!1,this.isUploaded=!0,this.isSuccess=!0,this.isCancel=!1,this.isError=!1,this.progress=100,this.index=null,this.onSuccess(a,b,c)},i.prototype._onError=function(a,b,c){this.isReady=!1,this.isUploading=!1,this.isUploaded=!0,this.isSuccess=!1,this.isCancel=!1,this.isError=!0,this.progress=0,this.index=null,this.onError(a,b,c)},i.prototype._onCancel=function(a,b,c){this.isReady=!1,this.isUploading=!1,this.isUploaded=!1,this.isSuccess=!1,this.isCancel=!0,this.isError=!1,this.progress=0,this.index=null,this.onCancel(a,b,c)},i.prototype._onComplete=function(a,b,c){this.onComplete(a,b,c),this.removeAfterUpload&&this.remove()},i.prototype._destroy=function(){this._input&&this._input.remove(),this._form&&this._form.remove(),delete this._form,delete this._input},i.prototype._prepareToUploading=function(){this.index=this.index||++this.uploader._nextIndex,this.isReady=!0},i.prototype._replaceNode=function(a){var b=f(a.clone())(a.scope());b.prop("value",null),a.css("display","none"),a.after(b)},j.prototype.events={},j.prototype.bind=function(){for(var a in this.events){var b=this.events[a];this.element.bind(a,this[b])}},j.prototype.unbind=function(){for(var a in this.events)this.element.unbind(a,this.events[a])},j.prototype.destroy=function(){var a=this.uploader._directives[this.prop].indexOf(this);this.uploader._directives[this.prop].splice(a,1),this.unbind()},j.prototype._saveLinks=function(){for(var a in this.events){var b=this.events[a];this[b]=this[b].bind(this)}},g.inherit(k,j),k.prototype.events={$destroy:"destroy",change:"onChange"},k.prototype.prop="select",k.prototype.getOptions=function(){},k.prototype.getFilters=function(){},k.prototype.isEmptyAfterSelection=function(){return!!this.element.attr("multiple")},k.prototype.onChange=function(){var a=this.uploader.isHTML5?this.element[0].files:this.element[0],b=this.getOptions(),c=this.getFilters();this.uploader.isHTML5||this.destroy(),this.uploader.addToQueue(a,b,c),this.isEmptyAfterSelection()&&this.element.prop("value",null)},g.inherit(l,j),l.prototype.events={$destroy:"destroy",drop:"onDrop",dragover:"onDragOver",dragleave:"onDragLeave"},l.prototype.prop="drop",l.prototype.getOptions=function(){},l.prototype.getFilters=function(){},l.prototype.onDrop=function(b){var c=this._getTransfer(b);if(c){var d=this.getOptions(),e=this.getFilters();this._preventAndStop(b),a.forEach(this.uploader._directives.over,this._removeOverClass,this),this.uploader.addToQueue(c.files,d,e)}},l.prototype.onDragOver=function(b){var c=this._getTransfer(b);this._haveFiles(c.types)&&(c.dropEffect="copy",this._preventAndStop(b),a.forEach(this.uploader._directives.over,this._addOverClass,this))},l.prototype.onDragLeave=function(b){b.target===this.element[0]&&(this._preventAndStop(b),a.forEach(this.uploader._directives.over,this._removeOverClass,this))},l.prototype._getTransfer=function(a){return a.dataTransfer?a.dataTransfer:a.originalEvent.dataTransfer},l.prototype._preventAndStop=function(a){a.preventDefault(),a.stopPropagation()},l.prototype._haveFiles=function(a){return a?a.indexOf?-1!==a.indexOf("Files"):a.contains?a.contains("Files"):!1:!1},l.prototype._addOverClass=function(a){a.addOverClass()},l.prototype._removeOverClass=function(a){a.removeOverClass()},g.inherit(m,j),m.prototype.events={$destroy:"destroy"},m.prototype.prop="over",m.prototype.overClass="nv-file-over",m.prototype.addOverClass=function(){this.element.addClass(this.getOverClass())},m.prototype.removeOverClass=function(){this.element.removeClass(this.getOverClass())},m.prototype.getOverClass=function(){return this.overClass},g}]).directive("nvFileSelect",["$parse","FileUploader",function(a,b){return{link:function(c,d,e){var f=c.$eval(e.uploader);if(!(f instanceof b))throw new TypeError('"Uploader" must be an instance of FileUploader');var g=new b.FileSelect({uploader:f,element:d});g.getOptions=a(e.options).bind(g,c),g.getFilters=function(){return e.filters}}}}]).directive("nvFileDrop",["$parse","FileUploader",function(a,b){return{link:function(c,d,e){var f=c.$eval(e.uploader);if(!(f instanceof b))throw new TypeError('"Uploader" must be an instance of FileUploader');if(f.isHTML5){var g=new b.FileDrop({uploader:f,element:d});g.getOptions=a(e.options).bind(g,c),g.getFilters=function(){return e.filters}}}}}]).directive("nvFileOver",["FileUploader",function(a){return{link:function(b,c,d){var e=b.$eval(d.uploader);if(!(e instanceof a))throw new TypeError('"Uploader" must be an instance of FileUploader');var f=new a.FileOver({uploader:e,element:c});f.getOverClass=function(){return d.overClass||this.overClass}}}}]),b});
//# sourceMappingURL=angular-file-upload.min.map
\ No newline at end of file
<!-- saved from url=(0095)https://raw.githubusercontent.com/nervgh/angular-file-upload/master/angular-file-upload.min.map -->
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">{"version":3,"file":"angular-file-upload.min.js","sources":["angular-file-upload.js"],"names":["angular","factory","define","amd","module","value","url","alias","headers","queue","progress","autoUpload","removeAfterUpload","method","filters","formData","queueLimit","Number","MAX_VALUE","withCredentials","fileUploaderOptions","$rootScope","$http","$window","$compile","FileUploader","options","settings","copy","extend","this","isUploading","_nextIndex","_failFilterIndex","_directives","select","drop","over","unshift","name","fn","_queueLimitFilter","_folderFilter","FileLikeObject","fileOrInput","isInput","isElement","fakePathOrObject","postfix","isString","FileItem","uploader","some","input","element","file","isReady","isUploaded","isSuccess","isCancel","isError","index","_file","_input","_replaceNode","FileDirective","prop","push","_saveLinks","bind","FileSelect","super_","apply","arguments","isHTML5","removeAttr","FileDrop","FileOver","prototype","File","FormData","addToQueue","files","list","isArrayLikeObject","arrayOfFilters","_getFilters","count","length","addedFileItems","forEach","temp","_isValidFile","fileItem","_onAfterAddingFile","filter","_onWhenAddingFileFailed","_onAfterAddingAll","_getTotalProgress","_render","uploadAll","removeFromQueue","getIndexOfItem","item","cancel","splice","_destroy","clearQueue","remove","uploadItem","transport","_prepareToUploading","cancelItem","abort","items","getNotUploadedItems","upload","cancelAll","isFile","isFileLikeObject","isObject","isNumber","indexOf","getReadyItems","sort","item1","item2","destroy","key","object","onAfterAddingAll","onAfterAddingFile","onWhenAddingFileFailed","onBeforeUploadItem","onProgressItem","onProgressAll","onSuccessItem","onErrorItem","onCancelItem","onCompleteItem","onCompleteAll","notUploaded","uploaded","ratio","current","Math","round","isUndefined","isArray","names","match","$$phase","$apply","size","type","every","call","_isSuccessCode","status","_transformResponse","response","defaults","transformResponse","transformFn","_parseHeaders","trim","string","replace","lowercase","toLowerCase","val","i","parsed","split","line","substr","_xhrTransport","xhr","_xhr","XMLHttpRequest","form","that","_onBeforeUploadItem","obj","append","onprogress","event","lengthComputable","loaded","total","_onProgressItem","onload","getAllResponseHeaders","gist","_onCompleteItem","onerror","_onErrorItem","onabort","_onCancelItem","open","setRequestHeader","send","_iframeTransport","iframe","Date","now","_form","replaceWith","action","target","enctype","encoding","html","contentDocument","body","innerHTML","e","dummy","_onSuccessItem","unbind","after","submit","_onBeforeUpload","_onProgress","_onSuccess","_onError","_onCancel","_onComplete","nextItem","isDefined","inherit","source","Object","create","constructor","_createFromFakePath","path","lastModifiedDate","slice","lastIndexOf","_createFromObject","onBeforeUpload","onProgress","onSuccess","onError","onCancel","onComplete","clone","scope","css","events","$destroy","change","getOptions","getFilters","isEmptyAfterSelection","attr","onChange","dragover","dragleave","onDrop","transfer","_getTransfer","_preventAndStop","_removeOverClass","onDragOver","_haveFiles","types","dropEffect","_addOverClass","onDragLeave","dataTransfer","originalEvent","preventDefault","stopPropagation","contains","addOverClass","removeOverClass","overClass","addClass","getOverClass","removeClass","directive","$parse","link","attributes","$eval","TypeError"],"mappings":";;;;;CAIC,SAASA,EAASC,GACf,MAAsB,kBAAXC,SAAyBA,OAAOC,QACvCD,QAAO,uBAAwB,WAAY,SAASF,GAChD,MAAOC,GAAQD,KAGZC,EAAQD,IAEF,mBAAZA,SAA0B,KAAOA,QAAS,SAASA,GAE5D,GAAII,GAASJ,EAAQI,OAAO,uBAwxCxB,OAxwCJA,GAGKC,MAAM,uBACHC,IAAK,IACLC,MAAO,OACPC,WACAC,SACAC,SAAU,EACVC,YAAY,EACZC,mBAAmB,EACnBC,OAAQ,OACRC,WACAC,YACAC,WAAYC,OAAOC,UACnBC,iBAAiB,IAIpBlB,QAAQ,gBAAiB,sBAAuB,aAAc,QAAS,UAAW,WAC/E,SAASmB,EAAqBC,EAAYC,EAAOC,EAASC,GAMtD,QAASC,GAAaC,GAClB,GAAIC,GAAW3B,EAAQ4B,KAAKR,EAC5BpB,GAAQ6B,OAAOC,KAAMH,EAAUD,GAC3BK,aAAa,EACbC,WAAY,EACZC,iBAAkB,GAClBC,aAAcC,UAAYC,QAAUC,WAIxCP,KAAKhB,QAAQwB,SAASC,KAAM,aAAcC,GAAIV,KAAKW,oBACnDX,KAAKhB,QAAQwB,SAASC,KAAM,SAAUC,GAAIV,KAAKY,gBAmpBnD,QAASC,GAAeC,GACpB,GAAIC,GAAU7C,EAAQ8C,UAAUF,GAC5BG,EAAmBF,EAAUD,EAAYvC,MAAQuC,EACjDI,EAAUhD,EAAQiD,SAASF,GAAoB,WAAa,SAC5DlC,EAAS,cAAgBmC,CAC7BlB,MAAKjB,GAAQkC,GAmCjB,QAASG,GAASC,EAAUC,EAAM1B,GAC9B,GAAImB,GAAU7C,EAAQ8C,UAAUM,GAC5BC,EAAQR,EAAU7C,EAAQsD,QAAQF,GAAQ,KAC1CG,EAAQV,EAAiB,KAAPO,CAEtBpD,GAAQ6B,OAAOC,MACXxB,IAAK6C,EAAS7C,IACdC,MAAO4C,EAAS5C,MAChBC,QAASR,EAAQ4B,KAAKuB,EAAS3C,SAC/BO,SAAUf,EAAQ4B,KAAKuB,EAASpC,UAChCH,kBAAmBuC,EAASvC,kBAC5BO,gBAAiBgC,EAAShC,gBAC1BN,OAAQsC,EAAStC,QAClBa,GACCyB,SAAUA,EACVI,KAAM,GAAI9B,GAAakB,eAAeS,GACtCI,SAAS,EACTzB,aAAa,EACb0B,YAAY,EACZC,WAAW,EACXC,UAAU,EACVC,SAAS,EACTlD,SAAU,EACVmD,MAAO,KACPC,MAAOP,EACPQ,OAAQV,IAGRA,GAAOvB,KAAKkC,aAAaX,GAgMjC,QAASY,GAAcvC,GACnB1B,EAAQ6B,OAAOC,KAAMJ,GACrBI,KAAKqB,SAASjB,YAAYJ,KAAKoC,MAAMC,KAAKrC,MAC1CA,KAAKsC,aACLtC,KAAKuC,OAqDT,QAASC,KACLA,EAAWC,OAAOC,MAAM1C,KAAM2C,WAE1B3C,KAAKqB,SAASuB,SACd5C,KAAKwB,QAAQqB,WAAW,YAE5B7C,KAAKwB,QAAQY,KAAK,QAAS,MAsD/B,QAASU,KACLA,EAASL,OAAOC,MAAM1C,KAAM2C,WA0GhC,QAASI,KACLA,EAASN,OAAOC,MAAM1C,KAAM2C,WAuChC,MArpCAhD,GAAaqD,UAAUJ,WAAanD,EAAQwD,OAAQxD,EAAQyD,UAO5DvD,EAAaqD,UAAUG,WAAa,SAASC,EAAOxD,EAASZ,GACzD,GAAIqE,GAAOrD,KAAKsD,kBAAkBF,GAASA,GAAQA,GAC/CG,EAAiBvD,KAAKwD,YAAYxE,GAClCyE,EAAQzD,KAAKrB,MAAM+E,OACnBC,IAEJzF,GAAQ0F,QAAQP,EAAM,SAAS/B,GAC3B,GAAIuC,GAAO,GAAIlE,GAAakB,eAAeS,EAE3C,IAAItB,KAAK8D,aAAaD,EAAMN,EAAgB3D,GAAU,CAClD,GAAImE,GAAW,GAAIpE,GAAayB,SAASpB,KAAMsB,EAAM1B,EACrD+D,GAAetB,KAAK0B,GACpB/D,KAAKrB,MAAM0D,KAAK0B,GAChB/D,KAAKgE,mBAAmBD,OACrB,CACH,GAAIE,GAASjE,KAAKhB,QAAQgB,KAAKG,iBAC/BH,MAAKkE,wBAAwBL,EAAMI,EAAQrE,KAEhDI,MAEAA,KAAKrB,MAAM+E,SAAWD,IACrBzD,KAAKmE,kBAAkBR,GACvB3D,KAAKpB,SAAWoB,KAAKoE,qBAGzBpE,KAAKqE,UACDrE,KAAKnB,YAAYmB,KAAKsE,aAM9B3E,EAAaqD,UAAUuB,gBAAkB,SAAShG,GAC9C,GAAIwD,GAAQ/B,KAAKwE,eAAejG,GAC5BkG,EAAOzE,KAAKrB,MAAMoD,EAClB0C,GAAKxE,aAAawE,EAAKC,SAC3B1E,KAAKrB,MAAMgG,OAAO5C,EAAO,GACzB0C,EAAKG,WACL5E,KAAKpB,SAAWoB,KAAKoE,qBAKzBzE,EAAaqD,UAAU6B,WAAa,WAChC,KAAM7E,KAAKrB,MAAM+E,QACb1D,KAAKrB,MAAM,GAAGmG,QAElB9E,MAAKpB,SAAW,GAMpBe,EAAaqD,UAAU+B,WAAa,SAASxG,GACzC,GAAIwD,GAAQ/B,KAAKwE,eAAejG,GAC5BkG,EAAOzE,KAAKrB,MAAMoD,GAClBiD,EAAYhF,KAAK4C,QAAU,gBAAkB,kBAEjD6B,GAAKQ,sBACFjF,KAAKC,cAERD,KAAKC,aAAc,EACnBD,KAAKgF,GAAWP,KAMpB9E,EAAaqD,UAAUkC,WAAa,SAAS3G,GACzC,GAAIwD,GAAQ/B,KAAKwE,eAAejG,GAC5BkG,EAAOzE,KAAKrB,MAAMoD,GAClBK,EAAOpC,KAAK4C,QAAU,OAAS,OAC/B6B,IAAQA,EAAKxE,aAAawE,EAAKrC,GAAM+C,SAK7CxF,EAAaqD,UAAUsB,UAAY,WAC/B,GAAIc,GAAQpF,KAAKqF,sBAAsBpB,OAAO,SAASQ,GACnD,OAAQA,EAAKxE,aAEZmF,GAAM1B,SAEXxF,EAAQ0F,QAAQwB,EAAO,SAASX,GAC5BA,EAAKQ,wBAETG,EAAM,GAAGE,WAKb3F,EAAaqD,UAAUuC,UAAY,WAC/B,GAAIH,GAAQpF,KAAKqF,qBACjBnH,GAAQ0F,QAAQwB,EAAO,SAASX,GAC5BA,EAAKC,YASb/E,EAAaqD,UAAUwC,OAAS,SAASjH,GACrC,GAAImC,GAAKjB,EAAQwD,IACjB,OAAQvC,IAAMnC,YAAiBmC,IAQnCf,EAAaqD,UAAUyC,iBAAmB,SAASlH,GAC/C,MAAOA,aAAiBoB,GAAakB,gBAOzClB,EAAaqD,UAAUM,kBAAoB,SAAS/E,GAChD,MAAQL,GAAQwH,SAASnH,IAAU,UAAYA,IAOnDoB,EAAaqD,UAAUwB,eAAiB,SAASjG,GAC7C,MAAOL,GAAQyH,SAASpH,GAASA,EAAQyB,KAAKrB,MAAMiH,QAAQrH,IAMhEoB,EAAaqD,UAAUqC,oBAAsB,WACzC,MAAOrF,MAAKrB,MAAMsF,OAAO,SAASQ,GAC9B,OAAQA,EAAK9C,cAOrBhC,EAAaqD,UAAU6C,cAAgB,WACnC,MAAO7F,MAAKrB,MACPsF,OAAO,SAASQ,GACb,MAAQA,GAAK/C,UAAY+C,EAAKxE,cAEjC6F,KAAK,SAASC,EAAOC,GAClB,MAAOD,GAAMhE,MAAQiE,EAAMjE,SAMvCpC,EAAaqD,UAAUiD,QAAU,WAC7B/H,EAAQ0F,QAAQ5D,KAAKI,YAAa,SAAS8F,GACvChI,EAAQ0F,QAAQ5D,KAAKI,YAAY8F,GAAM,SAASC,GAC5CA,EAAOF,WACRjG,OACJA,OAMPL,EAAaqD,UAAUoD,iBAAmB,aAK1CzG,EAAaqD,UAAUqD,kBAAoB,aAQ3C1G,EAAaqD,UAAUsD,uBAAyB,aAKhD3G,EAAaqD,UAAUuD,mBAAqB,aAM5C5G,EAAaqD,UAAUwD,eAAiB,aAKxC7G,EAAaqD,UAAUyD,cAAgB,aAQvC9G,EAAaqD,UAAU0D,cAAgB,aAQvC/G,EAAaqD,UAAU2D,YAAc,aAQrChH,EAAaqD,UAAU4D,aAAe,aAQtCjH,EAAaqD,UAAU6D,eAAiB,aAIxClH,EAAaqD,UAAU8D,cAAgB,aAUvCnH,EAAaqD,UAAUoB,kBAAoB,SAAS7F,GAChD,GAAGyB,KAAKlB,kBAAmB,MAAOP,IAAS,CAE3C,IAAIwI,GAAc/G,KAAKqF,sBAAsB3B,OACzCsD,EAAWD,EAAc/G,KAAKrB,MAAM+E,OAASqD,EAAc/G,KAAKrB,MAAM+E,OACtEuD,EAAQ,IAAMjH,KAAKrB,MAAM+E,OACzBwD,GAAW3I,GAAS,GAAK0I,EAAQ,GAErC,OAAOE,MAAKC,MAAMJ,EAAWC,EAAQC,IAQzCvH,EAAaqD,UAAUQ,YAAc,SAASxE,GAC1C,GAAId,EAAQmJ,YAAYrI,GAAU,MAAOgB,MAAKhB,OAC9C,IAAId,EAAQoJ,QAAQtI,GAAU,MAAOA,EACrC,IAAIuI,GAAQvI,EAAQwI,MAAM,WAC1B,OAAOxH,MAAKhB,QAAQiF,OAAO,SAASA,GAChC,MAAsC,KAA/BsD,EAAM3B,QAAQ3B,EAAOxD,OAC7BT,OAMPL,EAAaqD,UAAUqB,QAAU,WACxB9E,EAAWkI,SAASlI,EAAWmI,UAQxC/H,EAAaqD,UAAUpC,cAAgB,SAAS6D,GAC5C,SAAUA,EAAKkD,OAAQlD,EAAKmD,OAOhCjI,EAAaqD,UAAUrC,kBAAoB,WACvC,MAAOX,MAAKrB,MAAM+E,OAAS1D,KAAKd,YAUpCS,EAAaqD,UAAUc,aAAe,SAASrC,EAAMzC,EAASY,GAE1D,MADAI,MAAKG,iBAAmB,GAChBnB,EAAQ0E,OAAgB1E,EAAQ6I,MAAM,SAAS5D,GAEnD,MADAjE,MAAKG,mBACE8D,EAAOvD,GAAGoH,KAAK9H,KAAMyB,EAAM7B,IACnCI,OAHsB,GAW7BL,EAAaqD,UAAU+E,eAAiB,SAASC,GAC7C,MAAQA,IAAU,KAAgB,IAATA,GAA4B,MAAXA,GAQ9CrI,EAAaqD,UAAUiF,mBAAqB,SAASC,GAIjD,MAHAhK,GAAQ0F,QAAQpE,EAAM2I,SAASC,kBAAmB,SAASC,GACvDH,EAAWG,EAAYH,KAEpBA,GASXvI,EAAaqD,UAAUsF,cAAgB,SAAS5J,GAK5C,QAAS6J,GAAKC,GACV,MAAOA,GAAOC,QAAQ,OAAQ,IAAIA,QAAQ,OAAQ,IAEtD,QAASC,GAAUF,GACf,MAAOA,GAAOG,cARlB,GAAiBzC,GAAK0C,EAAKC,EAAvBC,IAEJ,OAAKpK,IASLR,EAAQ0F,QAAQlF,EAAQqK,MAAM,MAAO,SAASC,GAC1CH,EAAIG,EAAKpD,QAAQ,KACjBM,EAAMwC,EAAUH,EAAKS,EAAKC,OAAO,EAAGJ,KACpCD,EAAML,EAAKS,EAAKC,OAAOJ,EAAI,IAEvB3C,IACA4C,EAAO5C,GAAO4C,EAAO5C,GAAO4C,EAAO5C,GAAO,KAAO0C,EAAMA,KAIxDE,GAnBcA,GA0BzBnJ,EAAaqD,UAAUkG,cAAgB,SAASzE,GAC5C,GAAI0E,GAAM1E,EAAK2E,KAAO,GAAIC,gBACtBC,EAAO,GAAIpG,UACXqG,EAAOvJ,IAEXuJ,GAAKC,oBAAoB/E,GAEzBvG,EAAQ0F,QAAQa,EAAKxF,SAAU,SAASwK,GACpCvL,EAAQ0F,QAAQ6F,EAAK,SAASlL,EAAO2H,GACjCoD,EAAKI,OAAOxD,EAAK3H,OAIzB+K,EAAKI,OAAOjF,EAAKhG,MAAOgG,EAAKzC,MAAOyC,EAAKhD,KAAKhB,MAE9C0I,EAAI7D,OAAOqE,WAAa,SAASC,GAC7B,GAAIhL,GAAWuI,KAAKC,MAAMwC,EAAMC,iBAAkC,IAAfD,EAAME,OAAeF,EAAMG,MAAQ,EACtFR,GAAKS,gBAAgBvF,EAAM7F,IAG/BuK,EAAIc,OAAS,WACT,GAAIvL,GAAU6K,EAAKjB,cAAca,EAAIe,yBACjChC,EAAWqB,EAAKtB,mBAAmBkB,EAAIjB,UACvCiC,EAAOZ,EAAKxB,eAAeoB,EAAInB,QAAU,UAAY,QACrDjJ,EAAS,MAAQoL,EAAO,MAC5BZ,GAAKxK,GAAQ0F,EAAMyD,EAAUiB,EAAInB,OAAQtJ,GACzC6K,EAAKa,gBAAgB3F,EAAMyD,EAAUiB,EAAInB,OAAQtJ,IAGrDyK,EAAIkB,QAAU,WACV,GAAI3L,GAAU6K,EAAKjB,cAAca,EAAIe,yBACjChC,EAAWqB,EAAKtB,mBAAmBkB,EAAIjB,SAC3CqB,GAAKe,aAAa7F,EAAMyD,EAAUiB,EAAInB,OAAQtJ,GAC9C6K,EAAKa,gBAAgB3F,EAAMyD,EAAUiB,EAAInB,OAAQtJ,IAGrDyK,EAAIoB,QAAU,WACV,GAAI7L,GAAU6K,EAAKjB,cAAca,EAAIe,yBACjChC,EAAWqB,EAAKtB,mBAAmBkB,EAAIjB,SAC3CqB,GAAKiB,cAAc/F,EAAMyD,EAAUiB,EAAInB,OAAQtJ,GAC/C6K,EAAKa,gBAAgB3F,EAAMyD,EAAUiB,EAAInB,OAAQtJ,IAGrDyK,EAAIsB,KAAKhG,EAAK1F,OAAQ0F,EAAKjG,KAAK,GAEhC2K,EAAI9J,gBAAkBoF,EAAKpF,gBAE3BnB,EAAQ0F,QAAQa,EAAK/F,QAAS,SAASH,EAAOkC,GAC1C0I,EAAIuB,iBAAiBjK,EAAMlC,KAG/B4K,EAAIwB,KAAKrB,GACTtJ,KAAKqE,WAOT1E,EAAaqD,UAAU4H,iBAAmB,SAASnG,GAC/C,GAAI6E,GAAOpL,EAAQsD,QAAQ,mCACvBqJ,EAAS3M,EAAQsD,QAAQ,gCAAkCsJ,KAAKC,MAAQ,MACxExJ,EAAQkD,EAAKxC,OACbsH,EAAOvJ,IAEPyE,GAAKuG,OAAOvG,EAAKuG,MAAMC,YAAY1J,GACvCkD,EAAKuG,MAAQ1B,EAEbC,EAAKC,oBAAoB/E,GAEzBlD,EAAMa,KAAK,OAAQqC,EAAKhG,OAExBP,EAAQ0F,QAAQa,EAAKxF,SAAU,SAASwK,GACpCvL,EAAQ0F,QAAQ6F,EAAK,SAASlL,EAAO2H,GACjCoD,EAAKI,OAAOxL,EAAQsD,QAAQ,8BAAgC0E,EAAM,YAAc3H,EAAQ,aAIhG+K,EAAKlH,MACD8I,OAAQzG,EAAKjG,IACbO,OAAQ,OACRoM,OAAQN,EAAOzI,KAAK,QACpBgJ,QAAS,sBACTC,SAAU,wBAGdR,EAAOtI,KAAK,OAAQ,WAChB,IAaI,GAAI+I,GAAOT,EAAO,GAAGU,gBAAgBC,KAAKC,UAC5C,MAAOC,IAET,GAAIvC,IAAOjB,SAAUoD,EAAMtD,OAAQ,IAAK2D,OAAO,GAC3CzD,EAAWqB,EAAKtB,mBAAmBkB,EAAIjB,UACvCxJ,IAEJ6K,GAAKqC,eAAenH,EAAMyD,EAAUiB,EAAInB,OAAQtJ,GAChD6K,EAAKa,gBAAgB3F,EAAMyD,EAAUiB,EAAInB,OAAQtJ,KAGrD4K,EAAKnE,MAAQ,WACT,GAEI+C,GAFAiB,GAAOnB,OAAQ,EAAG2D,OAAO,GACzBjN,IAGJmM,GAAOgB,OAAO,QAAQzJ,KAAK,MAAO,qBAClCkH,EAAK2B,YAAY1J,GAEjBgI,EAAKiB,cAAc/F,EAAMyD,EAAUiB,EAAInB,OAAQtJ,GAC/C6K,EAAKa,gBAAgB3F,EAAMyD,EAAUiB,EAAInB,OAAQtJ,IAGrD6C,EAAMuK,MAAMxC,GACZA,EAAKI,OAAOnI,GAAOmI,OAAOmB,GAE1BvB,EAAK,GAAGyC,SACR/L,KAAKqE,WAST1E,EAAaqD,UAAUkB,wBAA0B,SAASO,EAAMR,EAAQrE,GACpEI,KAAKsG,uBAAuB7B,EAAMR,EAAQrE,IAM9CD,EAAaqD,UAAUgB,mBAAqB,SAASS,GACjDzE,KAAKqG,kBAAkB5B,IAM3B9E,EAAaqD,UAAUmB,kBAAoB,SAASiB,GAChDpF,KAAKoG,iBAAiBhB,IAO1BzF,EAAaqD,UAAUwG,oBAAsB,SAAS/E,GAClDA,EAAKuH,kBACLhM,KAAKuG,mBAAmB9B,IAQ5B9E,EAAaqD,UAAUgH,gBAAkB,SAASvF,EAAM7F,GACpD,GAAImL,GAAQ/J,KAAKoE,kBAAkBxF,EACnCoB,MAAKpB,SAAWmL,EAChBtF,EAAKwH,YAAYrN,GACjBoB,KAAKwG,eAAe/B,EAAM7F,GAC1BoB,KAAKyG,cAAcsD,GACnB/J,KAAKqE,WAUT1E,EAAaqD,UAAU4I,eAAiB,SAASnH,EAAMyD,EAAUF,EAAQtJ,GACrE+F,EAAKyH,WAAWhE,EAAUF,EAAQtJ,GAClCsB,KAAK0G,cAAcjC,EAAMyD,EAAUF,EAAQtJ,IAU/CiB,EAAaqD,UAAUsH,aAAe,SAAS7F,EAAMyD,EAAUF,EAAQtJ,GACnE+F,EAAK0H,SAASjE,EAAUF,EAAQtJ,GAChCsB,KAAK2G,YAAYlC,EAAMyD,EAAUF,EAAQtJ,IAU7CiB,EAAaqD,UAAUwH,cAAgB,SAAS/F,EAAMyD,EAAUF,EAAQtJ,GACpE+F,EAAK2H,UAAUlE,EAAUF,EAAQtJ,GACjCsB,KAAK4G,aAAanC,EAAMyD,EAAUF,EAAQtJ,IAU9CiB,EAAaqD,UAAUoH,gBAAkB,SAAS3F,EAAMyD,EAAUF,EAAQtJ,GACtE+F,EAAK4H,YAAYnE,EAAUF,EAAQtJ,GACnCsB,KAAK6G,eAAepC,EAAMyD,EAAUF,EAAQtJ,EAE5C,IAAI4N,GAAWtM,KAAK6F,gBAAgB,EAGpC,OAFA7F,MAAKC,aAAc,EAEhB/B,EAAQqO,UAAUD,OACjBA,GAAShH,UAIbtF,KAAK8G,gBACL9G,KAAKpB,SAAWoB,KAAKoE,wBACrBpE,MAAKqE,YAQT1E,EAAa6F,OAAS7F,EAAaqD,UAAUwC,OAI7C7F,EAAa8F,iBAAmB9F,EAAaqD,UAAUyC,iBAIvD9F,EAAa2D,kBAAoB3D,EAAaqD,UAAUM,kBAIxD3D,EAAaiD,QAAUjD,EAAaqD,UAAUJ,QAM9CjD,EAAa6M,QAAU,SAASrB,EAAQsB,GACpCtB,EAAOnI,UAAY0J,OAAOC,OAAOF,EAAOzJ,WACxCmI,EAAOnI,UAAU4J,YAAczB,EAC/BA,EAAO1I,OAASgK,GAEpB9M,EAAakB,eAAiBA,EAC9BlB,EAAayB,SAAWA,EACxBzB,EAAawC,cAAgBA,EAC7BxC,EAAa6C,WAAaA,EAC1B7C,EAAamD,SAAWA,EACxBnD,EAAaoD,SAAWA,EAsBxBlC,EAAemC,UAAU6J,oBAAsB,SAASC,GACpD9M,KAAK+M,iBAAmB,KACxB/M,KAAK2H,KAAO,KACZ3H,KAAK4H,KAAO,QAAUkF,EAAKE,MAAMF,EAAKG,YAAY,KAAO,GAAGtE,cAC5D3I,KAAKS,KAAOqM,EAAKE,MAAMF,EAAKG,YAAY,KAAOH,EAAKG,YAAY,MAAQ,IAO5EpM,EAAemC,UAAUkK,kBAAoB,SAAS/G,GAClDnG,KAAK+M,iBAAmB7O,EAAQ4B,KAAKqG,EAAO4G,kBAC5C/M,KAAK2H,KAAOxB,EAAOwB,KACnB3H,KAAK4H,KAAOzB,EAAOyB,KACnB5H,KAAKS,KAAO0F,EAAO1F,MAgDvBW,EAAS4B,UAAUsC,OAAS,WACxBtF,KAAKqB,SAAS0D,WAAW/E,OAK7BoB,EAAS4B,UAAU0B,OAAS,WACxB1E,KAAKqB,SAAS6D,WAAWlF,OAK7BoB,EAAS4B,UAAU8B,OAAS,WACxB9E,KAAKqB,SAASkD,gBAAgBvE,OAMlCoB,EAAS4B,UAAUmK,eAAiB,aAMpC/L,EAAS4B,UAAUoK,WAAa,aAOhChM,EAAS4B,UAAUqK,UAAY,aAO/BjM,EAAS4B,UAAUsK,QAAU,aAO7BlM,EAAS4B,UAAUuK,SAAW,aAO9BnM,EAAS4B,UAAUwK,WAAa,aAOhCpM,EAAS4B,UAAUgJ,gBAAkB,WACjChM,KAAK0B,SAAU,EACf1B,KAAKC,aAAc,EACnBD,KAAK2B,YAAa,EAClB3B,KAAK4B,WAAY,EACjB5B,KAAK6B,UAAW,EAChB7B,KAAK8B,SAAU,EACf9B,KAAKpB,SAAW,EAChBoB,KAAKmN,kBAOT/L,EAAS4B,UAAUiJ,YAAc,SAASrN,GACtCoB,KAAKpB,SAAWA,EAChBoB,KAAKoN,WAAWxO,IASpBwC,EAAS4B,UAAUkJ,WAAa,SAAShE,EAAUF,EAAQtJ,GACvDsB,KAAK0B,SAAU,EACf1B,KAAKC,aAAc,EACnBD,KAAK2B,YAAa,EAClB3B,KAAK4B,WAAY,EACjB5B,KAAK6B,UAAW,EAChB7B,KAAK8B,SAAU,EACf9B,KAAKpB,SAAW,IAChBoB,KAAK+B,MAAQ,KACb/B,KAAKqN,UAAUnF,EAAUF,EAAQtJ,IASrC0C,EAAS4B,UAAUmJ,SAAW,SAASjE,EAAUF,EAAQtJ,GACrDsB,KAAK0B,SAAU,EACf1B,KAAKC,aAAc,EACnBD,KAAK2B,YAAa,EAClB3B,KAAK4B,WAAY,EACjB5B,KAAK6B,UAAW,EAChB7B,KAAK8B,SAAU,EACf9B,KAAKpB,SAAW,EAChBoB,KAAK+B,MAAQ,KACb/B,KAAKsN,QAAQpF,EAAUF,EAAQtJ,IASnC0C,EAAS4B,UAAUoJ,UAAY,SAASlE,EAAUF,EAAQtJ,GACtDsB,KAAK0B,SAAU,EACf1B,KAAKC,aAAc,EACnBD,KAAK2B,YAAa,EAClB3B,KAAK4B,WAAY,EACjB5B,KAAK6B,UAAW,EAChB7B,KAAK8B,SAAU,EACf9B,KAAKpB,SAAW,EAChBoB,KAAK+B,MAAQ,KACb/B,KAAKuN,SAASrF,EAAUF,EAAQtJ,IASpC0C,EAAS4B,UAAUqJ,YAAc,SAASnE,EAAUF,EAAQtJ,GACxDsB,KAAKwN,WAAWtF,EAAUF,EAAQtJ,GAC9BsB,KAAKlB,mBAAmBkB,KAAK8E,UAKrC1D,EAAS4B,UAAU4B,SAAW,WACtB5E,KAAKiC,QAAQjC,KAAKiC,OAAO6C,SACzB9E,KAAKgL,OAAOhL,KAAKgL,MAAMlG,eACpB9E,MAAKgL,YACLhL,MAAKiC,QAMhBb,EAAS4B,UAAUiC,oBAAsB,WACrCjF,KAAK+B,MAAQ/B,KAAK+B,SAAW/B,KAAKqB,SAASnB,WAC3CF,KAAK0B,SAAU,GAOnBN,EAAS4B,UAAUd,aAAe,SAASX,GACvC,GAAIkM,GAAQ/N,EAAS6B,EAAMkM,SAASlM,EAAMmM,QAC1CD,GAAMrL,KAAK,QAAS,MACpBb,EAAMoM,IAAI,UAAW,QACrBpM,EAAMuK,MAAM2B,IAwBhBtL,EAAca,UAAU4K,UAIxBzL,EAAca,UAAUT,KAAO,WAC3B,IAAI,GAAI2D,KAAOlG,MAAK4N,OAAQ,CACxB,GAAIxL,GAAOpC,KAAK4N,OAAO1H,EACvBlG,MAAKwB,QAAQe,KAAK2D,EAAKlG,KAAKoC,MAMpCD,EAAca,UAAU6I,OAAS,WAC7B,IAAI,GAAI3F,KAAOlG,MAAK4N,OAChB5N,KAAKwB,QAAQqK,OAAO3F,EAAKlG,KAAK4N,OAAO1H,KAM7C/D,EAAca,UAAUiD,QAAU,WAC9B,GAAIlE,GAAQ/B,KAAKqB,SAASjB,YAAYJ,KAAKoC,MAAMwD,QAAQ5F,KACzDA,MAAKqB,SAASjB,YAAYJ,KAAKoC,MAAMuC,OAAO5C,EAAO,GACnD/B,KAAK6L,UAOT1J,EAAca,UAAUV,WAAa,WACjC,IAAI,GAAI4D,KAAOlG,MAAK4N,OAAQ,CACxB,GAAIxL,GAAOpC,KAAK4N,OAAO1H,EACvBlG,MAAKoC,GAAQpC,KAAKoC,GAAMG,KAAKvC,QAMrCL,EAAa6M,QAAQhK,EAAYL,GAmBjCK,EAAWQ,UAAU4K,QACjBC,SAAU,UACVC,OAAQ,YAMZtL,EAAWQ,UAAUZ,KAAO,SAK5BI,EAAWQ,UAAU+K,WAAa,aAKlCvL,EAAWQ,UAAUgL,WAAa,aAKlCxL,EAAWQ,UAAUiL,sBAAwB,WACzC,QAASjO,KAAKwB,QAAQ0M,KAAK,aAK/B1L,EAAWQ,UAAUmL,SAAW,WAC5B,GAAI/K,GAAQpD,KAAKqB,SAASuB,QAAU5C,KAAKwB,QAAQ,GAAG4B,MAAQpD,KAAKwB,QAAQ,GACrE5B,EAAUI,KAAK+N,aACf/O,EAAUgB,KAAKgO,YAEdhO,MAAKqB,SAASuB,SAAS5C,KAAKiG,UACjCjG,KAAKqB,SAAS8B,WAAWC,EAAOxD,EAASZ,GACrCgB,KAAKiO,yBAAyBjO,KAAKwB,QAAQY,KAAK,QAAS,OAKjEzC,EAAa6M,QAAQ1J,EAAUX,GAc/BW,EAASE,UAAU4K,QACfC,SAAU,UACVvN,KAAM,SACN8N,SAAU,aACVC,UAAW,eAMfvL,EAASE,UAAUZ,KAAO,OAK1BU,EAASE,UAAU+K,WAAa,aAKhCjL,EAASE,UAAUgL,WAAa,aAIhClL,EAASE,UAAUsL,OAAS,SAAS1E,GACjC,GAAI2E,GAAWvO,KAAKwO,aAAa5E,EACjC,IAAK2E,EAAL,CACA,GAAI3O,GAAUI,KAAK+N,aACf/O,EAAUgB,KAAKgO,YACnBhO,MAAKyO,gBAAgB7E,GACrB1L,EAAQ0F,QAAQ5D,KAAKqB,SAASjB,YAAYG,KAAMP,KAAK0O,iBAAkB1O,MACvEA,KAAKqB,SAAS8B,WAAWoL,EAASnL,MAAOxD,EAASZ,KAKtD8D,EAASE,UAAU2L,WAAa,SAAS/E,GACrC,GAAI2E,GAAWvO,KAAKwO,aAAa5E,EAC7B5J,MAAK4O,WAAWL,EAASM,SAC7BN,EAASO,WAAa,OACtB9O,KAAKyO,gBAAgB7E,GACrB1L,EAAQ0F,QAAQ5D,KAAKqB,SAASjB,YAAYG,KAAMP,KAAK+O,cAAe/O,QAKxE8C,EAASE,UAAUgM,YAAc,SAASpF,GAClCA,EAAMuB,SAAWnL,KAAKwB,QAAQ,KAClCxB,KAAKyO,gBAAgB7E,GACrB1L,EAAQ0F,QAAQ5D,KAAKqB,SAASjB,YAAYG,KAAMP,KAAK0O,iBAAkB1O,QAK3E8C,EAASE,UAAUwL,aAAe,SAAS5E,GACvC,MAAOA,GAAMqF,aAAerF,EAAMqF,aAAerF,EAAMsF,cAAcD,cAKzEnM,EAASE,UAAUyL,gBAAkB,SAAS7E,GAC1CA,EAAMuF,iBACNvF,EAAMwF,mBAMVtM,EAASE,UAAU4L,WAAa,SAASC,GACrC,MAAKA,GACDA,EAAMjJ,QAC4B,KAA3BiJ,EAAMjJ,QAAQ,SACfiJ,EAAMQ,SACLR,EAAMQ,SAAS,UAEf,GANQ,GAYvBvM,EAASE,UAAU+L,cAAgB,SAAStK,GACxCA,EAAK6K,gBAKTxM,EAASE,UAAU0L,iBAAmB,SAASjK,GAC3CA,EAAK8K,mBAKT5P,EAAa6M,QAAQzJ,EAAUZ,GAc/BY,EAASC,UAAU4K,QACfC,SAAU,WAMd9K,EAASC,UAAUZ,KAAO,OAK1BW,EAASC,UAAUwM,UAAY,eAI/BzM,EAASC,UAAUsM,aAAe,WAC9BtP,KAAKwB,QAAQiO,SAASzP,KAAK0P,iBAK/B3M,EAASC,UAAUuM,gBAAkB,WACjCvP,KAAKwB,QAAQmO,YAAY3P,KAAK0P,iBAMlC3M,EAASC,UAAU0M,aAAe,WAC9B,MAAO1P,MAAKwP,WAGT7P,KAIdiQ,UAAU,gBAAiB,SAAU,eAAgB,SAASC,EAAQlQ,GACnE,OACImQ,KAAM,SAASpC,EAAOlM,EAASuO,GAC3B,GAAI1O,GAAWqM,EAAMsC,MAAMD,EAAW1O,SAEtC,MAAMA,YAAoB1B,IACtB,KAAM,IAAIsQ,WAAU,iDAGxB,IAAI9J,GAAS,GAAIxG,GAAa6C,YAC1BnB,SAAUA,EACVG,QAASA,GAGb2E,GAAO4H,WAAa8B,EAAOE,EAAWnQ,SAAS2C,KAAK4D,EAAQuH,GAC5DvH,EAAO6H,WAAa,WAAY,MAAO+B,GAAW/Q,cAM7D4Q,UAAU,cAAe,SAAU,eAAgB,SAASC,EAAQlQ,GACjE,OACImQ,KAAM,SAASpC,EAAOlM,EAASuO,GAC3B,GAAI1O,GAAWqM,EAAMsC,MAAMD,EAAW1O,SAEtC,MAAMA,YAAoB1B,IACtB,KAAM,IAAIsQ,WAAU,iDAGxB,IAAK5O,EAASuB,QAAd,CAEA,GAAIuD,GAAS,GAAIxG,GAAamD,UAC1BzB,SAAUA,EACVG,QAASA,GAGb2E,GAAO4H,WAAa8B,EAAOE,EAAWnQ,SAAS2C,KAAK4D,EAAQuH,GAC5DvH,EAAO6H,WAAa,WAAY,MAAO+B,GAAW/Q,eAM7D4Q,UAAU,cAAe,eAAgB,SAASjQ,GAC/C,OACImQ,KAAM,SAASpC,EAAOlM,EAASuO,GAC3B,GAAI1O,GAAWqM,EAAMsC,MAAMD,EAAW1O,SAEtC,MAAMA,YAAoB1B,IACtB,KAAM,IAAIsQ,WAAU,iDAGxB,IAAI9J,GAAS,GAAIxG,GAAaoD,UAC1B1B,SAAUA,EACVG,QAASA,GAGb2E,GAAOuJ,aAAe,WAClB,MAAOK,GAAWP,WAAaxP,KAAKwP,gBAK7ClR"}</pre></body></html>
\ No newline at end of file
/*
AngularJS v1.2.22
(c) 2010-2014 Google, Inc. http://angularjs.org
License: MIT
*/
(function(H,a,A){'use strict';function D(p,g){g=g||{};a.forEach(g,function(a,c){delete g[c]});for(var c in p)!p.hasOwnProperty(c)||"$"===c.charAt(0)&&"$"===c.charAt(1)||(g[c]=p[c]);return g}var v=a.$$minErr("$resource"),C=/^(\.[a-zA-Z_$][0-9a-zA-Z_$]*)+$/;a.module("ngResource",["ng"]).factory("$resource",["$http","$q",function(p,g){function c(a,c){this.template=a;this.defaults=c||{};this.urlParams={}}function t(n,w,l){function r(h,d){var e={};d=x({},w,d);s(d,function(b,d){u(b)&&(b=b());var k;if(b&&
b.charAt&&"@"==b.charAt(0)){k=h;var a=b.substr(1);if(null==a||""===a||"hasOwnProperty"===a||!C.test("."+a))throw v("badmember",a);for(var a=a.split("."),f=0,c=a.length;f<c&&k!==A;f++){var g=a[f];k=null!==k?k[g]:A}}else k=b;e[d]=k});return e}function e(a){return a.resource}function f(a){D(a||{},this)}var F=new c(n);l=x({},B,l);s(l,function(h,d){var c=/^(POST|PUT|PATCH)$/i.test(h.method);f[d]=function(b,d,k,w){var q={},n,l,y;switch(arguments.length){case 4:y=w,l=k;case 3:case 2:if(u(d)){if(u(b)){l=
b;y=d;break}l=d;y=k}else{q=b;n=d;l=k;break}case 1:u(b)?l=b:c?n=b:q=b;break;case 0:break;default:throw v("badargs",arguments.length);}var t=this instanceof f,m=t?n:h.isArray?[]:new f(n),z={},B=h.interceptor&&h.interceptor.response||e,C=h.interceptor&&h.interceptor.responseError||A;s(h,function(a,b){"params"!=b&&("isArray"!=b&&"interceptor"!=b)&&(z[b]=G(a))});c&&(z.data=n);F.setUrlParams(z,x({},r(n,h.params||{}),q),h.url);q=p(z).then(function(b){var d=b.data,k=m.$promise;if(d){if(a.isArray(d)!==!!h.isArray)throw v("badcfg",
h.isArray?"array":"object",a.isArray(d)?"array":"object");h.isArray?(m.length=0,s(d,function(b){"object"===typeof b?m.push(new f(b)):m.push(b)})):(D(d,m),m.$promise=k)}m.$resolved=!0;b.resource=m;return b},function(b){m.$resolved=!0;(y||E)(b);return g.reject(b)});q=q.then(function(b){var a=B(b);(l||E)(a,b.headers);return a},C);return t?q:(m.$promise=q,m.$resolved=!1,m)};f.prototype["$"+d]=function(b,a,k){u(b)&&(k=a,a=b,b={});b=f[d].call(this,b,this,a,k);return b.$promise||b}});f.bind=function(a){return t(n,
x({},w,a),l)};return f}var B={get:{method:"GET"},save:{method:"POST"},query:{method:"GET",isArray:!0},remove:{method:"DELETE"},"delete":{method:"DELETE"}},E=a.noop,s=a.forEach,x=a.extend,G=a.copy,u=a.isFunction;c.prototype={setUrlParams:function(c,g,l){var r=this,e=l||r.template,f,p,h=r.urlParams={};s(e.split(/\W/),function(a){if("hasOwnProperty"===a)throw v("badname");!/^\d+$/.test(a)&&(a&&RegExp("(^|[^\\\\]):"+a+"(\\W|$)").test(e))&&(h[a]=!0)});e=e.replace(/\\:/g,":");g=g||{};s(r.urlParams,function(d,
c){f=g.hasOwnProperty(c)?g[c]:r.defaults[c];a.isDefined(f)&&null!==f?(p=encodeURIComponent(f).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"%20").replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+"),e=e.replace(RegExp(":"+c+"(\\W|$)","g"),function(a,c){return p+c})):e=e.replace(RegExp("(/?):"+c+"(\\W|$)","g"),function(a,c,d){return"/"==d.charAt(0)?d:c+d})});e=e.replace(/\/+$/,"")||"/";e=e.replace(/\/\.(?=\w+($|\?))/,".");c.url=e.replace(/\/\\\./,
"/.");s(g,function(a,e){r.urlParams[e]||(c.params=c.params||{},c.params[e]=a)})}};return t}])})(window,window.angular);
//# sourceMappingURL=angular-resource.min.js.map
{
"version":3,
"file":"angular-resource.min.js",
"lineCount":12,
"mappings":"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",
"sources":["angular-resource.js"],
"names":["window","angular","undefined","shallowClearAndCopy","src","dst","forEach","value","key","hasOwnProperty","charAt","$resourceMinErr","$$minErr","MEMBER_NAME_REGEX","module","factory","$http","$q","Route","template","defaults","urlParams","resourceFactory","url","paramDefaults","actions","extractParams","data","actionParams","ids","extend","isFunction","path","test","keys","split","i","ii","length","obj","defaultResponseInterceptor","response","resource","Resource","route","DEFAULT_ACTIONS","action","name","hasBody","method","a1","a2","a3","a4","params","success","error","arguments","isInstanceCall","isArray","httpConfig","responseInterceptor","interceptor","responseErrorInterceptor","responseError","copy","setUrlParams","promise","then","$promise","item","push","$resolved","noop","reject","headers","prototype","result","call","bind","Resource.bind","additionalParamDefaults","config","actionUrl","self","val","encodedVal","param","RegExp","replace","_","urlParam","isDefined","encodeURIComponent","match","p1","leadingSlashes","tail"]
}
/*
AngularJS v1.2.22
(c) 2010-2014 Google, Inc. http://angularjs.org
License: MIT
*/
(function(n,e,A){'use strict';function x(s,g,h){return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",link:function(a,c,b,f,w){function y(){p&&(p.remove(),p=null);k&&(k.$destroy(),k=null);l&&(h.leave(l,function(){p=null}),p=l,l=null)}function v(){var b=s.current&&s.current.locals;if(e.isDefined(b&&b.$template)){var b=a.$new(),d=s.current;l=w(b,function(d){h.enter(d,null,l||c,function(){!e.isDefined(t)||t&&!a.$eval(t)||g()});y()});k=d.scope=b;k.$emit("$viewContentLoaded");k.$eval(u)}else y()}
var k,l,p,t=b.autoscroll,u=b.onload||"";a.$on("$routeChangeSuccess",v);v()}}}function z(e,g,h){return{restrict:"ECA",priority:-400,link:function(a,c){var b=h.current,f=b.locals;c.html(f.$template);var w=e(c.contents());b.controller&&(f.$scope=a,f=g(b.controller,f),b.controllerAs&&(a[b.controllerAs]=f),c.data("$ngControllerController",f),c.children().data("$ngControllerController",f));w(a)}}}n=e.module("ngRoute",["ng"]).provider("$route",function(){function s(a,c){return e.extend(new (e.extend(function(){},
{prototype:a})),c)}function g(a,e){var b=e.caseInsensitiveMatch,f={originalPath:a,regexp:a},h=f.keys=[];a=a.replace(/([().])/g,"\\$1").replace(/(\/)?:(\w+)([\?\*])?/g,function(a,e,b,c){a="?"===c?c:null;c="*"===c?c:null;h.push({name:b,optional:!!a});e=e||"";return""+(a?"":e)+"(?:"+(a?e:"")+(c&&"(.+?)"||"([^/]+)")+(a||"")+")"+(a||"")}).replace(/([\/$\*])/g,"\\$1");f.regexp=RegExp("^"+a+"$",b?"i":"");return f}var h={};this.when=function(a,c){h[a]=e.extend({reloadOnSearch:!0},c,a&&g(a,c));if(a){var b=
"/"==a[a.length-1]?a.substr(0,a.length-1):a+"/";h[b]=e.extend({redirectTo:a},g(b,c))}return this};this.otherwise=function(a){this.when(null,a);return this};this.$get=["$rootScope","$location","$routeParams","$q","$injector","$http","$templateCache","$sce",function(a,c,b,f,g,n,v,k){function l(){var d=p(),m=r.current;if(d&&m&&d.$$route===m.$$route&&e.equals(d.pathParams,m.pathParams)&&!d.reloadOnSearch&&!u)m.params=d.params,e.copy(m.params,b),a.$broadcast("$routeUpdate",m);else if(d||m)u=!1,a.$broadcast("$routeChangeStart",
d,m),(r.current=d)&&d.redirectTo&&(e.isString(d.redirectTo)?c.path(t(d.redirectTo,d.params)).search(d.params).replace():c.url(d.redirectTo(d.pathParams,c.path(),c.search())).replace()),f.when(d).then(function(){if(d){var a=e.extend({},d.resolve),c,b;e.forEach(a,function(d,c){a[c]=e.isString(d)?g.get(d):g.invoke(d)});e.isDefined(c=d.template)?e.isFunction(c)&&(c=c(d.params)):e.isDefined(b=d.templateUrl)&&(e.isFunction(b)&&(b=b(d.params)),b=k.getTrustedResourceUrl(b),e.isDefined(b)&&(d.loadedTemplateUrl=
b,c=n.get(b,{cache:v}).then(function(a){return a.data})));e.isDefined(c)&&(a.$template=c);return f.all(a)}}).then(function(c){d==r.current&&(d&&(d.locals=c,e.copy(d.params,b)),a.$broadcast("$routeChangeSuccess",d,m))},function(c){d==r.current&&a.$broadcast("$routeChangeError",d,m,c)})}function p(){var a,b;e.forEach(h,function(f,h){var q;if(q=!b){var g=c.path();q=f.keys;var l={};if(f.regexp)if(g=f.regexp.exec(g)){for(var k=1,p=g.length;k<p;++k){var n=q[k-1],r=g[k];n&&r&&(l[n.name]=r)}q=l}else q=null;
else q=null;q=a=q}q&&(b=s(f,{params:e.extend({},c.search(),a),pathParams:a}),b.$$route=f)});return b||h[null]&&s(h[null],{params:{},pathParams:{}})}function t(a,c){var b=[];e.forEach((a||"").split(":"),function(a,d){if(0===d)b.push(a);else{var e=a.match(/(\w+)(.*)/),f=e[1];b.push(c[f]);b.push(e[2]||"");delete c[f]}});return b.join("")}var u=!1,r={routes:h,reload:function(){u=!0;a.$evalAsync(l)}};a.$on("$locationChangeSuccess",l);return r}]});n.provider("$routeParams",function(){this.$get=function(){return{}}});
n.directive("ngView",x);n.directive("ngView",z);x.$inject=["$route","$anchorScroll","$animate"];z.$inject=["$compile","$controller","$route"]})(window,window.angular);
//# sourceMappingURL=angular-route.min.js.map
/**
* State-based routing for AngularJS
* @version v0.2.10
* @link http://angular-ui.github.com/
* @license MIT License, http://www.opensource.org/licenses/MIT
*/
"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(a,b,c){"use strict";function d(a,b){return I(new(I(function(){},{prototype:a})),b)}function e(a){return H(arguments,function(b){b!==a&&H(b,function(b,c){a.hasOwnProperty(c)||(a[c]=b)})}),a}function f(a,b){var c=[];for(var d in a.path){if(a.path[d]!==b.path[d])break;c.push(a.path[d])}return c}function g(a,b){if(Array.prototype.indexOf)return a.indexOf(b,Number(arguments[2])||0);var c=a.length>>>0,d=Number(arguments[2])||0;for(d=0>d?Math.ceil(d):Math.floor(d),0>d&&(d+=c);c>d;d++)if(d in a&&a[d]===b)return d;return-1}function h(a,b,c,d){var e,h=f(c,d),i={},j=[];for(var k in h)if(h[k].params&&h[k].params.length){e=h[k].params;for(var l in e)g(j,e[l])>=0||(j.push(e[l]),i[e[l]]=a[e[l]])}return I({},i,b)}function i(a,b){var c={};return H(a,function(a){var d=b[a];c[a]=null!=d?String(d):null}),c}function j(a,b,c){if(!c){c=[];for(var d in a)c.push(d)}for(var e=0;e<c.length;e++){var f=c[e];if(a[f]!=b[f])return!1}return!0}function k(a,b){var c={};return H(a,function(a){c[a]=b[a]}),c}function l(a,b){var d=1,f=2,g={},h=[],i=g,j=I(a.when(g),{$$promises:g,$$values:g});this.study=function(g){function k(a,c){if(o[c]!==f){if(n.push(c),o[c]===d)throw n.splice(0,n.indexOf(c)),new Error("Cyclic dependency: "+n.join(" -> "));if(o[c]=d,E(a))m.push(c,[function(){return b.get(a)}],h);else{var e=b.annotate(a);H(e,function(a){a!==c&&g.hasOwnProperty(a)&&k(g[a],a)}),m.push(c,a,e)}n.pop(),o[c]=f}}function l(a){return F(a)&&a.then&&a.$$promises}if(!F(g))throw new Error("'invocables' must be an object");var m=[],n=[],o={};return H(g,k),g=n=o=null,function(d,f,g){function h(){--s||(t||e(r,f.$$values),p.$$values=r,p.$$promises=!0,o.resolve(r))}function k(a){p.$$failure=a,o.reject(a)}function n(c,e,f){function i(a){l.reject(a),k(a)}function j(){if(!C(p.$$failure))try{l.resolve(b.invoke(e,g,r)),l.promise.then(function(a){r[c]=a,h()},i)}catch(a){i(a)}}var l=a.defer(),m=0;H(f,function(a){q.hasOwnProperty(a)&&!d.hasOwnProperty(a)&&(m++,q[a].then(function(b){r[a]=b,--m||j()},i))}),m||j(),q[c]=l.promise}if(l(d)&&g===c&&(g=f,f=d,d=null),d){if(!F(d))throw new Error("'locals' must be an object")}else d=i;if(f){if(!l(f))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else f=j;var o=a.defer(),p=o.promise,q=p.$$promises={},r=I({},d),s=1+m.length/3,t=!1;if(C(f.$$failure))return k(f.$$failure),p;f.$$values?(t=e(r,f.$$values),h()):(I(q,f.$$promises),f.then(h,k));for(var u=0,v=m.length;v>u;u+=3)d.hasOwnProperty(m[u])?h():n(m[u],m[u+1],m[u+2]);return p}},this.resolve=function(a,b,c,d){return this.study(a)(b,c,d)}}function m(a,b,c){this.fromConfig=function(a,b,c){return C(a.template)?this.fromString(a.template,b):C(a.templateUrl)?this.fromUrl(a.templateUrl,b):C(a.templateProvider)?this.fromProvider(a.templateProvider,b,c):null},this.fromString=function(a,b){return D(a)?a(b):a},this.fromUrl=function(c,d){return D(c)&&(c=c(d)),null==c?null:a.get(c,{cache:b}).then(function(a){return a.data})},this.fromProvider=function(a,b,d){return c.invoke(a,null,d||{params:b})}}function n(a){function b(b){if(!/^\w+(-+\w+)*$/.test(b))throw new Error("Invalid parameter name '"+b+"' in pattern '"+a+"'");if(f[b])throw new Error("Duplicate parameter name '"+b+"' in pattern '"+a+"'");f[b]=!0,j.push(b)}function c(a){return a.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&")}var d,e=/([:*])(\w+)|\{(\w+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,f={},g="^",h=0,i=this.segments=[],j=this.params=[];this.source=a;for(var k,l,m;(d=e.exec(a))&&(k=d[2]||d[3],l=d[4]||("*"==d[1]?".*":"[^/]*"),m=a.substring(h,d.index),!(m.indexOf("?")>=0));)g+=c(m)+"("+l+")",b(k),i.push(m),h=e.lastIndex;m=a.substring(h);var n=m.indexOf("?");if(n>=0){var o=this.sourceSearch=m.substring(n);m=m.substring(0,n),this.sourcePath=a.substring(0,h+n),H(o.substring(1).split(/[&?]/),b)}else this.sourcePath=a,this.sourceSearch="";g+=c(m)+"$",i.push(m),this.regexp=new RegExp(g),this.prefix=i[0]}function o(){this.compile=function(a){return new n(a)},this.isMatcher=function(a){return F(a)&&D(a.exec)&&D(a.format)&&D(a.concat)},this.$get=function(){return this}}function p(a){function b(a){var b=/^\^((?:\\[^a-zA-Z0-9]|[^\\\[\]\^$*+?.()|{}]+)*)/.exec(a.source);return null!=b?b[1].replace(/\\(.)/g,"$1"):""}function c(a,b){return a.replace(/\$(\$|\d{1,2})/,function(a,c){return b["$"===c?0:Number(c)]})}function d(a,b,c){if(!c)return!1;var d=a.invoke(b,b,{$match:c});return C(d)?d:!0}var e=[],f=null;this.rule=function(a){if(!D(a))throw new Error("'rule' must be a function");return e.push(a),this},this.otherwise=function(a){if(E(a)){var b=a;a=function(){return b}}else if(!D(a))throw new Error("'rule' must be a function");return f=a,this},this.when=function(e,f){var g,h=E(f);if(E(e)&&(e=a.compile(e)),!h&&!D(f)&&!G(f))throw new Error("invalid 'handler' in when()");var i={matcher:function(b,c){return h&&(g=a.compile(c),c=["$match",function(a){return g.format(a)}]),I(function(a,e){return d(a,c,b.exec(e.path(),e.search()))},{prefix:E(b.prefix)?b.prefix:""})},regex:function(a,e){if(a.global||a.sticky)throw new Error("when() RegExp must not be global or sticky");return h&&(g=e,e=["$match",function(a){return c(g,a)}]),I(function(b,c){return d(b,e,a.exec(c.path()))},{prefix:b(a)})}},j={matcher:a.isMatcher(e),regex:e instanceof RegExp};for(var k in j)if(j[k])return this.rule(i[k](e,f));throw new Error("invalid 'what' in when()")},this.$get=["$location","$rootScope","$injector",function(a,b,c){function d(b){function d(b){var d=b(c,a);return d?(E(d)&&a.replace().url(d),!0):!1}if(!b||!b.defaultPrevented){var g,h=e.length;for(g=0;h>g;g++)if(d(e[g]))return;f&&d(f)}}return b.$on("$locationChangeSuccess",d),{sync:function(){d()}}}]}function q(a,e,f){function g(a){return 0===a.indexOf(".")||0===a.indexOf("^")}function l(a,b){var d=E(a),e=d?a:a.name,f=g(e);if(f){if(!b)throw new Error("No reference point given for path '"+e+"'");for(var h=e.split("."),i=0,j=h.length,k=b;j>i;i++)if(""!==h[i]||0!==i){if("^"!==h[i])break;if(!k.parent)throw new Error("Path '"+e+"' not valid for state '"+b.name+"'");k=k.parent}else k=b;h=h.slice(i).join("."),e=k.name+(k.name&&h?".":"")+h}var l=w[e];return!l||!d&&(d||l!==a&&l.self!==a)?c:l}function m(a,b){x[a]||(x[a]=[]),x[a].push(b)}function n(b){b=d(b,{self:b,resolve:b.resolve||{},toString:function(){return this.name}});var c=b.name;if(!E(c)||c.indexOf("@")>=0)throw new Error("State must have a valid name");if(w.hasOwnProperty(c))throw new Error("State '"+c+"'' is already defined");var e=-1!==c.indexOf(".")?c.substring(0,c.lastIndexOf(".")):E(b.parent)?b.parent:"";if(e&&!w[e])return m(e,b.self);for(var f in z)D(z[f])&&(b[f]=z[f](b,z.$delegates[f]));if(w[c]=b,!b[y]&&b.url&&a.when(b.url,["$match","$stateParams",function(a,c){v.$current.navigable==b&&j(a,c)||v.transitionTo(b,a,{location:!1})}]),x[c])for(var g=0;g<x[c].length;g++)n(x[c][g]);return b}function o(a){return a.indexOf("*")>-1}function p(a){var b=a.split("."),c=v.$current.name.split(".");if("**"===b[0]&&(c=c.slice(c.indexOf(b[1])),c.unshift("**")),"**"===b[b.length-1]&&(c.splice(c.indexOf(b[b.length-2])+1,Number.MAX_VALUE),c.push("**")),b.length!=c.length)return!1;for(var d=0,e=b.length;e>d;d++)"*"===b[d]&&(c[d]="*");return c.join("")===b.join("")}function q(a,b){return E(a)&&!C(b)?z[a]:D(b)&&E(a)?(z[a]&&!z.$delegates[a]&&(z.$delegates[a]=z[a]),z[a]=b,this):this}function r(a,b){return F(a)?b=a:b.name=a,n(b),this}function s(a,e,g,m,n,q,r,s,x){function z(){r.url()!==M&&(r.url(M),r.replace())}function A(a,c,d,f,h){var i=d?c:k(a.params,c),j={$stateParams:i};h.resolve=n.resolve(a.resolve,j,h.resolve,a);var l=[h.resolve.then(function(a){h.globals=a})];return f&&l.push(f),H(a.views,function(c,d){var e=c.resolve&&c.resolve!==a.resolve?c.resolve:{};e.$template=[function(){return g.load(d,{view:c,locals:j,params:i,notify:!1})||""}],l.push(n.resolve(e,j,h.resolve,a).then(function(f){if(D(c.controllerProvider)||G(c.controllerProvider)){var g=b.extend({},e,j);f.$$controller=m.invoke(c.controllerProvider,null,g)}else f.$$controller=c.controller;f.$$state=a,f.$$controllerAs=c.controllerAs,h[d]=f}))}),e.all(l).then(function(){return h})}var B=e.reject(new Error("transition superseded")),F=e.reject(new Error("transition prevented")),K=e.reject(new Error("transition aborted")),L=e.reject(new Error("transition failed")),M=r.url(),N=x.baseHref();return u.locals={resolve:null,globals:{$stateParams:{}}},v={params:{},current:u.self,$current:u,transition:null},v.reload=function(){v.transitionTo(v.current,q,{reload:!0,inherit:!1,notify:!1})},v.go=function(a,b,c){return this.transitionTo(a,b,I({inherit:!0,relative:v.$current},c))},v.transitionTo=function(b,c,f){c=c||{},f=I({location:!0,inherit:!1,relative:null,notify:!0,reload:!1,$retry:!1},f||{});var g,k=v.$current,n=v.params,o=k.path,p=l(b,f.relative);if(!C(p)){var s={to:b,toParams:c,options:f};if(g=a.$broadcast("$stateNotFound",s,k.self,n),g.defaultPrevented)return z(),K;if(g.retry){if(f.$retry)return z(),L;var w=v.transition=e.when(g.retry);return w.then(function(){return w!==v.transition?B:(s.options.$retry=!0,v.transitionTo(s.to,s.toParams,s.options))},function(){return K}),z(),w}if(b=s.to,c=s.toParams,f=s.options,p=l(b,f.relative),!C(p)){if(f.relative)throw new Error("Could not resolve '"+b+"' from state '"+f.relative+"'");throw new Error("No such state '"+b+"'")}}if(p[y])throw new Error("Cannot transition to abstract state '"+b+"'");f.inherit&&(c=h(q,c||{},v.$current,p)),b=p;var x,D,E=b.path,G=u.locals,H=[];for(x=0,D=E[x];D&&D===o[x]&&j(c,n,D.ownParams)&&!f.reload;x++,D=E[x])G=H[x]=D.locals;if(t(b,k,G,f))return b.self.reloadOnSearch!==!1&&z(),v.transition=null,e.when(v.current);if(c=i(b.params,c||{}),f.notify&&(g=a.$broadcast("$stateChangeStart",b.self,c,k.self,n),g.defaultPrevented))return z(),F;for(var N=e.when(G),O=x;O<E.length;O++,D=E[O])G=H[O]=d(G),N=A(D,c,D===b,N,G);var P=v.transition=N.then(function(){var d,e,g;if(v.transition!==P)return B;for(d=o.length-1;d>=x;d--)g=o[d],g.self.onExit&&m.invoke(g.self.onExit,g.self,g.locals.globals),g.locals=null;for(d=x;d<E.length;d++)e=E[d],e.locals=H[d],e.self.onEnter&&m.invoke(e.self.onEnter,e.self,e.locals.globals);if(v.transition!==P)return B;v.$current=b,v.current=b.self,v.params=c,J(v.params,q),v.transition=null;var h=b.navigable;return f.location&&h&&(r.url(h.url.format(h.locals.globals.$stateParams)),"replace"===f.location&&r.replace()),f.notify&&a.$broadcast("$stateChangeSuccess",b.self,c,k.self,n),M=r.url(),v.current},function(d){return v.transition!==P?B:(v.transition=null,a.$broadcast("$stateChangeError",b.self,c,k.self,n,d),z(),e.reject(d))});return P},v.is=function(a,d){var e=l(a);return C(e)?v.$current!==e?!1:C(d)&&null!==d?b.equals(q,d):!0:c},v.includes=function(a,d){if(E(a)&&o(a)){if(!p(a))return!1;a=v.$current.name}var e=l(a);if(!C(e))return c;if(!C(v.$current.includes[e.name]))return!1;var f=!0;return b.forEach(d,function(a,b){C(q[b])&&q[b]===a||(f=!1)}),f},v.href=function(a,b,c){c=I({lossy:!0,inherit:!1,absolute:!1,relative:v.$current},c||{});var d=l(a,c.relative);if(!C(d))return null;b=h(q,b||{},v.$current,d);var e=d&&c.lossy?d.navigable:d,g=e&&e.url?e.url.format(i(d.params,b||{})):null;return!f.html5Mode()&&g&&(g="#"+f.hashPrefix()+g),"/"!==N&&(f.html5Mode()?g=N.slice(0,-1)+g:c.absolute&&(g=N.slice(1)+g)),c.absolute&&g&&(g=r.protocol()+"://"+r.host()+(80==r.port()||443==r.port()?"":":"+r.port())+(!f.html5Mode()&&g?"/":"")+g),g},v.get=function(a,b){if(!C(a)){var c=[];return H(w,function(a){c.push(a.self)}),c}var d=l(a,b);return d&&d.self?d.self:null},v}function t(a,b,c,d){return a!==b||(c!==b.locals||d.reload)&&a.self.reloadOnSearch!==!1?void 0:!0}var u,v,w={},x={},y="abstract",z={parent:function(a){if(C(a.parent)&&a.parent)return l(a.parent);var b=/^(.+)\.[^.]+$/.exec(a.name);return b?l(b[1]):u},data:function(a){return a.parent&&a.parent.data&&(a.data=a.self.data=I({},a.parent.data,a.data)),a.data},url:function(a){var b=a.url;if(E(b))return"^"==b.charAt(0)?e.compile(b.substring(1)):(a.parent.navigable||u).url.concat(b);if(e.isMatcher(b)||null==b)return b;throw new Error("Invalid url '"+b+"' in state '"+a+"'")},navigable:function(a){return a.url?a:a.parent?a.parent.navigable:null},params:function(a){if(!a.params)return a.url?a.url.parameters():a.parent.params;if(!G(a.params))throw new Error("Invalid params in state '"+a+"'");if(a.url)throw new Error("Both params and url specicified in state '"+a+"'");return a.params},views:function(a){var b={};return H(C(a.views)?a.views:{"":a},function(c,d){d.indexOf("@")<0&&(d+="@"+a.parent.name),b[d]=c}),b},ownParams:function(a){if(!a.parent)return a.params;var b={};H(a.params,function(a){b[a]=!0}),H(a.parent.params,function(c){if(!b[c])throw new Error("Missing required parameter '"+c+"' in state '"+a.name+"'");b[c]=!1});var c=[];return H(b,function(a,b){a&&c.push(b)}),c},path:function(a){return a.parent?a.parent.path.concat(a):[]},includes:function(a){var b=a.parent?I({},a.parent.includes):{};return b[a.name]=!0,b},$delegates:{}};u=n({name:"",url:"^",views:null,"abstract":!0}),u.navigable=null,this.decorator=q,this.state=r,this.$get=s,s.$inject=["$rootScope","$q","$view","$injector","$resolve","$stateParams","$location","$urlRouter","$browser"]}function r(){function a(a,b){return{load:function(c,d){var e,f={template:null,controller:null,view:null,locals:null,notify:!0,async:!0,params:{}};return d=I(f,d),d.view&&(e=b.fromConfig(d.view,d.params,d.locals)),e&&d.notify&&a.$broadcast("$viewContentLoading",d),e}}}this.$get=a,a.$inject=["$rootScope","$templateFactory"]}function s(){var a=!1;this.useAnchorScroll=function(){a=!0},this.$get=["$anchorScroll","$timeout",function(b,c){return a?b:function(a){c(function(){a[0].scrollIntoView()},0,!1)}}]}function t(a,c,d){function e(){return c.has?function(a){return c.has(a)?c.get(a):null}:function(a){try{return c.get(a)}catch(b){return null}}}function f(a,b){var c=function(){return{enter:function(a,b,c){b.after(a),c()},leave:function(a,b){a.remove(),b()}}};if(i)return{enter:function(a,b,c){i.enter(a,null,b,c)},leave:function(a,b){i.leave(a,b)}};if(h){var d=h&&h(b,a);return{enter:function(a,b,c){d.enter(a,null,b),c()},leave:function(a,b){d.leave(a),b()}}}return c()}var g=e(),h=g("$animator"),i=g("$animate"),j={restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(c,e,g){return function(c,e,h){function i(){k&&(k.remove(),k=null),m&&(m.$destroy(),m=null),l&&(q.leave(l,function(){k=null}),k=l,l=null)}function j(f){var h=c.$new(),j=l&&l.data("$uiViewName"),k=j&&a.$current&&a.$current.locals[j];if(f||k!==n){var r=g(h,function(a){q.enter(a,e,function(){(b.isDefined(p)&&!p||c.$eval(p))&&d(a)}),i()});n=a.$current.locals[r.data("$uiViewName")],l=r,m=h,m.$emit("$viewContentLoaded"),m.$eval(o)}}var k,l,m,n,o=h.onload||"",p=h.autoscroll,q=f(h,c);c.$on("$stateChangeSuccess",function(){j(!1)}),c.$on("$viewContentLoading",function(){j(!1)}),j(!0)}}};return j}function u(a,b,c){return{restrict:"ECA",priority:-400,compile:function(d){var e=d.html();return function(d,f,g){var h=g.uiView||g.name||"",i=f.inheritedData("$uiView");h.indexOf("@")<0&&(h=h+"@"+(i?i.state.name:"")),f.data("$uiViewName",h);var j=c.$current,k=j&&j.locals[h];if(k){f.data("$uiView",{name:h,state:k.$$state}),f.html(k.$template?k.$template:e);var l=a(f.contents());if(k.$$controller){k.$scope=d;var m=b(k.$$controller,k);k.$$controllerAs&&(d[k.$$controllerAs]=m),f.data("$ngControllerController",m),f.children().data("$ngControllerController",m)}l(d)}}}}}function v(a){var b=a.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/);if(!b||4!==b.length)throw new Error("Invalid state ref '"+a+"'");return{state:b[1],paramExpr:b[3]||null}}function w(a){var b=a.parent().inheritedData("$uiView");return b&&b.state&&b.state.name?b.state:void 0}function x(a,c){var d=["location","inherit","reload"];return{restrict:"A",require:"?^uiSrefActive",link:function(e,f,g,h){var i=v(g.uiSref),j=null,k=w(f)||a.$current,l="FORM"===f[0].nodeName,m=l?"action":"href",n=!0,o={relative:k},p=e.$eval(g.uiSrefOpts)||{};b.forEach(d,function(a){a in p&&(o[a]=p[a])});var q=function(b){if(b&&(j=b),n){var c=a.href(i.state,j,o);return h&&h.$$setStateInfo(i.state,j),c?void(f[0][m]=c):(n=!1,!1)}};i.paramExpr&&(e.$watch(i.paramExpr,function(a){a!==j&&q(a)},!0),j=e.$eval(i.paramExpr)),q(),l||f.bind("click",function(b){var d=b.which||b.button;d>1||b.ctrlKey||b.metaKey||b.shiftKey||f.attr("target")||(c(function(){a.go(i.state,j,o)}),b.preventDefault())})}}}function y(a,b,c){return{restrict:"A",controller:["$scope","$element","$attrs",function(d,e,f){function g(){a.$current.self===i&&h()?e.addClass(l):e.removeClass(l)}function h(){return!k||j(k,b)}var i,k,l;l=c(f.uiSrefActive||"",!1)(d),this.$$setStateInfo=function(b,c){i=a.get(b,w(e)),k=c,g()},d.$on("$stateChangeSuccess",g)}]}}function z(a){return function(b){return a.is(b)}}function A(a){return function(b){return a.includes(b)}}function B(a,b){function e(a){this.locals=a.locals.globals,this.params=this.locals.$stateParams}function f(){this.locals=null,this.params=null}function g(c,g){if(null!=g.redirectTo){var h,j=g.redirectTo;if(E(j))h=j;else{if(!D(j))throw new Error("Invalid 'redirectTo' in when()");h=function(a,b){return j(a,b.path(),b.search())}}b.when(c,h)}else a.state(d(g,{parent:null,name:"route:"+encodeURIComponent(c),url:c,onEnter:e,onExit:f}));return i.push(g),this}function h(a,b,d){function e(a){return""!==a.name?a:c}var f={routes:i,params:d,current:c};return b.$on("$stateChangeStart",function(a,c,d,f){b.$broadcast("$routeChangeStart",e(c),e(f))}),b.$on("$stateChangeSuccess",function(a,c,d,g){f.current=e(c),b.$broadcast("$routeChangeSuccess",e(c),e(g)),J(d,f.params)}),b.$on("$stateChangeError",function(a,c,d,f,g,h){b.$broadcast("$routeChangeError",e(c),e(f),h)}),f}var i=[];e.$inject=["$$state"],this.when=g,this.$get=h,h.$inject=["$state","$rootScope","$routeParams"]}var C=b.isDefined,D=b.isFunction,E=b.isString,F=b.isObject,G=b.isArray,H=b.forEach,I=b.extend,J=b.copy;b.module("ui.router.util",["ng"]),b.module("ui.router.router",["ui.router.util"]),b.module("ui.router.state",["ui.router.router","ui.router.util"]),b.module("ui.router",["ui.router.state"]),b.module("ui.router.compat",["ui.router"]),l.$inject=["$q","$injector"],b.module("ui.router.util").service("$resolve",l),m.$inject=["$http","$templateCache","$injector"],b.module("ui.router.util").service("$templateFactory",m),n.prototype.concat=function(a){return new n(this.sourcePath+a+this.sourceSearch)},n.prototype.toString=function(){return this.source},n.prototype.exec=function(a,b){var c=this.regexp.exec(a);if(!c)return null;var d,e=this.params,f=e.length,g=this.segments.length-1,h={};if(g!==c.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");for(d=0;g>d;d++)h[e[d]]=c[d+1];for(;f>d;d++)h[e[d]]=b[e[d]];return h},n.prototype.parameters=function(){return this.params},n.prototype.format=function(a){var b=this.segments,c=this.params;if(!a)return b.join("");var d,e,f,g=b.length-1,h=c.length,i=b[0];for(d=0;g>d;d++)f=a[c[d]],null!=f&&(i+=encodeURIComponent(f)),i+=b[d+1];for(;h>d;d++)f=a[c[d]],null!=f&&(i+=(e?"&":"?")+c[d]+"="+encodeURIComponent(f),e=!0);return i},b.module("ui.router.util").provider("$urlMatcherFactory",o),p.$inject=["$urlMatcherFactoryProvider"],b.module("ui.router.router").provider("$urlRouter",p),q.$inject=["$urlRouterProvider","$urlMatcherFactoryProvider","$locationProvider"],b.module("ui.router.state").value("$stateParams",{}).provider("$state",q),r.$inject=[],b.module("ui.router.state").provider("$view",r),b.module("ui.router.state").provider("$uiViewScroll",s),t.$inject=["$state","$injector","$uiViewScroll"],u.$inject=["$compile","$controller","$state"],b.module("ui.router.state").directive("uiView",t),b.module("ui.router.state").directive("uiView",u),x.$inject=["$state","$timeout"],y.$inject=["$state","$stateParams","$interpolate"],b.module("ui.router.state").directive("uiSref",x).directive("uiSrefActive",y),z.$inject=["$state"],A.$inject=["$state"],b.module("ui.router.state").filter("isState",z).filter("includedByState",A),B.$inject=["$stateProvider","$urlRouterProvider"],b.module("ui.router.compat").provider("$route",B).directive("ngView",t)}(window,window.angular);
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
'use strict';
var websocketApp = angular.module('websocketApp',['ngCookies', 'ngResource', 'ui.router']);
websocketApp.config(['$stateProvider',
function($stateProvider) {
var states = [];
angular.forEach(states, function(item) {
$stateProvider.state(item);
});
}
]);
websocketApp.service('WebSocketService',
['$q', '$rootScope', function($q, $rootScope) {
var Service = {};
var callbacks = {};
var currentCallbackId = 0;
var ws = new WebSocket("ws://localhost:8080/reverse");
ws.onopen = function(){
console.log("连接到了服务器!");
};
ws.onclose = function () {
console.log('连接被关闭.');
};
ws.onmessage = function(message) {
listener(JSON.parse(message.data));
};
function sendRequest(request) {
var defer = $q.defer();
var callbackId = getCallbackId();
callbacks[callbackId] = {
time: new Date(),
cb:defer
};
request.callbackId = callbackId;
ws.send(JSON.stringify(request));
return defer.promise;
}
function listener(data) {
var messageObj = data;
if(callbacks.hasOwnProperty(messageObj.callbackId)) {//主动请求
$rootScope.$apply(callbacks[messageObj.callbackId].cb.resolve(messageObj));
delete callbacks[messageObj.callbackId];
}else{//服务端推送(广播给子scope)
$rootScope.$broadcast(messageObj.msgType, messageObj);
}
}
function getCallbackId() {
currentCallbackId += 1;
if(currentCallbackId > 10000) {
currentCallbackId = 0;
}
return currentCallbackId;
}
Service.sendMessage = function(message){
var request = {
message:message
}
var promise = sendRequest(request);
return promise;
};
return Service;
}]);
websocketApp.controller('UserListCtrl',
['$scope', '$rootScope', '$location', '$resource', '$stateParams','WebSocketService',
function($scope, $rootScope, $location, $resource, $stateParams,WebSocketService) {
$scope.users = [];//[{nickName:'111111',messages:11}];
$scope.$on('UserList', function(event,data) {
$scope.$apply(function(){
$scope.users= data.data;
});
});
}]);
websocketApp.controller('MessagesCtrl',
['$scope', '$rootScope', '$location', '$resource', '$stateParams','WebSocketService',
function($scope, $rootScope, $location, $resource, $stateParams,WebSocketService) {
$scope.message = "";
var messages = $scope.messages = [];
$scope.$on('text', function(event,data) {
$scope.$apply(function(){
console.log(data);
messages.push({type:1,message:data.content});
});
});
$scope.send= function(){
if($scope.message){
messages.push({type:2,message:$scope.message});
WebSocketService.sendMessage($scope.message).then(function(res) {
messages.push({type:1,message:res.message});
}, function(res) {
console.log(res);
});
$scope.message = "";
}
}
}]);
\ No newline at end of file
(function(){var ah=window,l=document,A=navigator,ag=A.userAgent,p=ah.screen,s;try{s=ah.location.href}catch(au){s=document.URL}var af="https:"==ah.location.protocol?"https://s":"http://",v="beacon.sina.com.cn";var q=af+v+"/a.gif?",Q=af+v+"/g.gif?",z=af+v+"/d.gif?",f=af+v+"/e.gif?";var c=0;var U=l.referrer.toLowerCase();var E="SINAGLOBAL",b="Apache",al="ULV",n="SUP",ao="UOR",ab="_s_acc",S="_s_tentry";var am=0;var y=false;var aj=false,j=false;var ai="";var aa=16777215,I=0,W,d=0;var ak="",H="",G="";var k=[],K=[],ac=[];var aw=0;var Z=(function(){var i=window.localStorage,D,ax;if(i){return{get:function(e){return unescape(i.getItem(e))},set:function(e,az){i.setItem(e,escape(az))}}}else{if(window.ActiveXObject){D=document.documentElement;ax="localstorage";try{D.addBehavior("#default#userdata");D.save("localstorage")}catch(ay){}return{set:function(az,aA){try{D.setAttribute(az,aA);D.save(ax)}catch(aB){}},get:function(az){try{D.load(ax);return D.getAttribute(az)}catch(aA){}}}}else{return{get:h,set:t}}}})();function Y(ax,i){var D=l.getElementsByName(ax);var e=(i>0)?i:0;return(D.length>e)?D[e].content:""}function aq(aA,D,ay,ax){if(aA==""){return""}ax=(ax=="")?"=":ax;D+=ax;var az=aA.indexOf(D);if(az<0){return""}az+=D.length;var i=aA.indexOf(ay,az);if(i<az){i=aA.length}return aA.substring(az,i)}function h(e){if(undefined==e||""==e){return""}return aq(l.cookie,e,";","")}function t(ay,e,i,ax){if(e!=null){if((undefined==ax)||(null==ax)){ax="weibo.com"}if((undefined==i)||(null==i)||(""==i)){l.cookie=ay+"="+e+";domain="+ax+";path=/"}else{var D=new Date();var az=D.getTime();az=az+86400000*i;D.setTime(az);az=D.getTime();l.cookie=ay+"="+e+";domain="+ax+";expires="+D.toUTCString()+";path=/"}}}function r(e,ax,D){var i=e;if(i==null){return false}ax=ax||"click";if((typeof D).toLowerCase()!="function"){return}if(i.attachEvent){i.attachEvent("on"+ax,D)}else{if(i.addEventListener){i.addEventListener(ax,D,false)}else{i["on"+ax]=D}}return true}function at(){if(window.event!=null){return window.event}else{if(window.event){return window.event}var D=arguments.callee.caller;var i;var ax=0;while(D!=null&&ax<40){i=D.arguments[0];if(i&&(i.constructor==Event||i.constructor==MouseEvent||i.constructor==KeyboardEvent)){return i}ax++;D=D.caller}return i}}function ar(i){i=i||at();if(!i.target){i.target=i.srcElement;i.pageX=i.x;i.pageY=i.y}if(typeof i.layerX=="undefined"){i.layerX=i.offsetX}if(typeof i.layerY=="undefined"){i.layerY=i.offsetY}return i}function a(ax){if(typeof ax!=="string"){throw"trim need a string as parameter"}var e=ax.length;var D=0;var i=/(\u3000|\s|\t|\u00A0)/;while(D<e){if(!i.test(ax.charAt(D))){break}D+=1}while(e>D){if(!i.test(ax.charAt(e-1))){break}e-=1}return ax.slice(D,e)}function N(e){return Object.prototype.toString.call(e)==="[object Array]"}function R(ax,aB){var aD=a(ax).split("&");var aC={};var D=function(i){if(aB){return decodeURIComponent(i)}else{return i}};for(var az=0,aA=aD.length;az<aA;az++){if(aD[az]){var ay=aD[az].split("=");var e=ay[0];var aE=ay[1];if(ay.length<2){aE=e;e="$nullName"}if(!aC[e]){aC[e]=D(aE)}else{if(N(aC[e])!=true){aC[e]=[aC[e]]}aC[e].push(D(aE))}}}return aC}function m(D,ay){for(var ax=0,e=D.length;ax<e;ax++){ay(D[ax],ax)}}function T(i){var e=new RegExp("^http(?:s)?://([^/]+)","im");if(i.match(e)){return i.match(e)[1].toString()}else{return""}}function X(e,i){var D="";if(e!=null&&e!=""){if(/[?&]sudaref=([\w\.]*)/.test(e)){D=e.match(/[?&]sudaref=([\w\.]*)/);if(D.length>1){D=D[1]}}}if(D==""&&i!=null&&i!=""){D=T(i)}if(/(\.weibo\.com|\.t\.sina\.com\.cn|\.t\.cn)$/i.test(D)||/^(weibo\.com|t\.sina\.com\.cn|t\.cn)$/i.test(D)||D==""){return""}return D}var x={screenSize:function(){return(aa&8388608==8388608)?p.width+"x"+p.height:""},colorDepth:function(){return(aa&4194304==4194304)?p.colorDepth:""},appCode:function(){return(aa&2097152==2097152)?A.appCodeName:""},appName:function(){return(aa&1048576==1048576)?((A.appName.indexOf("Microsoft Internet Explorer")>-1)?"MSIE":A.appName):""},cpu:function(){return(aa&524288==524288)?(A.cpuClass||A.oscpu):""},platform:function(){return(aa&262144==262144)?(A.platform):""},jsVer:function(){if(aa&131072!=131072){return""}var ay,e,aA,D=1,ax=0,i=(A.appName.indexOf("Microsoft Internet Explorer")>-1)?"MSIE":A.appName,az=A.appVersion;if("MSIE"==i){e="MSIE";ay=az.indexOf(e);if(ay>=0){aA=window.parseInt(az.substring(ay+5));if(3<=aA){D=1.1;if(4<=aA){D=1.3}}}}else{if(("Netscape"==i)||("Opera"==i)||("Mozilla"==i)){D=1.3;e="Netscape6";ay=az.indexOf(e);if(ay>=0){D=1.5}}}return D},network:function(){if(aa&65536!=65536){return""}var i="";i=(A.connection&&A.connection.type)?A.connection.type:i;try{l.body.addBehavior("#default#clientCaps");i=l.body.connectionType}catch(D){i="unkown"}return i},language:function(){return(aa&32768==32768)?(A.systemLanguage||A.language):""},timezone:function(){return(aa&16384==16384)?(new Date().getTimezoneOffset()/60):""},flashVer:function(){if(aa&8192!=8192){return""}var aA=A.plugins,ax,aB,aD;if(aA&&aA.length){for(var az in aA){aB=aA[az];if(aB.description==null){continue}if(ax!=null){break}aD=aB.description.toLowerCase();if(aD.indexOf("flash")!=-1){ax=aB.version?parseInt(aB.version):aD.match(/\d+/);continue}}}else{if(window.ActiveXObject){for(var ay=10;ay>=2;ay--){try{var D=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+ay);if(D){ax=ay;break}}catch(aC){}}}else{if(ag.indexOf("webtv/2.5")!=-1){ax=3}else{if(ag.indexOf("webtv")!=-1){ax=2}}}}return ax},javaEnabled:function(){if(aa&4096!=4096){return""}var D=A.plugins,i=A.javaEnabled(),ax,ay;if(i==true){return 1}if(D&&D.length){for(var e in D){ax=D[e];if(ax.description==null){continue}if(i!=null){break}ay=ax.description.toLowerCase();if(ay.indexOf("java plug-in")!=-1){i=parseInt(ax.version);continue}}}else{if(window.ActiveXObject){i=(new ActiveXObject("JavaWebStart.IsInstalled")!=null)}}return i?1:0}};var g={pageId:function(i){var D=i||ak,aA="-9999-0-0-1";if((undefined==D)||(""==D)){try{var ax=Y("publishid");if(""!=ax){var az=ax.split(",");if(az.length>0){if(az.length>=3){aA="-9999-0-"+az[1]+"-"+az[2]}D=az[0]}}else{D="0"}}catch(ay){D="0"}D=D+aA}return D},sessionCount:function(){var e=h("_s_upa");if(e==""){e=0}return e},excuteCount:function(){return c},referrer:function(){if(aa&2048!=2048){return""}var e=/^[^\?&#]*.swf([\?#])?/;if((U=="")||(U.match(e))){var i=aq(s,"ref","&","");if(i!=""){return escape(i)}}return escape(U)},isHomepage:function(){if(aa&1024!=1024){return""}var D="";try{l.body.addBehavior("#default#homePage");D=l.body.isHomePage(s)?"Y":"N"}catch(i){D="unkown"}return D},PGLS:function(){return(aa&512==512)?Y("stencil"):""},ZT:function(){if(aa&256!=256){return""}var e=Y("subjectid");e.replace(",",".");e.replace(";",",");return escape(e)},mediaType:function(){return(aa&128==128)?Y("mediaid"):""},domCount:function(){return(aa&64==64)?l.getElementsByTagName("*").length:""},iframeCount:function(){return(aa&32==32)?l.getElementsByTagName("iframe").length:""},onloadTime:function(){var e;if(typeof __GLOBAL_STATS_PAGESTART_TIME__!="undefined"&&typeof __GLOBAL_STATS_PAGEONLOAD_TIME__!="undefined"){e=__GLOBAL_STATS_PAGEONLOAD_TIME__-__GLOBAL_STATS_PAGESTART_TIME__}return(aa&16==16)?e||"":""},domReadyTime:function(){var e;if(typeof __GLOBAL_STATS_PAGESTART_TIME__!="undefined"&&typeof __GLOBAL_STATS_DOMREADY_TIME__!="undefined"){e=__GLOBAL_STATS_DOMREADY_TIME__-__GLOBAL_STATS_PAGESTART_TIME__}return(aa&8==8)?e||"":""},bigpipe:function(){return(typeof $CONFIG!="undefined"&&typeof $CONFIG.bigpipe!="undefined"&&$CONFIG.bigpipe=="true")?1:0},getRealURL:function(){var e="";if(typeof STK!="undefined"&&typeof STK.historyM!="undefined"&&typeof STK.historyM.parseURL!="undefined"){e=escape(STK.historyM.parseURL().url)}return e}};var P={visitorId:function(){if(""!=E){var e=h(E);if(""==e){e=h(b);t(E,e,3650)}return e}else{return""}},sessionId:function(){var e=h(b);if(""==e){var i=new Date();e=Math.random()*10000000000000+"."+i.getTime();t(b,e)}return e},lastVisit:function(){var D=h(b);var ay=h(al);var ax=ay.split(":");var az="",i;if(ax.length>=6){if(D!=ax[4]){i=new Date();var e=new Date(window.parseInt(ax[0]));ax[1]=window.parseInt(ax[1])+1;if(i.getMonth()!=e.getMonth()){ax[2]=1}else{ax[2]=window.parseInt(ax[2])+1}if(((i.getTime()-e.getTime())/86400000)>=7){ax[3]=1}else{if(i.getDay()<e.getDay()){ax[3]=1}else{ax[3]=window.parseInt(ax[3])+1}}az=ax[0]+":"+ax[1]+":"+ax[2]+":"+ax[3];ax[5]=ax[0];ax[0]=i.getTime();t(al,ax[0]+":"+ax[1]+":"+ax[2]+":"+ax[3]+":"+D+":"+ax[5],360)}else{az=ax[5]+":"+ax[1]+":"+ax[2]+":"+ax[3]}}else{i=new Date();az=":1:1:1";t(al,i.getTime()+az+":"+D+":",360)}return az},userNick:function(){if(ai!=""){return ai}var D=unescape(h(n));if(D!=""){var i=aq(D,"ag","&","");var e=aq(D,"user","&","");var ax=aq(D,"uid","&","");var az=aq(D,"sex","&","");var ay=aq(D,"dob","&","");ai=i+":"+e+":"+ax+":"+az+":"+ay;return ai}else{return""}},userOrigin:function(){if(aa&4!=4){return""}var e=h(ao);var i=e.split(":");return i[0]},subp:function(){return h("SUBP")},advCount:function(){return(aa&2==2)?h(ab):""},setUOR:function(){var ay=h(ao),aC="",e="",aB="",D="",az=s.toLowerCase(),i=l.referrer.toLowerCase();var aD=/[&|?]c=spr(_[A-Za-z0-9]{1,}){3,}/;if(az.match(aD)){aB=az.match(aD)[0]}else{if(i.match(aD)){aB=i.match(aD)[0]}}if(aB!=""){aB=aB.substr(3)}else{aB=X(az,i)}if(ay==""&&aB!=""){if(h(al)==""){aC=T(i);e=T(az)}t(ao,aC+","+e+","+aB,365)}else{var ax=0,aA=ay.split(",");if(aA.length>=1){aC=aA[0]}if(aA.length>=2){e=aA[1]}if(aA.length>=3){D=aA[2]}if(aB!=""){ax=1}if(ax){t(ao,aC+","+e+","+aB,365)}}},setAEC:function(e){if(""==e){return}var i=h(ab);if(i.indexOf(e+",")<0){i=i+e+","}t(ab,i,7)}};var av={picList:[{url:"http://ww1.sinaimg.cn/large/53d96fe3tw1diw52tyd28j.jpg",size:23243},{url:"http://ww2.sinaimg.cn/large/53d96fe3tw1diw52tyd28j.jpg",size:23243},{url:"http://ww3.sinaimg.cn/large/53d96fe3tw1diw52tyd28j.jpg",size:23243},{url:"http://ww4.sinaimg.cn/large/53d96fe3tw1diw52tyd28j.jpg",size:23243}],picOk:false,picData:[],picture:function(){if((I&8)!=8){av.picOk=true;return""}var ax=new Date().getTime();var az=[],D;for(var ay=0,e=av.picList.length;ay<e;ay++){D=new Image();SUDA.img=D;D.src=av.picList[ay].url+"?"+Math.random();D.onload=(function(i){return function(){var aA=new Date().getTime();av.picData[i]=Math.floor((av.picList[i].size/1024)/((aA-ax)/1000));if(/^(\d+,){3}\d+$/.test(av.picData.join(","))){av.picOk=true;J()}}})(ay);az.push(D)}},porList:[{url:"http://tp1.sinaimg.cn/1772026304/50/5603504743/1",size:3488},{url:"http://tp2.sinaimg.cn/1780417033/50/1280367872/0",size:4021},{url:"http://tp3.sinaimg.cn/1075913170/50/5601477177/1",size:3456},{url:"http://tp4.sinaimg.cn/1245851035/50/1279876078/1",size:2519}],porOk:false,porData:[],portait:function(){if((I&4)!=4){av.porOk=true;return""}var ax=new Date().getTime();var az=[],D;for(var ay=0,e=av.porList.length;ay<e;ay++){D=new Image();SUDA.img=D;D.src=av.porList[ay].url+"?"+Math.random();D.onload=(function(i){return function(){var aA=new Date().getTime();av.porData[i]=Math.floor((av.porList[i].size/1024)/((aA-ax)/1000));if(/^(\d+,){3}\d+$/.test(av.porData.join(","))){av.porOk=true;J()}}})(ay);az.push(D)}},jsList:[{url:"http://js.t.sinajs.cn/t4/home/static/suda/feed.png",size:21287}],jsOk:false,jsData:[],jsSpeed:function(){if((I&2)!=2){av.jsOk=true;return""}var ax=new Date().getTime();var az=[],D;for(var ay=0,e=av.jsList.length;ay<e;ay++){D=new Image();SUDA.img=D;D.src=av.jsList[ay].url+"?"+Math.random();D.onload=(function(i){return function(){var aA=new Date().getTime();av.jsData[i]=Math.floor((av.jsList[i].size/1024)/((aA-ax)/1000));if(/^\d+$/.test(av.jsData.join(","))){av.jsOk=true;J()}}})(ay);az.push(D)}},cssList:[{url:"http://img.t.sinajs.cn/t4/style/images/mobile/android/cp_3.jpg",size:24472}],cssOk:false,cssData:[],cssSpeed:function(){if((I&1)!=1){av.cssOk=true;return""}var ax=new Date().getTime();var az=[],D;for(var ay=0,e=av.cssList.length;ay<e;ay++){D=new Image();SUDA.img=D;D.src=av.cssList[ay].url+"?"+Math.random();D.onload=(function(i){return function(){var aA=new Date().getTime();av.cssData[i]=Math.floor((av.cssList[i].size/1024)/((aA-ax)/1000));if(/^\d+$/.test(av.cssData.join(","))){av.cssOk=true;J()}}})(ay);az.push(D)}}};var u={CI:function(){var e=["sz:"+x.screenSize(),"dp:"+x.colorDepth(),"ac:"+x.appCode(),"an:"+x.appName(),"cpu:"+x.cpu(),"pf:"+x.platform(),"jv:"+x.jsVer(),"ct:"+x.network(),"lg:"+x.language(),"tz:"+x.timezone(),"fv:"+x.flashVer(),"ja:"+x.javaEnabled()];return"CI="+e.join("|")},PI:function(e){var i=["pid:"+g.pageId(e),"st:"+g.sessionCount(),"et:"+g.excuteCount(),"ref:"+g.referrer(),"hp:"+g.isHomepage(),"PGLS:"+g.PGLS(),"ZT:"+g.ZT(),"MT:"+g.mediaType(),"keys:","dom:"+g.domCount(),"ifr:"+g.iframeCount(),"nld:"+g.onloadTime(),"drd:"+g.domReadyTime(),"bp:"+g.bigpipe(),"url:"+g.getRealURL()];return"PI="+i.join("|")},UI:function(){var e=["vid:"+P.visitorId(),"sid:"+P.sessionId(),"lv:"+P.lastVisit(),"un:"+P.userNick(),"uo:"+P.userOrigin(),"ae:"+P.advCount(),"su:"+P.subp()];return"UI="+e.join("|")},EX:function(i,e){if(aa&1!=1){return""}i=(null!=i)?i||"":H;e=(null!=e)?e||"":G;return"EX=ex1:"+i+"|ex2:"+e},EXT:function(i,e){if(aa&1!=1){return""}i=(null!=i)?i||"":H;e=(null!=e)?e||"":G;return i+":"+e},P_PI:function(){var e=["pic:"+av.picture(),"por:"+av.portait(),"js:"+av.jsSpeed(),"css:"+av.cssSpeed(),"ref:"+g.referrer()];return"PI="+e.join("|")},P_UI:function(){var e=["vid:"+P.visitorId(),"sid:"+P.sessionId(),"un:"+P.userNick()];return"UI="+e.join("|")},V:function(){return"V=2.2.3"},R:function(){return"gUid_"+new Date().getTime()}};function M(){var aA="-",ax=l.referrer.toLowerCase(),D=s.toLowerCase();if(""==h(S)){if(""!=ax){aA=T(ax)}t(S,aA,"","weibo.com")}var ay=/weibo.com\/(reg\.php|signup\/(signup|mobile|full_info)\.php)/;if(D.match(ay)){var az=aq(unescape(D),"sharehost","&","");var i=aq(unescape(D),"appkey","&","");if(""!=az){t(S,az,"","weibo.com")}t("appkey",i,"","weibo.com")}}function ae(e,i){C(e,i)}function C(i,D){D=D||{};var e=new Image(),ax;if(D&&D.callback&&typeof D.callback=="function"){e.onload=function(){clearTimeout(ax);ax=null;D.callback(true)}}SUDA.img=e;e.src=i;ax=setTimeout(function(){if(D&&D.callback&&typeof D.callback=="function"){D.callback(false);e.onload=null}},D.timeout||2000)}function ad(){if(aj||j){return}if(aw<3&&typeof __GLOBAL_STATS_PAGESTART_TIME__!="undefined"){aw++;if(typeof __GLOBAL_STATS_PAGESTART_TIME__=="undefined"||typeof __GLOBAL_STATS_DOMREADY_TIME__=="undefined"||typeof __GLOBAL_STATS_PAGEONLOAD_TIME__=="undefined"){setTimeout(ad,1000);return}}P.sessionId();w()}function w(e,ax,D){c++;var ay=P.visitorId();if(am<1){setTimeout(ad,0);am++;return}else{}var i=q+[u.V(),u.CI(),u.PI(e),u.UI(),u.EX(ax,D),u.R()].join("&");C(i);an()}function an(){if(typeof __GLOBAL_STATS_PAGESTART_TIME__!="undefined"){if(typeof __GLOBAL_STATS_PAGESTART_TIME__=="undefined"||typeof __GLOBAL_STATS_DOMREADY_TIME__=="undefined"||typeof __GLOBAL_STATS_PAGEONLOAD_TIME__=="undefined"){setTimeout(an,1000);return}}if("https:"==l.location.protocol||y==true){return}if(typeof W=="function"){if(W()==false){return}}var e=Z.get("sudaPerformance");if(e!=null&&(new Date().getTime()-e)<d*60*1000){return}if(document.readyState!="complete"){setTimeout(an,500)}c++;y=true;if(I>0){av.picture();av.portait();av.jsSpeed();av.cssSpeed()}}function J(){if(I>0&&av.picOk&&av.porOk&&av.jsOk&&av.cssOk){var e=Q+[u.V(),"PI=pic:"+av.picData+"|por:"+av.porData+"|js:"+av.jsData+"|css:"+av.cssData+"|nld:"+g.onloadTime()+"|drd:"+g.domReadyTime(),u.P_UI(),u.EX(),u.R()].join("&");C(e)}Z.set("sudaPerformance",new Date().getTime())}function L(e,ax){if((""==e)||(undefined==e)){return}P.setAEC(e);if(0==ax){return}var D="AcTrack||"+h(E)+"||"+h(b)+"||"+P.userNick()+"||"+e+"||";var i=f+D+u.EXT()+"&gUid_"+new Date().getTime();ae(i)}function O(aA,aB,e){e=e||{};var aD="UATrack||"+h(E)+"||"+h(b)+"||"+P.userNick()+"||"+aA+"||"+aB+"||"+g.referrer()+"||"+(e.href||"")+"||"+(e.realUrl||"")+"||";var D=f+aD+u.EXT()+"&gUid_"+new Date().getTime();ae(D,e);if(e.urls){if(e.urls.replace(/\s/g,"")!=""){var az=e.urls.split(",");if(az.length>0){for(var ax=0,ay=az.length;ax<ay;ax++){var aC=az[ax]+(az[ax].indexOf("?")==-1?"?":"&")+aD+"&gUid_"+new Date().getTime();ae(aC,e)}}}}}function F(aB){var aE=ar(aB);var D=aE.target;var az="",aD="",aC="",ay="",i="",aA="";var ax;if(D!=null&&D.getAttribute&&(!D.getAttribute("suda-uatrack")&&!D.getAttribute("suda-actrack")&&!D.getAttribute("suda-data"))){while(D!=null&&D.getAttribute&&(!!D.getAttribute("suda-uatrack")||!!D.getAttribute("suda-actrack")||!!D.getAttribute("suda-data"))==false){if(D==l.body){return}D=D.parentNode}}if(D==null||D.getAttribute==null){return}az=D.getAttribute("suda-actrack")||"";aD=D.getAttribute("suda-uatrack")||D.getAttribute("suda-data")||"";ay=D.getAttribute("suda-urls")||"";aC=o(D);if(aD){ax=R(aD);if(D.tagName.toLowerCase()=="a"){i=escape(D.href)}aA=g.getRealURL();ax.value=ax.value+aC;ax.key&&SUDA.uaTrack&&SUDA.uaTrack(ax.key,ax.value||ax.key,{href:i,realUrl:aA,urls:ay})}if(az){ax=R(az);ax.key&&SUDA.acTrack&&SUDA.acTrack(ax.key,ax.value||ax.key)}}function o(i){var D=i.getAttribute("suda-sizzle");var e="";if(D==null||D==""){return""}e=V(i,D);return e}function V(D,aF){var aL;if(/^[-\d]/.test(aF)){var aJ=aF.split(",");var aE=aJ[0];var e=aJ[1];var aG=aJ[2];aL=aJ[3]||"*";var aI,aB;if(aE==null||e==null||aG==null){return""}switch(aG){case"parent":D=D.parentNode;while(D!=null){if(D.getAttribute("suda-sizzle")!=null){if(aL!="*"&&D.tagName.toLowerCase()!=aL){D=D.parentNode;if(D==document.body){return""}continue}aI=D.getAttribute("suda-sizzle");aB=aI.split(",");if(aI[0]&&e==aI[0]){return(D.getAttribute("suda-ext")||"")+V(D,aI)}else{D=D.parentNode;if(D==document.body){return""}continue}}D=D.parentNode;if(D==document.body){return""}}return"";case"sibling":D=D.parentNode.children||D.parentNode.childNodes;for(var ay=0,aC=D.length;ay<aC;ay++){if(D[ay].getAttribute("suda-sizzle")!=null){if(aL!="*"&&D[ay].tagName.toLowerCase()!=aL){continue}aI=D[ay].getAttribute("suda-sizzle");aB=aI.split(",");if(aI[0]&&e==aI[0]){return(D[ay].getAttribute("suda-ext")||"")+V(D[ay],aI)}else{continue}}}return"";case"child":D=D.getElementsByTagName(aL);for(var ax=0,aA=D.length;ax<aA;ax++){if(D[ax].getAttribute("suda-sizzle")!=null){if(aL!="*"&&D[ax].tagName.toLowerCase()!=aL){continue}aI=D[ax].getAttribute("suda-sizzle");aB=aI.split(",");if(aI[0]&&e==aI[0]){return(D[ax].getAttribute("suda-ext")||"")+V(D[ax],aI)}else{continue}}}return""}}else{var aK=aF.split("["),aH;switch(aK.length){case 1:aL=aK[0];break;case 2:default:aL=aK[0];aH=aK[1];break}if(aH){aH=aH.replace(/['"\]]/g,"").split("=");if(aH.length==2){var aD=aH[0];var az=aH[1]}}D=D.parentNode;while(D!=null){if(D.tagName.toLowerCase()==aL){if(aD&&D.getAttribute(aD)==az){if(D.getAttribute("suda-sizzle")!=null&&D.getAttribute("suda-sizzle")!=""){return(D.getAttribute("suda-ext")||"")+V(D,D.getAttribute("suda-sizzle"))}return(D.getAttribute("suda-ext")||"")}if(aD==null){if(D.getAttribute("suda-sizzle")!=null&&D.getAttribute("suda-sizzle")!=""){return(D.getAttribute("suda-ext")||"")+V(D,D.getAttribute("suda-sizzle"))}return(D.getAttribute("suda-ext")||"")}}D=D.parentNode;if(D==document.body){return""}}return""}}if(window.SUDA&&Object.prototype.toString.call(window.SUDA)==="[object Array]"){for(var ap=0,B=SUDA.length;ap<B;ap++){switch(SUDA[ap][0]){case"setGatherType":aa=SUDA[ap][1];break;case"setGatherInfo":ak=SUDA[ap][1]||ak;H=SUDA[ap][2]||H;G=SUDA[ap][3]||G;break;case"setPerformance":I=SUDA[ap][1];break;case"setPerformanceFilter":W=SUDA[ap][1];break;case"setPerformanceInterval":d=SUDA[ap][1]*1||0;d=isNaN(d)?0:d;break;case"setGatherMore":k.push(SUDA[ap].slice(1));break;case"acTrack":K.push(SUDA[ap].slice(1));break;case"uaTrack":ac.push(SUDA[ap].slice(1));break}}}M();P.setUOR();aj=(function(D,i){if(ah.top==ah){return false}else{try{if(l.body.clientHeight==0){return false}return((l.body.clientHeight>=D)&&(l.body.clientWidth>=i))?false:true}catch(ax){return true}}})(320,240);j=(function(){return false})();ad();if(typeof $CONFIG!="undefined"&&typeof $CONFIG.bigpipe!="undefined"&&$CONFIG.bigpipe==="true"&&typeof STK!="undefined"&&typeof STK.historyM!="undefined"&&typeof STK.historyM.onpopstate!="undefined"){STK.historyM.onpopstate(function(e,i){if(i==true){ad()}})}if(k.length>0){m(k,function(i,e){w.apply(null,i)})}if(K.length>0){m(K,function(i,e){L.apply(null,i)})}if(ac.length>0){m(ac,function(i,e){O.apply(null,i)})}window.SUDA=window.SUDA||[];SUDA.log=function(){w.apply(null,arguments)};SUDA.acTrack=function(){L.apply(null,arguments)};SUDA.uaTrack=function(){O.apply(null,arguments)};r(l.body,"click",F)})();
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
.jd img{
background:transparent url(images/jxface2.gif?v=1.1) no-repeat scroll left top;
cursor:pointer;width:35px;height:35px;display:block;
}
.pp img{
background:transparent url(images/fface.gif?v=1.1) no-repeat scroll left top;
cursor:pointer;width:25px;height:25px;display:block;
}
.ldw img{
background:transparent url(images/wface.gif?v=1.1) no-repeat scroll left top;
cursor:pointer;width:35px;height:35px;display:block;
}
.tsj img{
background:transparent url(images/tface.gif?v=1.1) no-repeat scroll left top;
cursor:pointer;width:35px;height:35px;display:block;
}
.cat img{
background:transparent url(images/cface.gif?v=1.1) no-repeat scroll left top;
cursor:pointer;width:35px;height:35px;display:block;
}
.bb img{
background:transparent url(images/bface.gif?v=1.1) no-repeat scroll left top;
cursor:pointer;width:35px;height:35px;display:block;
}
.youa img{
background:transparent url(images/yface.gif?v=1.1) no-repeat scroll left top;
cursor:pointer;width:35px;height:35px;display:block;
}
.smileytable td {height: 37px;}
#tabPanel{margin-left:5px;overflow: hidden;}
#tabContent {float:left;background:#FFFFFF;}
#tabContent div{display: none;width:480px;overflow:hidden;}
#tabIconReview.show{left:17px;display:block;}
.menuFocus{background:#ACCD3C;}
.menuDefault{background:#FFFFFF;}
#tabIconReview{position:absolute;left:406px;left:398px \9;top:41px;z-index:65533;width:90px;height:76px;}
img.review{width:90px;height:76px;border:2px solid #9cb945;background:#FFFFFF;background-position:center;background-repeat:no-repeat;}
.wrapper .tabbody{position:relative;float:left;clear:both;padding:10px;width: 95%;}
.tabbody table{width: 100%;}
.tabbody td{border:1px solid #BAC498;}
.tabbody td span{display: block;zoom:1;padding:0 4px;}
\ No newline at end of file
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta name="robots" content="noindex, nofollow"/>
<script type="text/javascript" src="../internal.js"></script>
<link rel="stylesheet" type="text/css" href="emotion.css">
</head>
<body>
<div id="tabPanel" class="wrapper">
<div id="tabHeads" class="tabhead">
<span><var id="lang_input_choice"></var></span>
<span><var id="lang_input_Tuzki"></var></span>
<span><var id="lang_input_lvdouwa"></var></span>
<span><var id="lang_input_BOBO"></var></span>
<span><var id="lang_input_babyCat"></var></span>
<span><var id="lang_input_bubble"></var></span>
<span><var id="lang_input_youa"></var></span>
</div>
<div id="tabBodys" class="tabbody">
<div id="tab0"></div>
<div id="tab1"></div>
<div id="tab2"></div>
<div id="tab3"></div>
<div id="tab4"></div>
<div id="tab5"></div>
<div id="tab6"></div>
</div>
</div>
<div id="tabIconReview">
<img id='faceReview' class='review' src="../../themes/default/images/spacer.gif"/>
</div>
<script type="text/javascript" src="emotion.js"></script>
<script type="text/javascript">
var emotion = {
tabNum:7, //切换面板数量
SmilmgName:{ tab0:['j_00', 84], tab1:['t_00', 40], tab2:['w_00', 52], tab3:['B_00', 63], tab4:['C_00', 20], tab5:['i_f', 50], tab6:['y_00', 40] }, //图片前缀名
imageFolders:{ tab0:'jx2/', tab1:'tsj/', tab2:'ldw/', tab3:'bobo/', tab4:'babycat/', tab5:'face/', tab6:'youa/'}, //图片对应文件夹路径
imageCss:{tab0:'jd', tab1:'tsj', tab2:'ldw', tab3:'bb', tab4:'cat', tab5:'pp', tab6:'youa'}, //图片css类名
imageCssOffset:{tab0:35, tab1:35, tab2:35, tab3:35, tab4:35, tab5:25, tab6:35}, //图片偏移
SmileyInfor:{
tab0:['Kiss', 'Love', 'Yeah', '啊!', '背扭', '顶', '抖胸', '88', '汗', '瞌睡', '鲁拉', '拍砖', '揉脸', '生日快乐', '大笑', '瀑布汗~', '惊讶', '臭美', '傻笑', '抛媚眼', '发怒', '打酱油', '俯卧撑', '气愤', '?', '吻', '怒', '胜利', 'HI', 'KISS', '不说', '不要', '扯花', '大心', '顶', '大惊', '飞吻', '鬼脸', '害羞', '口水', '狂哭', '来', '发财了', '吃西瓜', '套牢', '害羞', '庆祝', '我来了', '敲打', '晕了', '胜利', '臭美', '被打了', '贪吃', '迎接', '酷', '微笑', '亲吻', '调皮', '惊恐', '耍酷', '发火', '害羞', '汗水', '大哭', '', '加油', '困', '你NB', '晕倒', '开心', '偷笑', '大哭', '滴汗', '叹气', '超赞', '??', '飞吻', '天使', '撒花', '生气', '被砸', '吓傻', '随意吐'],
tab1:['Kiss', 'Love', 'Yeah', '啊!', '背扭', '顶', '抖胸', '88', '汗', '瞌睡', '鲁拉', '拍砖', '揉脸', '生日快乐', '摊手', '睡觉', '瘫坐', '无聊', '星星闪', '旋转', '也不行', '郁闷', '正Music', '抓墙', '撞墙至死', '歪头', '戳眼', '飘过', '互相拍砖', '砍死你', '扔桌子', '少林寺', '什么?', '转头', '我爱牛奶', '我踢', '摇晃', '晕厥', '在笼子里', '震荡'],
tab2:['大笑', '瀑布汗~', '惊讶', '臭美', '傻笑', '抛媚眼', '发怒', '我错了', 'money', '气愤', '挑逗', '吻', '怒', '胜利', '委屈', '受伤', '说啥呢?', '闭嘴', '不', '逗你玩儿', '飞吻', '眩晕', '魔法', '我来了', '睡了', '我打', '闭嘴', '打', '打晕了', '刷牙', '爆揍', '炸弹', '倒立', '刮胡子', '邪恶的笑', '不要不要', '爱恋中', '放大仔细看', '偷窥', '超高兴', '晕', '松口气', '我跑', '享受', '修养', '哭', '汗', '啊~', '热烈欢迎', '打酱油', '俯卧撑', '?'],
tab3:['HI', 'KISS', '不说', '不要', '扯花', '大心', '顶', '大惊', '飞吻', '鬼脸', '害羞', '口水', '狂哭', '来', '泪眼', '流泪', '生气', '吐舌', '喜欢', '旋转', '再见', '抓狂', '汗', '鄙视', '拜', '吐血', '嘘', '打人', '蹦跳', '变脸', '扯肉', '吃To', '吃花', '吹泡泡糖', '大变身', '飞天舞', '回眸', '可怜', '猛抽', '泡泡', '苹果', '亲', '', '骚舞', '烧香', '睡', '套娃娃', '捅捅', '舞倒', '西红柿', '爱慕', '摇', '摇摆', '杂耍', '招财', '被殴', '被球闷', '大惊', '理想', '欧打', '呕吐', '碎', '吐痰'],
tab4:['发财了', '吃西瓜', '套牢', '害羞', '庆祝', '我来了', '敲打', '晕了', '胜利', '臭美', '被打了', '贪吃', '迎接', '酷', '顶', '幸运', '爱心', '躲', '送花', '选择'],
tab5:['微笑', '亲吻', '调皮', '惊讶', '耍酷', '发火', '害羞', '汗水', '大哭', '得意', '鄙视', '困', '夸奖', '晕倒', '疑问', '媒婆', '狂吐', '青蛙', '发愁', '亲吻', '', '爱心', '心碎', '玫瑰', '礼物', '哭', '奸笑', '可爱', '得意', '呲牙', '暴汗', '楚楚可怜', '困', '哭', '生气', '惊讶', '口水', '彩虹', '夜空', '太阳', '钱钱', '灯泡', '咖啡', '蛋糕', '音乐', '爱', '胜利', '赞', '鄙视', 'OK'],
tab6:['男兜', '女兜', '开心', '乖乖', '偷笑', '大笑', '抽泣', '大哭', '无奈', '滴汗', '叹气', '狂晕', '委屈', '超赞', '??', '疑问', '飞吻', '天使', '撒花', '生气', '被砸', '口水', '泪奔', '吓傻', '吐舌头', '点头', '随意吐', '旋转', '困困', '鄙视', '狂顶', '篮球', '再见', '欢迎光临', '恭喜发财', '稍等', '我在线', '恕不议价', '库房有货', '货在路上']
}
};
</script>
</body>
</html>
\ No newline at end of file
window.onload = function () {
editor.setOpt({
emotionLocalization:false
});
emotion.SmileyPath = editor.options.emotionLocalization === true ? 'images/' : "http://img.baidu.com/hi/";
emotion.SmileyBox = createTabList( emotion.tabNum );
emotion.tabExist = createArr( emotion.tabNum );
initImgName();
initEvtHandler( "tabHeads" );
};
function initImgName() {
for ( var pro in emotion.SmilmgName ) {
var tempName = emotion.SmilmgName[pro],
tempBox = emotion.SmileyBox[pro],
tempStr = "";
if ( tempBox.length ) return;
for ( var i = 1; i <= tempName[1]; i++ ) {
tempStr = tempName[0];
if ( i < 10 ) tempStr = tempStr + '0';
tempStr = tempStr + i + '.gif';
tempBox.push( tempStr );
}
}
}
function initEvtHandler( conId ) {
var tabHeads = $G( conId );
for ( var i = 0, j = 0; i < tabHeads.childNodes.length; i++ ) {
var tabObj = tabHeads.childNodes[i];
if ( tabObj.nodeType == 1 ) {
domUtils.on( tabObj, "click", (function ( index ) {
return function () {
switchTab( index );
};
})( j ) );
j++;
}
}
switchTab( 0 );
$G( "tabIconReview" ).style.display = 'none';
}
function InsertSmiley( url, evt ) {
var obj = {
src:editor.options.emotionLocalization ? editor.options.UEDITOR_HOME_URL + "dialogs/emotion/" + url : url
};
obj._src = obj.src;
editor.execCommand( 'insertimage', obj );
if ( !evt.ctrlKey ) {
dialog.popup.hide();
}
}
function switchTab( index ) {
autoHeight( index );
if ( emotion.tabExist[index] == 0 ) {
emotion.tabExist[index] = 1;
createTab( 'tab' + index );
}
//获取呈现元素句柄数组
var tabHeads = $G( "tabHeads" ).getElementsByTagName( "span" ),
tabBodys = $G( "tabBodys" ).getElementsByTagName( "div" ),
i = 0, L = tabHeads.length;
//隐藏所有呈现元素
for ( ; i < L; i++ ) {
tabHeads[i].className = "";
tabBodys[i].style.display = "none";
}
//显示对应呈现元素
tabHeads[index].className = "focus";
tabBodys[index].style.display = "block";
}
function autoHeight( index ) {
var iframe = dialog.getDom( "iframe" ),
parent = iframe.parentNode.parentNode;
switch ( index ) {
case 0:
iframe.style.height = "380px";
parent.style.height = "392px";
break;
case 1:
iframe.style.height = "220px";
parent.style.height = "232px";
break;
case 2:
iframe.style.height = "260px";
parent.style.height = "272px";
break;
case 3:
iframe.style.height = "300px";
parent.style.height = "312px";
break;
case 4:
iframe.style.height = "140px";
parent.style.height = "152px";
break;
case 5:
iframe.style.height = "260px";
parent.style.height = "272px";
break;
case 6:
iframe.style.height = "230px";
parent.style.height = "242px";
break;
default:
}
}
function createTab( tabName ) {
var faceVersion = "?v=1.1", //版本号
tab = $G( tabName ), //获取将要生成的Div句柄
imagePath = emotion.SmileyPath + emotion.imageFolders[tabName], //获取显示表情和预览表情的路径
positionLine = 11 / 2, //中间数
iWidth = iHeight = 35, //图片长宽
iColWidth = 3, //表格剩余空间的显示比例
tableCss = emotion.imageCss[tabName],
cssOffset = emotion.imageCssOffset[tabName],
textHTML = ['<table class="smileytable">'],
i = 0, imgNum = emotion.SmileyBox[tabName].length, imgColNum = 11, faceImage,
sUrl, realUrl, posflag, offset, infor;
for ( ; i < imgNum; ) {
textHTML.push( '<tr>' );
for ( var j = 0; j < imgColNum; j++, i++ ) {
faceImage = emotion.SmileyBox[tabName][i];
if ( faceImage ) {
sUrl = imagePath + faceImage + faceVersion;
realUrl = imagePath + faceImage;
posflag = j < positionLine ? 0 : 1;
offset = cssOffset * i * (-1) - 1;
infor = emotion.SmileyInfor[tabName][i];
textHTML.push( '<td class="' + tableCss + '" border="1" width="' + iColWidth + '%" style="border-collapse:collapse;" align="center" bgcolor="transparent" onclick="InsertSmiley(\'' + realUrl.replace( /'/g, "\\'" ) + '\',event)" onmouseover="over(this,\'' + sUrl + '\',\'' + posflag + '\')" onmouseout="out(this)">' );
textHTML.push( '<span>' );
textHTML.push( '<img style="background-position:left ' + offset + 'px;" title="' + infor + '" src="' + emotion.SmileyPath + (editor.options.emotionLocalization ? '0.gif" width="' : 'default/0.gif" width="') + iWidth + '" height="' + iHeight + '"></img>' );
textHTML.push( '</span>' );
} else {
textHTML.push( '<td width="' + iColWidth + '%" bgcolor="#FFFFFF">' );
}
textHTML.push( '</td>' );
}
textHTML.push( '</tr>' );
}
textHTML.push( '</table>' );
textHTML = textHTML.join( "" );
tab.innerHTML = textHTML;
}
function over( td, srcPath, posFlag ) {
td.style.backgroundColor = "#ACCD3C";
$G( 'faceReview' ).style.backgroundImage = "url(" + srcPath + ")";
if ( posFlag == 1 ) $G( "tabIconReview" ).className = "show";
$G( "tabIconReview" ).style.display = 'block';
}
function out( td ) {
td.style.backgroundColor = "transparent";
var tabIconRevew = $G( "tabIconReview" );
tabIconRevew.className = "";
tabIconRevew.style.display = 'none';
}
function createTabList( tabNum ) {
var obj = {};
for ( var i = 0; i < tabNum; i++ ) {
obj["tab" + i] = [];
}
return obj;
}
function createArr( tabNum ) {
var arr = [];
for ( var i = 0; i < tabNum; i++ ) {
arr[i] = 0;
}
return arr;
}
(function () {
var parent = window.parent;
//dialog对象
dialog = parent.$EDITORUI[window.frameElement.id.replace( /_iframe$/, '' )];
//当前打开dialog的编辑器实例
editor = dialog.editor;
UE = parent.UE;
domUtils = UE.dom.domUtils;
utils = UE.utils;
browser = UE.browser;
ajax = UE.ajax;
$G = function ( id ) {
return document.getElementById( id )
};
//focus元素
$focus = function ( node ) {
setTimeout( function () {
if ( browser.ie ) {
var r = node.createTextRange();
r.collapse( false );
r.select();
} else {
node.focus()
}
}, 0 )
};
utils.loadFile(document,{
href:editor.options.themePath + editor.options.theme + "/dialogbase.css?cache="+Math.random(),
tag:"link",
type:"text/css",
rel:"stylesheet"
});
lang = editor.getLang(dialog.className.split( "-" )[2]);
if(lang){
domUtils.on(window,'load',function () {
var langImgPath = editor.options.langPath + editor.options.lang + "/images/";
//针对静态资源
for ( var i in lang["static"] ) {
var dom = $G( i );
if(!dom) continue;
var tagName = dom.tagName,
content = lang["static"][i];
if(content.src){
//clone
content = utils.extend({},content,false);
content.src = langImgPath + content.src;
}
if(content.style){
content = utils.extend({},content,false);
content.style = content.style.replace(/url\s*\(/g,"url(" + langImgPath)
}
switch ( tagName.toLowerCase() ) {
case "var":
dom.parentNode.replaceChild( document.createTextNode( content ), dom );
break;
case "select":
var ops = dom.options;
for ( var j = 0, oj; oj = ops[j]; ) {
oj.innerHTML = content.options[j++];
}
for ( var p in content ) {
p != "options" && dom.setAttribute( p, content[p] );
}
break;
default :
domUtils.setAttributes( dom, content);
}
}
} );
}
})();
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<script type="text/javascript" src="../internal.js"></script>
<style type="text/css">
*{margin:0;padding:0;color: #838383;}
table{font-size: 12px;margin: 10px;line-height: 30px}
.txt{width:300px;height:21px;line-height:21px;border:1px solid #d7d7d7;}
</style>
</head>
<body>
<table>
<tr>
<td><label for="text"> <var id="lang_input_text"></var></label></td>
<td><input class="txt" id="text" type="text" disabled="true"/></td>
</tr>
<tr>
<td><label for="href"> <var id="lang_input_url"></var></label></td>
<td><input class="txt" id="href" type="text" /></td>
</tr>
<tr>
<td><label for="title"> <var id="lang_input_title"></var></label></td>
<td><input class="txt" id="title" type="text"/></td>
</tr>
<tr>
<td colspan="2">
<label for="target"><var id="lang_input_target"></var></label>
<input id="target" type="checkbox"/>
</td>
</tr>
<tr>
<td colspan="2" id="msg"></td>
</tr>
</table>
<script type="text/javascript">
var range = editor.selection.getRange(),
link = range.collapsed ? editor.queryCommandValue( "link" ) : editor.selection.getStart(),
url,
text = $G('text'),
rangeLink = domUtils.findParentByTagName(range.getCommonAncestor(),'a',true),
orgText;
link = domUtils.findParentByTagName( link, "a", true );
if(link){
url = utils.html(link.getAttribute( '_href' ) || link.getAttribute( 'href', 2 ));
if(rangeLink === link && !link.getElementsByTagName('img').length){
text.removeAttribute('disabled');
orgText = text.value = link[browser.ie ? 'innerText':'textContent'];
}else{
text.setAttribute('disabled','true');
text.value = lang.validLink;
}
}else{
if(range.collapsed){
text.removeAttribute('disabled');
text.value = '';
}else{
text.setAttribute('disabled','true');
text.value = lang.validLink;
}
}
$G("title").value = url ? link.title : "";
$G("href").value = url ? url: '';
$G("target").checked = url && link.target == "_blank" ? true : false;
$focus($G("href"));
function handleDialogOk(){
var href =$G('href').value.replace(/^\s+|\s+$/g, '');
if(href){
if(!hrefStartWith(href,["http","/","ftp://",'#'])) {
href = "http://" + href;
}
var obj = {
'href' : href,
'target' : $G("target").checked ? "_blank" : '_self',
'title' : $G("title").value.replace(/^\s+|\s+$/g, ''),
'_href':href
};
//修改链接内容的情况太特殊了,所以先做到这里了
//todo:情况多的时候,做到command里
if(orgText && text.value != orgText){
link[browser.ie ? 'innerText' : 'textContent'] = obj.textValue = text.value;
range.selectNode(link).select()
}
if(range.collapsed){
obj.textValue = text.value;
}
editor.execCommand('link',utils.clearEmptyAttrs(obj) );
dialog.close();
}
}
dialog.onok = handleDialogOk;
$G('href').onkeydown = $G('title').onkeydown = function(evt){
evt = evt || window.event;
if (evt.keyCode == 13) {
handleDialogOk();
return false;
}
};
$G('href').onblur = function(){
if(!hrefStartWith(this.value,["http","/","ftp://",'#'])){
$G("msg").innerHTML = "<span style='color: red'>"+lang.httpPrompt+"</span>";
}else{
$G("msg").innerHTML = "";
}
};
function hrefStartWith(href,arr){
href = href.replace(/^\s+|\s+$/g, '');
for(var i=0,ai;ai=arr[i++];){
if(href.indexOf(ai)==0){
return true;
}
}
return false;
}
</script>
</body>
</html>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<script type="text/javascript" src="../internal.js"></script>
<style type="text/css">
*{color: #838383}
html,body {
font-size: 12px;
width:100%;
height:100%;
overflow: hidden;
margin:0px;
padding:0px;
}
h2 { font-size: 16px; margin: 20px auto;}
.content{
padding:5px 15px 0 15px;
height:100%;
}
dt,dd { margin-left: 0; padding-left: 0;}
dt a { display: block;
height: 30px;
line-height: 30px;
width: 55px;
background: #EFEFEF;
border: 1px solid #CCC;
padding: 0 10px;
text-decoration: none;
}
dt a:hover{
background: #e0e0e0;
border-color: #999
}
dt a:active{
background: #ccc;
border-color: #999;
color: #666;
}
dd { line-height:20px;margin-top: 10px;}
span{ padding-right:4px;}
input{width:210px;height:21px;background: #FFF;border:1px solid #d7d7d7;padding: 0px; margin: 0px; }
</style>
</head>
<body>
<div class="content">
<h2><var id="lang_showMsg"></var></h2>
<dl>
<dt><a href="../../third-party/snapscreen/UEditorSnapscreen.exe" target="_blank" id="downlink"><var id="lang_download"></var></a></dt>
<dd><var id="lang_step1"></var></dd>
<dd><var id="lang_step2"></var></dd>
</dl>
</div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>完整demo</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<script type="text/javascript" charset="utf-8" src="ueditor.config.js"></script>
<script type="text/javascript" charset="utf-8" src="ueditor.all.min.js"> </script>
<style type="text/css">
div{
width:100%;
}
</style>
</head>
<body>
<div>
<h1>完整demo</h1>
<script id="editor" type="text/plain" style="width:1024px;height:500px;"></script>
</div>
<div id="btns">
<div>
<button onclick="getAllHtml()">获得整个html的内容</button>
<button onclick="getContent()">获得内容</button>
<button onclick="setContent()">写入内容</button>
<button onclick="setContent(true)">追加内容</button>
<button onclick="getContentTxt()">获得纯文本</button>
<button onclick="getPlainTxt()">获得带格式的纯文本</button>
<button onclick="hasContent()">判断是否有内容</button>
<button onclick="setFocus()">使编辑器获得焦点</button>
<button onmousedown="isFocus(event)">编辑器是否获得焦点</button>
<button onmousedown="setblur(event)" >编辑器失去焦点</button>
</div>
<div>
<button onclick="getText()">获得当前选中的文本</button>
<button onclick="insertHtml()">插入给定的内容</button>
<button id="enable" onclick="setEnabled()">可以编辑</button>
<button onclick="setDisabled()">不可编辑</button>
<button onclick=" UE.getEditor('editor').setHide()">隐藏编辑器</button>
<button onclick=" UE.getEditor('editor').setShow()">显示编辑器</button>
</div>
</div>
<div>
<button onclick="createEditor()">
创建编辑器</button>
<button onclick="deleteEditor()">
删除编辑器</button>
</div>
<script type="text/javascript">
//实例化编辑器
//建议使用工厂方法getEditor创建和引用编辑器实例,如果在某个闭包下引用该编辑器,直接调用UE.getEditor('editor')就能拿到相关的实例
var ue = UE.getEditor('editor');
function isFocus(e){
alert(UE.getEditor('editor').isFocus());
UE.dom.domUtils.preventDefault(e)
}
function setblur(e){
UE.getEditor('editor').blur();
UE.dom.domUtils.preventDefault(e)
}
function insertHtml() {
var value = prompt('插入html代码', '');
UE.getEditor('editor').execCommand('insertHtml', value)
}
function createEditor() {
enableBtn();
UE.getEditor('editor');
}
function getAllHtml() {
alert(UE.getEditor('editor').getAllHtml())
}
function getContent() {
var arr = [];
arr.push("使用editor.getContent()方法可以获得编辑器的内容");
arr.push("内容为:");
arr.push(UE.getEditor('editor').getContent());
alert(arr.join("\n"));
}
function getPlainTxt() {
var arr = [];
arr.push("使用editor.getPlainTxt()方法可以获得编辑器的带格式的纯文本内容");
arr.push("内容为:");
arr.push(UE.getEditor('editor').getPlainTxt());
alert(arr.join('\n'))
}
function setContent(isAppendTo) {
var arr = [];
arr.push("使用editor.setContent('欢迎使用ueditor')方法可以设置编辑器的内容");
UE.getEditor('editor').setContent('欢迎使用ueditor', isAppendTo);
alert(arr.join("\n"));
}
function setDisabled() {
UE.getEditor('editor').setDisabled('fullscreen');
disableBtn("enable");
}
function setEnabled() {
UE.getEditor('editor').setEnabled();
enableBtn();
}
function getText() {
//当你点击按钮时编辑区域已经失去了焦点,如果直接用getText将不会得到内容,所以要在选回来,然后取得内容
var range = UE.getEditor('editor').selection.getRange();
range.select();
var txt = UE.getEditor('editor').selection.getText();
alert(txt)
}
function getContentTxt() {
var arr = [];
arr.push("使用editor.getContentTxt()方法可以获得编辑器的纯文本内容");
arr.push("编辑器的纯文本内容为:");
arr.push(UE.getEditor('editor').getContentTxt());
alert(arr.join("\n"));
}
function hasContent() {
var arr = [];
arr.push("使用editor.hasContents()方法判断编辑器里是否有内容");
arr.push("判断结果为:");
arr.push(UE.getEditor('editor').hasContents());
alert(arr.join("\n"));
}
function setFocus() {
UE.getEditor('editor').focus();
}
function deleteEditor() {
disableBtn();
UE.getEditor('editor').destroy();
}
function disableBtn(str) {
var div = document.getElementById('btns');
var btns = UE.dom.domUtils.getElementsByTagName(div, "button");
for (var i = 0, btn; btn = btns[i++];) {
if (btn.id == str) {
UE.dom.domUtils.removeAttributes(btn, ["disabled"]);
} else {
btn.setAttribute("disabled", "true");
}
}
}
function enableBtn() {
var div = document.getElementById('btns');
var btns = UE.dom.domUtils.getElementsByTagName(div, "button");
for (var i = 0, btn; btn = btns[i++];) {
UE.dom.domUtils.removeAttributes(btn, ["disabled"]);
}
}
</script>
</body>
</html>
\ No newline at end of file
/**
* Created with JetBrains PhpStorm.
* User: taoqili
* Date: 12-6-12
* Time: 下午5:02
* To change this template use File | Settings | File Templates.
*/
UE.I18N['zh-cn'] = {
'labelMap':{
'anchor':'锚点', 'undo':'撤销', 'redo':'重做', 'bold':'加粗', 'indent':'首行缩进', 'snapscreen':'截图',
'italic':'斜体', 'underline':'下划线', 'strikethrough':'删除线', 'subscript':'下标','fontborder':'字符边框',
'superscript':'上标', 'formatmatch':'格式刷', 'source':'源代码', 'blockquote':'引用',
'pasteplain':'纯文本粘贴模式', 'selectall':'全选', 'print':'打印', 'preview':'预览',
'horizontal':'分隔线', 'removeformat':'清除格式', 'time':'时间', 'date':'日期',
'unlink':'取消链接', 'insertrow':'前插入行', 'insertcol':'前插入列', 'mergeright':'右合并单元格', 'mergedown':'下合并单元格',
'deleterow':'删除行', 'deletecol':'删除列', 'splittorows':'拆分成行',
'splittocols':'拆分成列', 'splittocells':'完全拆分单元格','deletecaption':'删除表格标题','inserttitle':'插入标题',
'mergecells':'合并多个单元格', 'deletetable':'删除表格', 'cleardoc':'清空文档','insertparagraphbeforetable':"表格前插入行",'insertcode':'代码语言',
'fontfamily':'字体', 'fontsize':'字号', 'paragraph':'段落格式', 'simpleupload':'单图上传', 'insertimage':'多图上传','edittable':'表格属性','edittd':'单元格属性', 'link':'超链接',
'emotion':'表情', 'spechars':'特殊字符', 'searchreplace':'查询替换', 'map':'Baidu地图', 'gmap':'Google地图',
'insertvideo':'视频', 'help':'帮助', 'justifyleft':'居左对齐', 'justifyright':'居右对齐', 'justifycenter':'居中对齐',
'justifyjustify':'两端对齐', 'forecolor':'字体颜色', 'backcolor':'背景色', 'insertorderedlist':'有序列表',
'insertunorderedlist':'无序列表', 'fullscreen':'全屏', 'directionalityltr':'从左向右输入', 'directionalityrtl':'从右向左输入',
'rowspacingtop':'段前距', 'rowspacingbottom':'段后距', 'pagebreak':'分页', 'insertframe':'插入Iframe', 'imagenone':'默认',
'imageleft':'左浮动', 'imageright':'右浮动', 'attachment':'附件', 'imagecenter':'居中', 'wordimage':'图片转存',
'lineheight':'行间距','edittip' :'编辑提示','customstyle':'自定义标题', 'autotypeset':'自动排版',
'webapp':'百度应用','touppercase':'字母大写', 'tolowercase':'字母小写','background':'背景','template':'模板','scrawl':'涂鸦',
'music':'音乐','inserttable':'插入表格','drafts': '从草稿箱加载', 'charts': '图表'
},
'insertorderedlist':{
'num':'1,2,3...',
'num1':'1),2),3)...',
'num2':'(1),(2),(3)...',
'cn':'一,二,三....',
'cn1':'一),二),三)....',
'cn2':'(一),(二),(三)....',
'decimal':'1,2,3...',
'lower-alpha':'a,b,c...',
'lower-roman':'i,ii,iii...',
'upper-alpha':'A,B,C...',
'upper-roman':'I,II,III...'
},
'insertunorderedlist':{
'circle':'○ 大圆圈',
'disc':'● 小黑点',
'square':'■ 小方块 ',
'dash' :'— 破折号',
'dot':' 。 小圆圈'
},
'paragraph':{'p':'段落', 'h1':'标题 1', 'h2':'标题 2', 'h3':'标题 3', 'h4':'标题 4', 'h5':'标题 5', 'h6':'标题 6'},
'fontfamily':{
'songti':'宋体',
'kaiti':'楷体',
'heiti':'黑体',
'lishu':'隶书',
'yahei':'微软雅黑',
'andaleMono':'andale mono',
'arial': 'arial',
'arialBlack':'arial black',
'comicSansMs':'comic sans ms',
'impact':'impact',
'timesNewRoman':'times new roman'
},
'customstyle':{
'tc':'标题居中',
'tl':'标题居左',
'im':'强调',
'hi':'明显强调'
},
'autoupload': {
'exceedSizeError': '文件大小超出限制',
'exceedTypeError': '文件格式不允许',
'jsonEncodeError': '服务器返回格式错误',
'loading':"正在上传...",
'loadError':"上传错误",
'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!'
},
'simpleupload':{
'exceedSizeError': '文件大小超出限制',
'exceedTypeError': '文件格式不允许',
'jsonEncodeError': '服务器返回格式错误',
'loading':"正在上传...",
'loadError':"上传错误",
'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!'
},
'elementPathTip':"元素路径",
'wordCountTip':"字数统计",
'wordCountMsg':'当前已输入{#count}个字符, 您还可以输入{#leave}个字符。 ',
'wordOverFlowMsg':'<span style="color:red;">字数超出最大允许值,服务器可能拒绝保存!</span>',
'ok':"确认",
'cancel':"取消",
'closeDialog':"关闭对话框",
'tableDrag':"表格拖动必须引入uiUtils.js文件!",
'autofloatMsg':"工具栏浮动依赖编辑器UI,您首先需要引入UI文件!",
'loadconfigError': '获取后台配置项请求出错,上传功能将不能正常使用!',
'loadconfigFormatError': '后台配置项返回格式出错,上传功能将不能正常使用!',
'loadconfigHttpError': '请求后台配置项http错误,上传功能将不能正常使用!',
'snapScreen_plugin':{
'browserMsg':"仅支持IE浏览器!",
'callBackErrorMsg':"服务器返回数据有误,请检查配置项之后重试。",
'uploadErrorMsg':"截图上传失败,请检查服务器端环境! "
},
'insertcode':{
'as3':'ActionScript 3',
'bash':'Bash/Shell',
'cpp':'C/C++',
'css':'CSS',
'cf':'ColdFusion',
'c#':'C#',
'delphi':'Delphi',
'diff':'Diff',
'erlang':'Erlang',
'groovy':'Groovy',
'html':'HTML',
'java':'Java',
'jfx':'JavaFX',
'js':'JavaScript',
'pl':'Perl',
'php':'PHP',
'plain':'Plain Text',
'ps':'PowerShell',
'python':'Python',
'ruby':'Ruby',
'scala':'Scala',
'sql':'SQL',
'vb':'Visual Basic',
'xml':'XML'
},
'confirmClear':"确定清空当前文档么?",
'contextMenu':{
'delete':"删除",
'selectall':"全选",
'deletecode':"删除代码",
'cleardoc':"清空文档",
'confirmclear':"确定清空当前文档么?",
'unlink':"删除超链接",
'paragraph':"段落格式",
'edittable':"表格属性",
'aligntd':"单元格对齐方式",
'aligntable':'表格对齐方式',
'tableleft':'左浮动',
'tablecenter':'居中显示',
'tableright':'右浮动',
'edittd':"单元格属性",
'setbordervisible':'设置表格边线可见',
'justifyleft':'左对齐',
'justifyright':'右对齐',
'justifycenter':'居中对齐',
'justifyjustify':'两端对齐',
'table':"表格",
'inserttable':'插入表格',
'deletetable':"删除表格",
'insertparagraphbefore':"前插入段落",
'insertparagraphafter':'后插入段落',
'deleterow':"删除当前行",
'deletecol':"删除当前列",
'insertrow':"前插入行",
'insertcol':"左插入列",
'insertrownext':'后插入行',
'insertcolnext':'右插入列',
'insertcaption':'插入表格名称',
'deletecaption':'删除表格名称',
'inserttitle':'插入表格标题行',
'deletetitle':'删除表格标题行',
'inserttitlecol':'插入表格标题列',
'deletetitlecol':'删除表格标题列',
'averageDiseRow':'平均分布各行',
'averageDisCol':'平均分布各列',
'mergeright':"向右合并",
'mergeleft':"向左合并",
'mergedown':"向下合并",
'mergecells':"合并单元格",
'splittocells':"完全拆分单元格",
'splittocols':"拆分成列",
'splittorows':"拆分成行",
'tablesort':'表格排序',
'enablesort':'设置表格可排序',
'disablesort':'取消表格可排序',
'reversecurrent':'逆序当前',
'orderbyasc':'按ASCII字符升序',
'reversebyasc':'按ASCII字符降序',
'orderbynum':'按数值大小升序',
'reversebynum':'按数值大小降序',
'borderbk':'边框底纹',
'setcolor':'表格隔行变色',
'unsetcolor':'取消表格隔行变色',
'setbackground':'选区背景隔行',
'unsetbackground':'取消选区背景',
'redandblue':'红蓝相间',
'threecolorgradient':'三色渐变',
'copy':"复制(Ctrl + c)",
'copymsg': "浏览器不支持,请使用 'Ctrl + c'",
'paste':"粘贴(Ctrl + v)",
'pastemsg': "浏览器不支持,请使用 'Ctrl + v'"
},
'copymsg': "浏览器不支持,请使用 'Ctrl + c'",
'pastemsg': "浏览器不支持,请使用 'Ctrl + v'",
'anthorMsg':"链接",
'clearColor':'清空颜色',
'standardColor':'标准颜色',
'themeColor':'主题颜色',
'property':'属性',
'default':'默认',
'modify':'修改',
'justifyleft':'左对齐',
'justifyright':'右对齐',
'justifycenter':'居中',
'justify':'默认',
'clear':'清除',
'anchorMsg':'锚点',
'delete':'删除',
'clickToUpload':"点击上传",
'unset':'尚未设置语言文件',
't_row':'行',
't_col':'列',
'more':'更多',
'pasteOpt':'粘贴选项',
'pasteSourceFormat':"保留源格式",
'tagFormat':'只保留标签',
'pasteTextFormat':'只保留文本',
'autoTypeSet':{
'mergeLine':"合并空行",
'delLine':"清除空行",
'removeFormat':"清除格式",
'indent':"首行缩进",
'alignment':"对齐方式",
'imageFloat':"图片浮动",
'removeFontsize':"清除字号",
'removeFontFamily':"清除字体",
'removeHtml':"清除冗余HTML代码",
'pasteFilter':"粘贴过滤",
'run':"执行",
'symbol':'符号转换',
'bdc2sb':'全角转半角',
'tobdc':'半角转全角'
},
'background':{
'static':{
'lang_background_normal':'背景设置',
'lang_background_local':'在线图片',
'lang_background_set':'选项',
'lang_background_none':'无背景色',
'lang_background_colored':'有背景色',
'lang_background_color':'颜色设置',
'lang_background_netimg':'网络图片',
'lang_background_align':'对齐方式',
'lang_background_position':'精确定位',
'repeatType':{'options':["居中", "横向重复", "纵向重复", "平铺","自定义"]}
},
'noUploadImage':"当前未上传过任何图片!",
'toggleSelect':"单击可切换选中状态\n原图尺寸: "
},
//===============dialog i18N=======================
'insertimage':{
'static':{
'lang_tab_remote':"插入图片", //节点
'lang_tab_upload':"本地上传",
'lang_tab_online':"在线管理",
'lang_tab_search':"图片搜索",
'lang_input_url':"地 址:",
'lang_input_size':"大 小:",
'lang_input_width':"宽度",
'lang_input_height':"高度",
'lang_input_border':"边 框:",
'lang_input_vhspace':"边 距:",
'lang_input_title':"描 述:",
'lang_input_align':'图片浮动方式:',
'lang_imgLoading':" 图片加载中……",
'lang_start_upload':"开始上传",
'lock':{'title':"锁定宽高比例"}, //属性
'searchType':{'title':"图片类型", 'options':["新闻", "壁纸", "表情", "头像"]}, //select的option
'searchTxt':{'value':"请输入搜索关键词"},
'searchBtn':{'value':"百度一下"},
'searchReset':{'value':"清空搜索"},
'noneAlign':{'title':'无浮动'},
'leftAlign':{'title':'左浮动'},
'rightAlign':{'title':'右浮动'},
'centerAlign':{'title':'居中独占一行'}
},
'uploadSelectFile':'点击选择图片',
'uploadAddFile':'继续添加',
'uploadStart':'开始上传',
'uploadPause':'暂停上传',
'uploadContinue':'继续上传',
'uploadRetry':'重试上传',
'uploadDelete':'删除',
'uploadTurnLeft':'向左旋转',
'uploadTurnRight':'向右旋转',
'uploadPreview':'预览中',
'uploadNoPreview':'不能预览',
'updateStatusReady': '选中_张图片,共_KB。',
'updateStatusConfirm': '已成功上传_张照片,_张照片上传失败',
'updateStatusFinish': '共_张(_KB),_张上传成功',
'updateStatusError': ',_张上传失败。',
'errorNotSupport': 'WebUploader 不支持您的浏览器!如果你使用的是IE浏览器,请尝试升级 flash 播放器。',
'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!',
'errorExceedSize':'文件大小超出',
'errorFileType':'文件格式不允许',
'errorInterrupt':'文件传输中断',
'errorUploadRetry':'上传失败,请重试',
'errorHttp':'http请求错误',
'errorServerUpload':'服务器返回出错',
'remoteLockError':"宽高不正确,不能所定比例",
'numError':"请输入正确的长度或者宽度值!例如:123,400",
'imageUrlError':"不允许的图片格式或者图片域!",
'imageLoadError':"图片加载失败!请检查链接地址或网络状态!",
'searchRemind':"请输入搜索关键词",
'searchLoading':"图片加载中,请稍后……",
'searchRetry':" :( ,抱歉,没有找到图片!请重试一次!"
},
'attachment':{
'static':{
'lang_tab_upload': '上传附件',
'lang_tab_online': '在线附件',
'lang_start_upload':"开始上传",
'lang_drop_remind':"可以将文件拖到这里,单次最多可选100个文件"
},
'uploadSelectFile':'点击选择文件',
'uploadAddFile':'继续添加',
'uploadStart':'开始上传',
'uploadPause':'暂停上传',
'uploadContinue':'继续上传',
'uploadRetry':'重试上传',
'uploadDelete':'删除',
'uploadTurnLeft':'向左旋转',
'uploadTurnRight':'向右旋转',
'uploadPreview':'预览中',
'updateStatusReady': '选中_个文件,共_KB。',
'updateStatusConfirm': '已成功上传_个文件,_个文件上传失败',
'updateStatusFinish': '共_个(_KB),_个上传成功',
'updateStatusError': ',_张上传失败。',
'errorNotSupport': 'WebUploader 不支持您的浏览器!如果你使用的是IE浏览器,请尝试升级 flash 播放器。',
'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!',
'errorExceedSize':'文件大小超出',
'errorFileType':'文件格式不允许',
'errorInterrupt':'文件传输中断',
'errorUploadRetry':'上传失败,请重试',
'errorHttp':'http请求错误',
'errorServerUpload':'服务器返回出错'
},
'insertvideo':{
'static':{
'lang_tab_insertV':"插入视频",
'lang_tab_searchV':"搜索视频",
'lang_tab_uploadV':"上传视频",
'lang_video_url':"视频网址",
'lang_video_size':"视频尺寸",
'lang_videoW':"宽度",
'lang_videoH':"高度",
'lang_alignment':"对齐方式",
'videoSearchTxt':{'value':"请输入搜索关键字!"},
'videoType':{'options':["全部", "热门", "娱乐", "搞笑", "体育", "科技", "综艺"]},
'videoSearchBtn':{'value':"百度一下"},
'videoSearchReset':{'value':"清空结果"},
'lang_input_fileStatus':' 当前未上传文件',
'startUpload':{'style':"background:url(upload.png) no-repeat;"},
'lang_upload_size':"视频尺寸",
'lang_upload_width':"宽度",
'lang_upload_height':"高度",
'lang_upload_alignment':"对齐方式",
'lang_format_advice':"建议使用mp4格式."
},
'numError':"请输入正确的数值,如123,400",
'floatLeft':"左浮动",
'floatRight':"右浮动",
'"default"':"默认",
'block':"独占一行",
'urlError':"输入的视频地址有误,请检查后再试!",
'loading':" &nbsp;视频加载中,请等待……",
'clickToSelect':"点击选中",
'goToSource':'访问源视频',
'noVideo':" &nbsp; &nbsp;抱歉,找不到对应的视频,请重试!",
'browseFiles':'浏览文件',
'uploadSuccess':'上传成功!',
'delSuccessFile':'从成功队列中移除',
'delFailSaveFile':'移除保存失败文件',
'statusPrompt':' 个文件已上传! ',
'flashVersionError':'当前Flash版本过低,请更新FlashPlayer后重试!',
'flashLoadingError':'Flash加载失败!请检查路径或网络状态',
'fileUploadReady':'等待上传……',
'delUploadQueue':'从上传队列中移除',
'limitPrompt1':'单次不能选择超过',
'limitPrompt2':'个文件!请重新选择!',
'delFailFile':'移除失败文件',
'fileSizeLimit':'文件大小超出限制!',
'emptyFile':'空文件无法上传!',
'fileTypeError':'文件类型不允许!',
'unknownError':'未知错误!',
'fileUploading':'上传中,请等待……',
'cancelUpload':'取消上传',
'netError':'网络错误',
'failUpload':'上传失败!',
'serverIOError':'服务器IO错误!',
'noAuthority':'无权限!',
'fileNumLimit':'上传个数限制',
'failCheck':'验证失败,本次上传被跳过!',
'fileCanceling':'取消中,请等待……',
'stopUploading':'上传已停止……',
'uploadSelectFile':'点击选择文件',
'uploadAddFile':'继续添加',
'uploadStart':'开始上传',
'uploadPause':'暂停上传',
'uploadContinue':'继续上传',
'uploadRetry':'重试上传',
'uploadDelete':'删除',
'uploadTurnLeft':'向左旋转',
'uploadTurnRight':'向右旋转',
'uploadPreview':'预览中',
'updateStatusReady': '选中_个文件,共_KB。',
'updateStatusConfirm': '成功上传_个,_个失败',
'updateStatusFinish': '共_个(_KB),_个成功上传',
'updateStatusError': ',_张上传失败。',
'errorNotSupport': 'WebUploader 不支持您的浏览器!如果你使用的是IE浏览器,请尝试升级 flash 播放器。',
'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!',
'errorExceedSize':'文件大小超出',
'errorFileType':'文件格式不允许',
'errorInterrupt':'文件传输中断',
'errorUploadRetry':'上传失败,请重试',
'errorHttp':'http请求错误',
'errorServerUpload':'服务器返回出错'
},
'webapp':{
'tip1':"本功能由百度APP提供,如看到此页面,请各位站长首先申请百度APPKey!",
'tip2':"申请完成之后请至ueditor.config.js中配置获得的appkey! ",
'applyFor':"点此申请",
'anthorApi':"百度API"
},
'template':{
'static':{
'lang_template_bkcolor':'背景颜色',
'lang_template_clear' : '保留原有内容',
'lang_template_select' : '选择模板'
},
'blank':"空白文档",
'blog':"博客文章",
'resume':"个人简历",
'richText':"图文混排",
'sciPapers':"科技论文"
},
'scrawl':{
'static':{
'lang_input_previousStep':"上一步",
'lang_input_nextsStep':"下一步",
'lang_input_clear':'清空',
'lang_input_addPic':'添加背景',
'lang_input_ScalePic':'缩放背景',
'lang_input_removePic':'删除背景',
'J_imgTxt':{title:'添加背景图片'}
},
'noScarwl':"尚未作画,白纸一张~",
'scrawlUpLoading':"涂鸦上传中,别急哦~",
'continueBtn':"继续",
'imageError':"糟糕,图片读取失败了!",
'backgroundUploading':'背景图片上传中,别急哦~'
},
'music':{
'static':{
'lang_input_tips':"输入歌手/歌曲/专辑,搜索您感兴趣的音乐!",
'J_searchBtn':{value:'搜索歌曲'}
},
'emptyTxt':'未搜索到相关音乐结果,请换一个关键词试试。',
'chapter':'歌曲',
'singer':'歌手',
'special':'专辑',
'listenTest':'试听'
},
'anchor':{
'static':{
'lang_input_anchorName':'锚点名字:'
}
},
'charts':{
'static':{
'lang_data_source':'数据源:',
'lang_chart_format': '图表格式:',
'lang_data_align': '数据对齐方式',
'lang_chart_align_same': '数据源与图表X轴Y轴一致',
'lang_chart_align_reverse': '数据源与图表X轴Y轴相反',
'lang_chart_title': '图表标题',
'lang_chart_main_title': '主标题:',
'lang_chart_sub_title': '子标题:',
'lang_chart_x_title': 'X轴标题:',
'lang_chart_y_title': 'Y轴标题:',
'lang_chart_tip': '提示文字',
'lang_cahrt_tip_prefix': '提示文字前缀:',
'lang_cahrt_tip_description': '仅饼图有效, 当鼠标移动到饼图中相应的块上时,提示框内的文字的前缀',
'lang_chart_data_unit': '数据单位',
'lang_chart_data_unit_title': '单位:',
'lang_chart_data_unit_description': '显示在每个数据点上的数据的单位, 比如: 温度的单位 ℃',
'lang_chart_type': '图表类型:',
'lang_prev_btn': '上一个',
'lang_next_btn': '下一个'
}
},
'emotion':{
'static':{
'lang_input_choice':'精选',
'lang_input_Tuzki':'兔斯基',
'lang_input_BOBO':'BOBO',
'lang_input_lvdouwa':'绿豆蛙',
'lang_input_babyCat':'baby猫',
'lang_input_bubble':'泡泡',
'lang_input_youa':'有啊'
}
},
'gmap':{
'static':{
'lang_input_address':'地址',
'lang_input_search':'搜索',
'address':{value:"北京"}
},
searchError:'无法定位到该地址!'
},
'help':{
'static':{
'lang_input_about':'关于UEditor',
'lang_input_shortcuts':'快捷键',
'lang_input_introduction':'UEditor是由百度web前端研发部开发的所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点。开源基于BSD协议,允许自由使用和修改代码。',
'lang_Txt_shortcuts':'快捷键',
'lang_Txt_func':'功能',
'lang_Txt_bold':'给选中字设置为加粗',
'lang_Txt_copy':'复制选中内容',
'lang_Txt_cut':'剪切选中内容',
'lang_Txt_Paste':'粘贴',
'lang_Txt_undo':'重新执行上次操作',
'lang_Txt_redo':'撤销上一次操作',
'lang_Txt_italic':'给选中字设置为斜体',
'lang_Txt_underline':'给选中字加下划线',
'lang_Txt_selectAll':'全部选中',
'lang_Txt_visualEnter':'软回车',
'lang_Txt_fullscreen':'全屏'
}
},
'insertframe':{
'static':{
'lang_input_address':'地址:',
'lang_input_width':'宽度:',
'lang_input_height':'高度:',
'lang_input_isScroll':'允许滚动条:',
'lang_input_frameborder':'显示框架边框:',
'lang_input_alignMode':'对齐方式:',
'align':{title:"对齐方式", options:["默认", "左对齐", "右对齐", "居中"]}
},
'enterAddress':'请输入地址!'
},
'link':{
'static':{
'lang_input_text':'文本内容:',
'lang_input_url':'链接地址:',
'lang_input_title':'标题:',
'lang_input_target':'是否在新窗口打开:'
},
'validLink':'只支持选中一个链接时生效',
'httpPrompt':'您输入的超链接中不包含http等协议名称,默认将为您添加http://前缀'
},
'map':{
'static':{
lang_city:"城市",
lang_address:"地址",
city:{value:"北京"},
lang_search:"搜索",
lang_dynamicmap:"插入动态地图"
},
cityMsg:"请选择城市",
errorMsg:"抱歉,找不到该位置!"
},
'searchreplace':{
'static':{
lang_tab_search:"查找",
lang_tab_replace:"替换",
lang_search1:"查找",
lang_search2:"查找",
lang_replace:"替换",
lang_searchReg:'支持正则表达式,添加前后斜杠标示为正则表达式,例如“/表达式/”',
lang_searchReg1:'支持正则表达式,添加前后斜杠标示为正则表达式,例如“/表达式/”',
lang_case_sensitive1:"区分大小写",
lang_case_sensitive2:"区分大小写",
nextFindBtn:{value:"下一个"},
preFindBtn:{value:"上一个"},
nextReplaceBtn:{value:"下一个"},
preReplaceBtn:{value:"上一个"},
repalceBtn:{value:"替换"},
repalceAllBtn:{value:"全部替换"}
},
getEnd:"已经搜索到文章末尾!",
getStart:"已经搜索到文章头部",
countMsg:"总共替换了{#count}处!"
},
'snapscreen':{
'static':{
lang_showMsg:"截图功能需要首先安装UEditor截图插件! ",
lang_download:"点此下载",
lang_step1:"第一步,下载UEditor截图插件并运行安装。",
lang_step2:"第二步,插件安装完成后即可使用,如不生效,请重启浏览器后再试!"
}
},
'spechars':{
'static':{},
tsfh:"特殊字符",
lmsz:"罗马字符",
szfh:"数学字符",
rwfh:"日文字符",
xlzm:"希腊字母",
ewzm:"俄文字符",
pyzm:"拼音字母",
yyyb:"英语音标",
zyzf:"其他"
},
'edittable':{
'static':{
'lang_tableStyle':'表格样式',
'lang_insertCaption':'添加表格名称行',
'lang_insertTitle':'添加表格标题行',
'lang_insertTitleCol':'添加表格标题列',
'lang_orderbycontent':"使表格内容可排序",
'lang_tableSize':'自动调整表格尺寸',
'lang_autoSizeContent':'按表格文字自适应',
'lang_autoSizePage':'按页面宽度自适应',
'lang_example':'示例',
'lang_borderStyle':'表格边框',
'lang_color':'颜色:'
},
captionName:'表格名称',
titleName:'标题',
cellsName:'内容',
errorMsg:'有合并单元格,不可排序'
},
'edittip':{
'static':{
lang_delRow:'删除整行',
lang_delCol:'删除整列'
}
},
'edittd':{
'static':{
lang_tdBkColor:'背景颜色:'
}
},
'formula':{
'static':{
}
},
'wordimage':{
'static':{
lang_resave:"转存步骤",
uploadBtn:{src:"upload.png",alt:"上传"},
clipboard:{style:"background: url(copy.png) -153px -1px no-repeat;"},
lang_step:"1、点击顶部复制按钮,将地址复制到剪贴板;2、点击添加照片按钮,在弹出的对话框中使用Ctrl+V粘贴地址;3、点击打开后选择图片上传流程。"
},
'fileType':"图片",
'flashError':"FLASH初始化失败,请检查FLASH插件是否正确安装!",
'netError':"网络连接错误,请重试!",
'copySuccess':"图片地址已经复制!",
'flashI18n':{} //留空默认中文
},
'autosave': {
'saving':'保存中...',
'success':'本地保存成功'
}
};
/*基础UI构建
*/
/* common layer */
.edui-default .edui-box {
border: none;
padding: 0;
margin: 0;
overflow: hidden;
}
.edui-default a.edui-box {
display: block;
text-decoration: none;
color: black;
}
.edui-default a.edui-box:hover {
text-decoration: none;
}
.edui-default a.edui-box:active {
text-decoration: none;
}
.edui-default table.edui-box {
border-collapse: collapse;
}
.edui-default ul.edui-box {
list-style-type: none;
}
div.edui-box {
position: relative;
display: -moz-inline-box !important;
display: inline-block !important;
vertical-align: top;
}
.edui-default .edui-clearfix {
zoom: 1
}
.edui-default .edui-clearfix:after {
content: '\20';
display: block;
clear: both;
}
* html div.edui-box {
display: inline !important;
}
*:first-child+html div.edui-box {
display: inline !important;
}
/* control layout */
.edui-default .edui-button-body, .edui-splitbutton-body, .edui-menubutton-body, .edui-combox-body {
position: relative;
}
.edui-default .edui-popup {
position: absolute;
-webkit-user-select: none;
-moz-user-select: none;
}
.edui-default .edui-popup .edui-shadow {
position: absolute;
z-index: -1;
}
.edui-default .edui-popup .edui-bordereraser {
position: absolute;
overflow: hidden;
}
.edui-default .edui-tablepicker .edui-canvas {
position: relative;
}
.edui-default .edui-tablepicker .edui-canvas .edui-overlay {
position: absolute;
}
.edui-default .edui-dialog-modalmask, .edui-dialog-dragmask {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
}
.edui-default .edui-toolbar {
position: relative;
}
/*
* default theme
*/
.edui-default .edui-label {
cursor: default;
}
.edui-default span.edui-clickable {
color: blue;
cursor: pointer;
text-decoration: underline;
}
.edui-default span.edui-unclickable {
color: gray;
cursor: default;
}
/* 工具栏 */
.edui-default .edui-toolbar {
cursor: default;
-webkit-user-select: none;
-moz-user-select: none;
padding: 1px;
overflow: hidden; /*全屏下单独一行不占位*/
zoom: 1;
width:auto;
height:auto;
}
.edui-default .edui-toolbar .edui-button,
.edui-default .edui-toolbar .edui-splitbutton,
.edui-default .edui-toolbar .edui-menubutton,
.edui-default .edui-toolbar .edui-combox {
margin: 1px;
}
/*UI工具栏、编辑区域、底部*/
.edui-default .edui-editor {
border: 1px solid #d4d4d4;
background-color: white;
position: relative;
overflow: visible;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
}
.edui-editor div{
width:auto;
height:auto;
}
.edui-default .edui-editor-toolbarbox {
position: relative;
zoom: 1;
-webkit-box-shadow:0 1px 4px rgba(204, 204, 204, 0.6);
-moz-box-shadow:0 1px 4px rgba(204, 204, 204, 0.6);
box-shadow:0 1px 4px rgba(204, 204, 204, 0.6);
border-top-left-radius:2px;
border-top-right-radius:2px;
}
.edui-default .edui-editor-toolbarboxouter {
border-bottom: 1px solid #d4d4d4;
background-color: #fafafa;
background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2));
background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2);
background-image: -o-linear-gradient(top, #ffffff, #f2f2f2);
background-image: linear-gradient(to bottom, #ffffff, #f2f2f2);
background-repeat: repeat-x;
/*border: 1px solid #d4d4d4;*/
-webkit-border-radius: 4px 4px 0 0;
-moz-border-radius: 4px 4px 0 0;
border-radius: 4px 4px 0 0;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);
*zoom: 1;
-webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
-moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
}
.edui-default .edui-editor-toolbarboxinner {
padding: 2px;
}
.edui-default .edui-editor-iframeholder {
position: relative;
/*for fix ie6 toolbarmsg under iframe bug. relative -> static */
/*_position: static !important;*
}
.edui-default .edui-editor-iframeholder textarea {
font-family: consolas, "Courier New", "lucida console", monospace;
font-size: 12px;
line-height: 18px;
}
.edui-default .edui-editor-bottombar {
/*border-top: 1px solid #ccc;*/
/*height: 20px;*/
/*width: 40%;*/
/*float: left;*/
/*overflow: hidden;*/
}
.edui-default .edui-editor-bottomContainer {
overflow: hidden;
}
.edui-default .edui-editor-bottomContainer table {
width: 100%;
height: 0;
overflow: hidden;
border-spacing: 0;
}
.edui-default .edui-editor-bottomContainer td {
white-space: nowrap;
border-top: 1px solid #ccc;
line-height: 20px;
font-size: 12px;
font-family: Arial, Helvetica, Tahoma, Verdana, Sans-Serif;
}
.edui-default .edui-editor-wordcount {
text-align: right;
margin-right: 5px;
color: #aaa;
}
.edui-default .edui-editor-scale {
width: 12px;
}
.edui-default .edui-editor-scale .edui-editor-icon {
float: right;
width: 100%;
height: 12px;
margin-top: 10px;
background: url(../images/scale.png) no-repeat;
cursor: se-resize;
}
.edui-default .edui-editor-breadcrumb {
margin: 2px 0 0 3px;
}
.edui-default .edui-editor-breadcrumb span {
cursor: pointer;
text-decoration: underline;
color: blue;
}
.edui-default .edui-toolbar .edui-for-fullscreen {
float: right;
}
.edui-default .edui-bubble .edui-popup-content {
border: 1px solid #DCAC6C;
background-color: #fff6d9;
padding: 5px;
font-size: 10pt;
font-family: "宋体";
}
.edui-default .edui-bubble .edui-shadow {
/*box-shadow: 1px 1px 3px #818181;*/
/*-webkit-box-shadow: 2px 2px 3px #818181;*/
/*-moz-box-shadow: 2px 2px 3px #818181;*/
/*filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius = '2', MakeShadow = 'true', ShadowOpacity = '0.5');*/
}
.edui-default .edui-editor-toolbarmsg {
background-color: #FFF6D9;
border-bottom: 1px solid #ccc;
position: absolute;
bottom: -25px;
left: 0;
z-index: 1009;
width: 99.9%;
}
.edui-default .edui-editor-toolbarmsg-upload {
font-size: 14px;
color: blue;
width: 100px;
height: 16px;
line-height: 16px;
cursor: pointer;
position: absolute;
top: 5px;
left: 350px;
}
.edui-default .edui-editor-toolbarmsg-label {
font-size: 12px;
line-height: 16px;
padding: 4px;
}
.edui-default .edui-editor-toolbarmsg-close {
float: right;
width: 20px;
height: 16px;
line-height: 16px;
cursor: pointer;
color: red;
}
/*可选中菜单按钮*/
.edui-default .edui-list .edui-bordereraser {
display: none;
}
.edui-default .edui-listitem {
padding: 1px;
white-space: nowrap;
}
.edui-default .edui-list .edui-state-hover {
position: relative;
background-color: #fff5d4;
border: 1px solid #dcac6c;
padding: 0;
}
.edui-default .edui-for-fontfamily .edui-listitem-label {
min-width: 130px;
_width: 120px;
font-size: 12px;
height: 22px;
line-height: 22px;
padding-left: 5px;
}
.edui-default .edui-for-insertcode .edui-listitem-label {
min-width: 120px;
_width: 120px;
font-size: 12px;
height: 22px;
line-height: 22px;
padding-left: 5px;
}
.edui-default .edui-for-underline .edui-listitem-label {
min-width: 120px;
_width: 120px;
padding: 3px 5px;
font-size: 12px;
}
.edui-default .edui-for-fontsize .edui-listitem-label {
min-width: 120px;
_width: 120px;
padding: 3px 5px;
}
.edui-default .edui-for-paragraph .edui-listitem-label {
min-width: 200px;
_width: 200px;
padding: 2px 5px;
}
.edui-default .edui-for-rowspacingtop .edui-listitem-label,
.edui-default .edui-for-rowspacingbottom .edui-listitem-label {
min-width: 53px;
_width: 53px;
padding: 2px 5px;
}
.edui-default .edui-for-lineheight .edui-listitem-label {
min-width: 53px;
_width: 53px;
padding: 2px 5px;
}
.edui-default .edui-for-customstyle .edui-listitem-label {
min-width: 200px;
_width: 200px;
width: 200px !important;
padding: 2px 5px;
}
/* 可选中按钮弹出菜单*/
.edui-default .edui-menu {
z-index: 3000;
}
.edui-default .edui-menu .edui-popup-content {
padding: 3px;
}
.edui-default .edui-menu-body {
_width: 150px;
min-width: 170px;
background: url("../images/sparator_v.png") repeat-y 25px;
}
.edui-default .edui-menuitem-body {
}
.edui-default .edui-menuitem {
height: 20px;
cursor: default;
vertical-align: top;
}
.edui-default .edui-menuitem .edui-icon {
width: 20px !important;
height: 20px !important;
background: url(../images/icons.png) 0 -4000px;
background: url(../images/icons.gif) 0 -4000px\9;
}
.edui-default .edui-menuitem .edui-label {
font-size: 12px;
line-height: 20px;
height: 20px;
padding-left: 10px;
}
.edui-default .edui-state-checked .edui-menuitem-body {
background: url("../images/icons-all.gif") no-repeat 6px -205px;
}
.edui-default .edui-state-disabled .edui-menuitem-label {
color: gray;
}
/*不可选中菜单按钮 */
.edui-default .edui-toolbar .edui-combox-body .edui-button-body {
width: 60px;
font-size: 12px;
height: 20px;
line-height: 20px;
padding-left: 5px;
white-space: nowrap;
margin: 0 3px 0 0;
}
.edui-default .edui-toolbar .edui-combox-body .edui-arrow {
background: url(../images/icons.png) -741px 0;
_background: url(../images/icons.gif) -741px 0;
height: 20px;
width: 9px;
}
.edui-default .edui-toolbar .edui-combox .edui-combox-body {
border: 1px solid #CCC;
background-color: white;
border-radius: 2px;
-webkit-border-radius: 2px;
-moz-border-radius: 2px;
}
.edui-default .edui-toolbar .edui-combox-body .edui-splitborder {
display: none;
}
.edui-default .edui-toolbar .edui-combox-body .edui-arrow {
border-left: 1px solid #CCC;
}
.edui-default .edui-toolbar .edui-state-hover .edui-combox-body {
background-color: #fff5d4;
border: 1px solid #dcac6c;
}
.edui-default .edui-toolbar .edui-state-hover .edui-combox-body .edui-arrow {
border-left: 1px solid #dcac6c;
}
.edui-default .edui-toolbar .edui-state-checked .edui-combox-body {
background-color: #FFE69F;
border: 1px solid #DCAC6C;
}
.edui-toolbar .edui-state-checked .edui-combox-body .edui-arrow {
border-left: 1px solid #DCAC6C;
}
.edui-toolbar .edui-state-disabled .edui-combox-body {
background-color: #F0F0EE;
opacity: 0.3;
filter: alpha(opacity = 30);
}
.edui-toolbar .edui-state-opened .edui-combox-body {
background-color: white;
border: 1px solid gray;
}
/*普通按钮样式及状态*/
.edui-default .edui-toolbar .edui-button .edui-icon,
.edui-default .edui-toolbar .edui-menubutton .edui-icon,
.edui-default .edui-toolbar .edui-splitbutton .edui-icon {
height: 20px !important;
width: 20px !important;
background-image: url(../images/icons.png);
background-image: url(../images/icons.gif) \9;
}
.edui-default .edui-toolbar .edui-button .edui-button-wrap {
padding: 1px;
position: relative;
}
.edui-default .edui-toolbar .edui-button .edui-state-hover .edui-button-wrap {
background-color: #fff5d4;
padding: 0;
border: 1px solid #dcac6c;
}
.edui-default .edui-toolbar .edui-button .edui-state-checked .edui-button-wrap {
background-color: #ffe69f;
padding: 0;
border: 1px solid #dcac6c;
border-radius: 2px;
-webkit-border-radius: 2px;
-moz-border-radius: 2px;
}
.edui-default .edui-toolbar .edui-button .edui-state-active .edui-button-wrap {
background-color: #ffffff;
padding: 0;
border: 1px solid gray;
}
.edui-default .edui-toolbar .edui-state-disabled .edui-label {
color: #ccc;
}
.edui-default .edui-toolbar .edui-state-disabled .edui-icon {
opacity: 0.3;
filter: alpha(opacity = 30);
}
/* toolbar icons */
.edui-default .edui-for-undo .edui-icon {
background-position: -160px 0;
}
.edui-default .edui-for-redo .edui-icon {
background-position: -100px 0;
}
.edui-default .edui-for-bold .edui-icon {
background-position: 0 0;
}
.edui-default .edui-for-italic .edui-icon {
background-position: -60px 0;
}
.edui-default .edui-for-fontborder .edui-icon {
background-position:-160px -40px;
}
.edui-default .edui-for-underline .edui-icon {
background-position: -140px 0;
}
.edui-default .edui-for-strikethrough .edui-icon {
background-position: -120px 0;
}
.edui-default .edui-for-subscript .edui-icon {
background-position: -600px 0;
}
.edui-default .edui-for-superscript .edui-icon {
background-position: -620px 0;
}
.edui-default .edui-for-blockquote .edui-icon {
background-position: -220px 0;
}
.edui-default .edui-for-forecolor .edui-icon {
background-position: -720px 0;
}
.edui-default .edui-for-backcolor .edui-icon {
background-position: -760px 0;
}
.edui-default .edui-for-inserttable .edui-icon {
background-position: -580px -20px;
}
.edui-default .edui-for-autotypeset .edui-icon {
background-position: -640px -40px;
}
.edui-default .edui-for-justifyleft .edui-icon {
background-position: -460px 0;
}
.edui-default .edui-for-justifycenter .edui-icon {
background-position: -420px 0;
}
.edui-default .edui-for-justifyright .edui-icon {
background-position: -480px 0;
}
.edui-default .edui-for-justifyjustify .edui-icon {
background-position: -440px 0;
}
.edui-default .edui-for-insertorderedlist .edui-icon {
background-position: -80px 0;
}
.edui-default .edui-for-insertunorderedlist .edui-icon {
background-position: -20px 0;
}
.edui-default .edui-for-lineheight .edui-icon {
background-position: -725px -40px;
}
.edui-default .edui-for-rowspacingbottom .edui-icon {
background-position: -745px -40px;
}
.edui-default .edui-for-rowspacingtop .edui-icon {
background-position: -765px -40px;
}
.edui-default .edui-for-horizontal .edui-icon {
background-position: -360px 0;
}
.edui-default .edui-for-link .edui-icon {
background-position: -500px 0;
}
.edui-default .edui-for-code .edui-icon {
background-position: -440px -40px;
}
.edui-default .edui-for-insertimage .edui-icon {
background-position: -726px -77px;
}
.edui-default .edui-for-insertframe .edui-icon {
background-position: -240px -40px;
}
.edui-default .edui-for-emoticon .edui-icon {
background-position: -60px -20px;
}
.edui-default .edui-for-spechars .edui-icon {
background-position: -240px 0;
}
.edui-default .edui-for-help .edui-icon {
background-position: -340px 0;
}
.edui-default .edui-for-print .edui-icon {
background-position: -440px -20px;
}
.edui-default .edui-for-preview .edui-icon {
background-position: -420px -20px;
}
.edui-default .edui-for-selectall .edui-icon {
background-position: -400px -20px;
}
.edui-default .edui-for-searchreplace .edui-icon {
background-position: -520px -20px;
}
.edui-default .edui-for-map .edui-icon {
background-position: -40px -40px;
}
.edui-default .edui-for-gmap .edui-icon {
background-position: -260px -40px;
}
.edui-default .edui-for-insertvideo .edui-icon {
background-position: -320px -20px;
}
.edui-default .edui-for-time .edui-icon {
background-position: -160px -20px;
}
.edui-default .edui-for-date .edui-icon {
background-position: -140px -20px;
}
.edui-default .edui-for-cut .edui-icon {
background-position: -680px 0;
}
.edui-default .edui-for-copy .edui-icon {
background-position: -700px 0;
}
.edui-default .edui-for-paste .edui-icon {
background-position: -560px 0;
}
.edui-default .edui-for-formatmatch .edui-icon {
background-position: -40px 0;
}
.edui-default .edui-for-pasteplain .edui-icon {
background-position: -360px -20px;
}
.edui-default .edui-for-directionalityltr .edui-icon {
background-position: -20px -20px;
}
.edui-default .edui-for-directionalityrtl .edui-icon {
background-position: -40px -20px;
}
.edui-default .edui-for-source .edui-icon {
background-position: -261px -0px;
}
.edui-default .edui-for-removeformat .edui-icon {
background-position: -580px 0;
}
.edui-default .edui-for-unlink .edui-icon {
background-position: -640px 0;
}
.edui-default .edui-for-touppercase .edui-icon {
background-position: -786px 0;
}
.edui-default .edui-for-tolowercase .edui-icon {
background-position: -806px 0;
}
.edui-default .edui-for-insertrow .edui-icon {
background-position: -478px -76px;
}
.edui-default .edui-for-insertrownext .edui-icon {
background-position: -498px -76px;
}
.edui-default .edui-for-insertcol .edui-icon {
background-position: -455px -76px;
}
.edui-default .edui-for-insertcolnext .edui-icon {
background-position: -429px -76px;
}
.edui-default .edui-for-mergeright .edui-icon {
background-position: -60px -40px;
}
.edui-default .edui-for-mergedown .edui-icon {
background-position: -80px -40px;
}
.edui-default .edui-for-splittorows .edui-icon {
background-position: -100px -40px;
}
.edui-default .edui-for-splittocols .edui-icon {
background-position: -120px -40px;
}
.edui-default .edui-for-insertparagraphbeforetable .edui-icon {
background-position: -140px -40px;
}
.edui-default .edui-for-deleterow .edui-icon {
background-position: -660px -20px;
}
.edui-default .edui-for-deletecol .edui-icon {
background-position: -640px -20px;
}
.edui-default .edui-for-splittocells .edui-icon {
background-position: -800px -20px;
}
.edui-default .edui-for-mergecells .edui-icon {
background-position: -760px -20px;
}
.edui-default .edui-for-deletetable .edui-icon {
background-position: -620px -20px;
}
.edui-default .edui-for-cleardoc .edui-icon {
background-position: -520px 0;
}
.edui-default .edui-for-fullscreen .edui-icon {
background-position: -100px -20px;
}
.edui-default .edui-for-anchor .edui-icon {
background-position: -200px 0;
}
.edui-default .edui-for-pagebreak .edui-icon {
background-position: -460px -40px;
}
.edui-default .edui-for-imagenone .edui-icon {
background-position: -480px -40px;
}
.edui-default .edui-for-imageleft .edui-icon {
background-position: -500px -40px;
}
.edui-default .edui-for-wordimage .edui-icon {
background-position: -660px -40px;
}
.edui-default .edui-for-imageright .edui-icon {
background-position: -520px -40px;
}
.edui-default .edui-for-imagecenter .edui-icon {
background-position: -540px -40px;
}
.edui-default .edui-for-indent .edui-icon {
background-position: -400px 0;
}
.edui-default .edui-for-outdent .edui-icon {
background-position: -540px 0;
}
.edui-default .edui-for-webapp .edui-icon {
background-position: -601px -40px
}
.edui-default .edui-for-table .edui-icon {
background-position: -580px -20px;
}
.edui-default .edui-for-edittable .edui-icon {
background-position: -420px -40px;
}
.edui-default .edui-for-template .edui-icon {
background-position: -339px -40px;
}
.edui-default .edui-for-delete .edui-icon {
background-position: -360px -40px;
}
.edui-default .edui-for-attachment .edui-icon {
background-position: -620px -40px;
}
.edui-default .edui-for-edittd .edui-icon {
background-position: -700px -40px;
}
.edui-default .edui-for-snapscreen .edui-icon {
background-position: -581px -40px
}
.edui-default .edui-for-scrawl .edui-icon {
background-position: -801px -41px
}
.edui-default .edui-for-background .edui-icon {
background-position: -680px -40px;
}
.edui-default .edui-for-music .edui-icon {
background-position: -18px -40px
}
.edui-default .edui-for-formula .edui-icon {
background-position: -200px -40px
}
.edui-default .edui-for-aligntd .edui-icon {
background-position: -236px -76px;
}
.edui-default .edui-for-insertparagraphtrue .edui-icon {
background-position: -625px -76px;
}
.edui-default .edui-for-insertparagraph .edui-icon {
background-position: -602px -76px;
}
.edui-default .edui-for-insertcaption .edui-icon {
background-position: -336px -76px;
}
.edui-default .edui-for-deletecaption .edui-icon {
background-position: -362px -76px;
}
.edui-default .edui-for-inserttitle .edui-icon {
background-position: -286px -76px;
}
.edui-default .edui-for-deletetitle .edui-icon {
background-position: -311px -76px;
}
.edui-default .edui-for-aligntable .edui-icon {
background-position: -440px 0;
}
.edui-default .edui-for-tablealignment-left .edui-icon {
background-position: -460px 0;
}
.edui-default .edui-for-tablealignment-center .edui-icon {
background-position: -420px 0;
}
.edui-default .edui-for-tablealignment-right .edui-icon {
background-position: -480px 0;
}
.edui-default .edui-for-drafts .edui-icon {
background-position: -560px 0;
}
.edui-default .edui-for-charts .edui-icon {
background: url( ../images/charts.png ) no-repeat 2px 3px!important;
}
.edui-default .edui-for-inserttitlecol .edui-icon {
background-position: -673px -76px;
}
.edui-default .edui-for-deletetitlecol .edui-icon {
background-position: -698px -76px;
}
.edui-default .edui-for-simpleupload .edui-icon {
background-position: -380px 0px;
}
/*splitbutton*/
.edui-default .edui-toolbar .edui-splitbutton-body .edui-arrow,
.edui-default .edui-toolbar .edui-menubutton-body .edui-arrow {
background: url(../images/icons.png) -741px 0;
_background: url(../images/icons.gif) -741px 0;
height: 20px;
width: 9px;
}
.edui-default .edui-toolbar .edui-splitbutton .edui-splitbutton-body,
.edui-default .edui-toolbar .edui-menubutton .edui-menubutton-body {
padding: 1px;
}
.edui-default .edui-toolbar .edui-splitborder {
width: 1px;
height: 20px;
}
.edui-default .edui-toolbar .edui-state-hover .edui-splitborder {
width: 1px;
border-left: 0px solid #dcac6c;
}
.edui-default .edui-toolbar .edui-state-active .edui-splitborder {
width: 0;
border-left: 1px solid gray;
}
.edui-default .edui-toolbar .edui-state-opened .edui-splitborder {
width: 1px;
border: 0;
}
.edui-default .edui-toolbar .edui-splitbutton .edui-state-hover .edui-splitbutton-body,
.edui-default .edui-toolbar .edui-menubutton .edui-state-hover .edui-menubutton-body {
background-color: #fff5d4;
border: 1px solid #dcac6c;
padding: 0;
}
.edui-default .edui-toolbar .edui-splitbutton .edui-state-checked .edui-splitbutton-body,
.edui-default .edui-toolbar .edui-menubutton .edui-state-checked .edui-menubutton-body {
background-color: #FFE69F;
border: 1px solid #DCAC6C;
padding: 0;
}
.edui-default .edui-toolbar .edui-splitbutton .edui-state-active .edui-splitbutton-body,
.edui-default .edui-toolbar .edui-menubutton .edui-state-active .edui-menubutton-body {
background-color: #ffffff;
border: 1px solid gray;
padding: 0;
}
.edui-default .edui-state-disabled .edui-arrow {
opacity: 0.3;
_filter: alpha(opacity = 30);
}
.edui-default .edui-toolbar .edui-splitbutton .edui-state-opened .edui-splitbutton-body,
.edui-default .edui-toolbar .edui-menubutton .edui-state-opened .edui-menubutton-body {
background-color: white;
border: 1px solid gray;
padding: 0;
}
.edui-default .edui-for-insertorderedlist .edui-bordereraser,
.edui-default .edui-for-lineheight .edui-bordereraser,
.edui-default .edui-for-rowspacingtop .edui-bordereraser,
.edui-default .edui-for-rowspacingbottom .edui-bordereraser,
.edui-default .edui-for-insertunorderedlist .edui-bordereraser {
background-color: white;
}
/* 解决嵌套导致的图标问题 */
.edui-default .edui-for-insertorderedlist .edui-popup-body .edui-icon,
.edui-default .edui-for-lineheight .edui-popup-body .edui-icon,
.edui-default .edui-for-rowspacingtop .edui-popup-body .edui-icon,
.edui-default .edui-for-rowspacingbottom .edui-popup-body .edui-icon,
.edui-default .edui-for-insertunorderedlist .edui-popup-body .edui-icon {
/*background-position: 0 -40px;*/
background-image: none ;
}
/* 弹出菜单 */
.edui-default .edui-popup {
z-index: 3000;
background-color: #ffffff;
width:auto;
height:auto;
}
.edui-default .edui-popup .edui-shadow {
left: 0;
top: 0;
width: 100%;
height: 100%;
}
.edui-default .edui-popup-content {
border:1px solid #ccc;
border: 1px solid rgba(0, 0, 0, 0.2);
*border-right-width: 2px;
*border-bottom-width: 2px;
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
-webkit-box-shadow: 0 3px 4px rgba(0, 0, 0, 0.2);
-moz-box-shadow: 0 3px 4px rgba(0, 0, 0, 0.2);
box-shadow: 0 3px 4px rgba(0, 0, 0, 0.2);
-webkit-background-clip: padding-box;
-moz-background-clip: padding;
background-clip: padding-box;
padding: 5px;
background:#ffffff;
}
.edui-default .edui-popup .edui-bordereraser {
background-color: white;
height: 3px;
}
.edui-default .edui-menu .edui-bordereraser {
height: 3px;
}
.edui-default .edui-anchor-topleft .edui-bordereraser {
left: 1px;
top: -2px;
}
.edui-default .edui-anchor-topright .edui-bordereraser {
right: 1px;
top: -2px;
}
.edui-default .edui-anchor-bottomleft .edui-bordereraser {
left: 0;
bottom: -6px;
height: 7px;
border-left: 1px solid gray;
border-right: 1px solid gray;
}
.edui-default .edui-anchor-bottomright .edui-bordereraser {
right: 0;
bottom: -6px;
height: 7px;
border-left: 1px solid gray;
border-right: 1px solid gray;
}
.edui-popup div{
width:auto;
height:auto;
}
.edui-default .edui-editor-messageholder {
display: block;
width: 150px;
height: auto;
border: 0;
margin: 0;
padding: 0;
position: absolute;
top: 28px;
right: 3px;
}
.edui-default .edui-message{
min-height: 10px;
text-shadow: 0 1px 0 rgba(255,255,255,0.5);
padding: 0;
margin-bottom: 3px;
position: relative;
}
.edui-default .edui-message-body{
border-radius: 3px;
padding: 8px 15px 8px 8px;
color: #c09853;
background-color: #fcf8e3;
border: 1px solid #fbeed5;
}
.edui-default .edui-message-type-info{
color: #3a87ad;
background-color: #d9edf7;
border-color: #bce8f1
}
.edui-default .edui-message-type-success{
color: #468847;
background-color: #dff0d8;
border-color: #d6e9c6
}
.edui-default .edui-message-type-danger,
.edui-default .edui-message-type-error{
color: #b94a48;
background-color: #f2dede;
border-color: #eed3d7
}
.edui-default .edui-message .edui-message-closer {
display: block;
width: 16px;
height: 16px;
line-height: 16px;
position: absolute;
top: 0;
right: 0;
padding: 0;
cursor: pointer;
background: transparent;
border: 0;
float: right;
font-size: 20px;
font-weight: bold;
color: #999;
text-shadow: 0 1px 0 #fff;
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
}
.edui-default .edui-message .edui-message-content {
font-size: 10pt;
word-wrap: break-word;
word-break: normal;
}
/* 弹出对话框按钮和对话框大小 */
.edui-default .edui-dialog {
z-index: 2000;
position: absolute;
}
.edui-dialog div{
width:auto;
}
.edui-default .edui-dialog-wrap {
margin-right: 6px;
margin-bottom: 6px;
}
.edui-default .edui-dialog-fullscreen-flag {
margin-right: 0;
margin-bottom: 0;
}
.edui-default .edui-dialog-body {
position: relative;
padding:2px 0 0 2px;
_zoom: 1;
}
.edui-default .edui-dialog-fullscreen-flag .edui-dialog-body {
padding: 0;
}
.edui-default .edui-dialog-shadow {
position: absolute;
z-index: -1;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: #ffffff;
border: 1px solid #ccc;
border: 1px solid rgba(0, 0, 0, 0.2);
*border-right-width: 2px;
*border-bottom-width: 2px;
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-webkit-background-clip: padding-box;
-moz-background-clip: padding;
background-clip: padding-box;
}
.edui-default .edui-dialog-foot {
background-color: white;
}
.edui-default .edui-dialog-titlebar {
height: 26px;
border-bottom: 1px solid #c6c6c6;
background: url(../images/dialog-title-bg.png) repeat-x bottom;
position: relative;
cursor: move;
}
.edui-default .edui-dialog-caption {
font-weight: bold;
font-size: 12px;
line-height: 26px;
padding-left: 5px;
}
.edui-default .edui-dialog-draghandle {
height: 26px;
}
.edui-default .edui-dialog-closebutton {
position: absolute !important;
right: 5px;
top: 3px;
}
.edui-default .edui-dialog-closebutton .edui-button-body {
height: 20px;
width: 20px;
cursor: pointer;
background: url("../images/icons-all.gif") no-repeat 0 -59px;
}
.edui-default .edui-dialog-closebutton .edui-state-hover .edui-button-body {
background: url("../images/icons-all.gif") no-repeat 0 -89px;
}
.edui-default .edui-dialog-foot {
height: 40px;
}
.edui-default .edui-dialog-buttons {
position: absolute;
right: 0;
}
.edui-default .edui-dialog-buttons .edui-button {
margin-right: 10px;
}
.edui-default .edui-dialog-buttons .edui-button .edui-button-body {
background: url("../images/icons-all.gif") no-repeat;
height: 24px;
width: 96px;
font-size: 12px;
line-height: 24px;
text-align: center;
cursor: default;
}
.edui-default .edui-dialog-buttons .edui-button .edui-state-hover .edui-button-body {
background: url("../images/icons-all.gif") no-repeat 0 -30px;
}
.edui-default .edui-dialog iframe {
border: 0;
padding: 0;
margin: 0;
vertical-align: top;
}
.edui-default .edui-dialog-modalmask {
opacity: 0.3;
filter: alpha(opacity = 30);
background-color: #ccc;
position: absolute;
/*z-index: 1999;*/
}
.edui-default .edui-dialog-dragmask {
position: absolute;
/*z-index: 2001;*/
background-color: transparent;
cursor: move;
}
.edui-default .edui-dialog-content {
position: relative;
}
.edui-default .dialogcontmask {
cursor: move;
visibility: hidden;
display: block;
position: absolute;
width: 100%;
height: 100%;
opacity: 0;
filter: alpha(opacity = 0);
}
/*link-dialog*/
.edui-default .edui-for-link .edui-dialog-content {
width: 420px;
height: 200px;
overflow: hidden;
}
/*background-dialog*/
.edui-default .edui-for-background .edui-dialog-content {
width: 440px;
height: 280px;
overflow: hidden;
}
/*template-dialog*/
.edui-default .edui-for-template .edui-dialog-content {
width: 630px;
height: 390px;
overflow: hidden;
}
/*scrawl-dialog*/
.edui-default .edui-for-scrawl .edui-dialog-content {
width: 515px;
*width: 506px;
height: 360px;
}
/*spechars-dialog*/
.edui-default .edui-for-spechars .edui-dialog-content {
width: 620px;
height: 500px;
*width: 630px;
*height: 570px;
}
/*image-dialog*/
.edui-default .edui-for-insertimage .edui-dialog-content {
width: 650px;
height: 400px;
overflow: hidden;
}
/*webapp-dialog*/
.edui-default .edui-for-webapp .edui-dialog-content {
width: 560px;
_width: 565px;
height: 450px;
overflow: hidden;
}
/*image-insertframe*/
.edui-default .edui-for-insertframe .edui-dialog-content {
width: 350px;
height: 200px;
overflow: hidden;
}
/*wordImage-dialog*/
.edui-default .edui-for-wordimage .edui-dialog-content {
width: 620px;
height: 380px;
overflow: hidden;
}
/*attachment-dialog*/
.edui-default .edui-for-attachment .edui-dialog-content {
width: 650px;
height: 400px;
overflow: hidden;
}
/*map-dialog*/
.edui-default .edui-for-map .edui-dialog-content {
width: 550px;
height: 400px;
}
/*gmap-dialog*/
.edui-default .edui-for-gmap .edui-dialog-content {
width: 550px;
height: 400px;
}
/*video-dialog*/
.edui-default .edui-for-insertvideo .edui-dialog-content {
width: 590px;
height: 390px;
}
/*anchor-dialog*/
.edui-default .edui-for-anchor .edui-dialog-content {
width: 320px;
height: 60px;
overflow: hidden;
}
/*searchreplace-dialog*/
.edui-default .edui-for-searchreplace .edui-dialog-content {
width: 400px;
height: 220px;
}
/*help-dialog*/
.edui-default .edui-for-help .edui-dialog-content {
width: 400px;
height: 420px;
}
/*edittable-dialog*/
.edui-default .edui-for-edittable .edui-dialog-content {
width: 540px;
_width:590px;
height: 335px;
}
/*edittip-dialog*/
.edui-default .edui-for-edittip .edui-dialog-content {
width: 225px;
height: 60px;
}
/*edittd-dialog*/
.edui-default .edui-for-edittd .edui-dialog-content {
width: 240px;
height: 50px;
}
/*snapscreen-dialog*/
.edui-default .edui-for-snapscreen .edui-dialog-content {
width: 400px;
height: 220px;
}
/*music-dialog*/
.edui-default .edui-for-music .edui-dialog-content {
width: 515px;
height: 360px;
}
/*段落弹出菜单*/
.edui-default .edui-for-paragraph .edui-listitem-label {
font-family: Tahoma, Verdana, Arial, Helvetica;
}
.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-p {
font-size: 22px;
line-height: 27px;
}
.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h1 {
font-weight: bolder;
font-size: 32px;
line-height: 36px;
}
.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h2 {
font-weight: bolder;
font-size: 27px;
line-height: 29px;
}
.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h3 {
font-weight: bolder;
font-size: 19px;
line-height: 23px;
}
.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h4 {
font-weight: bolder;
font-size: 16px;
line-height: 19px
}
.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h5 {
font-weight: bolder;
font-size: 13px;
line-height: 16px;
}
.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h6 {
font-weight: bolder;
font-size: 12px;
line-height: 14px;
}
/* 表格弹出菜单 */
.edui-default .edui-for-inserttable .edui-splitborder {
display: none
}
.edui-default .edui-for-inserttable .edui-splitbutton-body .edui-arrow {
width: 0
}
.edui-default .edui-toolbar .edui-for-inserttable .edui-state-active .edui-splitborder{
border-left: 1px solid transparent;
}
.edui-default .edui-tablepicker .edui-infoarea {
height: 14px;
line-height: 14px;
font-size: 12px;
width: 220px;
margin-bottom: 3px;
clear: both;
}
.edui-default .edui-tablepicker .edui-infoarea .edui-label {
float: left;
}
.edui-default .edui-dialog-buttons .edui-label {
line-height: 24px;
}
.edui-default .edui-tablepicker .edui-infoarea .edui-clickable {
float: right;
}
.edui-default .edui-tablepicker .edui-pickarea {
background: url("../images/unhighlighted.gif") repeat;
height: 220px;
width: 220px;
}
.edui-default .edui-tablepicker .edui-pickarea .edui-overlay {
background: url("../images/highlighted.gif") repeat;
}
/* 颜色弹出菜单 */
.edui-default .edui-colorpicker-topbar {
height: 27px;
width: 200px;
/*border-bottom: 1px gray dashed;*/
}
.edui-default .edui-colorpicker-preview {
height: 20px;
border: 1px inset black;
margin-left: 1px;
width: 128px;
float: left;
}
.edui-default .edui-colorpicker-nocolor {
float: right;
margin-right: 1px;
font-size: 12px;
line-height: 14px;
height: 14px;
border: 1px solid #333;
padding: 3px 5px;
cursor: pointer;
}
.edui-default .edui-colorpicker-tablefirstrow {
height: 30px;
}
.edui-default .edui-colorpicker-colorcell {
width: 14px;
height: 14px;
display: block;
margin: 0;
cursor: pointer;
}
.edui-default .edui-colorpicker-colorcell:hover {
width: 14px;
height: 14px;
margin: 0;
}
.edui-default .edui-colorpicker-advbtn{
display: block;
text-align: center;
cursor: pointer;
height:20px;
}
.arrow_down{
background: white url('../images/arrow_down.png') no-repeat center;
}
.arrow_up{
background: white url('../images/arrow_up.png') no-repeat center;
}
/*高级的样式*/
.edui-colorpicker-adv{
position: relative;
overflow: hidden;
height: 180px;
display: none;
}
.edui-colorpicker-plant, .edui-colorpicker-hue {
border: solid 1px #666;
}
.edui-colorpicker-pad {
width: 150px;
height: 150px;
left: 14px;
top: 13px;
position: absolute;
background: red;
overflow: hidden;
cursor: crosshair;
}
.edui-colorpicker-cover{
position: absolute;
top: 0;
left: 0;
width: 150px;
height: 150px;
background: url("../images/tangram-colorpicker.png") -160px -200px;
}
.edui-colorpicker-padDot{
position: absolute;
top: 0;
left: 0;
width: 11px;
height: 11px;
overflow: hidden;
background: url(../images/tangram-colorpicker.png) 0px -200px repeat-x;
z-index: 1000;
}
.edui-colorpicker-sliderMain {
position: absolute;
left: 171px;
top: 13px;
width: 19px;
height: 152px;
background: url(../images/tangram-colorpicker.png) -179px -12px no-repeat;
}
.edui-colorpicker-slider {
width: 100%;
height: 100%;
cursor: pointer;
}
.edui-colorpicker-thumb{
position: absolute;
top: 0;
cursor: pointer;
height: 3px;
left: -1px;
right: -1px;
border: 1px solid black;
background: white;
opacity: .8;
}
/*自动排版弹出菜单*/
.edui-default .edui-autotypesetpicker .edui-autotypesetpicker-body {
font-size: 12px;
margin-bottom: 3px;
clear: both;
}
.edui-default .edui-autotypesetpicker-body table {
border-collapse: separate;
border-spacing: 2px;
}
.edui-default .edui-autotypesetpicker-body td {
font-size: 12px;
word-wrap:break-word;
}
.edui-default .edui-autotypesetpicker-body td input {
margin: 3px 3px 3px 4px;
*margin: 1px 0 0 0;
}
/*自动排版弹出菜单*/
.edui-default .edui-cellalignpicker .edui-cellalignpicker-body {
width: 70px;
font-size: 12px;
cursor: default;
}
.edui-default .edui-cellalignpicker-body table {
border-collapse: separate;
border-spacing: 0;
}
.edui-default .edui-cellalignpicker-body td{
padding: 1px;
}
.edui-default .edui-cellalignpicker-body .edui-icon{
height: 20px;
width: 20px;
padding: 1px;
background-image: url(../images/table-cell-align.png);
}
.edui-default .edui-cellalignpicker-body .edui-left{
background-position: 0 0;
}
.edui-default .edui-cellalignpicker-body .edui-center{
background-position: -25px 0;
}
.edui-default .edui-cellalignpicker-body .edui-right{
background-position: -51px 0;
}
.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-left{
background-position: -73px 0;
}
.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-center{
background-position: -98px 0;
}
.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-right{
background-position: -124px 0;
}
.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-left {
background-position: -146px 0;
background-color: #f1f4f5;
}
.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-center {
background-position: -245px 0;
}
.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-right {
background-position: -271px 0;
}
/*分隔线*/
.edui-default .edui-toolbar .edui-separator {
width: 2px;
height: 20px;
margin: 2px 4px 2px 3px;
background: url(../images/icons.png) -181px 0;
background: url(../images/icons.gif) -181px 0 \9;
}
/*颜色按钮 */
.edui-default .edui-toolbar .edui-colorbutton .edui-colorlump {
position: absolute;
overflow: hidden;
bottom: 1px;
left: 1px;
width: 18px;
height: 4px;
}
/*表情按钮及弹出菜单*/
/*去除了表情的下拉箭头*/
.edui-default .edui-for-emotion .edui-icon {
background-position: -60px -20px;
}
.edui-default .edui-for-emotion .edui-popup-content iframe
{
width: 514px;
height: 380px;
overflow: hidden;
}
.edui-default .edui-for-emotion .edui-popup-content
{
position: relative;
z-index: 555
}
.edui-default .edui-for-emotion .edui-splitborder {
display: none
}
.edui-default .edui-for-emotion .edui-splitbutton-body .edui-arrow
{
width: 0
}
.edui-default .edui-toolbar .edui-for-emotion .edui-state-active .edui-splitborder
{
border-left: 1px solid transparent;
}
/*contextmenu*/
.edui-default .edui-hassubmenu .edui-arrow {
height: 20px;
width: 20px;
float: right;
background: url("../images/icons-all.gif") no-repeat 10px -233px;
}
.edui-default .edui-menu-body .edui-menuitem {
padding: 1px;
}
.edui-default .edui-menuseparator {
margin: 2px 0;
height: 1px;
overflow: hidden;
}
.edui-default .edui-menuseparator-inner {
border-bottom: 1px solid #e2e3e3;
margin-left: 29px;
margin-right: 1px;
}
.edui-default .edui-menu-body .edui-state-hover {
padding: 0 !important;
background-color: #fff5d4;
border: 1px solid #dcac6c;
}
/*弹出菜单*/
.edui-default .edui-shortcutmenu {
padding: 2px;
width: 190px;
height: 50px;
background-color: #fff;
border: 1px solid #ccc;
border-radius: 5px;
}
/*粘贴弹出菜单*/
.edui-default .edui-wordpastepop .edui-popup-content{
border: none;
padding: 0;
width: 54px;
height: 21px;
}
.edui-default .edui-pasteicon {
width: 100%;
height: 100%;
background-image: url('../images/wordpaste.png');
background-position: 0 0;
}
.edui-default .edui-pasteicon.edui-state-opened {
background-position: 0 -34px;
}
.edui-default .edui-pastecontainer {
position: relative;
visibility: hidden;
width: 97px;
background: #fff;
border: 1px solid #ccc;
}
.edui-default .edui-pastecontainer .edui-title {
font-weight: bold;
background: #F8F8FF;
height: 25px;
line-height: 25px;
font-size: 12px;
padding-left: 5px;
}
.edui-default .edui-pastecontainer .edui-button {
overflow: hidden;
margin: 3px 0;
}
.edui-default .edui-pastecontainer .edui-button .edui-richtxticon,
.edui-default .edui-pastecontainer .edui-button .edui-tagicon,
.edui-default .edui-pastecontainer .edui-button .edui-plaintxticon{
float: left;
cursor: pointer;
width: 29px;
height: 29px;
margin-left: 5px;
background-image: url('../images/wordpaste.png');
background-repeat: no-repeat;
}
.edui-default .edui-pastecontainer .edui-button .edui-richtxticon {
margin-left: 0;
background-position: -109px 0;
}
.edui-default .edui-pastecontainer .edui-button .edui-tagicon {
background-position: -148px 1px;
}
.edui-default .edui-pastecontainer .edui-button .edui-plaintxticon {
background-position: -72px 0;
}
.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-richtxticon {
background-position: -109px -34px;
}
.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-tagicon{
background-position: -148px -34px;
}
.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-plaintxticon{
background-position: -72px -34px;
}
\ No newline at end of file
/*!
* UEditor
* version: ueditor
* build: Thu May 29 2014 16:47:49 GMT+0800 (中国标准时间)
*/
.edui-default .edui-box{border:0;padding:0;margin:0;overflow:hidden}.edui-default a.edui-box{display:block;text-decoration:none;color:#000}.edui-default a.edui-box:hover{text-decoration:none}.edui-default a.edui-box:active{text-decoration:none}.edui-default table.edui-box{border-collapse:collapse}.edui-default ul.edui-box{list-style-type:none}div.edui-box{position:relative;display:-moz-inline-box!important;display:inline-block!important;vertical-align:top}.edui-default .edui-clearfix{zoom:1}.edui-default .edui-clearfix:after{content:'\20';display:block;clear:both}* html div.edui-box{display:inline!important}:first-child+html div.edui-box{display:inline!important}.edui-default .edui-button-body,.edui-splitbutton-body,.edui-menubutton-body,.edui-combox-body{position:relative}.edui-default .edui-popup{position:absolute;-webkit-user-select:none;-moz-user-select:none}.edui-default .edui-popup .edui-shadow{position:absolute;z-index:-1}.edui-default .edui-popup .edui-bordereraser{position:absolute;overflow:hidden}.edui-default .edui-tablepicker .edui-canvas{position:relative}.edui-default .edui-tablepicker .edui-canvas .edui-overlay{position:absolute}.edui-default .edui-dialog-modalmask,.edui-dialog-dragmask{position:absolute;left:0;top:0;width:100%;height:100%}.edui-default .edui-toolbar{position:relative}.edui-default .edui-label{cursor:default}.edui-default span.edui-clickable{color:#00f;cursor:pointer;text-decoration:underline}.edui-default span.edui-unclickable{color:gray;cursor:default}.edui-default .edui-toolbar{cursor:default;-webkit-user-select:none;-moz-user-select:none;padding:1px;overflow:hidden;zoom:1;width:auto;height:auto}.edui-default .edui-toolbar .edui-button,.edui-default .edui-toolbar .edui-splitbutton,.edui-default .edui-toolbar .edui-menubutton,.edui-default .edui-toolbar .edui-combox{margin:1px}.edui-default .edui-editor{border:1px solid #d4d4d4;background-color:#fff;position:relative;overflow:visible;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.edui-editor div{width:auto;height:auto}.edui-default .edui-editor-toolbarbox{position:relative;zoom:1;-webkit-box-shadow:0 1px 4px rgba(204,204,204,.6);-moz-box-shadow:0 1px 4px rgba(204,204,204,.6);box-shadow:0 1px 4px rgba(204,204,204,.6);border-top-left-radius:2px;border-top-right-radius:2px}.edui-default .edui-editor-toolbarboxouter{border-bottom:1px solid #d4d4d4;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,.065);box-shadow:0 1px 4px rgba(0,0,0,.065)}.edui-default .edui-editor-toolbarboxinner{padding:2px}.edui-default .edui-editor-iframeholder{position:relative}.edui-default .edui-editor-bottomContainer{overflow:hidden}.edui-default .edui-editor-bottomContainer table{width:100%;height:0;overflow:hidden;border-spacing:0}.edui-default .edui-editor-bottomContainer td{white-space:nowrap;border-top:1px solid #ccc;line-height:20px;font-size:12px;font-family:Arial,Helvetica,Tahoma,Verdana,Sans-Serif}.edui-default .edui-editor-wordcount{text-align:right;margin-right:5px;color:#aaa}.edui-default .edui-editor-scale{width:12px}.edui-default .edui-editor-scale .edui-editor-icon{float:right;width:100%;height:12px;margin-top:10px;background:url(../images/scale.png) no-repeat;cursor:se-resize}.edui-default .edui-editor-breadcrumb{margin:2px 0 0 3px}.edui-default .edui-editor-breadcrumb span{cursor:pointer;text-decoration:underline;color:#00f}.edui-default .edui-toolbar .edui-for-fullscreen{float:right}.edui-default .edui-bubble .edui-popup-content{border:1px solid #DCAC6C;background-color:#fff6d9;padding:5px;font-size:10pt;font-family:"宋体"}.edui-default .edui-bubble .edui-shadow{}.edui-default .edui-editor-toolbarmsg{background-color:#FFF6D9;border-bottom:1px solid #ccc;position:absolute;bottom:-25px;left:0;z-index:1009;width:99.9%}.edui-default .edui-editor-toolbarmsg-upload{font-size:14px;color:#00f;width:100px;height:16px;line-height:16px;cursor:pointer;position:absolute;top:5px;left:350px}.edui-default .edui-editor-toolbarmsg-label{font-size:12px;line-height:16px;padding:4px}.edui-default .edui-editor-toolbarmsg-close{float:right;width:20px;height:16px;line-height:16px;cursor:pointer;color:red}.edui-default .edui-list .edui-bordereraser{display:none}.edui-default .edui-listitem{padding:1px;white-space:nowrap}.edui-default .edui-list .edui-state-hover{position:relative;background-color:#fff5d4;border:1px solid #dcac6c;padding:0}.edui-default .edui-for-fontfamily .edui-listitem-label{min-width:130px;_width:120px;font-size:12px;height:22px;line-height:22px;padding-left:5px}.edui-default .edui-for-insertcode .edui-listitem-label{min-width:120px;_width:120px;font-size:12px;height:22px;line-height:22px;padding-left:5px}.edui-default .edui-for-underline .edui-listitem-label{min-width:120px;_width:120px;padding:3px 5px;font-size:12px}.edui-default .edui-for-fontsize .edui-listitem-label{min-width:120px;_width:120px;padding:3px 5px}.edui-default .edui-for-paragraph .edui-listitem-label{min-width:200px;_width:200px;padding:2px 5px}.edui-default .edui-for-rowspacingtop .edui-listitem-label,.edui-default .edui-for-rowspacingbottom .edui-listitem-label{min-width:53px;_width:53px;padding:2px 5px}.edui-default .edui-for-lineheight .edui-listitem-label{min-width:53px;_width:53px;padding:2px 5px}.edui-default .edui-for-customstyle .edui-listitem-label{min-width:200px;_width:200px;width:200px!important;padding:2px 5px}.edui-default .edui-menu{z-index:3000}.edui-default .edui-menu .edui-popup-content{padding:3px}.edui-default .edui-menu-body{_width:150px;min-width:170px;background:url(../images/sparator_v.png) repeat-y 25px}.edui-default .edui-menuitem-body{}.edui-default .edui-menuitem{height:20px;cursor:default;vertical-align:top}.edui-default .edui-menuitem .edui-icon{width:20px!important;height:20px!important;background:url(../images/icons.png) 0 -4000px;background:url(../images/icons.gif) 0 -4000px\9}.edui-default .edui-menuitem .edui-label{font-size:12px;line-height:20px;height:20px;padding-left:10px}.edui-default .edui-state-checked .edui-menuitem-body{background:url(../images/icons-all.gif) no-repeat 6px -205px}.edui-default .edui-state-disabled .edui-menuitem-label{color:gray}.edui-default .edui-toolbar .edui-combox-body .edui-button-body{width:60px;font-size:12px;height:20px;line-height:20px;padding-left:5px;white-space:nowrap;margin:0 3px 0 0}.edui-default .edui-toolbar .edui-combox-body .edui-arrow{background:url(../images/icons.png) -741px 0;_background:url(../images/icons.gif) -741px 0;height:20px;width:9px}.edui-default .edui-toolbar .edui-combox .edui-combox-body{border:1px solid #CCC;background-color:#fff;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px}.edui-default .edui-toolbar .edui-combox-body .edui-splitborder{display:none}.edui-default .edui-toolbar .edui-combox-body .edui-arrow{border-left:1px solid #CCC}.edui-default .edui-toolbar .edui-state-hover .edui-combox-body{background-color:#fff5d4;border:1px solid #dcac6c}.edui-default .edui-toolbar .edui-state-hover .edui-combox-body .edui-arrow{border-left:1px solid #dcac6c}.edui-default .edui-toolbar .edui-state-checked .edui-combox-body{background-color:#FFE69F;border:1px solid #DCAC6C}.edui-toolbar .edui-state-checked .edui-combox-body .edui-arrow{border-left:1px solid #DCAC6C}.edui-toolbar .edui-state-disabled .edui-combox-body{background-color:#F0F0EE;opacity:.3;filter:alpha(opacity=30)}.edui-toolbar .edui-state-opened .edui-combox-body{background-color:#fff;border:1px solid gray}.edui-default .edui-toolbar .edui-button .edui-icon,.edui-default .edui-toolbar .edui-menubutton .edui-icon,.edui-default .edui-toolbar .edui-splitbutton .edui-icon{height:20px!important;width:20px!important;background-image:url(../images/icons.png);background-image:url(../images/icons.gif) \9}.edui-default .edui-toolbar .edui-button .edui-button-wrap{padding:1px;position:relative}.edui-default .edui-toolbar .edui-button .edui-state-hover .edui-button-wrap{background-color:#fff5d4;padding:0;border:1px solid #dcac6c}.edui-default .edui-toolbar .edui-button .edui-state-checked .edui-button-wrap{background-color:#ffe69f;padding:0;border:1px solid #dcac6c;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px}.edui-default .edui-toolbar .edui-button .edui-state-active .edui-button-wrap{background-color:#fff;padding:0;border:1px solid gray}.edui-default .edui-toolbar .edui-state-disabled .edui-label{color:#ccc}.edui-default .edui-toolbar .edui-state-disabled .edui-icon{opacity:.3;filter:alpha(opacity=30)}.edui-default .edui-for-undo .edui-icon{background-position:-160px 0}.edui-default .edui-for-redo .edui-icon{background-position:-100px 0}.edui-default .edui-for-bold .edui-icon{background-position:0 0}.edui-default .edui-for-italic .edui-icon{background-position:-60px 0}.edui-default .edui-for-fontborder .edui-icon{background-position:-160px -40px}.edui-default .edui-for-underline .edui-icon{background-position:-140px 0}.edui-default .edui-for-strikethrough .edui-icon{background-position:-120px 0}.edui-default .edui-for-subscript .edui-icon{background-position:-600px 0}.edui-default .edui-for-superscript .edui-icon{background-position:-620px 0}.edui-default .edui-for-blockquote .edui-icon{background-position:-220px 0}.edui-default .edui-for-forecolor .edui-icon{background-position:-720px 0}.edui-default .edui-for-backcolor .edui-icon{background-position:-760px 0}.edui-default .edui-for-inserttable .edui-icon{background-position:-580px -20px}.edui-default .edui-for-autotypeset .edui-icon{background-position:-640px -40px}.edui-default .edui-for-justifyleft .edui-icon{background-position:-460px 0}.edui-default .edui-for-justifycenter .edui-icon{background-position:-420px 0}.edui-default .edui-for-justifyright .edui-icon{background-position:-480px 0}.edui-default .edui-for-justifyjustify .edui-icon{background-position:-440px 0}.edui-default .edui-for-insertorderedlist .edui-icon{background-position:-80px 0}.edui-default .edui-for-insertunorderedlist .edui-icon{background-position:-20px 0}.edui-default .edui-for-lineheight .edui-icon{background-position:-725px -40px}.edui-default .edui-for-rowspacingbottom .edui-icon{background-position:-745px -40px}.edui-default .edui-for-rowspacingtop .edui-icon{background-position:-765px -40px}.edui-default .edui-for-horizontal .edui-icon{background-position:-360px 0}.edui-default .edui-for-link .edui-icon{background-position:-500px 0}.edui-default .edui-for-code .edui-icon{background-position:-440px -40px}.edui-default .edui-for-insertimage .edui-icon{background-position:-726px -77px}.edui-default .edui-for-insertframe .edui-icon{background-position:-240px -40px}.edui-default .edui-for-emoticon .edui-icon{background-position:-60px -20px}.edui-default .edui-for-spechars .edui-icon{background-position:-240px 0}.edui-default .edui-for-help .edui-icon{background-position:-340px 0}.edui-default .edui-for-print .edui-icon{background-position:-440px -20px}.edui-default .edui-for-preview .edui-icon{background-position:-420px -20px}.edui-default .edui-for-selectall .edui-icon{background-position:-400px -20px}.edui-default .edui-for-searchreplace .edui-icon{background-position:-520px -20px}.edui-default .edui-for-map .edui-icon{background-position:-40px -40px}.edui-default .edui-for-gmap .edui-icon{background-position:-260px -40px}.edui-default .edui-for-insertvideo .edui-icon{background-position:-320px -20px}.edui-default .edui-for-time .edui-icon{background-position:-160px -20px}.edui-default .edui-for-date .edui-icon{background-position:-140px -20px}.edui-default .edui-for-cut .edui-icon{background-position:-680px 0}.edui-default .edui-for-copy .edui-icon{background-position:-700px 0}.edui-default .edui-for-paste .edui-icon{background-position:-560px 0}.edui-default .edui-for-formatmatch .edui-icon{background-position:-40px 0}.edui-default .edui-for-pasteplain .edui-icon{background-position:-360px -20px}.edui-default .edui-for-directionalityltr .edui-icon{background-position:-20px -20px}.edui-default .edui-for-directionalityrtl .edui-icon{background-position:-40px -20px}.edui-default .edui-for-source .edui-icon{background-position:-261px -0px}.edui-default .edui-for-removeformat .edui-icon{background-position:-580px 0}.edui-default .edui-for-unlink .edui-icon{background-position:-640px 0}.edui-default .edui-for-touppercase .edui-icon{background-position:-786px 0}.edui-default .edui-for-tolowercase .edui-icon{background-position:-806px 0}.edui-default .edui-for-insertrow .edui-icon{background-position:-478px -76px}.edui-default .edui-for-insertrownext .edui-icon{background-position:-498px -76px}.edui-default .edui-for-insertcol .edui-icon{background-position:-455px -76px}.edui-default .edui-for-insertcolnext .edui-icon{background-position:-429px -76px}.edui-default .edui-for-mergeright .edui-icon{background-position:-60px -40px}.edui-default .edui-for-mergedown .edui-icon{background-position:-80px -40px}.edui-default .edui-for-splittorows .edui-icon{background-position:-100px -40px}.edui-default .edui-for-splittocols .edui-icon{background-position:-120px -40px}.edui-default .edui-for-insertparagraphbeforetable .edui-icon{background-position:-140px -40px}.edui-default .edui-for-deleterow .edui-icon{background-position:-660px -20px}.edui-default .edui-for-deletecol .edui-icon{background-position:-640px -20px}.edui-default .edui-for-splittocells .edui-icon{background-position:-800px -20px}.edui-default .edui-for-mergecells .edui-icon{background-position:-760px -20px}.edui-default .edui-for-deletetable .edui-icon{background-position:-620px -20px}.edui-default .edui-for-cleardoc .edui-icon{background-position:-520px 0}.edui-default .edui-for-fullscreen .edui-icon{background-position:-100px -20px}.edui-default .edui-for-anchor .edui-icon{background-position:-200px 0}.edui-default .edui-for-pagebreak .edui-icon{background-position:-460px -40px}.edui-default .edui-for-imagenone .edui-icon{background-position:-480px -40px}.edui-default .edui-for-imageleft .edui-icon{background-position:-500px -40px}.edui-default .edui-for-wordimage .edui-icon{background-position:-660px -40px}.edui-default .edui-for-imageright .edui-icon{background-position:-520px -40px}.edui-default .edui-for-imagecenter .edui-icon{background-position:-540px -40px}.edui-default .edui-for-indent .edui-icon{background-position:-400px 0}.edui-default .edui-for-outdent .edui-icon{background-position:-540px 0}.edui-default .edui-for-webapp .edui-icon{background-position:-601px -40px}.edui-default .edui-for-table .edui-icon{background-position:-580px -20px}.edui-default .edui-for-edittable .edui-icon{background-position:-420px -40px}.edui-default .edui-for-template .edui-icon{background-position:-339px -40px}.edui-default .edui-for-delete .edui-icon{background-position:-360px -40px}.edui-default .edui-for-attachment .edui-icon{background-position:-620px -40px}.edui-default .edui-for-edittd .edui-icon{background-position:-700px -40px}.edui-default .edui-for-snapscreen .edui-icon{background-position:-581px -40px}.edui-default .edui-for-scrawl .edui-icon{background-position:-801px -41px}.edui-default .edui-for-background .edui-icon{background-position:-680px -40px}.edui-default .edui-for-music .edui-icon{background-position:-18px -40px}.edui-default .edui-for-formula .edui-icon{background-position:-200px -40px}.edui-default .edui-for-aligntd .edui-icon{background-position:-236px -76px}.edui-default .edui-for-insertparagraphtrue .edui-icon{background-position:-625px -76px}.edui-default .edui-for-insertparagraph .edui-icon{background-position:-602px -76px}.edui-default .edui-for-insertcaption .edui-icon{background-position:-336px -76px}.edui-default .edui-for-deletecaption .edui-icon{background-position:-362px -76px}.edui-default .edui-for-inserttitle .edui-icon{background-position:-286px -76px}.edui-default .edui-for-deletetitle .edui-icon{background-position:-311px -76px}.edui-default .edui-for-aligntable .edui-icon{background-position:-440px 0}.edui-default .edui-for-tablealignment-left .edui-icon{background-position:-460px 0}.edui-default .edui-for-tablealignment-center .edui-icon{background-position:-420px 0}.edui-default .edui-for-tablealignment-right .edui-icon{background-position:-480px 0}.edui-default .edui-for-drafts .edui-icon{background-position:-560px 0}.edui-default .edui-for-charts .edui-icon{background:url( ../images/charts.png ) no-repeat 2px 3px!important}.edui-default .edui-for-inserttitlecol .edui-icon{background-position:-673px -76px}.edui-default .edui-for-deletetitlecol .edui-icon{background-position:-698px -76px}.edui-default .edui-for-simpleupload .edui-icon{background-position:-380px 0}.edui-default .edui-toolbar .edui-splitbutton-body .edui-arrow,.edui-default .edui-toolbar .edui-menubutton-body .edui-arrow{background:url(../images/icons.png) -741px 0;_background:url(../images/icons.gif) -741px 0;height:20px;width:9px}.edui-default .edui-toolbar .edui-splitbutton .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-menubutton-body{padding:1px}.edui-default .edui-toolbar .edui-splitborder{width:1px;height:20px}.edui-default .edui-toolbar .edui-state-hover .edui-splitborder{width:1px;border-left:0 solid #dcac6c}.edui-default .edui-toolbar .edui-state-active .edui-splitborder{width:0;border-left:1px solid gray}.edui-default .edui-toolbar .edui-state-opened .edui-splitborder{width:1px;border:0}.edui-default .edui-toolbar .edui-splitbutton .edui-state-hover .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-hover .edui-menubutton-body{background-color:#fff5d4;border:1px solid #dcac6c;padding:0}.edui-default .edui-toolbar .edui-splitbutton .edui-state-checked .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-checked .edui-menubutton-body{background-color:#FFE69F;border:1px solid #DCAC6C;padding:0}.edui-default .edui-toolbar .edui-splitbutton .edui-state-active .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-active .edui-menubutton-body{background-color:#fff;border:1px solid gray;padding:0}.edui-default .edui-state-disabled .edui-arrow{opacity:.3;_filter:alpha(opacity=30)}.edui-default .edui-toolbar .edui-splitbutton .edui-state-opened .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-opened .edui-menubutton-body{background-color:#fff;border:1px solid gray;padding:0}.edui-default .edui-for-insertorderedlist .edui-bordereraser,.edui-default .edui-for-lineheight .edui-bordereraser,.edui-default .edui-for-rowspacingtop .edui-bordereraser,.edui-default .edui-for-rowspacingbottom .edui-bordereraser,.edui-default .edui-for-insertunorderedlist .edui-bordereraser{background-color:#fff}.edui-default .edui-for-insertorderedlist .edui-popup-body .edui-icon,.edui-default .edui-for-lineheight .edui-popup-body .edui-icon,.edui-default .edui-for-rowspacingtop .edui-popup-body .edui-icon,.edui-default .edui-for-rowspacingbottom .edui-popup-body .edui-icon,.edui-default .edui-for-insertunorderedlist .edui-popup-body .edui-icon{background-image:none}.edui-default .edui-popup{z-index:3000;background-color:#fff;width:auto;height:auto}.edui-default .edui-popup .edui-shadow{left:0;top:0;width:100%;height:100%}.edui-default .edui-popup-content{border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 4px rgba(0,0,0,.2);-moz-box-shadow:0 3px 4px rgba(0,0,0,.2);box-shadow:0 3px 4px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;padding:5px;background:#fff}.edui-default .edui-popup .edui-bordereraser{background-color:#fff;height:3px}.edui-default .edui-menu .edui-bordereraser{height:3px}.edui-default .edui-anchor-topleft .edui-bordereraser{left:1px;top:-2px}.edui-default .edui-anchor-topright .edui-bordereraser{right:1px;top:-2px}.edui-default .edui-anchor-bottomleft .edui-bordereraser{left:0;bottom:-6px;height:7px;border-left:1px solid gray;border-right:1px solid gray}.edui-default .edui-anchor-bottomright .edui-bordereraser{right:0;bottom:-6px;height:7px;border-left:1px solid gray;border-right:1px solid gray}.edui-popup div{width:auto;height:auto}.edui-default .edui-editor-messageholder{display:block;width:150px;height:auto;border:0;margin:0;padding:0;position:absolute;top:28px;right:3px}.edui-default .edui-message{min-height:10px;text-shadow:0 1px 0 rgba(255,255,255,.5);padding:0;margin-bottom:3px;position:relative}.edui-default .edui-message-body{border-radius:3px;padding:8px 15px 8px 8px;color:#c09853;background-color:#fcf8e3;border:1px solid #fbeed5}.edui-default .edui-message-type-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.edui-default .edui-message-type-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.edui-default .edui-message-type-danger,.edui-default .edui-message-type-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.edui-default .edui-message .edui-message-closer{display:block;width:16px;height:16px;line-height:16px;position:absolute;top:0;right:0;padding:0;cursor:pointer;background:transparent;border:0;float:right;font-size:20px;font-weight:700;color:#999;text-shadow:0 1px 0 #fff;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.edui-default .edui-message .edui-message-content{font-size:10pt;word-wrap:break-word;word-break:normal}.edui-default .edui-dialog{z-index:2000;position:absolute}.edui-dialog div{width:auto}.edui-default .edui-dialog-wrap{margin-right:6px;margin-bottom:6px}.edui-default .edui-dialog-fullscreen-flag{margin-right:0;margin-bottom:0}.edui-default .edui-dialog-body{position:relative;padding:2px 0 0 2px;_zoom:1}.edui-default .edui-dialog-fullscreen-flag .edui-dialog-body{padding:0}.edui-default .edui-dialog-shadow{position:absolute;z-index:-1;left:0;top:0;width:100%;height:100%;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.edui-default .edui-dialog-foot{background-color:#fff}.edui-default .edui-dialog-titlebar{height:26px;border-bottom:1px solid #c6c6c6;background:url(../images/dialog-title-bg.png) repeat-x bottom;position:relative;cursor:move}.edui-default .edui-dialog-caption{font-weight:700;font-size:12px;line-height:26px;padding-left:5px}.edui-default .edui-dialog-draghandle{height:26px}.edui-default .edui-dialog-closebutton{position:absolute!important;right:5px;top:3px}.edui-default .edui-dialog-closebutton .edui-button-body{height:20px;width:20px;cursor:pointer;background:url(../images/icons-all.gif) no-repeat 0 -59px}.edui-default .edui-dialog-closebutton .edui-state-hover .edui-button-body{background:url(../images/icons-all.gif) no-repeat 0 -89px}.edui-default .edui-dialog-foot{height:40px}.edui-default .edui-dialog-buttons{position:absolute;right:0}.edui-default .edui-dialog-buttons .edui-button{margin-right:10px}.edui-default .edui-dialog-buttons .edui-button .edui-button-body{background:url(../images/icons-all.gif) no-repeat;height:24px;width:96px;font-size:12px;line-height:24px;text-align:center;cursor:default}.edui-default .edui-dialog-buttons .edui-button .edui-state-hover .edui-button-body{background:url(../images/icons-all.gif) no-repeat 0 -30px}.edui-default .edui-dialog iframe{border:0;padding:0;margin:0;vertical-align:top}.edui-default .edui-dialog-modalmask{opacity:.3;filter:alpha(opacity=30);background-color:#ccc;position:absolute}.edui-default .edui-dialog-dragmask{position:absolute;background-color:transparent;cursor:move}.edui-default .edui-dialog-content{position:relative}.edui-default .dialogcontmask{cursor:move;visibility:hidden;display:block;position:absolute;width:100%;height:100%;opacity:0;filter:alpha(opacity=0)}.edui-default .edui-for-link .edui-dialog-content{width:420px;height:200px;overflow:hidden}.edui-default .edui-for-background .edui-dialog-content{width:440px;height:280px;overflow:hidden}.edui-default .edui-for-template .edui-dialog-content{width:630px;height:390px;overflow:hidden}.edui-default .edui-for-scrawl .edui-dialog-content{width:515px;*width:506px;height:360px}.edui-default .edui-for-spechars .edui-dialog-content{width:620px;height:500px;*width:630px;*height:570px}.edui-default .edui-for-insertimage .edui-dialog-content{width:650px;height:400px;overflow:hidden}.edui-default .edui-for-webapp .edui-dialog-content{width:560px;_width:565px;height:450px;overflow:hidden}.edui-default .edui-for-insertframe .edui-dialog-content{width:350px;height:200px;overflow:hidden}.edui-default .edui-for-wordimage .edui-dialog-content{width:620px;height:380px;overflow:hidden}.edui-default .edui-for-attachment .edui-dialog-content{width:650px;height:400px;overflow:hidden}.edui-default .edui-for-map .edui-dialog-content{width:550px;height:400px}.edui-default .edui-for-gmap .edui-dialog-content{width:550px;height:400px}.edui-default .edui-for-insertvideo .edui-dialog-content{width:590px;height:390px}.edui-default .edui-for-anchor .edui-dialog-content{width:320px;height:60px;overflow:hidden}.edui-default .edui-for-searchreplace .edui-dialog-content{width:400px;height:220px}.edui-default .edui-for-help .edui-dialog-content{width:400px;height:420px}.edui-default .edui-for-edittable .edui-dialog-content{width:540px;_width:590px;height:335px}.edui-default .edui-for-edittip .edui-dialog-content{width:225px;height:60px}.edui-default .edui-for-edittd .edui-dialog-content{width:240px;height:50px}.edui-default .edui-for-snapscreen .edui-dialog-content{width:400px;height:220px}.edui-default .edui-for-music .edui-dialog-content{width:515px;height:360px}.edui-default .edui-for-paragraph .edui-listitem-label{font-family:Tahoma,Verdana,Arial,Helvetica}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-p{font-size:22px;line-height:27px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h1{font-weight:bolder;font-size:32px;line-height:36px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h2{font-weight:bolder;font-size:27px;line-height:29px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h3{font-weight:bolder;font-size:19px;line-height:23px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h4{font-weight:bolder;font-size:16px;line-height:19px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h5{font-weight:bolder;font-size:13px;line-height:16px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h6{font-weight:bolder;font-size:12px;line-height:14px}.edui-default .edui-for-inserttable .edui-splitborder{display:none}.edui-default .edui-for-inserttable .edui-splitbutton-body .edui-arrow{width:0}.edui-default .edui-toolbar .edui-for-inserttable .edui-state-active .edui-splitborder{border-left:1px solid transparent}.edui-default .edui-tablepicker .edui-infoarea{height:14px;line-height:14px;font-size:12px;width:220px;margin-bottom:3px;clear:both}.edui-default .edui-tablepicker .edui-infoarea .edui-label{float:left}.edui-default .edui-dialog-buttons .edui-label{line-height:24px}.edui-default .edui-tablepicker .edui-infoarea .edui-clickable{float:right}.edui-default .edui-tablepicker .edui-pickarea{background:url(../images/unhighlighted.gif) repeat;height:220px;width:220px}.edui-default .edui-tablepicker .edui-pickarea .edui-overlay{background:url(../images/highlighted.gif) repeat}.edui-default .edui-colorpicker-topbar{height:27px;width:200px}.edui-default .edui-colorpicker-preview{height:20px;border:1px inset #000;margin-left:1px;width:128px;float:left}.edui-default .edui-colorpicker-nocolor{float:right;margin-right:1px;font-size:12px;line-height:14px;height:14px;border:1px solid #333;padding:3px 5px;cursor:pointer}.edui-default .edui-colorpicker-tablefirstrow{height:30px}.edui-default .edui-colorpicker-colorcell{width:14px;height:14px;display:block;margin:0;cursor:pointer}.edui-default .edui-colorpicker-colorcell:hover{width:14px;height:14px;margin:0}.edui-default .edui-colorpicker-advbtn{display:block;text-align:center;cursor:pointer;height:20px}.arrow_down{background:#fff url(../images/arrow_down.png) no-repeat center}.arrow_up{background:#fff url(../images/arrow_up.png) no-repeat center}.edui-colorpicker-adv{position:relative;overflow:hidden;height:180px;display:none}.edui-colorpicker-plant,.edui-colorpicker-hue{border:solid 1px #666}.edui-colorpicker-pad{width:150px;height:150px;left:14px;top:13px;position:absolute;background:red;overflow:hidden;cursor:crosshair}.edui-colorpicker-cover{position:absolute;top:0;left:0;width:150px;height:150px;background:url(../images/tangram-colorpicker.png) -160px -200px}.edui-colorpicker-padDot{position:absolute;top:0;left:0;width:11px;height:11px;overflow:hidden;background:url(../images/tangram-colorpicker.png) 0 -200px repeat-x;z-index:1000}.edui-colorpicker-sliderMain{position:absolute;left:171px;top:13px;width:19px;height:152px;background:url(../images/tangram-colorpicker.png) -179px -12px no-repeat}.edui-colorpicker-slider{width:100%;height:100%;cursor:pointer}.edui-colorpicker-thumb{position:absolute;top:0;cursor:pointer;height:3px;left:-1px;right:-1px;border:1px solid #000;background:#fff;opacity:.8}.edui-default .edui-autotypesetpicker .edui-autotypesetpicker-body{font-size:12px;margin-bottom:3px;clear:both}.edui-default .edui-autotypesetpicker-body table{border-collapse:separate;border-spacing:2px}.edui-default .edui-autotypesetpicker-body td{font-size:12px;word-wrap:break-word}.edui-default .edui-autotypesetpicker-body td input{margin:3px 3px 3px 4px;*margin:1px 0 0}.edui-default .edui-cellalignpicker .edui-cellalignpicker-body{width:70px;font-size:12px;cursor:default}.edui-default .edui-cellalignpicker-body table{border-collapse:separate;border-spacing:0}.edui-default .edui-cellalignpicker-body td{padding:1px}.edui-default .edui-cellalignpicker-body .edui-icon{height:20px;width:20px;padding:1px;background-image:url(../images/table-cell-align.png)}.edui-default .edui-cellalignpicker-body .edui-left{background-position:0 0}.edui-default .edui-cellalignpicker-body .edui-center{background-position:-25px 0}.edui-default .edui-cellalignpicker-body .edui-right{background-position:-51px 0}.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-left{background-position:-73px 0}.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-center{background-position:-98px 0}.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-right{background-position:-124px 0}.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-left{background-position:-146px 0;background-color:#f1f4f5}.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-center{background-position:-245px 0}.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-right{background-position:-271px 0}.edui-default .edui-toolbar .edui-separator{width:2px;height:20px;margin:2px 4px 2px 3px;background:url(../images/icons.png) -181px 0;background:url(../images/icons.gif) -181px 0 \9}.edui-default .edui-toolbar .edui-colorbutton .edui-colorlump{position:absolute;overflow:hidden;bottom:1px;left:1px;width:18px;height:4px}.edui-default .edui-for-emotion .edui-icon{background-position:-60px -20px}.edui-default .edui-for-emotion .edui-popup-content iframe{width:514px;height:380px;overflow:hidden}.edui-default .edui-for-emotion .edui-popup-content{position:relative;z-index:555}.edui-default .edui-for-emotion .edui-splitborder{display:none}.edui-default .edui-for-emotion .edui-splitbutton-body .edui-arrow{width:0}.edui-default .edui-toolbar .edui-for-emotion .edui-state-active .edui-splitborder{border-left:1px solid transparent}.edui-default .edui-hassubmenu .edui-arrow{height:20px;width:20px;float:right;background:url(../images/icons-all.gif) no-repeat 10px -233px}.edui-default .edui-menu-body .edui-menuitem{padding:1px}.edui-default .edui-menuseparator{margin:2px 0;height:1px;overflow:hidden}.edui-default .edui-menuseparator-inner{border-bottom:1px solid #e2e3e3;margin-left:29px;margin-right:1px}.edui-default .edui-menu-body .edui-state-hover{padding:0!important;background-color:#fff5d4;border:1px solid #dcac6c}.edui-default .edui-shortcutmenu{padding:2px;width:190px;height:50px;background-color:#fff;border:1px solid #ccc;border-radius:5px}.edui-default .edui-wordpastepop .edui-popup-content{border:0;padding:0;width:54px;height:21px}.edui-default .edui-pasteicon{width:100%;height:100%;background-image:url(../images/wordpaste.png);background-position:0 0}.edui-default .edui-pasteicon.edui-state-opened{background-position:0 -34px}.edui-default .edui-pastecontainer{position:relative;visibility:hidden;width:97px;background:#fff;border:1px solid #ccc}.edui-default .edui-pastecontainer .edui-title{font-weight:700;background:#F8F8FF;height:25px;line-height:25px;font-size:12px;padding-left:5px}.edui-default .edui-pastecontainer .edui-button{overflow:hidden;margin:3px 0}.edui-default .edui-pastecontainer .edui-button .edui-richtxticon,.edui-default .edui-pastecontainer .edui-button .edui-tagicon,.edui-default .edui-pastecontainer .edui-button .edui-plaintxticon{float:left;cursor:pointer;width:29px;height:29px;margin-left:5px;background-image:url(../images/wordpaste.png);background-repeat:no-repeat}.edui-default .edui-pastecontainer .edui-button .edui-richtxticon{margin-left:0;background-position:-109px 0}.edui-default .edui-pastecontainer .edui-button .edui-tagicon{background-position:-148px 1px}.edui-default .edui-pastecontainer .edui-button .edui-plaintxticon{background-position:-72px 0}.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-richtxticon{background-position:-109px -34px}.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-tagicon{background-position:-148px -34px}.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-plaintxticon{background-position:-72px -34px}
\ No newline at end of file
/*弹出对话框页面样式组件
*/
/*reset
*/
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td {
margin: 0;
padding: 0;
outline: 0;
font-size: 100%;
}
body {
line-height: 1;
}
ol, ul {
list-style: none;
}
blockquote, q {
quotes: none;
}
ins {
text-decoration: none;
}
del {
text-decoration: line-through;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
/*module
*/
body {
background-color: #fff;
font: 12px/1.5 sans-serif, "宋体", "Arial Narrow", HELVETICA;
color: #646464;
}
/*tab*/
.tabhead {
position: relative;
z-index: 10;
}
.tabhead span {
display: inline-block;
padding: 0 5px;
height: 30px;
border: 1px solid #ccc;
background: url("images/dialog-title-bg.png") repeat-x;
text-align: center;
line-height: 30px;
cursor: pointer;
*margin-right: 5px;
}
.tabhead span.focus {
height: 31px;
border-bottom: none;
background: #fff;
}
.tabbody {
position: relative;
top: -1px;
margin: 0 auto;
border: 1px solid #ccc;
}
/*button*/
a.button {
display: block;
text-align: center;
line-height: 24px;
text-decoration: none;
height: 24px;
width: 95px;
border: 0;
color: #838383;
background: url(../../themes/default/images/icons-all.gif) no-repeat;
}
a.button:hover {
background-position: 0 -30px;
}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
/**
* ueditor完整配置项
* 可以在这里配置整个编辑器的特性
*/
/**************************提示********************************
* 所有被注释的配置项均为UEditor默认值。
* 修改默认配置请首先确保已经完全明确该参数的真实用途。
* 主要有两种修改方案,一种是取消此处注释,然后修改成对应参数;另一种是在实例化编辑器时传入对应参数。
* 当升级编辑器时,可直接使用旧版配置文件替换新版配置文件,不用担心旧版配置文件中因缺少新功能所需的参数而导致脚本报错。
**************************提示********************************/
(function () {
/**
* 编辑器资源文件根路径。它所表示的含义是:以编辑器实例化页面为当前路径,指向编辑器资源文件(即dialog等文件夹)的路径。
* 鉴于很多同学在使用编辑器的时候出现的种种路径问题,此处强烈建议大家使用"相对于网站根目录的相对路径"进行配置。
* "相对于网站根目录的相对路径"也就是以斜杠开头的形如"/myProject/ueditor/"这样的路径。
* 如果站点中有多个不在同一层级的页面需要实例化编辑器,且引用了同一UEditor的时候,此处的URL可能不适用于每个页面的编辑器。
* 因此,UEditor提供了针对不同页面的编辑器可单独配置的根路径,具体来说,在需要实例化编辑器的页面最顶部写上如下代码即可。当然,需要令此处的URL等于对应的配置。
* window.UEDITOR_HOME_URL = "/xxxx/xxxx/";
*/
var URL = window.UEDITOR_HOME_URL || getUEBasePath();
/**
* 配置项主体。注意,此处所有涉及到路径的配置别遗漏URL变量。
*/
window.UEDITOR_CONFIG = {
//为编辑器实例添加一个路径,这个不能被注释
UEDITOR_HOME_URL: URL
// 服务器统一请求接口路径
, serverUrl: "/ueditor"
//工具栏上的所有的功能按钮和下拉框,可以在new编辑器的实例时选择自己需要的从新定义
, toolbars: [["unlink","link","simpleupload","snapscreen","emotion"]]
//当鼠标放在工具栏上时显示的tooltip提示,留空支持自动多语言配置,否则以配置值为准
//,labelMap:{
// 'anchor':'', 'undo':''
//}
//语言配置项,默认是zh-cn。有需要的话也可以使用如下这样的方式来自动多语言切换,当然,前提条件是lang文件夹下存在对应的语言文件:
//lang值也可以通过自动获取 (navigator.language||navigator.browserLanguage ||navigator.userLanguage).toLowerCase()
//,lang:"zh-cn"
//,langPath:URL +"lang/"
//主题配置项,默认是default。有需要的话也可以使用如下这样的方式来自动多主题切换,当然,前提条件是themes文件夹下存在对应的主题文件:
//现有如下皮肤:default
//,theme:'default'
//,themePath:URL +"themes/"
//,zIndex : 900 //编辑器层级的基数,默认是900
//针对getAllHtml方法,会在对应的head标签中增加该编码设置。
//,charset:"utf-8"
//若实例化编辑器的页面手动修改的domain,此处需要设置为true
//,customDomain:false
//常用配置项目
//,isShow : true //默认显示编辑器
//,textarea:'editorValue' // 提交表单时,服务器获取编辑器提交内容的所用的参数,多实例时可以给容器name属性,会将name给定的值最为每个实例的键值,不用每次实例化的时候都设置这个值
//,initialContent:'欢迎使用ueditor!' //初始化编辑器的内容,也可以通过textarea/script给值,看官网例子
//,autoClearinitialContent:true //是否自动清除编辑器初始内容,注意:如果focus属性设置为true,这个也为真,那么编辑器一上来就会触发导致初始化的内容看不到了
//,focus:false //初始化时,是否让编辑器获得焦点true或false
//如果自定义,最好给p标签如下的行高,要不输入中文时,会有跳动感
//,initialStyle:'p{line-height:1em}'//编辑器层级的基数,可以用来改变字体等
//,iframeCssUrl: URL + '/themes/iframe.css' //给编辑器内部引入一个css文件
//,initialFrameWidth:1000 //初始化编辑器宽度,默认1000
//,initialFrameHeight:320 //初始化编辑器高度,默认320
//,readonly : false //编辑器初始化结束后,编辑区域是否是只读的,默认是false
//,autoClearEmptyNode : true //getContent时,是否删除空的inlineElement节点(包括嵌套的情况)
//,imagePopup:true //图片操作的浮层开关,默认打开
//,emotionLocalization:false //是否开启表情本地化,默认关闭。若要开启请确保emotion文件夹下包含官网提供的images表情文件夹
//粘贴只保留标签,去除标签所有属性
//,retainOnlyLabelPasted: false
//,pasteplain:false //是否默认为纯文本粘贴。false为不使用纯文本粘贴,true为使用纯文本粘贴
//纯文本粘贴模式下的过滤规则
//'filterTxtRules' : function(){
// function transP(node){
// node.tagName = 'p';
// node.setStyle();
// }
// return {
// //直接删除及其字节点内容
// '-' : 'script style object iframe embed input select',
// 'p': {$:{}},
// 'br':{$:{}},
// 'div':{'$':{}},
// 'li':{'$':{}},
// 'caption':transP,
// 'th':transP,
// 'tr':transP,
// 'h1':transP,'h2':transP,'h3':transP,'h4':transP,'h5':transP,'h6':transP,
// 'td':function(node){
// //没有内容的td直接删掉
// var txt = !!node.innerText();
// if(txt){
// node.parentNode.insertAfter(UE.uNode.createText(' &nbsp; &nbsp;'),node);
// }
// node.parentNode.removeChild(node,node.innerText())
// }
// }
//}()
//,allHtmlEnabled:false //提交到后台的数据是否包含整个html字符串
//,autoTransWordToList:false //禁止word中粘贴进来的列表自动变成列表标签
//快捷菜单
//,shortcutMenu:["fontfamily", "fontsize", "bold", "italic", "underline", "forecolor", "backcolor", "insertorderedlist", "insertunorderedlist"]
//tab
//点击tab键时移动的距离,tabSize倍数,tabNode什么字符做为单位
//,tabSize:4
//,tabNode:'&nbsp;'
//scaleEnabled
//是否可以拉伸长高,默认true(当开启时,自动长高失效)
//,scaleEnabled:false
//,minFrameWidth:800 //编辑器拖动时最小宽度,默认800
//,minFrameHeight:220 //编辑器拖动时最小高度,默认220
//iframeUrlMap
//dialog内容的路径 ~会被替换成URL,垓属性一旦打开,将覆盖所有的dialog的默认路径
//,iframeUrlMap:{
// 'anchor':'~/dialogs/anchor/anchor.html',
//}
};
function getUEBasePath(docUrl, confUrl) {
return getBasePath(docUrl || self.document.URL || self.location.href, confUrl || getConfigFilePath());
}
function getConfigFilePath() {
var configPath = document.getElementsByTagName('script');
return configPath[ configPath.length - 1 ].src;
}
function getBasePath(docUrl, confUrl) {
var basePath = confUrl;
if (/^(\/|\\\\)/.test(confUrl)) {
basePath = /^.+?\w(\/|\\\\)/.exec(docUrl)[0] + confUrl.replace(/^(\/|\\\\)/, '');
} else if (!/^[a-z]+:/i.test(confUrl)) {
docUrl = docUrl.split("#")[0].split("?")[0].replace(/[^\\\/]+$/, '');
basePath = docUrl + "" + confUrl;
}
return optimizationPath(basePath);
}
function optimizationPath(path) {
var protocol = /^[a-z]+:\/\//.exec(path)[ 0 ],
tmp = null,
res = [];
path = path.replace(protocol, "").split("?")[0].split("#")[0];
path = path.replace(/\\/g, '/').split(/\//);
path[ path.length - 1 ] = "";
while (path.length) {
if (( tmp = path.shift() ) === "..") {
res.pop();
} else if (tmp !== ".") {
res.push(tmp);
}
}
return protocol + res.join("/");
}
window.UE = {
getUEBasePath: getUEBasePath
};
})();
(function(){
// parse.js
(function(){
UE = window.UE || {};
var isIE = !!window.ActiveXObject;
//定义utils工具
var utils = {
removeLastbs : function(url){
return url.replace(/\/$/,'')
},
extend : function(t,s){
var a = arguments,
notCover = this.isBoolean(a[a.length - 1]) ? a[a.length - 1] : false,
len = this.isBoolean(a[a.length - 1]) ? a.length - 1 : a.length;
for (var i = 1; i < len; i++) {
var x = a[i];
for (var k in x) {
if (!notCover || !t.hasOwnProperty(k)) {
t[k] = x[k];
}
}
}
return t;
},
isIE : isIE,
cssRule : isIE ? function(key,style,doc){
var indexList,index;
doc = doc || document;
if(doc.indexList){
indexList = doc.indexList;
}else{
indexList = doc.indexList = {};
}
var sheetStyle;
if(!indexList[key]){
if(style === undefined){
return ''
}
sheetStyle = doc.createStyleSheet('',index = doc.styleSheets.length);
indexList[key] = index;
}else{
sheetStyle = doc.styleSheets[indexList[key]];
}
if(style === undefined){
return sheetStyle.cssText
}
sheetStyle.cssText = sheetStyle.cssText + '\n' + (style || '')
} : function(key,style,doc){
doc = doc || document;
var head = doc.getElementsByTagName('head')[0],node;
if(!(node = doc.getElementById(key))){
if(style === undefined){
return ''
}
node = doc.createElement('style');
node.id = key;
head.appendChild(node)
}
if(style === undefined){
return node.innerHTML
}
if(style !== ''){
node.innerHTML = node.innerHTML + '\n' + style;
}else{
head.removeChild(node)
}
},
domReady : function (onready) {
var doc = window.document;
if (doc.readyState === "complete") {
onready();
}else{
if (isIE) {
(function () {
if (doc.isReady) return;
try {
doc.documentElement.doScroll("left");
} catch (error) {
setTimeout(arguments.callee, 0);
return;
}
onready();
})();
window.attachEvent('onload', function(){
onready()
});
} else {
doc.addEventListener("DOMContentLoaded", function () {
doc.removeEventListener("DOMContentLoaded", arguments.callee, false);
onready();
}, false);
window.addEventListener('load', function(){onready()}, false);
}
}
},
each : function(obj, iterator, context) {
if (obj == null) return;
if (obj.length === +obj.length) {
for (var i = 0, l = obj.length; i < l; i++) {
if(iterator.call(context, obj[i], i, obj) === false)
return false;
}
} else {
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
if(iterator.call(context, obj[key], key, obj) === false)
return false;
}
}
}
},
inArray : function(arr,item){
var index = -1;
this.each(arr,function(v,i){
if(v === item){
index = i;
return false;
}
});
return index;
},
pushItem : function(arr,item){
if(this.inArray(arr,item)==-1){
arr.push(item)
}
},
trim: function (str) {
return str.replace(/(^[ \t\n\r]+)|([ \t\n\r]+$)/g, '');
},
indexOf: function (array, item, start) {
var index = -1;
start = this.isNumber(start) ? start : 0;
this.each(array, function (v, i) {
if (i >= start && v === item) {
index = i;
return false;
}
});
return index;
},
hasClass: function (element, className) {
className = className.replace(/(^[ ]+)|([ ]+$)/g, '').replace(/[ ]{2,}/g, ' ').split(' ');
for (var i = 0, ci, cls = element.className; ci = className[i++];) {
if (!new RegExp('\\b' + ci + '\\b', 'i').test(cls)) {
return false;
}
}
return i - 1 == className.length;
},
addClass:function (elm, classNames) {
if(!elm)return;
classNames = this.trim(classNames).replace(/[ ]{2,}/g,' ').split(' ');
for(var i = 0,ci,cls = elm.className;ci=classNames[i++];){
if(!new RegExp('\\b' + ci + '\\b').test(cls)){
cls += ' ' + ci;
}
}
elm.className = utils.trim(cls);
},
removeClass:function (elm, classNames) {
classNames = this.isArray(classNames) ? classNames :
this.trim(classNames).replace(/[ ]{2,}/g,' ').split(' ');
for(var i = 0,ci,cls = elm.className;ci=classNames[i++];){
cls = cls.replace(new RegExp('\\b' + ci + '\\b'),'')
}
cls = this.trim(cls).replace(/[ ]{2,}/g,' ');
elm.className = cls;
!cls && elm.removeAttribute('className');
},
on: function (element, type, handler) {
var types = this.isArray(type) ? type : type.split(/\s+/),
k = types.length;
if (k) while (k--) {
type = types[k];
if (element.addEventListener) {
element.addEventListener(type, handler, false);
} else {
if (!handler._d) {
handler._d = {
els : []
};
}
var key = type + handler.toString(),index = utils.indexOf(handler._d.els,element);
if (!handler._d[key] || index == -1) {
if(index == -1){
handler._d.els.push(element);
}
if(!handler._d[key]){
handler._d[key] = function (evt) {
return handler.call(evt.srcElement, evt || window.event);
};
}
element.attachEvent('on' + type, handler._d[key]);
}
}
}
element = null;
},
off: function (element, type, handler) {
var types = this.isArray(type) ? type : type.split(/\s+/),
k = types.length;
if (k) while (k--) {
type = types[k];
if (element.removeEventListener) {
element.removeEventListener(type, handler, false);
} else {
var key = type + handler.toString();
try{
element.detachEvent('on' + type, handler._d ? handler._d[key] : handler);
}catch(e){}
if (handler._d && handler._d[key]) {
var index = utils.indexOf(handler._d.els,element);
if(index!=-1){
handler._d.els.splice(index,1);
}
handler._d.els.length == 0 && delete handler._d[key];
}
}
}
},
loadFile : function () {
var tmpList = [];
function getItem(doc,obj){
try{
for(var i= 0,ci;ci=tmpList[i++];){
if(ci.doc === doc && ci.url == (obj.src || obj.href)){
return ci;
}
}
}catch(e){
return null;
}
}
return function (doc, obj, fn) {
var item = getItem(doc,obj);
if (item) {
if(item.ready){
fn && fn();
}else{
item.funs.push(fn)
}
return;
}
tmpList.push({
doc:doc,
url:obj.src||obj.href,
funs:[fn]
});
if (!doc.body) {
var html = [];
for(var p in obj){
if(p == 'tag')continue;
html.push(p + '="' + obj[p] + '"')
}
doc.write('<' + obj.tag + ' ' + html.join(' ') + ' ></'+obj.tag+'>');
return;
}
if (obj.id && doc.getElementById(obj.id)) {
return;
}
var element = doc.createElement(obj.tag);
delete obj.tag;
for (var p in obj) {
element.setAttribute(p, obj[p]);
}
element.onload = element.onreadystatechange = function () {
if (!this.readyState || /loaded|complete/.test(this.readyState)) {
item = getItem(doc,obj);
if (item.funs.length > 0) {
item.ready = 1;
for (var fi; fi = item.funs.pop();) {
fi();
}
}
element.onload = element.onreadystatechange = null;
}
};
element.onerror = function(){
throw Error('The load '+(obj.href||obj.src)+' fails,check the url')
};
doc.getElementsByTagName("head")[0].appendChild(element);
}
}()
};
utils.each(['String', 'Function', 'Array', 'Number', 'RegExp', 'Object','Boolean'], function (v) {
utils['is' + v] = function (obj) {
return Object.prototype.toString.apply(obj) == '[object ' + v + ']';
}
});
var parselist = {};
UE.parse = {
register : function(parseName,fn){
parselist[parseName] = fn;
},
load : function(opt){
utils.each(parselist,function(v){
v.call(opt,utils);
})
}
};
uParse = function(selector,opt){
utils.domReady(function(){
var contents;
if(document.querySelectorAll){
contents = document.querySelectorAll(selector)
}else{
if(/^#/.test(selector)){
contents = [document.getElementById(selector.replace(/^#/,''))]
}else if(/^\./.test(selector)){
var contents = [];
utils.each(document.getElementsByTagName('*'),function(node){
if(node.className && new RegExp('\\b' + selector.replace(/^\./,'') + '\\b','i').test(node.className)){
contents.push(node)
}
})
}else{
contents = document.getElementsByTagName(selector)
}
}
utils.each(contents,function(v){
UE.parse.load(utils.extend({root:v,selector:selector},opt))
})
})
}
})();
})();
\ No newline at end of file
!function(){!function(){UE=window.UE||{};var isIE=!!window.ActiveXObject;var utils={removeLastbs:function(url){return url.replace(/\/$/,"")},extend:function(t,s){var a=arguments,notCover=this.isBoolean(a[a.length-1])?a[a.length-1]:false,len=this.isBoolean(a[a.length-1])?a.length-1:a.length;for(var i=1;i<len;i++){var x=a[i];for(var k in x){if(!notCover||!t.hasOwnProperty(k)){t[k]=x[k]}}}return t},isIE:isIE,cssRule:isIE?function(key,style,doc){var indexList,index;doc=doc||document;if(doc.indexList){indexList=doc.indexList}else{indexList=doc.indexList={}}var sheetStyle;if(!indexList[key]){if(style===undefined){return""}sheetStyle=doc.createStyleSheet("",index=doc.styleSheets.length);indexList[key]=index}else{sheetStyle=doc.styleSheets[indexList[key]]}if(style===undefined){return sheetStyle.cssText}sheetStyle.cssText=sheetStyle.cssText+"\n"+(style||"")}:function(key,style,doc){doc=doc||document;var head=doc.getElementsByTagName("head")[0],node;if(!(node=doc.getElementById(key))){if(style===undefined){return""}node=doc.createElement("style");node.id=key;head.appendChild(node)}if(style===undefined){return node.innerHTML}if(style!==""){node.innerHTML=node.innerHTML+"\n"+style}else{head.removeChild(node)}},domReady:function(onready){var doc=window.document;if(doc.readyState==="complete"){onready()}else{if(isIE){!function(){if(doc.isReady)return;try{doc.documentElement.doScroll("left")}catch(error){setTimeout(arguments.callee,0);return}onready()}();window.attachEvent("onload",function(){onready()})}else{doc.addEventListener("DOMContentLoaded",function(){doc.removeEventListener("DOMContentLoaded",arguments.callee,false);onready()},false);window.addEventListener("load",function(){onready()},false)}}},each:function(obj,iterator,context){if(obj==null)return;if(obj.length===+obj.length){for(var i=0,l=obj.length;i<l;i++){if(iterator.call(context,obj[i],i,obj)===false)return false}}else{for(var key in obj){if(obj.hasOwnProperty(key)){if(iterator.call(context,obj[key],key,obj)===false)return false}}}},inArray:function(arr,item){var index=-1;this.each(arr,function(v,i){if(v===item){index=i;return false}});return index},pushItem:function(arr,item){if(this.inArray(arr,item)==-1){arr.push(item)}},trim:function(str){return str.replace(/(^[ \t\n\r]+)|([ \t\n\r]+$)/g,"")},indexOf:function(array,item,start){var index=-1;start=this.isNumber(start)?start:0;this.each(array,function(v,i){if(i>=start&&v===item){index=i;return false}});return index},hasClass:function(element,className){className=className.replace(/(^[ ]+)|([ ]+$)/g,"").replace(/[ ]{2,}/g," ").split(" ");for(var i=0,ci,cls=element.className;ci=className[i++];){if(!new RegExp("\\b"+ci+"\\b","i").test(cls)){return false}}return i-1==className.length},addClass:function(elm,classNames){if(!elm)return;classNames=this.trim(classNames).replace(/[ ]{2,}/g," ").split(" ");for(var i=0,ci,cls=elm.className;ci=classNames[i++];){if(!new RegExp("\\b"+ci+"\\b").test(cls)){cls+=" "+ci}}elm.className=utils.trim(cls)},removeClass:function(elm,classNames){classNames=this.isArray(classNames)?classNames:this.trim(classNames).replace(/[ ]{2,}/g," ").split(" ");for(var i=0,ci,cls=elm.className;ci=classNames[i++];){cls=cls.replace(new RegExp("\\b"+ci+"\\b"),"")}cls=this.trim(cls).replace(/[ ]{2,}/g," ");elm.className=cls;!cls&&elm.removeAttribute("className")},on:function(element,type,handler){var types=this.isArray(type)?type:type.split(/\s+/),k=types.length;if(k)while(k--){type=types[k];if(element.addEventListener){element.addEventListener(type,handler,false)}else{if(!handler._d){handler._d={els:[]}}var key=type+handler.toString(),index=utils.indexOf(handler._d.els,element);if(!handler._d[key]||index==-1){if(index==-1){handler._d.els.push(element)}if(!handler._d[key]){handler._d[key]=function(evt){return handler.call(evt.srcElement,evt||window.event)}}element.attachEvent("on"+type,handler._d[key])}}}element=null},off:function(element,type,handler){var types=this.isArray(type)?type:type.split(/\s+/),k=types.length;if(k)while(k--){type=types[k];if(element.removeEventListener){element.removeEventListener(type,handler,false)}else{var key=type+handler.toString();try{element.detachEvent("on"+type,handler._d?handler._d[key]:handler)}catch(e){}if(handler._d&&handler._d[key]){var index=utils.indexOf(handler._d.els,element);if(index!=-1){handler._d.els.splice(index,1)}handler._d.els.length==0&&delete handler._d[key]}}}},loadFile:function(){var tmpList=[];function getItem(doc,obj){try{for(var i=0,ci;ci=tmpList[i++];){if(ci.doc===doc&&ci.url==(obj.src||obj.href)){return ci}}}catch(e){return null}}return function(doc,obj,fn){var item=getItem(doc,obj);if(item){if(item.ready){fn&&fn()}else{item.funs.push(fn)}return}tmpList.push({doc:doc,url:obj.src||obj.href,funs:[fn]});if(!doc.body){var html=[];for(var p in obj){if(p=="tag")continue;html.push(p+'="'+obj[p]+'"')}doc.write("<"+obj.tag+" "+html.join(" ")+" ></"+obj.tag+">");return}if(obj.id&&doc.getElementById(obj.id)){return}var element=doc.createElement(obj.tag);delete obj.tag;for(var p in obj){element.setAttribute(p,obj[p])}element.onload=element.onreadystatechange=function(){if(!this.readyState||/loaded|complete/.test(this.readyState)){item=getItem(doc,obj);if(item.funs.length>0){item.ready=1;for(var fi;fi=item.funs.pop();){fi()}}element.onload=element.onreadystatechange=null}};element.onerror=function(){throw Error("The load "+(obj.href||obj.src)+" fails,check the url")};doc.getElementsByTagName("head")[0].appendChild(element)}}()};utils.each(["String","Function","Array","Number","RegExp","Object","Boolean"],function(v){utils["is"+v]=function(obj){return Object.prototype.toString.apply(obj)=="[object "+v+"]"}});var parselist={};UE.parse={register:function(parseName,fn){parselist[parseName]=fn},load:function(opt){utils.each(parselist,function(v){v.call(opt,utils)})}};uParse=function(selector,opt){utils.domReady(function(){var contents;if(document.querySelectorAll){contents=document.querySelectorAll(selector)}else{if(/^#/.test(selector)){contents=[document.getElementById(selector.replace(/^#/,""))]}else if(/^\./.test(selector)){var contents=[];utils.each(document.getElementsByTagName("*"),function(node){if(node.className&&new RegExp("\\b"+selector.replace(/^\./,"")+"\\b","i").test(node.className)){contents.push(node)}})}else{contents=document.getElementsByTagName(selector)}}utils.each(contents,function(v){UE.parse.load(utils.extend({root:v,selector:selector},opt))})})}}()}();
\ No newline at end of file
package com.hdp.customerservice;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Unit test for simple App.
*/
public class AppTest
extends TestCase
{
/**
* Create the test case
*
* @param testName name of the test case
*/
public AppTest( String testName )
{
super( testName );
}
/**
* @return the suite of tests being tested
*/
public static Test suite()
{
return new TestSuite( AppTest.class );
}
/**
* Rigourous Test :-)
*/
public void testApp()
{
assertTrue( true );
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment