diff --git a/novel-admin/logs/debug.log b/novel-admin/logs/debug.log new file mode 100644 index 0000000..f79869e --- /dev/null +++ b/novel-admin/logs/debug.log @@ -0,0 +1,3 @@ +2020-05-07 04:15:36,250 INFO (StartupInfoLogger.java:50)- Starting TestDemo on USER-20180729KA with PID 9748 (started by Administrator in E:\baseprojectparent\novel-plus\novel-admin) +2020-05-07 04:15:36,253 DEBUG (StartupInfoLogger.java:53)- Running with Spring Boot v2.0.1.RELEASE, Spring v5.0.5.RELEASE +2020-05-07 04:15:36,260 INFO (SpringApplication.java:663)- The following profiles are active: dev diff --git a/novel-admin/src/main/java/com/java2nb/novel/controller/AuthorCodeController.java b/novel-admin/src/main/java/com/java2nb/novel/controller/AuthorCodeController.java new file mode 100644 index 0000000..2120952 --- /dev/null +++ b/novel-admin/src/main/java/com/java2nb/novel/controller/AuthorCodeController.java @@ -0,0 +1,135 @@ +package com.java2nb.novel.controller; + +import java.util.List; +import java.util.Map; + +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import io.swagger.annotations.ApiOperation; + + +import com.java2nb.novel.domain.AuthorCodeDO; +import com.java2nb.novel.service.AuthorCodeService; +import com.java2nb.common.utils.PageBean; +import com.java2nb.common.utils.Query; +import com.java2nb.common.utils.R; + +/** + * 作家邀请码表 + * + * @author xiongxy + * @email 1179705413@qq.com + * @date 2020-05-13 11:29:15 + */ + +@Controller +@RequestMapping("/novel/authorCode") +public class AuthorCodeController { + @Autowired + private AuthorCodeService authorCodeService; + + @GetMapping() + @RequiresPermissions("novel:authorCode:authorCode") + String AuthorCode() { + return "novel/authorCode/authorCode"; + } + + @ApiOperation(value = "获取作家邀请码表列表", notes = "获取作家邀请码表列表") + @ResponseBody + @GetMapping("/list") + @RequiresPermissions("novel:authorCode:authorCode") + public R list(@RequestParam Map params) { + //查询列表数据 + Query query = new Query(params); + List authorCodeList = authorCodeService.list(query); + int total = authorCodeService.count(query); + PageBean pageBean = new PageBean(authorCodeList, total); + return R.ok().put("data", pageBean); + } + + @ApiOperation(value = "新增作家邀请码表页面", notes = "新增作家邀请码表页面") + @GetMapping("/add") + @RequiresPermissions("novel:authorCode:add") + String add() { + return "novel/authorCode/add"; + } + + @ApiOperation(value = "修改作家邀请码表页面", notes = "修改作家邀请码表页面") + @GetMapping("/edit/{id}") + @RequiresPermissions("novel:authorCode:edit") + String edit(@PathVariable("id") Long id, Model model) { + AuthorCodeDO authorCode = authorCodeService.get(id); + model.addAttribute("authorCode", authorCode); + return "novel/authorCode/edit"; + } + + @ApiOperation(value = "查看作家邀请码表页面", notes = "查看作家邀请码表页面") + @GetMapping("/detail/{id}") + @RequiresPermissions("novel:authorCode:detail") + String detail(@PathVariable("id") Long id, Model model) { + AuthorCodeDO authorCode = authorCodeService.get(id); + model.addAttribute("authorCode", authorCode); + return "novel/authorCode/detail"; + } + + /** + * 保存 + */ + @ApiOperation(value = "新增作家邀请码表", notes = "新增作家邀请码表") + @ResponseBody + @PostMapping("/save") + @RequiresPermissions("novel:authorCode:add") + public R save( AuthorCodeDO authorCode) { + if (authorCodeService.save(authorCode) > 0) { + return R.ok(); + } + return R.error(); + } + + /** + * 修改 + */ + @ApiOperation(value = "修改作家邀请码表", notes = "修改作家邀请码表") + @ResponseBody + @RequestMapping("/update") + @RequiresPermissions("novel:authorCode:edit") + public R update( AuthorCodeDO authorCode) { + authorCodeService.update(authorCode); + return R.ok(); + } + + /** + * 删除 + */ + @ApiOperation(value = "删除作家邀请码表", notes = "删除作家邀请码表") + @PostMapping("/remove") + @ResponseBody + @RequiresPermissions("novel:authorCode:remove") + public R remove( Long id) { + if (authorCodeService.remove(id) > 0) { + return R.ok(); + } + return R.error(); + } + + /** + * 删除 + */ + @ApiOperation(value = "批量删除作家邀请码表", notes = "批量删除作家邀请码表") + @PostMapping("/batchRemove") + @ResponseBody + @RequiresPermissions("novel:authorCode:batchRemove") + public R remove(@RequestParam("ids[]") Long[] ids) { + authorCodeService.batchRemove(ids); + return R.ok(); + } + +} diff --git a/novel-admin/src/main/java/com/java2nb/novel/controller/AuthorController.java b/novel-admin/src/main/java/com/java2nb/novel/controller/AuthorController.java new file mode 100644 index 0000000..abec1e4 --- /dev/null +++ b/novel-admin/src/main/java/com/java2nb/novel/controller/AuthorController.java @@ -0,0 +1,135 @@ +package com.java2nb.novel.controller; + +import java.util.List; +import java.util.Map; + +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import io.swagger.annotations.ApiOperation; + + +import com.java2nb.novel.domain.AuthorDO; +import com.java2nb.novel.service.AuthorService; +import com.java2nb.common.utils.PageBean; +import com.java2nb.common.utils.Query; +import com.java2nb.common.utils.R; + +/** + * 作者表 + * + * @author xiongxy + * @email 1179705413@qq.com + * @date 2020-05-13 11:16:51 + */ + +@Controller +@RequestMapping("/novel/author") +public class AuthorController { + @Autowired + private AuthorService authorService; + + @GetMapping() + @RequiresPermissions("novel:author:author") + String Author() { + return "novel/author/author"; + } + + @ApiOperation(value = "获取作者表列表", notes = "获取作者表列表") + @ResponseBody + @GetMapping("/list") + @RequiresPermissions("novel:author:author") + public R list(@RequestParam Map params) { + //查询列表数据 + Query query = new Query(params); + List authorList = authorService.list(query); + int total = authorService.count(query); + PageBean pageBean = new PageBean(authorList, total); + return R.ok().put("data", pageBean); + } + + @ApiOperation(value = "新增作者表页面", notes = "新增作者表页面") + @GetMapping("/add") + @RequiresPermissions("novel:author:add") + String add() { + return "novel/author/add"; + } + + @ApiOperation(value = "修改作者表页面", notes = "修改作者表页面") + @GetMapping("/edit/{id}") + @RequiresPermissions("novel:author:edit") + String edit(@PathVariable("id") Long id, Model model) { + AuthorDO author = authorService.get(id); + model.addAttribute("author", author); + return "novel/author/edit"; + } + + @ApiOperation(value = "查看作者表页面", notes = "查看作者表页面") + @GetMapping("/detail/{id}") + @RequiresPermissions("novel:author:detail") + String detail(@PathVariable("id") Long id, Model model) { + AuthorDO author = authorService.get(id); + model.addAttribute("author", author); + return "novel/author/detail"; + } + + /** + * 保存 + */ + @ApiOperation(value = "新增作者表", notes = "新增作者表") + @ResponseBody + @PostMapping("/save") + @RequiresPermissions("novel:author:add") + public R save( AuthorDO author) { + if (authorService.save(author) > 0) { + return R.ok(); + } + return R.error(); + } + + /** + * 修改 + */ + @ApiOperation(value = "修改作者表", notes = "修改作者表") + @ResponseBody + @RequestMapping("/update") + @RequiresPermissions("novel:author:edit") + public R update( AuthorDO author) { + authorService.update(author); + return R.ok(); + } + + /** + * 删除 + */ + @ApiOperation(value = "删除作者表", notes = "删除作者表") + @PostMapping("/remove") + @ResponseBody + @RequiresPermissions("novel:author:remove") + public R remove( Long id) { + if (authorService.remove(id) > 0) { + return R.ok(); + } + return R.error(); + } + + /** + * 删除 + */ + @ApiOperation(value = "批量删除作者表", notes = "批量删除作者表") + @PostMapping("/batchRemove") + @ResponseBody + @RequiresPermissions("novel:author:batchRemove") + public R remove(@RequestParam("ids[]") Long[] ids) { + authorService.batchRemove(ids); + return R.ok(); + } + +} diff --git a/novel-admin/src/main/java/com/java2nb/novel/dao/AuthorCodeDao.java b/novel-admin/src/main/java/com/java2nb/novel/dao/AuthorCodeDao.java new file mode 100644 index 0000000..3300858 --- /dev/null +++ b/novel-admin/src/main/java/com/java2nb/novel/dao/AuthorCodeDao.java @@ -0,0 +1,32 @@ +package com.java2nb.novel.dao; + +import com.java2nb.novel.domain.AuthorCodeDO; + +import java.util.List; +import java.util.Map; + +import org.apache.ibatis.annotations.Mapper; + +/** + * 作家邀请码表 + * @author xiongxy + * @email 1179705413@qq.com + * @date 2020-05-13 11:29:15 + */ +@Mapper +public interface AuthorCodeDao { + + AuthorCodeDO get(Long id); + + List list(Map map); + + int count(Map map); + + int save(AuthorCodeDO authorCode); + + int update(AuthorCodeDO authorCode); + + int remove(Long id); + + int batchRemove(Long[] ids); +} diff --git a/novel-admin/src/main/java/com/java2nb/novel/dao/AuthorDao.java b/novel-admin/src/main/java/com/java2nb/novel/dao/AuthorDao.java new file mode 100644 index 0000000..cafdce8 --- /dev/null +++ b/novel-admin/src/main/java/com/java2nb/novel/dao/AuthorDao.java @@ -0,0 +1,32 @@ +package com.java2nb.novel.dao; + +import com.java2nb.novel.domain.AuthorDO; + +import java.util.List; +import java.util.Map; + +import org.apache.ibatis.annotations.Mapper; + +/** + * 作者表 + * @author xiongxy + * @email 1179705413@qq.com + * @date 2020-05-13 11:16:51 + */ +@Mapper +public interface AuthorDao { + + AuthorDO get(Long id); + + List list(Map map); + + int count(Map map); + + int save(AuthorDO author); + + int update(AuthorDO author); + + int remove(Long id); + + int batchRemove(Long[] ids); +} diff --git a/novel-admin/src/main/java/com/java2nb/novel/domain/AuthorCodeDO.java b/novel-admin/src/main/java/com/java2nb/novel/domain/AuthorCodeDO.java new file mode 100644 index 0000000..ea9872f --- /dev/null +++ b/novel-admin/src/main/java/com/java2nb/novel/domain/AuthorCodeDO.java @@ -0,0 +1,121 @@ +package com.java2nb.novel.domain; + +import java.io.Serializable; + + +import java.math.BigDecimal; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.java2nb.common.jsonserializer.LongToStringSerializer; + + +import org.springframework.format.annotation.DateTimeFormat; +import java.util.Date; + + + +/** + * 作家邀请码表 + * + * @author xiongxy + * @email 1179705413@qq.com + * @date 2020-05-13 11:29:15 + */ +public class AuthorCodeDO implements Serializable { + private static final long serialVersionUID = 1L; + + + //主键 + //java中的long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值) + //所以通过序列化成字符串来解决 + @JsonSerialize(using = LongToStringSerializer.class) + private Long id; + //邀请码 + private String inviteCode; + //有效时间 + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date validityTime; + //是否使用过,0:未使用,1:使用过 + private Integer isUse; + //创建时间 + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + //创建人ID + //java中的long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值) + //所以通过序列化成字符串来解决 + @JsonSerialize(using = LongToStringSerializer.class) + private Long createUserId; + + /** + * 设置:主键 + */ + public void setId(Long id) { + this.id = id; + } + /** + * 获取:主键 + */ + public Long getId() { + return id; + } + /** + * 设置:邀请码 + */ + public void setInviteCode(String inviteCode) { + this.inviteCode = inviteCode; + } + /** + * 获取:邀请码 + */ + public String getInviteCode() { + return inviteCode; + } + /** + * 设置:有效时间 + */ + public void setValidityTime(Date validityTime) { + this.validityTime = validityTime; + } + /** + * 获取:有效时间 + */ + public Date getValidityTime() { + return validityTime; + } + /** + * 设置:是否使用过,0:未使用,1:使用过 + */ + public void setIsUse(Integer isUse) { + this.isUse = isUse; + } + /** + * 获取:是否使用过,0:未使用,1:使用过 + */ + public Integer getIsUse() { + return isUse; + } + /** + * 设置:创建时间 + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + /** + * 获取:创建时间 + */ + public Date getCreateTime() { + return createTime; + } + /** + * 设置:创建人ID + */ + public void setCreateUserId(Long createUserId) { + this.createUserId = createUserId; + } + /** + * 获取:创建人ID + */ + public Long getCreateUserId() { + return createUserId; + } +} diff --git a/novel-admin/src/main/java/com/java2nb/novel/domain/AuthorDO.java b/novel-admin/src/main/java/com/java2nb/novel/domain/AuthorDO.java new file mode 100644 index 0000000..bc2ea5d --- /dev/null +++ b/novel-admin/src/main/java/com/java2nb/novel/domain/AuthorDO.java @@ -0,0 +1,176 @@ +package com.java2nb.novel.domain; + +import java.io.Serializable; + + +import java.math.BigDecimal; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.java2nb.common.jsonserializer.LongToStringSerializer; + + +import org.springframework.format.annotation.DateTimeFormat; +import java.util.Date; + + + +/** + * 作者表 + * + * @author xiongxy + * @email 1179705413@qq.com + * @date 2020-05-13 11:16:51 + */ +public class AuthorDO implements Serializable { + private static final long serialVersionUID = 1L; + + + //主键 + //java中的long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值) + //所以通过序列化成字符串来解决 + @JsonSerialize(using = LongToStringSerializer.class) + private Long id; + //用户ID + //java中的long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值) + //所以通过序列化成字符串来解决 + @JsonSerialize(using = LongToStringSerializer.class) + private Long userId; + //邀请码 + private String inviteCode; + //笔名 + private String penName; + //手机号码 + private String telPhone; + //QQ或微信账号 + private String chatAccount; + //电子邮箱 + private String email; + //作品方向,0:男频,1:女频 + private Integer workDirection; + //创建时间 + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + //0:正常,1:封禁 + private Integer status; + + /** + * 设置:主键 + */ + public void setId(Long id) { + this.id = id; + } + /** + * 获取:主键 + */ + public Long getId() { + return id; + } + /** + * 设置:用户ID + */ + public void setUserId(Long userId) { + this.userId = userId; + } + /** + * 获取:用户ID + */ + public Long getUserId() { + return userId; + } + /** + * 设置:邀请码 + */ + public void setInviteCode(String inviteCode) { + this.inviteCode = inviteCode; + } + /** + * 获取:邀请码 + */ + public String getInviteCode() { + return inviteCode; + } + /** + * 设置:笔名 + */ + public void setPenName(String penName) { + this.penName = penName; + } + /** + * 获取:笔名 + */ + public String getPenName() { + return penName; + } + /** + * 设置:手机号码 + */ + public void setTelPhone(String telPhone) { + this.telPhone = telPhone; + } + /** + * 获取:手机号码 + */ + public String getTelPhone() { + return telPhone; + } + /** + * 设置:QQ或微信账号 + */ + public void setChatAccount(String chatAccount) { + this.chatAccount = chatAccount; + } + /** + * 获取:QQ或微信账号 + */ + public String getChatAccount() { + return chatAccount; + } + /** + * 设置:电子邮箱 + */ + public void setEmail(String email) { + this.email = email; + } + /** + * 获取:电子邮箱 + */ + public String getEmail() { + return email; + } + /** + * 设置:作品方向,0:男频,1:女频 + */ + public void setWorkDirection(Integer workDirection) { + this.workDirection = workDirection; + } + /** + * 获取:作品方向,0:男频,1:女频 + */ + public Integer getWorkDirection() { + return workDirection; + } + /** + * 设置:创建时间 + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + /** + * 获取:创建时间 + */ + public Date getCreateTime() { + return createTime; + } + /** + * 设置:0:正常,1:封禁 + */ + public void setStatus(Integer status) { + this.status = status; + } + /** + * 获取:0:正常,1:封禁 + */ + public Integer getStatus() { + return status; + } +} diff --git a/novel-admin/src/main/java/com/java2nb/novel/service/AuthorCodeService.java b/novel-admin/src/main/java/com/java2nb/novel/service/AuthorCodeService.java new file mode 100644 index 0000000..c3ed03c --- /dev/null +++ b/novel-admin/src/main/java/com/java2nb/novel/service/AuthorCodeService.java @@ -0,0 +1,30 @@ +package com.java2nb.novel.service; + +import com.java2nb.novel.domain.AuthorCodeDO; + +import java.util.List; +import java.util.Map; + +/** + * 作家邀请码表 + * + * @author xiongxy + * @email 1179705413@qq.com + * @date 2020-05-13 11:29:15 + */ +public interface AuthorCodeService { + + AuthorCodeDO get(Long id); + + List list(Map map); + + int count(Map map); + + int save(AuthorCodeDO authorCode); + + int update(AuthorCodeDO authorCode); + + int remove(Long id); + + int batchRemove(Long[] ids); +} diff --git a/novel-admin/src/main/java/com/java2nb/novel/service/AuthorService.java b/novel-admin/src/main/java/com/java2nb/novel/service/AuthorService.java new file mode 100644 index 0000000..15d73ef --- /dev/null +++ b/novel-admin/src/main/java/com/java2nb/novel/service/AuthorService.java @@ -0,0 +1,30 @@ +package com.java2nb.novel.service; + +import com.java2nb.novel.domain.AuthorDO; + +import java.util.List; +import java.util.Map; + +/** + * 作者表 + * + * @author xiongxy + * @email 1179705413@qq.com + * @date 2020-05-13 11:16:51 + */ +public interface AuthorService { + + AuthorDO get(Long id); + + List list(Map map); + + int count(Map map); + + int save(AuthorDO author); + + int update(AuthorDO author); + + int remove(Long id); + + int batchRemove(Long[] ids); +} diff --git a/novel-admin/src/main/java/com/java2nb/novel/service/impl/AuthorCodeServiceImpl.java b/novel-admin/src/main/java/com/java2nb/novel/service/impl/AuthorCodeServiceImpl.java new file mode 100644 index 0000000..6528ef2 --- /dev/null +++ b/novel-admin/src/main/java/com/java2nb/novel/service/impl/AuthorCodeServiceImpl.java @@ -0,0 +1,60 @@ +package com.java2nb.novel.service.impl; + +import com.java2nb.common.utils.ShiroUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +import com.java2nb.novel.dao.AuthorCodeDao; +import com.java2nb.novel.domain.AuthorCodeDO; +import com.java2nb.novel.service.AuthorCodeService; + + + +@Service +public class AuthorCodeServiceImpl implements AuthorCodeService { + @Autowired + private AuthorCodeDao authorCodeDao; + + @Override + public AuthorCodeDO get(Long id){ + return authorCodeDao.get(id); + } + + @Override + public List list(Map map){ + return authorCodeDao.list(map); + } + + @Override + public int count(Map map){ + return authorCodeDao.count(map); + } + + @Override + public int save(AuthorCodeDO authorCode){ + authorCode.setIsUse(0); + authorCode.setCreateTime(new Date()); + authorCode.setCreateUserId(ShiroUtils.getUserId()); + return authorCodeDao.save(authorCode); + } + + @Override + public int update(AuthorCodeDO authorCode){ + return authorCodeDao.update(authorCode); + } + + @Override + public int remove(Long id){ + return authorCodeDao.remove(id); + } + + @Override + public int batchRemove(Long[] ids){ + return authorCodeDao.batchRemove(ids); + } + +} diff --git a/novel-admin/src/main/java/com/java2nb/novel/service/impl/AuthorServiceImpl.java b/novel-admin/src/main/java/com/java2nb/novel/service/impl/AuthorServiceImpl.java new file mode 100644 index 0000000..ef3d020 --- /dev/null +++ b/novel-admin/src/main/java/com/java2nb/novel/service/impl/AuthorServiceImpl.java @@ -0,0 +1,55 @@ +package com.java2nb.novel.service.impl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +import com.java2nb.novel.dao.AuthorDao; +import com.java2nb.novel.domain.AuthorDO; +import com.java2nb.novel.service.AuthorService; + + + +@Service +public class AuthorServiceImpl implements AuthorService { + @Autowired + private AuthorDao authorDao; + + @Override + public AuthorDO get(Long id){ + return authorDao.get(id); + } + + @Override + public List list(Map map){ + return authorDao.list(map); + } + + @Override + public int count(Map map){ + return authorDao.count(map); + } + + @Override + public int save(AuthorDO author){ + return authorDao.save(author); + } + + @Override + public int update(AuthorDO author){ + return authorDao.update(author); + } + + @Override + public int remove(Long id){ + return authorDao.remove(id); + } + + @Override + public int batchRemove(Long[] ids){ + return authorDao.batchRemove(ids); + } + +} diff --git a/novel-admin/src/main/resources/application-dev.yml b/novel-admin/src/main/resources/application-dev.yml index 876ac5f..29c4d50 100644 --- a/novel-admin/src/main/resources/application-dev.yml +++ b/novel-admin/src/main/resources/application-dev.yml @@ -10,9 +10,9 @@ spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.jdbc.Driver - url: jdbc:mysql://128.0.0.1:3306/novel_biz?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai + url: jdbc:mysql://127.0.0.1:3306/novel_plus?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai username: root - password: test123456 + password: #password: initialSize: 1 minIdle: 3 diff --git a/novel-admin/src/main/resources/application.yml b/novel-admin/src/main/resources/application.yml index a247363..dc32079 100644 --- a/novel-admin/src/main/resources/application.yml +++ b/novel-admin/src/main/resources/application.yml @@ -3,7 +3,7 @@ server: # tomcat: # max-threads: 1000 # min-spare-threads: 30 - port: 8082 + port: 80 # uri-encoding: utf-8 #security: # basic: diff --git a/novel-admin/src/main/resources/mybatis/novel/AuthorCodeMapper.xml b/novel-admin/src/main/resources/mybatis/novel/AuthorCodeMapper.xml new file mode 100644 index 0000000..c920531 --- /dev/null +++ b/novel-admin/src/main/resources/mybatis/novel/AuthorCodeMapper.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + insert into author_code + ( + `invite_code`, + `validity_time`, + `is_use`, + `create_time`, + `create_user_id` + ) + values + ( + #{inviteCode}, + #{validityTime}, + #{isUse}, + #{createTime}, + #{createUserId} + ) + + + + insert into author_code + ( + `id`, + `invite_code`, + `validity_time`, + `is_use`, + `create_time`, + `create_user_id` + ) + values + ( + #{id}, + #{inviteCode}, + #{validityTime}, + #{isUse}, + #{createTime}, + #{createUserId} + ) + + + + update author_code + + `invite_code` = #{inviteCode}, + `validity_time` = #{validityTime}, + `is_use` = #{isUse}, + `create_time` = #{createTime}, + `create_user_id` = #{createUserId} + + where id = #{id} + + + + delete from author_code where id = #{value} + + + + delete from author_code where id in + + #{id} + + + + \ No newline at end of file diff --git a/novel-admin/src/main/resources/mybatis/novel/AuthorMapper.xml b/novel-admin/src/main/resources/mybatis/novel/AuthorMapper.xml new file mode 100644 index 0000000..42b5712 --- /dev/null +++ b/novel-admin/src/main/resources/mybatis/novel/AuthorMapper.xml @@ -0,0 +1,136 @@ + + + + + + + + + + + + + insert into author + ( + `user_id`, + `invite_code`, + `pen_name`, + `tel_phone`, + `chat_account`, + `email`, + `work_direction`, + `create_time`, + `status` + ) + values + ( + #{userId}, + #{inviteCode}, + #{penName}, + #{telPhone}, + #{chatAccount}, + #{email}, + #{workDirection}, + #{createTime}, + #{status} + ) + + + + insert into author + ( + `id`, + `user_id`, + `invite_code`, + `pen_name`, + `tel_phone`, + `chat_account`, + `email`, + `work_direction`, + `create_time`, + `status` + ) + values + ( + #{id}, + #{userId}, + #{inviteCode}, + #{penName}, + #{telPhone}, + #{chatAccount}, + #{email}, + #{workDirection}, + #{createTime}, + #{status} + ) + + + + update author + + `user_id` = #{userId}, + `invite_code` = #{inviteCode}, + `pen_name` = #{penName}, + `tel_phone` = #{telPhone}, + `chat_account` = #{chatAccount}, + `email` = #{email}, + `work_direction` = #{workDirection}, + `create_time` = #{createTime}, + `status` = #{status} + + where id = #{id} + + + + delete from author where id = #{value} + + + + delete from author where id in + + #{id} + + + + \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/js/appjs/novel/author/add.js b/novel-admin/src/main/resources/static/js/appjs/novel/author/add.js new file mode 100644 index 0000000..7bc975e --- /dev/null +++ b/novel-admin/src/main/resources/static/js/appjs/novel/author/add.js @@ -0,0 +1,107 @@ +var E = window.wangEditor; +$("[id^='contentEditor']").each(function (index, ele) { + var relName = $(ele).attr("id").substring(13); + var editor = new E('#contentEditor' + relName); +// 自定义菜单配置 + editor.customConfig.menus = [ + 'head', // 标题 + 'bold', // 粗体 + 'fontSize', // 字号 + 'fontName', // 字体 + 'italic', // 斜体 + 'underline', // 下划线 + 'strikeThrough', // 删除线 + 'foreColor', // 文字颜色 + //'backColor', // 背景颜色 + //'link', // 插入链接 + 'list', // 列表 + 'justify', // 对齐方式 + 'quote', // 引用 + 'emoticon', // 表情 + 'image', // 插入图片 + //'table', // 表格 + //'video', // 插入视频 + //'code', // 插入代码 + 'undo', // 撤销 + 'redo' // 重复 + ]; + editor.customConfig.onchange = function (html) { + // html 即变化之后的内容 + $("#" + relName).val(html); + } + editor.customConfig.uploadImgShowBase64 = true; + editor.create(); + +}) + +$("[id^='picImage']").each(function (index, ele) { + var relName = $(ele).attr("id").substring(8); + layui.use('upload', function () { + var upload = layui.upload; + //执行实例 + var uploadInst = upload.render({ + elem: '#picImage' + relName, //绑定元素 + url: '/common/sysFile/upload', //上传接口 + size: 1000, + accept: 'file', + done: function (r) { + $("#picImage" + relName).attr("src", r.fileName); + $("#" + relName).val(r.fileName); + }, + error: function (r) { + layer.msg(r.msg); + } + }); + }); + +}); + + + + + + +$().ready(function () { + validateRule(); +}); + +$.validator.setDefaults({ + submitHandler: function () { + save(); + } +}); +function save() { + $.ajax({ + cache: true, + type: "POST", + url: "/novel/author/save", + data: $('#signupForm').serialize(),// 你的formid + async: false, + error: function (request) { + parent.layer.alert("Connection error"); + }, + success: function (data) { + if (data.code == 0) { + parent.layer.msg("操作成功"); + parent.reLoad(); + var index = parent.layer.getFrameIndex(window.name); // 获取窗口索引 + parent.layer.close(index); + + } else { + parent.layer.alert(data.msg) + } + + } + }); + +} +function validateRule() { + var icon = " "; + $("#signupForm").validate({ + ignore: "", + rules: { + }, + messages: { + } +}) +} \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/js/appjs/novel/author/author.js b/novel-admin/src/main/resources/static/js/appjs/novel/author/author.js new file mode 100644 index 0000000..cdf3497 --- /dev/null +++ b/novel-admin/src/main/resources/static/js/appjs/novel/author/author.js @@ -0,0 +1,244 @@ +var prefix = "/novel/author" +$(function () { + load(); +}); + +function load() { + $('#exampleTable') + .bootstrapTable( + { + method: 'get', // 服务器数据的请求方式 get or post + url: prefix + "/list", // 服务器数据的加载地址 + // showRefresh : true, + // showToggle : true, + // showColumns : true, + iconSize: 'outline', + toolbar: '#exampleToolbar', + striped: true, // 设置为true会有隔行变色效果 + dataType: "json", // 服务器返回的数据类型 + pagination: true, // 设置为true会在底部显示分页条 + // queryParamsType : "limit", + // //设置为limit则会发送符合RESTFull格式的参数 + singleSelect: false, // 设置为true将禁止多选 + // contentType : "application/x-www-form-urlencoded", + // //发送到服务器的数据编码类型 + pageSize: 10, // 如果设置了分页,每页数据条数 + pageNumber: 1, // 如果设置了分布,首页页码 + //search : true, // 是否显示搜索框 + showColumns: false, // 是否显示内容下拉框(选择显示的列) + sidePagination: "server", // 设置在哪里进行分页,可选值为"client" 或者 "server" + queryParams: function (params) { + //说明:传入后台的参数包括offset开始索引,limit步长,sort排序列,order:desc或者,以及所有列的键值对 + var queryParams = getFormJson("searchForm"); + queryParams.limit = params.limit; + queryParams.offset = params.offset; + return queryParams; + }, + // //请求服务器数据时,你可以通过重写参数的方式添加一些额外的参数,例如 toolbar 中的参数 如果 + // queryParamsType = 'limit' ,返回参数必须包含 + // limit, offset, search, sort, order 否则, 需要包含: + // pageSize, pageNumber, searchText, sortName, + // sortOrder. + // 返回false将会终止请求 + responseHandler: function (rs) { + + if (rs.code == 0) { + return rs.data; + } else { + parent.layer.alert(rs.msg) + return {total: 0, rows: []}; + } + }, + columns: [ + { + checkbox: true + }, + { + title: '序号', + formatter: function () { + return arguments[2] + 1; + } + }, + + + { + field: 'inviteCode', + title: '邀请码' + }, + + + { + field: 'penName', + title: '笔名' + }, + + + { + field: 'telPhone', + title: '手机号码' + }, + + + { + field: 'chatAccount', + title: 'QQ或微信账号' + }, + + + { + field: 'email', + title: '电子邮箱' + }, + + + { + field: 'workDirection', + title: '作品方向', + formatter: function (value, row, index) { + return formatDict("work_direction", value); + } + }, + + { + field: 'createTime', + title: '入驻时间' + }, + + + { + field: 'status', + title: '状态', + formatter: function (value, row, index) { + return value == 1 ? '封禁' : '正常'; + } + }, + + + { + title: '操作', + field: 'id', + align: 'center', + formatter: function (value, row, index) { + if(row.status==1) { + var e = '恢复正常 '; + }else{ + var e = '封禁 '; + } + return e ; + } + }] + }); +} + +function reLoad() { + $('#exampleTable').bootstrapTable('refresh'); +} + +function add() { + layer.open({ + type: 2, + title: '增加', + maxmin: true, + shadeClose: false, // 点击遮罩关闭层 + area: ['800px', '520px'], + content: prefix + '/add' // iframe的url + }); +} + +function detail(id) { + layer.open({ + type: 2, + title: '详情', + maxmin: true, + shadeClose: false, // 点击遮罩关闭层 + area: ['800px', '520px'], + content: prefix + '/detail/' + id // iframe的url + }); +} + +function edit(id,status) { + $.ajax({ + cache: true, + type: "POST", + url: "/novel/author/update", + data: {'id':id,'status':status},// 你的formid + async: false, + error: function (request) { + parent.layer.alert("Connection error"); + }, + success: function (data) { + if (data.code == 0) { + parent.layer.msg("操作成功"); + reLoad(); + + } else { + parent.layer.alert(data.msg) + } + + } + }); +} + +function remove(id) { + layer.confirm('确定要删除选中的记录?', { + btn: ['确定', '取消'] + }, function () { + $.ajax({ + url: prefix + "/remove", + type: "post", + data: { + 'id': id + }, + success: function (r) { + if (r.code == 0) { + layer.msg(r.msg); + reLoad(); + } else { + layer.msg(r.msg); + } + } + }); + }) +} + +function resetPwd(id) { +} + +function batchRemove() { + var rows = $('#exampleTable').bootstrapTable('getSelections'); // 返回所有选择的行,当没有选择的记录时,返回一个空数组 + if (rows.length == 0) { + layer.msg("请选择要删除的数据"); + return; + } + layer.confirm("确认要删除选中的'" + rows.length + "'条数据吗?", { + btn: ['确定', '取消'] + // 按钮 + }, function () { + var ids = new Array(); + // 遍历所有选择的行数据,取每条数据对应的ID + $.each(rows, function (i, row) { + ids[i] = row['id']; + }); + $.ajax({ + type: 'POST', + data: { + "ids": ids + }, + url: prefix + '/batchRemove', + success: function (r) { + if (r.code == 0) { + layer.msg(r.msg); + reLoad(); + } else { + layer.msg(r.msg); + } + } + }); + }, function () { + + }); +} \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/js/appjs/novel/author/edit.js b/novel-admin/src/main/resources/static/js/appjs/novel/author/edit.js new file mode 100644 index 0000000..238a8a4 --- /dev/null +++ b/novel-admin/src/main/resources/static/js/appjs/novel/author/edit.js @@ -0,0 +1,103 @@ +var E = window.wangEditor; +$("[id^='contentEditor']").each(function (index, ele) { + var relName = $(ele).attr("id").substring(13); + var editor = new E('#contentEditor' + relName); +// 自定义菜单配置 + editor.customConfig.menus = [ + 'head', // 标题 + 'bold', // 粗体 + 'fontSize', // 字号 + 'fontName', // 字体 + 'italic', // 斜体 + 'underline', // 下划线 + 'strikeThrough', // 删除线 + 'foreColor', // 文字颜色 + //'backColor', // 背景颜色 + //'link', // 插入链接 + 'list', // 列表 + 'justify', // 对齐方式 + 'quote', // 引用 + 'emoticon', // 表情 + 'image', // 插入图片 + //'table', // 表格 + //'video', // 插入视频 + //'code', // 插入代码 + 'undo', // 撤销 + 'redo' // 重复 + ]; + editor.customConfig.onchange = function (html) { + // html 即变化之后的内容 + $("#" + relName).val(html); + } + editor.customConfig.uploadImgShowBase64 = true; + editor.create(); + editor.txt.html($("#" + relName).val()); + +}) + +$("[id^='picImage']").each(function (index, ele) { + var relName = $(ele).attr("id").substring(8); + layui.use('upload', function () { + var upload = layui.upload; + //执行实例 + var uploadInst = upload.render({ + elem: '#picImage' + relName, //绑定元素 + url: '/common/sysFile/upload', //上传接口 + size: 1000, + accept: 'file', + done: function (r) { + $("#picImage" + relName).attr("src", r.fileName); + $("#" + relName).val(r.fileName); + }, + error: function (r) { + layer.msg(r.msg); + } + }); + }); + +}); + +$().ready(function () { + validateRule(); +}); + +$.validator.setDefaults({ + submitHandler: function () { + update(); + } +}); +function update() { + $.ajax({ + cache: true, + type: "POST", + url: "/novel/author/update", + data: $('#signupForm').serialize(),// 你的formid + async: false, + error: function (request) { + parent.layer.alert("Connection error"); + }, + success: function (data) { + if (data.code == 0) { + parent.layer.msg("操作成功"); + parent.reLoad(); + var index = parent.layer.getFrameIndex(window.name); // 获取窗口索引 + parent.layer.close(index); + + } else { + parent.layer.alert(data.msg) + } + + } + }); + +} +function validateRule() { + var icon = " "; + $("#signupForm").validate({ + ignore: "", + rules: { + }, + messages: { + } +}) +} \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/js/appjs/novel/authorCode/add.js b/novel-admin/src/main/resources/static/js/appjs/novel/authorCode/add.js new file mode 100644 index 0000000..1b9f06c --- /dev/null +++ b/novel-admin/src/main/resources/static/js/appjs/novel/authorCode/add.js @@ -0,0 +1,115 @@ +var E = window.wangEditor; +$("[id^='contentEditor']").each(function (index, ele) { + var relName = $(ele).attr("id").substring(13); + var editor = new E('#contentEditor' + relName); +// 自定义菜单配置 + editor.customConfig.menus = [ + 'head', // 标题 + 'bold', // 粗体 + 'fontSize', // 字号 + 'fontName', // 字体 + 'italic', // 斜体 + 'underline', // 下划线 + 'strikeThrough', // 删除线 + 'foreColor', // 文字颜色 + //'backColor', // 背景颜色 + //'link', // 插入链接 + 'list', // 列表 + 'justify', // 对齐方式 + 'quote', // 引用 + 'emoticon', // 表情 + 'image', // 插入图片 + //'table', // 表格 + //'video', // 插入视频 + //'code', // 插入代码 + 'undo', // 撤销 + 'redo' // 重复 + ]; + editor.customConfig.onchange = function (html) { + // html 即变化之后的内容 + $("#" + relName).val(html); + } + editor.customConfig.uploadImgShowBase64 = true; + editor.create(); + +}) + +$("[id^='picImage']").each(function (index, ele) { + var relName = $(ele).attr("id").substring(8); + layui.use('upload', function () { + var upload = layui.upload; + //执行实例 + var uploadInst = upload.render({ + elem: '#picImage' + relName, //绑定元素 + url: '/common/sysFile/upload', //上传接口 + size: 1000, + accept: 'file', + done: function (r) { + $("#picImage" + relName).attr("src", r.fileName); + $("#" + relName).val(r.fileName); + }, + error: function (r) { + layer.msg(r.msg); + } + }); + }); + +}); + + + + + + +$().ready(function () { + validateRule(); +}); + +$.validator.setDefaults({ + submitHandler: function () { + save(); + } +}); +function save() { + $.ajax({ + cache: true, + type: "POST", + url: "/novel/authorCode/save", + data: $('#signupForm').serialize(),// 你的formid + async: false, + error: function (request) { + parent.layer.alert("Connection error"); + }, + success: function (data) { + if (data.code == 0) { + parent.layer.msg("操作成功"); + parent.reLoad(); + var index = parent.layer.getFrameIndex(window.name); // 获取窗口索引 + parent.layer.close(index); + + } else { + parent.layer.alert(data.msg) + } + + } + }); + +} +function validateRule() { + var icon = " "; + $("#signupForm").validate({ + ignore: "", + rules: { + inviteCode: { + required: true + }, validityTime: { + required: true + }, }, + messages: { + inviteCode: { + required: icon + "请选择邀请码" + }, validityTime: { + required: icon + "请选择有效时间" + }, } +}) +} \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/js/appjs/novel/authorCode/authorCode.js b/novel-admin/src/main/resources/static/js/appjs/novel/authorCode/authorCode.js new file mode 100644 index 0000000..df532cf --- /dev/null +++ b/novel-admin/src/main/resources/static/js/appjs/novel/authorCode/authorCode.js @@ -0,0 +1,212 @@ +var prefix = "/novel/authorCode" +$(function () { + load(); +}); + +function load() { + $('#exampleTable') + .bootstrapTable( + { + method: 'get', // 服务器数据的请求方式 get or post + url: prefix + "/list", // 服务器数据的加载地址 + // showRefresh : true, + // showToggle : true, + // showColumns : true, + iconSize: 'outline', + toolbar: '#exampleToolbar', + striped: true, // 设置为true会有隔行变色效果 + dataType: "json", // 服务器返回的数据类型 + pagination: true, // 设置为true会在底部显示分页条 + // queryParamsType : "limit", + // //设置为limit则会发送符合RESTFull格式的参数 + singleSelect: false, // 设置为true将禁止多选 + // contentType : "application/x-www-form-urlencoded", + // //发送到服务器的数据编码类型 + pageSize: 10, // 如果设置了分页,每页数据条数 + pageNumber: 1, // 如果设置了分布,首页页码 + //search : true, // 是否显示搜索框 + showColumns: false, // 是否显示内容下拉框(选择显示的列) + sidePagination: "server", // 设置在哪里进行分页,可选值为"client" 或者 "server" + queryParams: function (params) { + //说明:传入后台的参数包括offset开始索引,limit步长,sort排序列,order:desc或者,以及所有列的键值对 + var queryParams = getFormJson("searchForm"); + queryParams.limit = params.limit; + queryParams.offset = params.offset; + return queryParams; + }, + // //请求服务器数据时,你可以通过重写参数的方式添加一些额外的参数,例如 toolbar 中的参数 如果 + // queryParamsType = 'limit' ,返回参数必须包含 + // limit, offset, search, sort, order 否则, 需要包含: + // pageSize, pageNumber, searchText, sortName, + // sortOrder. + // 返回false将会终止请求 + responseHandler: function (rs) { + + if (rs.code == 0) { + return rs.data; + } else { + parent.layer.alert(rs.msg) + return {total: 0, rows: []}; + } + }, + columns: [ + { + checkbox: true + }, + { + title: '序号', + formatter: function () { + return arguments[2] + 1; + } + }, + + + { + field: 'inviteCode', + title: '邀请码' + }, + + + { + field: 'validityTime', + title: '有效时间' + }, + + + { + field: 'isUse', + title: '是否使用过', + formatter: function (value, row, index) { + return value == 1 ? '使用过' : '未使用'; + } + }, + + + { + field: 'createTime', + title: '创建时间' + }, + + + /* { + field: 'createUserId', + title: '创建人ID' + },*/ + + + { + title: '操作', + field: 'id', + align: 'center', + formatter: function (value, row, index) { + /* var d = ' ';*/ + /* var e = ' ';*/ + var r = ' '; + return r; + } + }] + }); +} + +function reLoad() { + $('#exampleTable').bootstrapTable('refresh'); +} + +function add() { + layer.open({ + type: 2, + title: '增加', + maxmin: true, + shadeClose: false, // 点击遮罩关闭层 + area: ['800px', '520px'], + content: prefix + '/add' // iframe的url + }); +} + +function detail(id) { + layer.open({ + type: 2, + title: '详情', + maxmin: true, + shadeClose: false, // 点击遮罩关闭层 + area: ['800px', '520px'], + content: prefix + '/detail/' + id // iframe的url + }); +} + +function edit(id) { + layer.open({ + type: 2, + title: '编辑', + maxmin: true, + shadeClose: false, // 点击遮罩关闭层 + area: ['800px', '520px'], + content: prefix + '/edit/' + id // iframe的url + }); +} + +function remove(id) { + layer.confirm('确定要删除选中的记录?', { + btn: ['确定', '取消'] + }, function () { + $.ajax({ + url: prefix + "/remove", + type: "post", + data: { + 'id': id + }, + success: function (r) { + if (r.code == 0) { + layer.msg(r.msg); + reLoad(); + } else { + layer.msg(r.msg); + } + } + }); + }) +} + +function resetPwd(id) { +} + +function batchRemove() { + var rows = $('#exampleTable').bootstrapTable('getSelections'); // 返回所有选择的行,当没有选择的记录时,返回一个空数组 + if (rows.length == 0) { + layer.msg("请选择要删除的数据"); + return; + } + layer.confirm("确认要删除选中的'" + rows.length + "'条数据吗?", { + btn: ['确定', '取消'] + // 按钮 + }, function () { + var ids = new Array(); + // 遍历所有选择的行数据,取每条数据对应的ID + $.each(rows, function (i, row) { + ids[i] = row['id']; + }); + $.ajax({ + type: 'POST', + data: { + "ids": ids + }, + url: prefix + '/batchRemove', + success: function (r) { + if (r.code == 0) { + layer.msg(r.msg); + reLoad(); + } else { + layer.msg(r.msg); + } + } + }); + }, function () { + + }); +} \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/js/appjs/novel/authorCode/edit.js b/novel-admin/src/main/resources/static/js/appjs/novel/authorCode/edit.js new file mode 100644 index 0000000..3ef86e8 --- /dev/null +++ b/novel-admin/src/main/resources/static/js/appjs/novel/authorCode/edit.js @@ -0,0 +1,115 @@ +var E = window.wangEditor; +$("[id^='contentEditor']").each(function (index, ele) { + var relName = $(ele).attr("id").substring(13); + var editor = new E('#contentEditor' + relName); +// 自定义菜单配置 + editor.customConfig.menus = [ + 'head', // 标题 + 'bold', // 粗体 + 'fontSize', // 字号 + 'fontName', // 字体 + 'italic', // 斜体 + 'underline', // 下划线 + 'strikeThrough', // 删除线 + 'foreColor', // 文字颜色 + //'backColor', // 背景颜色 + //'link', // 插入链接 + 'list', // 列表 + 'justify', // 对齐方式 + 'quote', // 引用 + 'emoticon', // 表情 + 'image', // 插入图片 + //'table', // 表格 + //'video', // 插入视频 + //'code', // 插入代码 + 'undo', // 撤销 + 'redo' // 重复 + ]; + editor.customConfig.onchange = function (html) { + // html 即变化之后的内容 + $("#" + relName).val(html); + } + editor.customConfig.uploadImgShowBase64 = true; + editor.create(); + editor.txt.html($("#" + relName).val()); + +}) + +$("[id^='picImage']").each(function (index, ele) { + var relName = $(ele).attr("id").substring(8); + layui.use('upload', function () { + var upload = layui.upload; + //执行实例 + var uploadInst = upload.render({ + elem: '#picImage' + relName, //绑定元素 + url: '/common/sysFile/upload', //上传接口 + size: 1000, + accept: 'file', + done: function (r) { + $("#picImage" + relName).attr("src", r.fileName); + $("#" + relName).val(r.fileName); + }, + error: function (r) { + layer.msg(r.msg); + } + }); + }); + +}); + +$().ready(function () { + validateRule(); +}); + +$.validator.setDefaults({ + submitHandler: function () { + update(); + } +}); +function update() { + $.ajax({ + cache: true, + type: "POST", + url: "/novel/authorCode/update", + data: $('#signupForm').serialize(),// 你的formid + async: false, + error: function (request) { + parent.layer.alert("Connection error"); + }, + success: function (data) { + if (data.code == 0) { + parent.layer.msg("操作成功"); + parent.reLoad(); + var index = parent.layer.getFrameIndex(window.name); // 获取窗口索引 + parent.layer.close(index); + + } else { + parent.layer.alert(data.msg) + } + + } + }); + +} +function validateRule() { + var icon = " "; + $("#signupForm").validate({ + ignore: "", + rules: { + inviteCode: + { + required: true + }, validityTime: + { + required: true + }, }, + messages: { + inviteCode: + { + required: icon + "请选择邀请码" + }, validityTime: + { + required: icon + "请选择有效时间" + }, } +}) +} \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/sql/novel/author/menu.js b/novel-admin/src/main/resources/static/sql/novel/author/menu.js new file mode 100644 index 0000000..d561b52 --- /dev/null +++ b/novel-admin/src/main/resources/static/sql/novel/author/menu.js @@ -0,0 +1,18 @@ +-- 菜单SQL +INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) + VALUES ('1', '作者表', 'novel/author', 'novel:author:author', '1', 'fa', '6'); + +-- 按钮父菜单ID +set @parentId = @@identity; + +-- 菜单对应按钮SQL +INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) + SELECT @parentId, '查看', null, 'novel:author:detail', '2', null, '6'; +INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) + SELECT @parentId, '新增', null, 'novel:author:add', '2', null, '6'; +INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) + SELECT @parentId, '修改', null, 'novel:author:edit', '2', null, '6'; +INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) + SELECT @parentId, '删除', null, 'novel:author:remove', '2', null, '6'; +INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) + SELECT @parentId, '批量删除', null, 'novel:author:batchRemove', '2', null, '6'; diff --git a/novel-admin/src/main/resources/static/sql/novel/authorCode/menu.js b/novel-admin/src/main/resources/static/sql/novel/authorCode/menu.js new file mode 100644 index 0000000..8c6c25d --- /dev/null +++ b/novel-admin/src/main/resources/static/sql/novel/authorCode/menu.js @@ -0,0 +1,18 @@ +-- 菜单SQL +INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) + VALUES ('1', '作家邀请码表', 'novel/authorCode', 'novel:authorCode:authorCode', '1', 'fa', '6'); + +-- 按钮父菜单ID +set @parentId = @@identity; + +-- 菜单对应按钮SQL +INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) + SELECT @parentId, '查看', null, 'novel:authorCode:detail', '2', null, '6'; +INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) + SELECT @parentId, '新增', null, 'novel:authorCode:add', '2', null, '6'; +INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) + SELECT @parentId, '修改', null, 'novel:authorCode:edit', '2', null, '6'; +INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) + SELECT @parentId, '删除', null, 'novel:authorCode:remove', '2', null, '6'; +INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) + SELECT @parentId, '批量删除', null, 'novel:authorCode:batchRemove', '2', null, '6'; diff --git a/novel-admin/src/main/resources/templates/novel/author/add.html b/novel-admin/src/main/resources/templates/novel/author/add.html new file mode 100644 index 0000000..c648af6 --- /dev/null +++ b/novel-admin/src/main/resources/templates/novel/author/add.html @@ -0,0 +1,114 @@ + + + + + +
+
+
+
+
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ +
+ + + +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+
+ +
+
+
+
+
+
+
+
+
+ + + + diff --git a/novel-admin/src/main/resources/templates/novel/author/author.html b/novel-admin/src/main/resources/templates/novel/author/author.html new file mode 100644 index 0000000..a88a205 --- /dev/null +++ b/novel-admin/src/main/resources/templates/novel/author/author.html @@ -0,0 +1,57 @@ + + + + + +
+
+
+
+
+
+
+
+ +
+ +
+
+ +
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ + + \ No newline at end of file diff --git a/novel-admin/src/main/resources/templates/novel/author/detail.html b/novel-admin/src/main/resources/templates/novel/author/detail.html new file mode 100644 index 0000000..fc178d2 --- /dev/null +++ b/novel-admin/src/main/resources/templates/novel/author/detail.html @@ -0,0 +1,111 @@ + + + + + +
+
+
+
+
+
+ +
+ + +
+
+ + + +
+
+ + +
+
+ + + +
+
+ + +
+
+ + + +
+
+ + +
+
+ + + +
+
+ + +
+
+ + + +
+
+ + +
+
+ + + +
+
+ + +
+
+ + + +
+
+ + +
+
+ + +
+
+ + +
+
+ + + +
+
+
+
+
+
+
+
+ + diff --git a/novel-admin/src/main/resources/templates/novel/author/edit.html b/novel-admin/src/main/resources/templates/novel/author/edit.html new file mode 100644 index 0000000..904e36f --- /dev/null +++ b/novel-admin/src/main/resources/templates/novel/author/edit.html @@ -0,0 +1,116 @@ + + + + + +
+
+
+
+
+
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+
+ + + + diff --git a/novel-admin/src/main/resources/templates/novel/authorCode/add.html b/novel-admin/src/main/resources/templates/novel/authorCode/add.html new file mode 100644 index 0000000..c81ea69 --- /dev/null +++ b/novel-admin/src/main/resources/templates/novel/authorCode/add.html @@ -0,0 +1,48 @@ + + + + + +
+
+
+
+
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+
+ +
+
+
+
+
+
+
+
+
+ + + + diff --git a/novel-admin/src/main/resources/templates/novel/authorCode/authorCode.html b/novel-admin/src/main/resources/templates/novel/authorCode/authorCode.html new file mode 100644 index 0000000..539bed0 --- /dev/null +++ b/novel-admin/src/main/resources/templates/novel/authorCode/authorCode.html @@ -0,0 +1,66 @@ + + + + + +
+
+
+
+
+
+ + +
+
+ +
+ +
+
+ +
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ + + \ No newline at end of file diff --git a/novel-admin/src/main/resources/templates/novel/authorCode/detail.html b/novel-admin/src/main/resources/templates/novel/authorCode/detail.html new file mode 100644 index 0000000..77999ed --- /dev/null +++ b/novel-admin/src/main/resources/templates/novel/authorCode/detail.html @@ -0,0 +1,70 @@ + + + + + +
+
+
+
+
+
+ +
+ + +
+
+ + + +
+
+ + +
+
+ + +
+
+ + +
+
+ + + +
+
+ + +
+
+ + +
+
+ + +
+
+ + + +
+
+
+
+
+
+
+
+ + diff --git a/novel-admin/src/main/resources/templates/novel/authorCode/edit.html b/novel-admin/src/main/resources/templates/novel/authorCode/edit.html new file mode 100644 index 0000000..3f648c4 --- /dev/null +++ b/novel-admin/src/main/resources/templates/novel/authorCode/edit.html @@ -0,0 +1,79 @@ + + + + + +
+
+
+
+
+
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+
+ + + + diff --git a/novel-common/src/main/java/com/java2nb/novel/core/enums/ResponseStatus.java b/novel-common/src/main/java/com/java2nb/novel/core/enums/ResponseStatus.java index b6beb0b..93de737 100644 --- a/novel-common/src/main/java/com/java2nb/novel/core/enums/ResponseStatus.java +++ b/novel-common/src/main/java/com/java2nb/novel/core/enums/ResponseStatus.java @@ -49,6 +49,15 @@ public enum ResponseStatus { * */ HAS_COMMENTS(3001, "已评价过该书籍!"), + /** + * 作者相关错误 + * */ + INVITE_CODE_INVALID(4001, "邀请码无效!"), + AUTHOR_STATUS_FORBIDDEN(4002, "作者状态异常,暂不能管理小说!") + , BOOKNAME_EXISTS(4003,"已发布过同名小说!") + + , + /** * 其他通用错误 diff --git a/novel-common/src/main/java/com/java2nb/novel/entity/Author.java b/novel-common/src/main/java/com/java2nb/novel/entity/Author.java new file mode 100644 index 0000000..fb4c6ff --- /dev/null +++ b/novel-common/src/main/java/com/java2nb/novel/entity/Author.java @@ -0,0 +1,136 @@ +package com.java2nb.novel.entity; + +import java.util.Date; +import javax.annotation.Generated; + +public class Author { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long userId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String inviteCode; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String penName; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String telPhone; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String chatAccount; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String email; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte workDirection; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte status; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getUserId() { + return userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUserId(Long userId) { + this.userId = userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getInviteCode() { + return inviteCode; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setInviteCode(String inviteCode) { + this.inviteCode = inviteCode == null ? null : inviteCode.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getPenName() { + return penName; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setPenName(String penName) { + this.penName = penName == null ? null : penName.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getTelPhone() { + return telPhone; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setTelPhone(String telPhone) { + this.telPhone = telPhone == null ? null : telPhone.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getChatAccount() { + return chatAccount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setChatAccount(String chatAccount) { + this.chatAccount = chatAccount == null ? null : chatAccount.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getEmail() { + return email; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setEmail(String email) { + this.email = email == null ? null : email.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getWorkDirection() { + return workDirection; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setWorkDirection(Byte workDirection) { + this.workDirection = workDirection; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getStatus() { + return status; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setStatus(Byte status) { + this.status = status; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} \ No newline at end of file diff --git a/novel-common/src/main/java/com/java2nb/novel/entity/AuthorCode.java b/novel-common/src/main/java/com/java2nb/novel/entity/AuthorCode.java new file mode 100644 index 0000000..661c5e9 --- /dev/null +++ b/novel-common/src/main/java/com/java2nb/novel/entity/AuthorCode.java @@ -0,0 +1,84 @@ +package com.java2nb.novel.entity; + +import java.util.Date; +import javax.annotation.Generated; + +public class AuthorCode { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String inviteCode; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date validityTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte isUse; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getInviteCode() { + return inviteCode; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setInviteCode(String inviteCode) { + this.inviteCode = inviteCode == null ? null : inviteCode.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getValidityTime() { + return validityTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setValidityTime(Date validityTime) { + this.validityTime = validityTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getIsUse() { + return isUse; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setIsUse(Byte isUse) { + this.isUse = isUse; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getCreateUserId() { + return createUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateUserId(Long createUserId) { + this.createUserId = createUserId; + } +} \ No newline at end of file diff --git a/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorCodeDynamicSqlSupport.java b/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorCodeDynamicSqlSupport.java new file mode 100644 index 0000000..63b0777 --- /dev/null +++ b/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorCodeDynamicSqlSupport.java @@ -0,0 +1,49 @@ +package com.java2nb.novel.mapper; + +import java.sql.JDBCType; +import java.util.Date; +import javax.annotation.Generated; +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +public final class AuthorCodeDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final AuthorCode authorCode = new AuthorCode(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = authorCode.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn inviteCode = authorCode.inviteCode; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn validityTime = authorCode.validityTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn isUse = authorCode.isUse; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = authorCode.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createUserId = authorCode.createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class AuthorCode extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn inviteCode = column("invite_code", JDBCType.VARCHAR); + + public final SqlColumn validityTime = column("validity_time", JDBCType.TIMESTAMP); + + public final SqlColumn isUse = column("is_use", JDBCType.TINYINT); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public final SqlColumn createUserId = column("create_user_id", JDBCType.BIGINT); + + public AuthorCode() { + super("author_code"); + } + } +} \ No newline at end of file diff --git a/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorCodeMapper.java b/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorCodeMapper.java new file mode 100644 index 0000000..9c12621 --- /dev/null +++ b/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorCodeMapper.java @@ -0,0 +1,200 @@ +package com.java2nb.novel.mapper; + +import static com.java2nb.novel.mapper.AuthorCodeDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.*; + +import com.java2nb.novel.entity.AuthorCode; +import java.util.Collection; +import java.util.List; +import java.util.Optional; +import javax.annotation.Generated; +import org.apache.ibatis.annotations.DeleteProvider; +import org.apache.ibatis.annotations.InsertProvider; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Result; +import org.apache.ibatis.annotations.ResultMap; +import org.apache.ibatis.annotations.Results; +import org.apache.ibatis.annotations.SelectProvider; +import org.apache.ibatis.annotations.UpdateProvider; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.BasicColumn; +import org.mybatis.dynamic.sql.delete.DeleteDSLCompleter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.insert.render.MultiRowInsertStatementProvider; +import org.mybatis.dynamic.sql.select.CountDSLCompleter; +import org.mybatis.dynamic.sql.select.SelectDSLCompleter; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.UpdateDSLCompleter; +import org.mybatis.dynamic.sql.update.UpdateModel; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; +import org.mybatis.dynamic.sql.util.mybatis3.MyBatis3Utils; + +@Mapper +public interface AuthorCodeMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + BasicColumn[] selectList = BasicColumn.columnList(id, inviteCode, validityTime, isUse, createTime, createUserId); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insertMultiple") + int insertMultiple(MultiRowInsertStatementProvider multipleInsertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("AuthorCodeResult") + Optional selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="AuthorCodeResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="invite_code", property="inviteCode", jdbcType=JdbcType.VARCHAR), + @Result(column="validity_time", property="validityTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="is_use", property="isUse", jdbcType=JdbcType.TINYINT), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="create_user_id", property="createUserId", jdbcType=JdbcType.BIGINT) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default long count(CountDSLCompleter completer) { + return MyBatis3Utils.countFrom(this::count, authorCode, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int delete(DeleteDSLCompleter completer) { + return MyBatis3Utils.deleteFrom(this::delete, authorCode, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return delete(c -> + c.where(id, isEqualTo(id_)) + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(AuthorCode record) { + return MyBatis3Utils.insert(this::insert, record, authorCode, c -> + c.map(id).toProperty("id") + .map(inviteCode).toProperty("inviteCode") + .map(validityTime).toProperty("validityTime") + .map(isUse).toProperty("isUse") + .map(createTime).toProperty("createTime") + .map(createUserId).toProperty("createUserId") + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertMultiple(Collection records) { + return MyBatis3Utils.insertMultiple(this::insertMultiple, records, authorCode, c -> + c.map(id).toProperty("id") + .map(inviteCode).toProperty("inviteCode") + .map(validityTime).toProperty("validityTime") + .map(isUse).toProperty("isUse") + .map(createTime).toProperty("createTime") + .map(createUserId).toProperty("createUserId") + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(AuthorCode record) { + return MyBatis3Utils.insert(this::insert, record, authorCode, c -> + c.map(id).toPropertyWhenPresent("id", record::getId) + .map(inviteCode).toPropertyWhenPresent("inviteCode", record::getInviteCode) + .map(validityTime).toPropertyWhenPresent("validityTime", record::getValidityTime) + .map(isUse).toPropertyWhenPresent("isUse", record::getIsUse) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .map(createUserId).toPropertyWhenPresent("createUserId", record::getCreateUserId) + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default Optional selectOne(SelectDSLCompleter completer) { + return MyBatis3Utils.selectOne(this::selectOne, selectList, authorCode, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default List select(SelectDSLCompleter completer) { + return MyBatis3Utils.selectList(this::selectMany, selectList, authorCode, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default List selectDistinct(SelectDSLCompleter completer) { + return MyBatis3Utils.selectDistinct(this::selectMany, selectList, authorCode, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default Optional selectByPrimaryKey(Long id_) { + return selectOne(c -> + c.where(id, isEqualTo(id_)) + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int update(UpdateDSLCompleter completer) { + return MyBatis3Utils.update(this::update, authorCode, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + static UpdateDSL updateAllColumns(AuthorCode record, UpdateDSL dsl) { + return dsl.set(id).equalTo(record::getId) + .set(inviteCode).equalTo(record::getInviteCode) + .set(validityTime).equalTo(record::getValidityTime) + .set(isUse).equalTo(record::getIsUse) + .set(createTime).equalTo(record::getCreateTime) + .set(createUserId).equalTo(record::getCreateUserId); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + static UpdateDSL updateSelectiveColumns(AuthorCode record, UpdateDSL dsl) { + return dsl.set(id).equalToWhenPresent(record::getId) + .set(inviteCode).equalToWhenPresent(record::getInviteCode) + .set(validityTime).equalToWhenPresent(record::getValidityTime) + .set(isUse).equalToWhenPresent(record::getIsUse) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(createUserId).equalToWhenPresent(record::getCreateUserId); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(AuthorCode record) { + return update(c -> + c.set(inviteCode).equalTo(record::getInviteCode) + .set(validityTime).equalTo(record::getValidityTime) + .set(isUse).equalTo(record::getIsUse) + .set(createTime).equalTo(record::getCreateTime) + .set(createUserId).equalTo(record::getCreateUserId) + .where(id, isEqualTo(record::getId)) + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(AuthorCode record) { + return update(c -> + c.set(inviteCode).equalToWhenPresent(record::getInviteCode) + .set(validityTime).equalToWhenPresent(record::getValidityTime) + .set(isUse).equalToWhenPresent(record::getIsUse) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(createUserId).equalToWhenPresent(record::getCreateUserId) + .where(id, isEqualTo(record::getId)) + ); + } +} \ No newline at end of file diff --git a/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorDynamicSqlSupport.java b/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorDynamicSqlSupport.java new file mode 100644 index 0000000..55de8f9 --- /dev/null +++ b/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorDynamicSqlSupport.java @@ -0,0 +1,69 @@ +package com.java2nb.novel.mapper; + +import java.sql.JDBCType; +import java.util.Date; +import javax.annotation.Generated; +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +public final class AuthorDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final Author author = new Author(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = author.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn userId = author.userId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn inviteCode = author.inviteCode; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn penName = author.penName; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn telPhone = author.telPhone; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn chatAccount = author.chatAccount; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn email = author.email; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn workDirection = author.workDirection; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn status = author.status; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = author.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class Author extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn userId = column("user_id", JDBCType.BIGINT); + + public final SqlColumn inviteCode = column("invite_code", JDBCType.VARCHAR); + + public final SqlColumn penName = column("pen_name", JDBCType.VARCHAR); + + public final SqlColumn telPhone = column("tel_phone", JDBCType.VARCHAR); + + public final SqlColumn chatAccount = column("chat_account", JDBCType.VARCHAR); + + public final SqlColumn email = column("email", JDBCType.VARCHAR); + + public final SqlColumn workDirection = column("work_direction", JDBCType.TINYINT); + + public final SqlColumn status = column("status", JDBCType.TINYINT); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public Author() { + super("author"); + } + } +} \ No newline at end of file diff --git a/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorMapper.java b/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorMapper.java new file mode 100644 index 0000000..91719a8 --- /dev/null +++ b/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorMapper.java @@ -0,0 +1,232 @@ +package com.java2nb.novel.mapper; + +import static com.java2nb.novel.mapper.AuthorDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.*; + +import com.java2nb.novel.entity.Author; +import java.util.Collection; +import java.util.List; +import java.util.Optional; +import javax.annotation.Generated; +import org.apache.ibatis.annotations.DeleteProvider; +import org.apache.ibatis.annotations.InsertProvider; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Result; +import org.apache.ibatis.annotations.ResultMap; +import org.apache.ibatis.annotations.Results; +import org.apache.ibatis.annotations.SelectProvider; +import org.apache.ibatis.annotations.UpdateProvider; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.BasicColumn; +import org.mybatis.dynamic.sql.delete.DeleteDSLCompleter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.insert.render.MultiRowInsertStatementProvider; +import org.mybatis.dynamic.sql.select.CountDSLCompleter; +import org.mybatis.dynamic.sql.select.SelectDSLCompleter; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.UpdateDSLCompleter; +import org.mybatis.dynamic.sql.update.UpdateModel; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; +import org.mybatis.dynamic.sql.util.mybatis3.MyBatis3Utils; + +@Mapper +public interface AuthorMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + BasicColumn[] selectList = BasicColumn.columnList(id, userId, inviteCode, penName, telPhone, chatAccount, email, workDirection, status, createTime); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insertMultiple") + int insertMultiple(MultiRowInsertStatementProvider multipleInsertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("AuthorResult") + Optional selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="AuthorResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="user_id", property="userId", jdbcType=JdbcType.BIGINT), + @Result(column="invite_code", property="inviteCode", jdbcType=JdbcType.VARCHAR), + @Result(column="pen_name", property="penName", jdbcType=JdbcType.VARCHAR), + @Result(column="tel_phone", property="telPhone", jdbcType=JdbcType.VARCHAR), + @Result(column="chat_account", property="chatAccount", jdbcType=JdbcType.VARCHAR), + @Result(column="email", property="email", jdbcType=JdbcType.VARCHAR), + @Result(column="work_direction", property="workDirection", jdbcType=JdbcType.TINYINT), + @Result(column="status", property="status", jdbcType=JdbcType.TINYINT), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default long count(CountDSLCompleter completer) { + return MyBatis3Utils.countFrom(this::count, author, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int delete(DeleteDSLCompleter completer) { + return MyBatis3Utils.deleteFrom(this::delete, author, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return delete(c -> + c.where(id, isEqualTo(id_)) + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(Author record) { + return MyBatis3Utils.insert(this::insert, record, author, c -> + c.map(id).toProperty("id") + .map(userId).toProperty("userId") + .map(inviteCode).toProperty("inviteCode") + .map(penName).toProperty("penName") + .map(telPhone).toProperty("telPhone") + .map(chatAccount).toProperty("chatAccount") + .map(email).toProperty("email") + .map(workDirection).toProperty("workDirection") + .map(status).toProperty("status") + .map(createTime).toProperty("createTime") + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertMultiple(Collection records) { + return MyBatis3Utils.insertMultiple(this::insertMultiple, records, author, c -> + c.map(id).toProperty("id") + .map(userId).toProperty("userId") + .map(inviteCode).toProperty("inviteCode") + .map(penName).toProperty("penName") + .map(telPhone).toProperty("telPhone") + .map(chatAccount).toProperty("chatAccount") + .map(email).toProperty("email") + .map(workDirection).toProperty("workDirection") + .map(status).toProperty("status") + .map(createTime).toProperty("createTime") + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(Author record) { + return MyBatis3Utils.insert(this::insert, record, author, c -> + c.map(id).toPropertyWhenPresent("id", record::getId) + .map(userId).toPropertyWhenPresent("userId", record::getUserId) + .map(inviteCode).toPropertyWhenPresent("inviteCode", record::getInviteCode) + .map(penName).toPropertyWhenPresent("penName", record::getPenName) + .map(telPhone).toPropertyWhenPresent("telPhone", record::getTelPhone) + .map(chatAccount).toPropertyWhenPresent("chatAccount", record::getChatAccount) + .map(email).toPropertyWhenPresent("email", record::getEmail) + .map(workDirection).toPropertyWhenPresent("workDirection", record::getWorkDirection) + .map(status).toPropertyWhenPresent("status", record::getStatus) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default Optional selectOne(SelectDSLCompleter completer) { + return MyBatis3Utils.selectOne(this::selectOne, selectList, author, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default List select(SelectDSLCompleter completer) { + return MyBatis3Utils.selectList(this::selectMany, selectList, author, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default List selectDistinct(SelectDSLCompleter completer) { + return MyBatis3Utils.selectDistinct(this::selectMany, selectList, author, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default Optional selectByPrimaryKey(Long id_) { + return selectOne(c -> + c.where(id, isEqualTo(id_)) + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int update(UpdateDSLCompleter completer) { + return MyBatis3Utils.update(this::update, author, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + static UpdateDSL updateAllColumns(Author record, UpdateDSL dsl) { + return dsl.set(id).equalTo(record::getId) + .set(userId).equalTo(record::getUserId) + .set(inviteCode).equalTo(record::getInviteCode) + .set(penName).equalTo(record::getPenName) + .set(telPhone).equalTo(record::getTelPhone) + .set(chatAccount).equalTo(record::getChatAccount) + .set(email).equalTo(record::getEmail) + .set(workDirection).equalTo(record::getWorkDirection) + .set(status).equalTo(record::getStatus) + .set(createTime).equalTo(record::getCreateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + static UpdateDSL updateSelectiveColumns(Author record, UpdateDSL dsl) { + return dsl.set(id).equalToWhenPresent(record::getId) + .set(userId).equalToWhenPresent(record::getUserId) + .set(inviteCode).equalToWhenPresent(record::getInviteCode) + .set(penName).equalToWhenPresent(record::getPenName) + .set(telPhone).equalToWhenPresent(record::getTelPhone) + .set(chatAccount).equalToWhenPresent(record::getChatAccount) + .set(email).equalToWhenPresent(record::getEmail) + .set(workDirection).equalToWhenPresent(record::getWorkDirection) + .set(status).equalToWhenPresent(record::getStatus) + .set(createTime).equalToWhenPresent(record::getCreateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(Author record) { + return update(c -> + c.set(userId).equalTo(record::getUserId) + .set(inviteCode).equalTo(record::getInviteCode) + .set(penName).equalTo(record::getPenName) + .set(telPhone).equalTo(record::getTelPhone) + .set(chatAccount).equalTo(record::getChatAccount) + .set(email).equalTo(record::getEmail) + .set(workDirection).equalTo(record::getWorkDirection) + .set(status).equalTo(record::getStatus) + .set(createTime).equalTo(record::getCreateTime) + .where(id, isEqualTo(record::getId)) + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(Author record) { + return update(c -> + c.set(userId).equalToWhenPresent(record::getUserId) + .set(inviteCode).equalToWhenPresent(record::getInviteCode) + .set(penName).equalToWhenPresent(record::getPenName) + .set(telPhone).equalToWhenPresent(record::getTelPhone) + .set(chatAccount).equalToWhenPresent(record::getChatAccount) + .set(email).equalToWhenPresent(record::getEmail) + .set(workDirection).equalToWhenPresent(record::getWorkDirection) + .set(status).equalToWhenPresent(record::getStatus) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .where(id, isEqualTo(record::getId)) + ); + } +} \ No newline at end of file diff --git a/novel-common/src/main/resources/application-common-dev.yml b/novel-common/src/main/resources/application-common-dev.yml index a2636a1..a95f8d4 100644 --- a/novel-common/src/main/resources/application-common-dev.yml +++ b/novel-common/src/main/resources/application-common-dev.yml @@ -4,7 +4,7 @@ spring: datasource: url: jdbc:mysql://127.0.0.1:3306/novel_plus?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai username: root - password: test123456 + password: driver-class-name: com.mysql.cj.jdbc.Driver diff --git a/novel-common/src/main/resources/mybatis/generatorConfig.xml b/novel-common/src/main/resources/mybatis/generatorConfig.xml index b4015c0..8ca3d63 100644 --- a/novel-common/src/main/resources/mybatis/generatorConfig.xml +++ b/novel-common/src/main/resources/mybatis/generatorConfig.xml @@ -9,7 +9,7 @@ - +
diff --git a/novel-front/src/main/java/com/java2nb/novel/controller/AuthorController.java b/novel-front/src/main/java/com/java2nb/novel/controller/AuthorController.java new file mode 100644 index 0000000..97028e8 --- /dev/null +++ b/novel-front/src/main/java/com/java2nb/novel/controller/AuthorController.java @@ -0,0 +1,121 @@ +package com.java2nb.novel.controller; + +import com.github.pagehelper.PageInfo; +import com.java2nb.novel.core.bean.ResultBean; +import com.java2nb.novel.core.enums.ResponseStatus; +import com.java2nb.novel.core.utils.BeanUtil; +import com.java2nb.novel.entity.Author; +import com.java2nb.novel.entity.Book; +import com.java2nb.novel.service.AuthorService; +import com.java2nb.novel.service.BookService; +import com.java2nb.novel.service.FriendLinkService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * @author 11797 + */ +@RequestMapping("author") +@RestController +@Slf4j +@RequiredArgsConstructor +public class AuthorController extends BaseController{ + + private final AuthorService authorService; + + private final BookService bookService; + + /** + * 校验笔名是否存在 + * */ + @PostMapping("checkPenName") + public ResultBean checkPenName(String penName){ + + return ResultBean.ok(authorService.checkPenName(penName)); + } + + /** + * 作家发布小说分页列表查询 + * */ + @PostMapping("listBookByPage") + public ResultBean listBookByPage(@RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "10") int pageSize ,HttpServletRequest request){ + + return ResultBean.ok(new PageInfo<>(bookService.listBookPageByUserId(getUserDetails(request).getId(),page,pageSize) + )); + } + + /** + * 发布小说 + * */ + @PostMapping("addBook") + public ResultBean addBook(Book book,HttpServletRequest request){ + + //查询作家信息 + Author author = authorService.queryAuthor(getUserDetails(request).getId()); + + //判断作者状态是否正常 + if(author.getStatus()==1){ + //封禁状态,不能发布小说 + return ResultBean.fail(ResponseStatus.AUTHOR_STATUS_FORBIDDEN); + + } + + //发布小说 + bookService.addBook(book,author.getId(),author.getPenName()); + + return ResultBean.ok(); + } + + /** + * 更新小说状态,上架或下架 + * */ + @PostMapping("updateBookStatus") + public ResultBean updateBookStatus(Long bookId,Byte status,HttpServletRequest request){ + //查询作家信息 + Author author = authorService.queryAuthor(getUserDetails(request).getId()); + + //判断作者状态是否正常 + if(author.getStatus()==1){ + //封禁状态,不能发布小说 + return ResultBean.fail(ResponseStatus.AUTHOR_STATUS_FORBIDDEN); + } + + //更新小说状态,上架或下架 + bookService.updateBookStatus(bookId,status,author.getId()); + + return ResultBean.ok(); + } + + + + /** + * 发布章节内容 + * */ + @PostMapping("addBookContent") + public ResultBean addBookContent(Long bookId,String indexName,String content,HttpServletRequest request){ + //查询作家信息 + Author author = authorService.queryAuthor(getUserDetails(request).getId()); + + //判断作者状态是否正常 + if(author.getStatus()==1){ + //封禁状态,不能发布小说 + return ResultBean.fail(ResponseStatus.AUTHOR_STATUS_FORBIDDEN); + } + + //发布章节内容 + bookService.addBookContent(bookId,indexName,content,author.getId()); + + return ResultBean.ok(); + } + + + + +} diff --git a/novel-front/src/main/java/com/java2nb/novel/controller/PageController.java b/novel-front/src/main/java/com/java2nb/novel/controller/PageController.java index 3a5e293..1d19bf3 100644 --- a/novel-front/src/main/java/com/java2nb/novel/controller/PageController.java +++ b/novel-front/src/main/java/com/java2nb/novel/controller/PageController.java @@ -1,19 +1,23 @@ package com.java2nb.novel.controller; +import com.java2nb.novel.core.bean.ResultBean; +import com.java2nb.novel.core.bean.UserDetails; import com.java2nb.novel.core.utils.ThreadLocalUtil; -import com.java2nb.novel.entity.Book; -import com.java2nb.novel.entity.BookContent; -import com.java2nb.novel.entity.BookIndex; -import com.java2nb.novel.entity.News; +import com.java2nb.novel.entity.*; +import com.java2nb.novel.service.AuthorService; import com.java2nb.novel.service.BookService; import com.java2nb.novel.service.NewsService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; +import javax.servlet.http.HttpServletRequest; +import java.net.URLEncoder; import java.util.List; /** @@ -22,12 +26,14 @@ import java.util.List; @Slf4j @RequiredArgsConstructor @Controller -public class PageController{ +public class PageController extends BaseController{ private final BookService bookService; private final NewsService newsService; + private final AuthorService authorService; + @RequestMapping("{url}.html") public String module(@PathVariable("url") String url) { @@ -35,7 +41,22 @@ public class PageController{ } @RequestMapping("{module}/{url}.html") - public String module2(@PathVariable("module") String module, @PathVariable("url") String url) { + public String module2(@PathVariable("module") String module, @PathVariable("url") String url,HttpServletRequest request) { + + if(request.getRequestURI().startsWith("/author")) { + //访问作者专区 + UserDetails user = getUserDetails(request); + if (user == null) { + //未登录 + return "redirect:/user/login.html?originUrl=" + URLEncoder.encode(request.getRequestURL().toString()); + } + + boolean isAuthor = authorService.isAuthor(user.getId()); + if (!isAuthor) { + return "redirect:/author/register.html" ; + } + } + return module + "/" + url; } @@ -141,4 +162,30 @@ public class PageController{ return "about/news_info"; } + + /** + * 作者注册页面 + * */ + @RequestMapping("author/register.html") + public String authorRegister(Author author, HttpServletRequest request, Model model){ + UserDetails user = getUserDetails(request); + if(user == null){ + //未登录 + return "redirect:/user/login.html?originUrl=/author/register.html"; + } + + if(StringUtils.isNotBlank(author.getInviteCode())) { + //提交作者注册信息 + String errorInfo = authorService.register(user.getId(), author); + if(StringUtils.isBlank(errorInfo)){ + //注册成功 + return "redirect:/author/index.html"; + } + model.addAttribute("LabErr",errorInfo); + model.addAttribute("author",author); + } + return "author/register"; + } + + } diff --git a/novel-front/src/main/java/com/java2nb/novel/service/AuthorService.java b/novel-front/src/main/java/com/java2nb/novel/service/AuthorService.java new file mode 100644 index 0000000..5f96320 --- /dev/null +++ b/novel-front/src/main/java/com/java2nb/novel/service/AuthorService.java @@ -0,0 +1,42 @@ +package com.java2nb.novel.service; + + +import com.java2nb.novel.entity.Author; +import com.java2nb.novel.entity.FriendLink; + +import java.util.List; + +/** + * @author 11797 + */ +public interface AuthorService { + + /** + * 校验笔名是否存在 + * @param penName 校验的笔名 + * @return true:存在该笔名,false: 不存在该笔名 + * */ + Boolean checkPenName(String penName); + + /** + * 作家注册 + * @param userId 注册用户ID + *@param author 注册信息 + * @return 返回错误信息 + * */ + String register(Long userId, Author author); + + /** + * 判断是否是作家 + * @param userId 用户ID + * @return true:是作家,false: 不是作家 + * */ + Boolean isAuthor(Long userId); + + /** + * 查询作家信息 + * @param userId 用户ID + * @return 作家对象 + * */ + Author queryAuthor(Long userId); +} diff --git a/novel-front/src/main/java/com/java2nb/novel/service/BookService.java b/novel-front/src/main/java/com/java2nb/novel/service/BookService.java index c476628..fea0f2b 100644 --- a/novel-front/src/main/java/com/java2nb/novel/service/BookService.java +++ b/novel-front/src/main/java/com/java2nb/novel/service/BookService.java @@ -191,4 +191,37 @@ public interface BookService { * @param bookId 小说ID */ void updateBookPicToLocal(String picUrl, Long bookId); + + /** + * 通过作者ID查询小说分页列表 + * @param userId 用户ID + * @param page 页码 + * @param pageSize 分页大小 + * */ + List listBookPageByUserId(Long userId, int page, int pageSize); + + /** + * 发布小说 + * @param book 小说信息 + * @param authorId 作家ID + * @param penName 作家笔名 + * */ + void addBook(Book book, Long authorId, String penName); + + /** + * 更新小说状态,上架或下架 + * @param bookId 小说ID + * @param status 更新的状态 + * @param authorId 作者ID + * */ + void updateBookStatus(Long bookId, Byte status, Long authorId); + + /** + * 发布章节内容 + * @param bookId 小说ID + * @param indexName 章节名 + * @param content 章节内容 + * @param authorId 作者ID + * */ + void addBookContent(Long bookId, String indexName, String content, Long authorId); } diff --git a/novel-front/src/main/java/com/java2nb/novel/service/impl/AuthorServiceImpl.java b/novel-front/src/main/java/com/java2nb/novel/service/impl/AuthorServiceImpl.java new file mode 100644 index 0000000..287f3fe --- /dev/null +++ b/novel-front/src/main/java/com/java2nb/novel/service/impl/AuthorServiceImpl.java @@ -0,0 +1,92 @@ +package com.java2nb.novel.service.impl; + +import com.java2nb.novel.core.cache.CacheKey; +import com.java2nb.novel.core.cache.CacheService; +import com.java2nb.novel.core.enums.ResponseStatus; +import com.java2nb.novel.core.exception.BusinessException; +import com.java2nb.novel.entity.Author; +import com.java2nb.novel.entity.FriendLink; +import com.java2nb.novel.mapper.*; +import com.java2nb.novel.service.AuthorService; +import com.java2nb.novel.service.FriendLinkService; +import lombok.RequiredArgsConstructor; +import org.mybatis.dynamic.sql.render.RenderingStrategies; +import org.mybatis.dynamic.sql.select.CountDSLCompleter; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; + +import static com.java2nb.novel.mapper.AuthorCodeDynamicSqlSupport.authorCode; +import static com.java2nb.novel.mapper.BookDynamicSqlSupport.book; +import static com.java2nb.novel.mapper.BookDynamicSqlSupport.id; +import static com.java2nb.novel.mapper.BookDynamicSqlSupport.updateTime; +import static com.java2nb.novel.mapper.FriendLinkDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.*; +import static org.mybatis.dynamic.sql.select.SelectDSL.select; + +/** + * @author 11797 + */ +@Service +@RequiredArgsConstructor +public class AuthorServiceImpl implements AuthorService { + + private final AuthorMapper authorMapper; + + private final AuthorCodeMapper authorCodeMapper; + + + @Override + public Boolean checkPenName(String penName) { + return authorMapper.count(c -> + c.where(AuthorDynamicSqlSupport.penName, isEqualTo(penName))) > 0; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public String register(Long userId, Author author) { + Date currentDate = new Date(); + //判断邀请码是否有效 + if (authorCodeMapper.count(c -> + c.where(AuthorCodeDynamicSqlSupport.inviteCode, isEqualTo(author.getInviteCode())) + .and(AuthorCodeDynamicSqlSupport.isUse, isEqualTo((byte) 0)) + .and(AuthorCodeDynamicSqlSupport.validityTime, isGreaterThan(currentDate))) > 0) { + //邀请码有效 + //保存作家信息 + author.setUserId(userId); + author.setCreateTime(currentDate); + authorMapper.insertSelective(author); + //设置邀请码状态为已使用 + authorCodeMapper.update(update(authorCode) + .set(AuthorCodeDynamicSqlSupport.isUse) + .equalTo((byte) 1) + .where(AuthorCodeDynamicSqlSupport.inviteCode,isEqualTo(author.getInviteCode())) + .build() + .render(RenderingStrategies.MYBATIS3)); + return ""; + } else { + //邀请码无效 + return "邀请码无效!"; + } + + } + + @Override + public Boolean isAuthor(Long userId) { + return authorMapper.count(c -> + c.where(AuthorDynamicSqlSupport.userId, isEqualTo(userId))) > 0; + } + + @Override + public Author queryAuthor(Long userId) { + return authorMapper.selectMany( + select(AuthorDynamicSqlSupport.id,AuthorDynamicSqlSupport.penName,AuthorDynamicSqlSupport.status) + .from(AuthorDynamicSqlSupport.author) + .where(AuthorDynamicSqlSupport.userId,isEqualTo(userId)) + .build() + .render(RenderingStrategies.MYBATIS3)).get(0); + } +} diff --git a/novel-front/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java b/novel-front/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java index 58072ad..eeaa8ff 100644 --- a/novel-front/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java +++ b/novel-front/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java @@ -14,6 +14,7 @@ import com.java2nb.novel.entity.*; import com.java2nb.novel.entity.Book; import com.java2nb.novel.mapper.*; import com.java2nb.novel.search.BookSP; +import com.java2nb.novel.service.AuthorService; import com.java2nb.novel.service.BookService; import com.java2nb.novel.vo.BookCommentVO; import com.java2nb.novel.vo.BookSettingVO; @@ -73,6 +74,8 @@ public class BookServiceImpl implements BookService { private final CacheService cacheService; + private final AuthorService authorService; + @SneakyThrows @Override @@ -194,7 +197,7 @@ public class BookServiceImpl implements BookService { @Override public Book queryBookDetail(Long bookId) { - SelectStatementProvider selectStatement = select(id, catName, catId, picUrl, bookName, authorId, authorName, bookDesc, bookStatus, visitCount, wordCount, lastIndexId, lastIndexName, lastIndexUpdateTime,score) + SelectStatementProvider selectStatement = select(id, catName, catId, picUrl, bookName, authorId, authorName, bookDesc, bookStatus, visitCount, wordCount, lastIndexId, lastIndexName, lastIndexUpdateTime,score,status) .from(book) .where(id, isEqualTo(bookId)) .build() @@ -211,7 +214,7 @@ public class BookServiceImpl implements BookService { PageHelper.startPage(1,limit); } - SelectStatementProvider selectStatement = select(BookIndexDynamicSqlSupport.id, BookIndexDynamicSqlSupport.bookId, BookIndexDynamicSqlSupport.indexNum, BookIndexDynamicSqlSupport.indexName, BookIndexDynamicSqlSupport.updateTime) + SelectStatementProvider selectStatement = select(BookIndexDynamicSqlSupport.id, BookIndexDynamicSqlSupport.bookId, BookIndexDynamicSqlSupport.indexNum, BookIndexDynamicSqlSupport.indexName, BookIndexDynamicSqlSupport.updateTime,BookIndexDynamicSqlSupport.isVip) .from(bookIndex) .where(BookIndexDynamicSqlSupport.bookId, isEqualTo(bookId)) .build() @@ -222,7 +225,7 @@ public class BookServiceImpl implements BookService { @Override public BookIndex queryBookIndex(Long bookIndexId) { - SelectStatementProvider selectStatement = select(BookIndexDynamicSqlSupport.id, BookIndexDynamicSqlSupport.bookId, BookIndexDynamicSqlSupport.indexNum, BookIndexDynamicSqlSupport.indexName, BookIndexDynamicSqlSupport.wordCount, BookIndexDynamicSqlSupport.updateTime) + SelectStatementProvider selectStatement = select(BookIndexDynamicSqlSupport.id, BookIndexDynamicSqlSupport.bookId, BookIndexDynamicSqlSupport.indexNum, BookIndexDynamicSqlSupport.indexName, BookIndexDynamicSqlSupport.wordCount, BookIndexDynamicSqlSupport.updateTime,BookIndexDynamicSqlSupport.isVip) .from(bookIndex) .where(BookIndexDynamicSqlSupport.id, isEqualTo(bookIndexId)) .build() @@ -302,6 +305,7 @@ public class BookServiceImpl implements BookService { } SelectStatementProvider selectStatement = select(id, catId, catName, bookName, lastIndexId, lastIndexName, authorId, authorName, picUrl, bookDesc, wordCount, lastIndexUpdateTime) .from(book) + .where(wordCount,isGreaterThan(0)) .orderBy(sortSpecification) .limit(limit) .build() @@ -454,5 +458,103 @@ public class BookServiceImpl implements BookService { } + @Override + public List listBookPageByUserId(Long userId, int page, int pageSize) { + + PageHelper.startPage(page,pageSize); + + SelectStatementProvider selectStatement = select(id, bookName, visitCount, lastIndexName, status) + .from(book) + .where(authorId, isEqualTo(authorService.queryAuthor(userId).getId())) + .orderBy(BookDynamicSqlSupport.createTime.descending()) + .build() + .render(RenderingStrategies.MYBATIS3); + return bookMapper.selectMany(selectStatement); + + } + + @Override + public void addBook(Book book, Long authorId, String penName) { + //判断小说名是否存在 + if(queryIdByNameAndAuthor(book.getBookName(),penName)!=null){ + //该作者发布过此书名的小说 + throw new BusinessException(ResponseStatus.BOOKNAME_EXISTS); + }; + book.setAuthorName(penName); + book.setAuthorId(authorId); + book.setVisitCount(0L); + book.setWordCount(0); + book.setScore(6.5f); + book.setLastIndexName(""); + book.setCreateTime(new Date()); + book.setUpdateTime(book.getCreateTime()); + bookMapper.insertSelective(book); + + } + + @Override + public void updateBookStatus(Long bookId, Byte status, Long authorId) { + bookMapper.update(update(book) + .set(BookDynamicSqlSupport.status) + .equalTo(status) + .where(id,isEqualTo(bookId)) + .and(BookDynamicSqlSupport.authorId,isEqualTo(authorId)) + .build() + .render(RenderingStrategies.MYBATIS3)); + } + + @Transactional + @Override + public void addBookContent(Long bookId, String indexName, String content, Long authorId) { + + Book book = queryBookDetail(bookId); + if(!authorId.equals(book.getAuthorId())){ + //并不是更新自己的小说 + return; + } + Long lastIndexId = new IdWorker().nextId(); + Date currentDate = new Date(); + int wordCount = content.length(); + + //更新小说主表信息 + bookMapper.update(update(BookDynamicSqlSupport.book) + .set(BookDynamicSqlSupport.lastIndexId) + .equalTo(lastIndexId) + .set(BookDynamicSqlSupport.lastIndexName) + .equalTo(indexName) + .set(BookDynamicSqlSupport.lastIndexUpdateTime) + .equalTo(currentDate) + .set(BookDynamicSqlSupport.wordCount) + .equalTo(book.getWordCount()+wordCount) + .where(id,isEqualTo(bookId)) + .and(BookDynamicSqlSupport.authorId,isEqualTo(authorId)) + .build() + .render(RenderingStrategies.MYBATIS3)); + //更新小说目录表 + int indexNum = 0; + if(book.getLastIndexId() != null){ + indexNum = queryBookIndex(book.getLastIndexId()).getIndexNum()+1; + } + BookIndex lastBookIndex = new BookIndex(); + lastBookIndex.setId(lastIndexId); + lastBookIndex.setWordCount(wordCount); + lastBookIndex.setIndexName(indexName); + lastBookIndex.setIndexNum(indexNum); + lastBookIndex.setBookId(bookId); + lastBookIndex.setIsVip(book.getStatus()); + lastBookIndex.setCreateTime(currentDate); + lastBookIndex.setUpdateTime(currentDate); + bookIndexMapper.insertSelective(lastBookIndex); + + //更新小说内容表 + BookContent bookContent = new BookContent(); + bookContent.setIndexId(lastIndexId); + bookContent.setContent(content); + bookContentMapper.insertSelective(bookContent); + + + + } + } diff --git a/novel-front/src/main/resources/mybatis/mapping/BookMapper.xml b/novel-front/src/main/resources/mybatis/mapping/BookMapper.xml index 22799f2..98b0687 100644 --- a/novel-front/src/main/resources/mybatis/mapping/BookMapper.xml +++ b/novel-front/src/main/resources/mybatis/mapping/BookMapper.xml @@ -4,34 +4,33 @@ @@ -59,7 +58,7 @@ limit #{offset},#{limit} - select id,book_name,author_name,pic_url,book_desc,score from book ORDER BY score,RAND() LIMIT #{limit}; diff --git a/novel-front/src/main/resources/static/css/easyui.css b/novel-front/src/main/resources/static/css/easyui.css new file mode 100644 index 0000000..d54b52a --- /dev/null +++ b/novel-front/src/main/resources/static/css/easyui.css @@ -0,0 +1,3243 @@ +.panel { + overflow: hidden; + text-align: left; + margin: 0; + border: 0; + -moz-border-radius: 0 0 0 0; + -webkit-border-radius: 0 0 0 0; + border-radius: 0 0 0 0; +} +.panel-header, +.panel-body { + border-width: 1px; + border-style: solid; +} +.panel-header { + padding: 5px; + position: relative; +} +.panel-title { + background: url('images/blank.gif') no-repeat; +} +.panel-header-noborder { + border-width: 0 0 1px 0; +} +.panel-body { + overflow: auto; + border-top-width: 0; + padding: 0; +} +.panel-body-noheader { + border-top-width: 1px; +} +.panel-body-noborder { + border-width: 0px; +} +.panel-body-nobottom { + border-bottom-width: 0; +} +.panel-with-icon { + padding-left: 18px; +} +.panel-icon, +.panel-tool { + position: absolute; + top: 50%; + margin-top: -8px; + height: 16px; + overflow: hidden; +} +.panel-icon { + left: 5px; + width: 16px; +} +.panel-tool { + right: 5px; + width: auto; +} +.panel-tool a { + display: inline-block; + width: 16px; + height: 16px; + opacity: 0.6; + filter: alpha(opacity=60); + margin: 0 0 0 2px; + vertical-align: top; +} +.panel-tool a:hover { + opacity: 1; + filter: alpha(opacity=100); + background-color: #e6e6e6; + -moz-border-radius: 3px 3px 3px 3px; + -webkit-border-radius: 3px 3px 3px 3px; + border-radius: 3px 3px 3px 3px; +} +.panel-loading { + padding: 11px 0px 10px 30px; +} +.panel-noscroll { + overflow: hidden; +} +.panel-fit, +.panel-fit body { + height: 100%; + margin: 0; + padding: 0; + border: 0; + overflow: hidden; background: #f9f9f9 +} +.panel-loading { + background: url('images/loading.gif') no-repeat 10px 10px; +} +.panel-tool-close { + background: url('images/panel_tools.png') no-repeat -16px 0px; +} +.panel-tool-min { + background: url('images/panel_tools.png') no-repeat 0px 0px; +} +.panel-tool-max { + background: url('images/panel_tools.png') no-repeat 0px -16px; +} +.panel-tool-restore { + background: url('images/panel_tools.png') no-repeat -16px -16px; +} +.panel-tool-collapse { + background: url('images/panel_tools.png') no-repeat -32px 0; +} +.panel-tool-expand { + background: url('images/panel_tools.png') no-repeat -32px -16px; +} +.panel-header, +.panel-body { + border-color: #D4D4D4; +} +.panel-header { + background-color: #F2F2F2; + background: -webkit-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: -moz-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: -o-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: linear-gradient(to bottom,#ffffff 0,#F2F2F2 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0); +} +.panel-body { + background-color: #ffffff; + color: #333; + font-size: 12px; +} +.panel-title { + font-size: 12px; + font-weight: bold; + color: #777; + height: 16px; + line-height: 16px; +} +.panel-footer { + border: 1px solid #D4D4D4; + overflow: hidden; + background: #F5F5F5; +} +.panel-footer-noborder { + border-width: 1px 0 0 0; +} +.panel-hleft, +.panel-hright { + position: relative; +} +.panel-hleft>.panel-body, +.panel-hright>.panel-body { + position: absolute; +} +.panel-hleft>.panel-header { + float: left; +} +.panel-hright>.panel-header { + float: right; +} +.panel-hleft>.panel-body { + border-top-width: 1px; + border-left-width: 0; +} +.panel-hright>.panel-body { + border-top-width: 1px; + border-right-width: 0; +} +.panel-hleft>.panel-body-nobottom { + border-bottom-width: 1px; + border-right-width: 0; +} +.panel-hright>.panel-body-nobottom { + border-bottom-width: 1px; + border-left-width: 0; +} +.panel-hleft>.panel-footer { + position: absolute; + right: 0; +} +.panel-hright>.panel-footer { + position: absolute; + left: 0; +} +.panel-hleft>.panel-header-noborder { + border-width: 0 1px 0 0; +} +.panel-hright>.panel-header-noborder { + border-width: 0 0 0 1px; +} +.panel-hleft>.panel-body-noborder { + border-width: 0; +} +.panel-hright>.panel-body-noborder { + border-width: 0; +} +.panel-hleft>.panel-body-noheader { + border-left-width: 1px; +} +.panel-hright>.panel-body-noheader { + border-right-width: 1px; +} +.panel-hleft>.panel-footer-noborder { + border-width: 0 0 0 1px; +} +.panel-hright>.panel-footer-noborder { + border-width: 0 1px 0 0; +} +.panel-hleft>.panel-header .panel-icon, +.panel-hright>.panel-header .panel-icon { + margin-top: 0; + top: 5px; +} +.panel-hleft>.panel-header .panel-title, +.panel-hright>.panel-header .panel-title { + position: absolute; + min-width: 16px; + left: 21px; + top: 5px; + bottom: auto; + white-space: nowrap; + word-wrap: normal; + -webkit-transform: rotate(90deg); + -webkit-transform-origin: 0 0; + -moz-transform: rotate(90deg); + -moz-transform-origin: 0 0; + -o-transform: rotate(90deg); + -o-transform-origin: 0 0; + transform: rotate(90deg); + transform-origin: 0 0; +} +.panel-hleft>.panel-header .panel-title-up, +.panel-hright>.panel-header .panel-title-up { + position: absolute; + min-width: 16px; + left: 21px; + top: auto; + bottom: 5px; + text-align: right; + white-space: nowrap; + word-wrap: normal; + -webkit-transform: rotate(-90deg); + -webkit-transform-origin: 0 0; + -moz-transform: rotate(-90deg); + -moz-transform-origin: 0 0; + -o-transform: rotate(-90deg); + -o-transform-origin: 0 0; + transform: rotate(-90deg); + transform-origin: 0 16px; +} +.panel-hleft>.panel-header .panel-with-icon.panel-title-up, +.panel-hright>.panel-header .panel-with-icon.panel-title-up { + padding-left: 0; + padding-right: 18px; +} +.panel-hleft>.panel-header .panel-tool, +.panel-hright>.panel-header .panel-tool { + top: auto; + bottom: 5px; + width: 16px; + height: auto; + left: 50%; + margin-left: -8px; + margin-top: 0; +} +.panel-hleft>.panel-header .panel-tool a, +.panel-hright>.panel-header .panel-tool a { + margin: 2px 0 0 0; +} +.accordion { + overflow: hidden; + border-width: 1px; + border-style: solid; +} +.accordion .accordion-header { + border-width: 0 0 1px; + cursor: pointer; +} +.accordion .accordion-body { + border-width: 0 0 1px; +} +.accordion-noborder { + border-width: 0; +} +.accordion-noborder .accordion-header { + border-width: 0 0 1px; +} +.accordion-noborder .accordion-body { + border-width: 0 0 1px; +} +.accordion-collapse { + background: url('images/accordion_arrows.png') no-repeat 0 0; +} +.accordion-expand { + background: url('images/accordion_arrows.png') no-repeat -16px 0; +} +.accordion { + background: #ffffff; + border-color: #D4D4D4; +} +.accordion .accordion-header { + background: #F2F2F2; + filter: none; +} +.accordion .accordion-header-selected { + background: #0081c2; +} +.accordion .accordion-header-selected .panel-title { + color: #fff; +} +.accordion .panel-last > .accordion-header { + border-bottom-color: #F2F2F2; +} +.accordion .panel-last > .accordion-body { + border-bottom-color: #ffffff; +} +.accordion .panel-last > .accordion-header-selected, +.accordion .panel-last > .accordion-header-border { + border-bottom-color: #D4D4D4; +} +.accordion> .panel-hleft { + float: left; +} +.accordion> .panel-hleft>.panel-header { + border-width: 0 1px 0 0; +} +.accordion> .panel-hleft> .panel-body { + border-width: 0 1px 0 0; +} +.accordion> .panel-hleft.panel-last > .accordion-header { + border-right-color: #F2F2F2; +} +.accordion> .panel-hleft.panel-last > .accordion-body { + border-right-color: #ffffff; +} +.accordion> .panel-hleft.panel-last > .accordion-header-selected, +.accordion> .panel-hleft.panel-last > .accordion-header-border { + border-right-color: #D4D4D4; +} +.accordion> .panel-hright { + float: right; +} +.accordion> .panel-hright>.panel-header { + border-width: 0 0 0 1px; +} +.accordion> .panel-hright> .panel-body { + border-width: 0 0 0 1px; +} +.accordion> .panel-hright.panel-last > .accordion-header { + border-left-color: #F2F2F2; +} +.accordion> .panel-hright.panel-last > .accordion-body { + border-left-color: #ffffff; +} +.accordion> .panel-hright.panel-last > .accordion-header-selected, +.accordion> .panel-hright.panel-last > .accordion-header-border { + border-left-color: #D4D4D4; +} +.window { + overflow: hidden; + padding: 5px; + border-width: 1px; + border-style: solid; +} +.window .window-header { + background: transparent; + padding: 0px 0px 6px 0px; +} +.window .window-body { + border-width: 1px; + border-style: solid; + border-top-width: 0px; +} +.window .window-body-noheader { + border-top-width: 1px; +} +.window .panel-body-nobottom { + border-bottom-width: 0; +} +.window .window-header .panel-icon, +.window .window-header .panel-tool { + top: 50%; + margin-top: -11px; +} +.window .window-header .panel-icon { + left: 1px; +} +.window .window-header .panel-tool { + right: 1px; +} +.window .window-header .panel-with-icon { + padding-left: 18px; +} +.window-proxy { + position: absolute; + overflow: hidden; +} +.window-proxy-mask { + position: absolute; + filter: alpha(opacity=5); + opacity: 0.05; +} +.window-mask { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + filter: alpha(opacity=40); + opacity: 0.40; + font-size: 1px; + overflow: hidden; +} +.window, +.window-shadow { + position: absolute; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.window-shadow { + background: #ccc; + -moz-box-shadow: 2px 2px 3px #cccccc; + -webkit-box-shadow: 2px 2px 3px #cccccc; + box-shadow: 2px 2px 3px #cccccc; + filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); +} +.window, +.window .window-body { + border-color: #D4D4D4; +} +.window { + background-color: #F2F2F2; + background: -webkit-linear-gradient(top,#ffffff 0,#F2F2F2 20%); + background: -moz-linear-gradient(top,#ffffff 0,#F2F2F2 20%); + background: -o-linear-gradient(top,#ffffff 0,#F2F2F2 20%); + background: linear-gradient(to bottom,#ffffff 0,#F2F2F2 20%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0); +} +.window-proxy { + border: 1px dashed #D4D4D4; +} +.window-proxy-mask, +.window-mask { + background: #ccc; +} +.window .panel-footer { + border: 1px solid #D4D4D4; + position: relative; + top: -1px; +} +.window-thinborder { + padding: 0; +} +.window-thinborder .window-header { + padding: 5px 5px 6px 5px; +} +.window-thinborder .window-body { + border-width: 0px; +} +.window-thinborder .window-header .panel-icon, +.window-thinborder .window-header .panel-tool { + margin-top: -9px; + margin-left: 5px; + margin-right: 5px; +} +.window-noborder { + border: 0; +} +.window.panel-hleft .window-header { + padding: 0 6px 0 0; +} +.window.panel-hright .window-header { + padding: 0 0 0 6px; +} +.window.panel-hleft>.panel-header .panel-title { + top: auto; + left: 16px; +} +.window.panel-hright>.panel-header .panel-title { + top: auto; + right: 16px; +} +.window.panel-hleft>.panel-header .panel-title-up, +.window.panel-hright>.panel-header .panel-title-up { + bottom: 0; +} +.window.panel-hleft .window-body { + border-width: 1px 1px 1px 0; +} +.window.panel-hright .window-body { + border-width: 1px 0 1px 1px; +} +.window.panel-hleft .window-header .panel-icon { + top: 1px; + margin-top: 0; + left: 0; +} +.window.panel-hright .window-header .panel-icon { + top: 1px; + margin-top: 0; + left: auto; + right: 1px; +} +.window.panel-hleft .window-header .panel-tool, +.window.panel-hright .window-header .panel-tool { + margin-top: 0; + top: auto; + bottom: 1px; + right: auto; + margin-right: 0; + left: 50%; + margin-left: -11px; +} +.window.panel-hright .window-header .panel-tool { + left: auto; + right: 1px; +} +.window-thinborder.panel-hleft .window-header { + padding: 5px 6px 5px 5px; +} +.window-thinborder.panel-hright .window-header { + padding: 5px 5px 5px 6px; +} +.window-thinborder.panel-hleft>.panel-header .panel-title { + left: 21px; +} +.window-thinborder.panel-hleft>.panel-header .panel-title-up, +.window-thinborder.panel-hright>.panel-header .panel-title-up { + bottom: 5px; +} +.window-thinborder.panel-hleft .window-header .panel-icon, +.window-thinborder.panel-hright .window-header .panel-icon { + margin-top: 5px; +} +.window-thinborder.panel-hleft .window-header .panel-tool, +.window-thinborder.panel-hright .window-header .panel-tool { + left: 16px; + bottom: 5px; +} +.dialog-content { + overflow: auto; +} +.dialog-toolbar { + position: relative; + padding: 2px 5px; +} +.dialog-tool-separator { + float: left; + height: 24px; + border-left: 1px solid #ccc; + border-right: 1px solid #fff; + margin: 2px 1px; +} +.dialog-button { + position: relative; + top: -1px; + padding: 5px; + text-align: right; +} +.dialog-button .l-btn { + margin-left: 5px; +} +.dialog-toolbar, +.dialog-button { + background: #F5F5F5; + border-width: 1px; + border-style: solid; +} +.dialog-toolbar { + border-color: #D4D4D4 #D4D4D4 #e6e6e6 #D4D4D4; +} +.dialog-button { + border-color: #e6e6e6 #D4D4D4 #D4D4D4 #D4D4D4; +} +.window-thinborder .dialog-toolbar { + border-left: transparent; + border-right: transparent; + border-top-color: #F5F5F5; +} +.window-thinborder .dialog-button { + top: 0px; + padding: 5px 8px 8px 8px; + border-left: transparent; + border-right: transparent; + border-bottom: transparent; +} +.l-btn { + text-decoration: none; + display: inline-block; + overflow: hidden; + margin: 0; + padding: 0; + cursor: pointer; + outline: none; + text-align: center; + vertical-align: middle; + line-height: normal; +} +.l-btn-plain { + border-width: 0; + padding: 1px; +} +.l-btn-left { + display: inline-block; + position: relative; + overflow: hidden; + margin: 0; + padding: 0; + vertical-align: top; +} +.l-btn-text { + display: inline-block; + vertical-align: top; + width: auto; + line-height: 24px; + font-size: 12px; + padding: 0; + margin: 0 4px; +} +.l-btn-icon { + display: inline-block; + width: 16px; + height: 16px; + line-height: 16px; + position: absolute; + top: 50%; + margin-top: -8px; + font-size: 1px; +} +.l-btn span span .l-btn-empty { + display: inline-block; + margin: 0; + width: 16px; + height: 24px; + font-size: 1px; + vertical-align: top; +} +.l-btn span .l-btn-icon-left { + padding: 0 0 0 20px; + background-position: left center; +} +.l-btn span .l-btn-icon-right { + padding: 0 20px 0 0; + background-position: right center; +} +.l-btn-icon-left .l-btn-text { + margin: 0 4px 0 24px; +} +.easyui-form td .l-btn-icon-left .l-btn-text { + margin: 0 4px; +} +.l-btn-icon-left .l-btn-icon { + left: 4px; +} +.l-btn-icon-right .l-btn-text { + margin: 0 24px 0 4px; +} +.l-btn-icon-right .l-btn-icon { + right: 4px; +} +.l-btn-icon-top .l-btn-text { + margin: 20px 4px 0 4px; +} +.l-btn-icon-top .l-btn-icon { + top: 4px; + left: 50%; + margin: 0 0 0 -8px; +} +.l-btn-icon-bottom .l-btn-text { + margin: 0 4px 20px 4px; +} +.l-btn-icon-bottom .l-btn-icon { + top: auto; + bottom: 4px; + left: 50%; + margin: 0 0 0 -8px; +} +.l-btn-left .l-btn-empty { + margin: 0 4px; + width: 16px; +} +.l-btn-plain:hover { + padding: 0; +} +.l-btn-focus { + outline: #0000FF dotted thin; +} +.l-btn-large .l-btn-text { + line-height: 40px; +} +.l-btn-large .l-btn-icon { + width: 32px; + height: 32px; + line-height: 32px; + margin-top: -16px; +} +.l-btn-large .l-btn-icon-left .l-btn-text { + margin-left: 40px; +} +.l-btn-large .l-btn-icon-right .l-btn-text { + margin-right: 40px; +} +.l-btn-large .l-btn-icon-top .l-btn-text { + margin-top: 36px; + line-height: 24px; + min-width: 32px; +} +.l-btn-large .l-btn-icon-top .l-btn-icon { + margin: 0 0 0 -16px; +} +.l-btn-large .l-btn-icon-bottom .l-btn-text { + margin-bottom: 36px; + line-height: 24px; + min-width: 32px; +} +.l-btn-large .l-btn-icon-bottom .l-btn-icon { + margin: 0 0 0 -16px; +} +.l-btn-large .l-btn-left .l-btn-empty { + margin: 0 4px; + width: 32px; +} +.l-btn { + color: #444; + background: #f5f5f5; + background-repeat: repeat-x; + border: 1px solid #bbb; + background: -webkit-linear-gradient(top,#ffffff 0,#e6e6e6 100%); + background: -moz-linear-gradient(top,#ffffff 0,#e6e6e6 100%); + background: -o-linear-gradient(top,#ffffff 0,#e6e6e6 100%); + background: linear-gradient(to bottom,#ffffff 0,#e6e6e6 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#e6e6e6,GradientType=0); + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.l-btn:hover { + background: #e6e6e6; + color: #00438a; + border: 1px solid #ddd; + filter: none; +} +.l-btn-plain { + background: transparent; + border-width: 0; + filter: none; +} +.l-btn-outline { + border-width: 1px; + border-color: #ddd; + padding: 0; +} +.l-btn-plain:hover { + background: #e6e6e6; + color: #00438a; + border: 1px solid #ddd; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.l-btn-disabled, +.l-btn-disabled:hover { + opacity: 0.5; + cursor: default; + background: #f5f5f5; + color: #444; + background: -webkit-linear-gradient(top,#ffffff 0,#e6e6e6 100%); + background: -moz-linear-gradient(top,#ffffff 0,#e6e6e6 100%); + background: -o-linear-gradient(top,#ffffff 0,#e6e6e6 100%); + background: linear-gradient(to bottom,#ffffff 0,#e6e6e6 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#e6e6e6,GradientType=0); +} +.l-btn-disabled .l-btn-text, +.l-btn-disabled .l-btn-icon { + filter: alpha(opacity=50); +} +.l-btn-plain-disabled, +.l-btn-plain-disabled:hover { + background: transparent; + filter: alpha(opacity=50); +} +.l-btn-selected, +.l-btn-selected:hover { + background: #ddd; + filter: none; +} +.l-btn-plain-selected, +.l-btn-plain-selected:hover { + background: #ddd; +} +.textbox { + position: relative; + border: 1px solid #D4D4D4; + background-color: #fff; + vertical-align: middle; + display: inline-block; + overflow: hidden; + white-space: nowrap; + margin: 0; + padding: 0; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.textbox .textbox-text { + font-size: 12px; + border: 0; + margin: 0; + padding: 4px; + white-space: normal; + vertical-align: top; + outline-style: none; + resize: none; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.textbox .textbox-text::-ms-clear, +.textbox .textbox-text::-ms-reveal { + display: none; +} +.textbox textarea.textbox-text { + white-space: pre-wrap; +} +.textbox .textbox-prompt { + font-size: 12px; + color: #aaa; +} +.textbox .textbox-bgicon { + background-position: 3px center; + padding-left: 21px; +} +.textbox .textbox-button, +.textbox .textbox-button:hover { + position: absolute; + top: 0; + padding: 0; + vertical-align: top; + -moz-border-radius: 0 0 0 0; + -webkit-border-radius: 0 0 0 0; + border-radius: 0 0 0 0; +} +.textbox .textbox-button-right, +.textbox .textbox-button-right:hover { + right: 0; + border-width: 0 0 0 1px; +} +.textbox .textbox-button-left, +.textbox .textbox-button-left:hover { + left: 0; + border-width: 0 1px 0 0; +} +.textbox .textbox-button-top, +.textbox .textbox-button-top:hover { + left: 0; + border-width: 0 0 1px 0; +} +.textbox .textbox-button-bottom, +.textbox .textbox-button-bottom:hover { + top: auto; + bottom: 0; + left: 0; + border-width: 1px 0 0 0; +} +.textbox-addon { + position: absolute; + top: 0; +} +.textbox-label { + display: inline-block; + width: 80px; + height: 22px; + line-height: 22px; + vertical-align: middle; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + margin: 0; + padding-right: 5px; +} +.textbox-label-after { + padding-left: 5px; + padding-right: 0; +} +.textbox-label-top { + display: block; + width: auto; + padding: 0; +} +.textbox-disabled, +.textbox-label-disabled { + opacity: 0.6; + filter: alpha(opacity=60); +} +.textbox-icon { + display: inline-block; + width: 18px; + height: 20px; + overflow: hidden; + vertical-align: top; + background-position: center center; + cursor: pointer; + opacity: 0.6; + filter: alpha(opacity=60); + text-decoration: none; + outline-style: none; +} +.textbox-icon-disabled, +.textbox-icon-readonly { + cursor: default; +} +.textbox-icon:hover { + opacity: 1.0; + filter: alpha(opacity=100); +} +.textbox-icon-disabled:hover { + opacity: 0.6; + filter: alpha(opacity=60); +} +.textbox-focused { + border-color: #bbbbbb; + -moz-box-shadow: 0 0 3px 0 #D4D4D4; + -webkit-box-shadow: 0 0 3px 0 #D4D4D4; + box-shadow: 0 0 3px 0 #D4D4D4; +} +.textbox-invalid { + border-color: #ffa8a8; + background-color: #fff3f3; +} +.passwordbox-open { + background: url('images/passwordbox_open.png') no-repeat center center; +} +.passwordbox-close { + background: url('images/passwordbox_close.png') no-repeat center center; +} +.filebox .textbox-value { + vertical-align: top; + position: absolute; + top: 0; + left: -5000px; +} +.filebox-label { + display: inline-block; + position: absolute; + width: 100%; + height: 100%; + cursor: pointer; + left: 0; + top: 0; + z-index: 10; + background: url('images/blank.gif') no-repeat; +} +.l-btn-disabled .filebox-label { + cursor: default; +} +.combo-arrow { + width: 18px; + height: 20px; + overflow: hidden; + display: inline-block; + vertical-align: top; + cursor: pointer; + opacity: 0.6; + filter: alpha(opacity=60); +} +.combo-arrow-hover { + opacity: 1.0; + filter: alpha(opacity=100); +} +.combo-panel { + overflow: auto; +} +.combo-arrow { + background: url('images/combo_arrow.png') no-repeat center center; +} +.combo-panel { + background-color: #ffffff; +} +.combo-arrow { + background-color: #F2F2F2; +} +.combo-arrow-hover { + background-color: #e6e6e6; +} +.combo-arrow:hover { + background-color: #e6e6e6; +} +.combo .textbox-icon-disabled:hover { + cursor: default; +} +.combobox-item, +.combobox-group, +.combobox-stick { + font-size: 12px; + padding: 3px; +} +.combobox-item-disabled { + opacity: 0.5; + filter: alpha(opacity=50); +} +.combobox-gitem { + padding-left: 10px; +} +.combobox-group, +.combobox-stick { + font-weight: bold; +} +.combobox-stick { + position: absolute; + top: 1px; + left: 1px; + right: 1px; + background: inherit; +} +.combobox-item-hover { + background-color: #e6e6e6; + color: #00438a; +} +.combobox-item-selected { + background-color: #0081c2; + color: #fff; +} +.combobox-icon { + display: inline-block; + width: 16px; + height: 16px; + vertical-align: middle; + margin-right: 2px; +} +.tagbox { + cursor: text; +} +.tagbox .textbox-text { + float: left; +} +.tagbox-label { + position: relative; + display: block; + margin: 4px 0 0 4px; + padding: 0 20px 0 4px; + float: left; + vertical-align: top; + text-decoration: none; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + background: #e6e6e6; + color: #00438a; +} +.tagbox-remove { + background: url('images/tagbox_icons.png') no-repeat -16px center; + position: absolute; + display: block; + width: 16px; + height: 16px; + right: 2px; + top: 50%; + margin-top: -8px; + opacity: 0.6; + filter: alpha(opacity=60); +} +.tagbox-remove:hover { + opacity: 1; + filter: alpha(opacity=100); +} +.textbox-disabled .tagbox-label { + cursor: default; +} +.textbox-disabled .tagbox-remove:hover { + cursor: default; + opacity: 0.6; + filter: alpha(opacity=60); +} +.layout { + position: relative; + overflow: hidden; + margin: 0; + padding: 0; + z-index: 0; +} +.layout-panel { + position: absolute; + overflow: hidden; +} +.layout-body { + min-width: 1px; + min-height: 1px; +} +.layout-panel-east, +.layout-panel-west { + z-index: 2; +} +.layout-panel-north, +.layout-panel-south { + z-index: 3; +} +.layout-expand { + position: absolute; + padding: 0px; + font-size: 1px; + cursor: pointer; + z-index: 1; +} +.layout-expand .panel-header, +.layout-expand .panel-body { + background: transparent; + filter: none; + overflow: hidden; +} +.layout-expand .panel-header { + border-bottom-width: 0px; +} +.layout-expand .panel-body { + position: relative; +} +.layout-expand .panel-body .panel-icon { + margin-top: 0; + top: 0; + left: 50%; + margin-left: -8px; +} +.layout-expand-west .panel-header .panel-icon, +.layout-expand-east .panel-header .panel-icon { + display: none; +} +.layout-expand-title { + position: absolute; + top: 0; + left: 21px; + white-space: nowrap; + word-wrap: normal; + -webkit-transform: rotate(90deg); + -webkit-transform-origin: 0 0; + -moz-transform: rotate(90deg); + -moz-transform-origin: 0 0; + -o-transform: rotate(90deg); + -o-transform-origin: 0 0; + transform: rotate(90deg); + transform-origin: 0 0; +} +.layout-expand-title-up { + position: absolute; + top: 0; + left: 0; + text-align: right; + padding-left: 5px; + white-space: nowrap; + word-wrap: normal; + -webkit-transform: rotate(-90deg); + -webkit-transform-origin: 0 0; + -moz-transform: rotate(-90deg); + -moz-transform-origin: 0 0; + -o-transform: rotate(-90deg); + -o-transform-origin: 0 0; + transform: rotate(-90deg); + transform-origin: 0 0; +} +.layout-expand-with-icon { + top: 18px; +} +.layout-expand .panel-body-noheader .layout-expand-title, +.layout-expand .panel-body-noheader .panel-icon { + top: 5px; +} +.layout-expand .panel-body-noheader .layout-expand-with-icon { + top: 23px; +} +.layout-split-proxy-h, +.layout-split-proxy-v { + position: absolute; + font-size: 1px; + display: none; + z-index: 5; +} +.layout-split-proxy-h { + width: 5px; + cursor: e-resize; +} +.layout-split-proxy-v { + height: 5px; + cursor: n-resize; +} +.layout-mask { + position: absolute; + background: #fafafa; + filter: alpha(opacity=10); + opacity: 0.10; + z-index: 4; +} +.layout-button-up { + background: url('images/layout_arrows.png') no-repeat -16px -16px; +} +.layout-button-down { + background: url('images/layout_arrows.png') no-repeat -16px 0; +} +.layout-button-left { + background: url('images/layout_arrows.png') no-repeat 0 0; +} +.layout-button-right { + background: url('images/layout_arrows.png') no-repeat 0 -16px; +} +.layout-split-proxy-h, +.layout-split-proxy-v { + background-color: #bbb; +} +.layout-split-north { + border-bottom: 5px solid #eee; +} +.layout-split-south { + border-top: 5px solid #eee; +} +.layout-split-east { + border-left: 5px solid #eee; +} +.layout-split-west { + border-right: 5px solid #eee; +} +.layout-expand { + background-color: #F2F2F2; +} +.layout-expand-over { + background-color: #F2F2F2; +} +.tabs-container { + overflow: hidden; +} +.tabs-header { + border-width: 1px; + border-style: solid; + border-bottom-width: 0; + position: relative; + padding: 0; + padding-top: 2px; + overflow: hidden; +} +.tabs-scroller-left, +.tabs-scroller-right { + position: absolute; + top: auto; + bottom: 0; + width: 18px; + font-size: 1px; + display: none; + cursor: pointer; + border-width: 1px; + border-style: solid; +} +.tabs-scroller-left { + left: 0; +} +.tabs-scroller-right { + right: 0; +} +.tabs-tool { + position: absolute; + bottom: 0; + padding: 1px; + overflow: hidden; + border-width: 1px; + border-style: solid; +} +.tabs-header-plain .tabs-tool { + padding: 0 1px; +} +.tabs-wrap { + position: relative; + left: 0; + overflow: hidden; + width: 100%; + margin: 0; + padding: 0; +} +.tabs-scrolling { + margin-left: 18px; + margin-right: 18px; +} +.tabs-disabled { + opacity: 0.3; + filter: alpha(opacity=30); +} +.tabs { + list-style-type: none; + height: 26px; + margin: 0px; + padding: 0px; + padding-left: 4px; + width: 50000px; + border-style: solid; + border-width: 0 0 1px 0; +} +.tabs li { + float: left; + display: inline-block; + margin: 0 4px -1px 0; + padding: 0; + position: relative; + border: 0; +} +.tabs li a.tabs-inner { + display: inline-block; + text-decoration: none; + margin: 0; + padding: 0 10px; + height: 25px; + line-height: 25px; + text-align: center; + white-space: nowrap; + border-width: 1px; + border-style: solid; + -moz-border-radius: 5px 5px 0 0; + -webkit-border-radius: 5px 5px 0 0; + border-radius: 5px 5px 0 0; +} +.tabs li.tabs-selected a.tabs-inner { + font-weight: bold; + outline: none; +} +.tabs li.tabs-selected a:hover.tabs-inner { + cursor: default; + pointer: default; +} +.tabs li a.tabs-close, +.tabs-p-tool { + position: absolute; + font-size: 1px; + display: block; + height: 12px; + padding: 0; + top: 50%; + margin-top: -6px; + overflow: hidden; +} +.tabs li a.tabs-close { + width: 12px; + right: 5px; + opacity: 0.6; + filter: alpha(opacity=60); +} +.tabs-p-tool { + right: 16px; +} +.tabs-p-tool a { + display: inline-block; + font-size: 1px; + width: 12px; + height: 12px; + margin: 0; + opacity: 0.6; + filter: alpha(opacity=60); +} +.tabs li a:hover.tabs-close, +.tabs-p-tool a:hover { + opacity: 1; + filter: alpha(opacity=100); + cursor: hand; + cursor: pointer; +} +.tabs-with-icon { + padding-left: 18px; +} +.tabs-icon { + position: absolute; + width: 16px; + height: 16px; + left: 10px; + top: 50%; + margin-top: -8px; +} +.tabs-title { + font-size: 12px; +} +.tabs-closable { + padding-right: 8px; +} +.tabs-panels { + margin: 0px; + padding: 0px; + border-width: 1px; + border-style: solid; + border-top-width: 0; + overflow: hidden; +} +.tabs-header-bottom { + border-width: 0 1px 1px 1px; + padding: 0 0 2px 0; +} +.tabs-header-bottom .tabs { + border-width: 1px 0 0 0; +} +.tabs-header-bottom .tabs li { + margin: -1px 4px 0 0; +} +.tabs-header-bottom .tabs li a.tabs-inner { + -moz-border-radius: 0 0 5px 5px; + -webkit-border-radius: 0 0 5px 5px; + border-radius: 0 0 5px 5px; +} +.tabs-header-bottom .tabs-tool { + top: 0; +} +.tabs-header-bottom .tabs-scroller-left, +.tabs-header-bottom .tabs-scroller-right { + top: 0; + bottom: auto; +} +.tabs-panels-top { + border-width: 1px 1px 0 1px; +} +.tabs-header-left { + float: left; + border-width: 1px 0 1px 1px; + padding: 0; +} +.tabs-header-right { + float: right; + border-width: 1px 1px 1px 0; + padding: 0; +} +.tabs-header-left .tabs-wrap, +.tabs-header-right .tabs-wrap { + height: 100%; +} +.tabs-header-left .tabs { + height: 100%; + padding: 4px 0 0 2px; + border-width: 0 1px 0 0; +} +.tabs-header-right .tabs { + height: 100%; + padding: 4px 2px 0 0; + border-width: 0 0 0 1px; +} +.tabs-header-left .tabs li, +.tabs-header-right .tabs li { + display: block; + width: 100%; + position: relative; +} +.tabs-header-left .tabs li { + left: auto; + right: 0; + margin: 0 -1px 4px 0; + float: right; +} +.tabs-header-right .tabs li { + left: 0; + right: auto; + margin: 0 0 4px -1px; + float: left; +} +.tabs-justified li a.tabs-inner { + padding-left: 0; + padding-right: 0; +} +.tabs-header-left .tabs li a.tabs-inner { + display: block; + text-align: left; + padding-left: 10px; + padding-right: 10px; + -moz-border-radius: 5px 0 0 5px; + -webkit-border-radius: 5px 0 0 5px; + border-radius: 5px 0 0 5px; +} +.tabs-header-right .tabs li a.tabs-inner { + display: block; + text-align: left; + padding-left: 10px; + padding-right: 10px; + -moz-border-radius: 0 5px 5px 0; + -webkit-border-radius: 0 5px 5px 0; + border-radius: 0 5px 5px 0; +} +.tabs-panels-right { + float: right; + border-width: 1px 1px 1px 0; +} +.tabs-panels-left { + float: left; + border-width: 1px 0 1px 1px; +} +.tabs-header-noborder, +.tabs-panels-noborder { + border: 0px; +} +.tabs-header-plain { + border: 0px; + background: transparent; +} +.tabs-pill { + padding-bottom: 3px; +} +.tabs-header-bottom .tabs-pill { + padding-top: 3px; + padding-bottom: 0; +} +.tabs-header-left .tabs-pill { + padding-right: 3px; +} +.tabs-header-right .tabs-pill { + padding-left: 3px; +} +.tabs-header .tabs-pill li a.tabs-inner { + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.tabs-header-narrow, +.tabs-header-narrow .tabs-narrow { + padding: 0; +} +.tabs-narrow li, +.tabs-header-bottom .tabs-narrow li { + margin-left: 0; + margin-right: -1px; +} +.tabs-narrow li.tabs-last, +.tabs-header-bottom .tabs-narrow li.tabs-last { + margin-right: 0; +} +.tabs-header-left .tabs-narrow, +.tabs-header-right .tabs-narrow { + padding-top: 0; +} +.tabs-header-left .tabs-narrow li { + margin-bottom: -1px; + margin-right: -1px; +} +.tabs-header-left .tabs-narrow li.tabs-last, +.tabs-header-right .tabs-narrow li.tabs-last { + margin-bottom: 0; +} +.tabs-header-right .tabs-narrow li { + margin-bottom: -1px; + margin-left: -1px; +} +.tabs-scroller-left { + background: #F2F2F2 url('images/tabs_icons.png') no-repeat 1px center; +} +.tabs-scroller-right { + background: #F2F2F2 url('images/tabs_icons.png') no-repeat -15px center; +} +.tabs li a.tabs-close { + background: url('images/tabs_icons.png') no-repeat -34px center; +} +.tabs li a.tabs-inner:hover { + background: #e6e6e6; + color: #00438a; + filter: none; +} +.tabs li.tabs-selected a.tabs-inner { + background-color: #ffffff; + color: #777; + background: -webkit-linear-gradient(top,#ffffff 0,#ffffff 100%); + background: -moz-linear-gradient(top,#ffffff 0,#ffffff 100%); + background: -o-linear-gradient(top,#ffffff 0,#ffffff 100%); + background: linear-gradient(to bottom,#ffffff 0,#ffffff 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=0); +} +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { + background: -webkit-linear-gradient(top,#ffffff 0,#ffffff 100%); + background: -moz-linear-gradient(top,#ffffff 0,#ffffff 100%); + background: -o-linear-gradient(top,#ffffff 0,#ffffff 100%); + background: linear-gradient(to bottom,#ffffff 0,#ffffff 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=0); +} +.tabs-header-left .tabs li.tabs-selected a.tabs-inner { + background: -webkit-linear-gradient(left,#ffffff 0,#ffffff 100%); + background: -moz-linear-gradient(left,#ffffff 0,#ffffff 100%); + background: -o-linear-gradient(left,#ffffff 0,#ffffff 100%); + background: linear-gradient(to right,#ffffff 0,#ffffff 100%); + background-repeat: repeat-y; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=1); +} +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + background: -webkit-linear-gradient(left,#ffffff 0,#ffffff 100%); + background: -moz-linear-gradient(left,#ffffff 0,#ffffff 100%); + background: -o-linear-gradient(left,#ffffff 0,#ffffff 100%); + background: linear-gradient(to right,#ffffff 0,#ffffff 100%); + background-repeat: repeat-y; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=1); +} +.tabs li a.tabs-inner { + color: #777; + background-color: #F2F2F2; + background: -webkit-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: -moz-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: -o-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: linear-gradient(to bottom,#ffffff 0,#F2F2F2 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0); +} +.tabs-header, +.tabs-tool { + background-color: #F2F2F2; +} +.tabs-header-plain { + background: transparent; +} +.tabs-header, +.tabs-scroller-left, +.tabs-scroller-right, +.tabs-tool, +.tabs, +.tabs-panels, +.tabs li a.tabs-inner, +.tabs li.tabs-selected a.tabs-inner, +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, +.tabs-header-left .tabs li.tabs-selected a.tabs-inner, +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + border-color: #D4D4D4; +} +.tabs-p-tool a:hover, +.tabs li a:hover.tabs-close, +.tabs-scroller-over { + background-color: #e6e6e6; +} +.tabs li.tabs-selected a.tabs-inner { + border-bottom: 1px solid #ffffff; +} +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { + border-top: 1px solid #ffffff; +} +.tabs-header-left .tabs li.tabs-selected a.tabs-inner { + border-right: 1px solid #ffffff; +} +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + border-left: 1px solid #ffffff; +} +.tabs-header .tabs-pill li.tabs-selected a.tabs-inner { + background: #0081c2; + color: #fff; + filter: none; + border-color: #D4D4D4; +} +.datagrid .panel-body { + overflow: hidden; + position: relative; +} +.datagrid-view { + position: relative; + overflow: hidden; +} +.datagrid-view1, +.datagrid-view2 { + position: absolute; + overflow: hidden; + top: 0; +} +.datagrid-view1 { + left: 0; +} +.datagrid-view2 { + right: 0; +} +.datagrid-mask { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + opacity: 0.3; + filter: alpha(opacity=30); + display: none; +} +.datagrid-mask-msg { + position: absolute; + top: 50%; + margin-top: -20px; + padding: 10px 5px 10px 30px; + width: auto; + height: 16px; + border-width: 2px; + border-style: solid; + display: none; +} +.datagrid-empty { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 25px; + line-height: 25px; + text-align: center; +} +.datagrid-sort-icon { + padding: 0; + display: none; +} +.datagrid-toolbar { + height: auto; + padding: 1px 2px; + border-width: 0 0 1px 0; + border-style: solid; +} +.datagrid-btn-separator { + float: left; + height: 24px; + border-left: 1px solid #ccc; + border-right: 1px solid #fff; + margin: 2px 1px; +} +.datagrid .datagrid-pager { + display: block; + margin: 0; + border-width: 1px 0 0 0; + border-style: solid; +} +.datagrid .datagrid-pager-top { + border-width: 0 0 1px 0; +} +.datagrid-header { + overflow: hidden; + cursor: default; + border-width: 0 0 1px 0; + border-style: solid; +} +.datagrid-header-inner { + float: left; + width: 10000px; +} +.datagrid-header-row, +.datagrid-row { + height: 25px; +} +.datagrid-header td, +.datagrid-body td, +.datagrid-footer td { + border-width: 0 1px 1px 0; + border-style: dotted; + margin: 0; + padding: 0; +} +.datagrid-cell, +.datagrid-cell-group, +.datagrid-header-rownumber, +.datagrid-cell-rownumber { + margin: 0; + padding: 0 4px; + white-space: nowrap; + word-wrap: normal; + overflow: hidden; + height: 18px; + line-height: 18px; + font-size: 12px; +} +.datagrid-header .datagrid-cell { + height: auto; +} +.datagrid-header .datagrid-cell span { + font-size: 12px; +} +.datagrid-cell-group { + text-align: center; + text-overflow: ellipsis; +} +.datagrid-header-rownumber, +.datagrid-cell-rownumber { + width: 30px; + text-align: center; + margin: 0; + padding: 0; +} +.datagrid-body { + margin: 0; + padding: 0; + overflow: auto; + zoom: 1; +} +.datagrid-view1 .datagrid-body-inner { + padding-bottom: 20px; +} +.datagrid-view1 .datagrid-body { + overflow: hidden; +} +.datagrid-footer { + overflow: hidden; +} +.datagrid-footer-inner { + border-width: 1px 0 0 0; + border-style: solid; + width: 10000px; + float: left; +} +.datagrid-row-editing .datagrid-cell { + height: auto; +} +.datagrid-header-check, +.datagrid-cell-check { + padding: 0; + width: 27px; + height: 18px; + font-size: 1px; + text-align: center; + overflow: hidden; +} +.datagrid-header-check input, +.datagrid-cell-check input { + margin: 0; + padding: 0; + width: 15px; + height: 18px; +} +.datagrid-resize-proxy { + position: absolute; + width: 1px; + height: 10000px; + top: 0; + cursor: e-resize; + display: none; +} +.datagrid-body .datagrid-editable { + margin: 0; + padding: 0; +} +.datagrid-body .datagrid-editable table { + width: 100%; + height: 100%; +} +.datagrid-body .datagrid-editable td { + border: 0; + margin: 0; + padding: 0; +} +.datagrid-view .datagrid-editable-input { + margin: 0; + padding: 2px 4px; + border: 1px solid #D4D4D4; + font-size: 12px; + outline-style: none; + -moz-border-radius: 0 0 0 0; + -webkit-border-radius: 0 0 0 0; + border-radius: 0 0 0 0; +} +.datagrid-view .validatebox-invalid { + border-color: #ffa8a8; +} +.datagrid-sort .datagrid-sort-icon { + display: inline; + padding: 0 13px 0 0; + background: url('images/datagrid_icons.png') no-repeat -64px center; +} +.datagrid-sort-desc .datagrid-sort-icon { + display: inline; + padding: 0 13px 0 0; + background: url('images/datagrid_icons.png') no-repeat -16px center; +} +.datagrid-sort-asc .datagrid-sort-icon { + display: inline; + padding: 0 13px 0 0; + background: url('images/datagrid_icons.png') no-repeat 0px center; +} +.datagrid-row-collapse { + background: url('images/datagrid_icons.png') no-repeat -48px center; +} +.datagrid-row-expand { + background: url('images/datagrid_icons.png') no-repeat -32px center; +} +.datagrid-mask-msg { + background: #ffffff url('images/loading.gif') no-repeat scroll 5px center; +} +.datagrid-header, +.datagrid-td-rownumber { + background-color: #F2F2F2; + background: -webkit-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: -moz-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: -o-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: linear-gradient(to bottom,#ffffff 0,#F2F2F2 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0); +} +.datagrid-cell-rownumber { + color: #333; +} +.datagrid-resize-proxy { + background: #bbb; +} +.datagrid-mask { + background: #ccc; +} +.datagrid-mask-msg { + border-color: #D4D4D4; +} +.datagrid-toolbar, +.datagrid-pager { + background: #F5F5F5; +} +.datagrid-header, +.datagrid-toolbar, +.datagrid-pager, +.datagrid-footer-inner { + border-color: #e6e6e6; +} +.datagrid-header td, +.datagrid-body td, +.datagrid-footer td { + border-color: #ccc; +} +.datagrid-htable, +.datagrid-btable, +.datagrid-ftable { + color: #333; + border-collapse: separate; +} +.datagrid-row-alt { + background: #F5F5F5; +} +.datagrid-row-over, +.datagrid-header td.datagrid-header-over { + background: #e6e6e6; + color: #00438a; + cursor: default; +} +.datagrid-row-selected { + background: #0081c2; + color: #fff; +} +.datagrid-row-editing .textbox, +.datagrid-row-editing .textbox-text { + -moz-border-radius: 0 0 0 0; + -webkit-border-radius: 0 0 0 0; + border-radius: 0 0 0 0; +} +.propertygrid .datagrid-view1 .datagrid-body td { + padding-bottom: 1px; + border-width: 0 1px 0 0; +} +.propertygrid .datagrid-group { + height: 21px; + overflow: hidden; + border-width: 0 0 1px 0; + border-style: solid; +} +.propertygrid .datagrid-group span { + font-weight: bold; +} +.propertygrid .datagrid-view1 .datagrid-body td { + border-color: #e6e6e6; +} +.propertygrid .datagrid-view1 .datagrid-group { + border-color: #F2F2F2; +} +.propertygrid .datagrid-view2 .datagrid-group { + border-color: #e6e6e6; +} +.propertygrid .datagrid-group, +.propertygrid .datagrid-view1 .datagrid-body, +.propertygrid .datagrid-view1 .datagrid-row-over, +.propertygrid .datagrid-view1 .datagrid-row-selected { + background: #F2F2F2; +} +.datalist .datagrid-header { + border-width: 0; +} +.datalist .datagrid-group, +.m-list .m-list-group { + height: 25px; + line-height: 25px; + font-weight: bold; + overflow: hidden; + background-color: #F2F2F2; + border-style: solid; + border-width: 0 0 1px 0; + border-color: #ccc; +} +.datalist .datagrid-group-expander { + display: none; +} +.datalist .datagrid-group-title { + padding: 0 4px; +} +.datalist .datagrid-btable { + width: 100%; + table-layout: fixed; +} +.datalist .datagrid-row td { + border-style: solid; + border-left-color: transparent; + border-right-color: transparent; + border-bottom-width: 0; +} +.datalist-lines .datagrid-row td { + border-bottom-width: 1px; +} +.datalist .datagrid-cell, +.m-list li { + width: auto; + height: auto; + padding: 2px 4px; + line-height: 18px; + position: relative; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} +.datalist-link, +.m-list li>a { + display: block; + position: relative; + cursor: pointer; + color: #333; + text-decoration: none; + overflow: hidden; + margin: -2px -4px; + padding: 2px 4px; + padding-right: 16px; + line-height: 18px; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} +.datalist-link::after, +.m-list li>a::after { + position: absolute; + display: block; + width: 8px; + height: 8px; + content: ''; + right: 6px; + top: 50%; + margin-top: -4px; + border-style: solid; + border-width: 1px 1px 0 0; + -ms-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -webkit-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); +} +.m-list { + margin: 0; + padding: 0; + list-style: none; +} +.m-list li { + border-style: solid; + border-width: 0 0 1px 0; + border-color: #ccc; +} +.m-list li>a:hover { + background: #e6e6e6; + color: #00438a; +} +.m-list .m-list-group { + padding: 0 4px; +} +.pagination { + zoom: 1; +} +.pagination table { + float: left; + height: 30px; +} +.pagination td { + border: 0; +} +.pagination-btn-separator { + float: left; + height: 24px; + border-left: 1px solid #ccc; + border-right: 1px solid #fff; + margin: 3px 1px; +} +.pagination .pagination-num { + border-width: 1px; + border-style: solid; + margin: 0 2px; + padding: 2px; + width: 2em; + height: auto; +} +.pagination-page-list { + margin: 0px 6px; + padding: 1px 2px; + width: auto; + height: auto; + border-width: 1px; + border-style: solid; +} +.pagination-info { + float: right; + margin: 0 6px; + padding: 0; + height: 30px; + line-height: 30px; + font-size: 12px; +} +.pagination span { + font-size: 12px; +} +.pagination-link .l-btn-text { + width: 24px; + text-align: center; + margin: 0; +} +.pagination-first { + background: url('images/pagination_icons.png') no-repeat 0 center; +} +.pagination-prev { + background: url('images/pagination_icons.png') no-repeat -16px center; +} +.pagination-next { + background: url('images/pagination_icons.png') no-repeat -32px center; +} +.pagination-last { + background: url('images/pagination_icons.png') no-repeat -48px center; +} +.pagination-load { + background: url('images/pagination_icons.png') no-repeat -64px center; +} +.pagination-loading { + background: url('images/loading.gif') no-repeat center center; +} +.pagination-page-list, +.pagination .pagination-num { + border-color: #D4D4D4; +} +.calendar { + border-width: 1px; + border-style: solid; + padding: 1px; + overflow: hidden; +} +.calendar table { + table-layout: fixed; + border-collapse: separate; + font-size: 12px; + width: 100%; + height: 100%; +} +.calendar table td, +.calendar table th { + font-size: 12px; +} +.calendar-noborder { + border: 0; +} +.calendar-header { + position: relative; + height: 22px; +} +.calendar-title { + text-align: center; + height: 22px; +} +.calendar-title span { + position: relative; + display: inline-block; + top: 2px; + padding: 0 3px; + height: 18px; + line-height: 18px; + font-size: 12px; + cursor: pointer; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-prevmonth, +.calendar-nextmonth, +.calendar-prevyear, +.calendar-nextyear { + position: absolute; + top: 50%; + margin-top: -7px; + width: 14px; + height: 14px; + cursor: pointer; + font-size: 1px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-prevmonth { + left: 20px; + background: url('images/calendar_arrows.png') no-repeat -18px -2px; +} +.calendar-nextmonth { + right: 20px; + background: url('images/calendar_arrows.png') no-repeat -34px -2px; +} +.calendar-prevyear { + left: 3px; + background: url('images/calendar_arrows.png') no-repeat -1px -2px; +} +.calendar-nextyear { + right: 3px; + background: url('images/calendar_arrows.png') no-repeat -49px -2px; +} +.calendar-body { + position: relative; +} +.calendar-body th, +.calendar-body td { + text-align: center; +} +.calendar-day { + border: 0; + padding: 1px; + cursor: pointer; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-other-month { + opacity: 0.3; + filter: alpha(opacity=30); +} +.calendar-disabled { + opacity: 0.6; + filter: alpha(opacity=60); + cursor: default; +} +.calendar-menu { + position: absolute; + top: 0; + left: 0; + width: 180px; + height: 150px; + padding: 5px; + font-size: 12px; + display: none; + overflow: hidden; +} +.calendar-menu-year-inner { + text-align: center; + padding-bottom: 5px; +} +.calendar-menu-year { + width: 50px; + text-align: center; + border-width: 1px; + border-style: solid; + outline-style: none; + resize: none; + margin: 0; + padding: 2px; + font-weight: bold; + font-size: 12px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-menu-prev, +.calendar-menu-next { + display: inline-block; + width: 21px; + height: 21px; + vertical-align: top; + cursor: pointer; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-menu-prev { + margin-right: 10px; + background: url('images/calendar_arrows.png') no-repeat 2px 2px; +} +.calendar-menu-next { + margin-left: 10px; + background: url('images/calendar_arrows.png') no-repeat -45px 2px; +} +.calendar-menu-month { + text-align: center; + cursor: pointer; + font-weight: bold; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-body th, +.calendar-menu-month { + color: #808080; +} +.calendar-day { + color: #333; +} +.calendar-sunday { + color: #CC2222; +} +.calendar-saturday { + color: #00ee00; +} +.calendar-today { + color: #0000ff; +} +.calendar-menu-year { + border-color: #D4D4D4; +} +.calendar { + border-color: #D4D4D4; +} +.calendar-header { + background: #F2F2F2; +} +.calendar-body, +.calendar-menu { + background: #ffffff; +} +.calendar-body th { + background: #F5F5F5; + padding: 2px 0; +} +.calendar-hover, +.calendar-nav-hover, +.calendar-menu-hover { + background-color: #e6e6e6; + color: #00438a; +} +.calendar-hover { + border: 1px solid #ddd; + padding: 0; +} +.calendar-selected { + background-color: #0081c2; + color: #fff; + border: 1px solid #0070a9; + padding: 0; +} +.datebox-calendar-inner { + height: 180px; +} +.datebox-button { + padding: 0 5px; + text-align: center; +} +.datebox-button a { + line-height: 22px; + font-size: 12px; + font-weight: bold; + text-decoration: none; + opacity: 0.6; + filter: alpha(opacity=60); +} +.datebox-button a:hover { + opacity: 1.0; + filter: alpha(opacity=100); +} +.datebox-current, +.datebox-close { + float: left; +} +.datebox-close { + float: right; +} +.datebox .combo-arrow { + background-image: url('images/datebox_arrow.png'); + background-position: center center; +} +.datebox-button { + background-color: #F5F5F5; +} +.datebox-button a { + color: #444; +} +.spinner-arrow { + background-color: #F2F2F2; + display: inline-block; + overflow: hidden; + vertical-align: top; + margin: 0; + padding: 0; + opacity: 1.0; + filter: alpha(opacity=100); + width: 18px; +} +.spinner-arrow-up, +.spinner-arrow-down { + opacity: 0.6; + filter: alpha(opacity=60); + display: block; + font-size: 1px; + width: 18px; + height: 10px; + width: 100%; + height: 50%; + color: #444; + outline-style: none; +} +.spinner-arrow-hover { + background-color: #e6e6e6; + opacity: 1.0; + filter: alpha(opacity=100); +} +.spinner-arrow-up:hover, +.spinner-arrow-down:hover { + opacity: 1.0; + filter: alpha(opacity=100); + background-color: #e6e6e6; +} +.textbox-icon-disabled .spinner-arrow-up:hover, +.textbox-icon-disabled .spinner-arrow-down:hover { + opacity: 0.6; + filter: alpha(opacity=60); + background-color: #F2F2F2; + cursor: default; +} +.spinner .textbox-icon-disabled { + opacity: 0.6; + filter: alpha(opacity=60); +} +.spinner-arrow-up { + background: url('images/spinner_arrows.png') no-repeat 1px center; +} +.spinner-arrow-down { + background: url('images/spinner_arrows.png') no-repeat -15px center; +} +.spinner-button-up { + background: url('images/spinner_arrows.png') no-repeat -32px center; +} +.spinner-button-down { + background: url('images/spinner_arrows.png') no-repeat -48px center; +} +.progressbar { + border-width: 1px; + border-style: solid; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + overflow: hidden; + position: relative; +} +.progressbar-text { + text-align: center; + position: absolute; +} +.progressbar-value { + position: relative; + overflow: hidden; + width: 0; + -moz-border-radius: 5px 0 0 5px; + -webkit-border-radius: 5px 0 0 5px; + border-radius: 5px 0 0 5px; +} +.progressbar { + border-color: #D4D4D4; +} +.progressbar-text { + color: #333; + font-size: 12px; +} +.progressbar-value .progressbar-text { + background-color: #0081c2; + color: #fff; +} +.searchbox-button { + width: 18px; + height: 20px; + overflow: hidden; + display: inline-block; + vertical-align: top; + cursor: pointer; + opacity: 0.6; + filter: alpha(opacity=60); +} +.searchbox-button-hover { + opacity: 1.0; + filter: alpha(opacity=100); +} +.searchbox .l-btn-plain { + border: 0; + padding: 0; + vertical-align: top; + opacity: 0.6; + filter: alpha(opacity=60); + -moz-border-radius: 0 0 0 0; + -webkit-border-radius: 0 0 0 0; + border-radius: 0 0 0 0; +} +.searchbox .l-btn-plain:hover { + border: 0; + padding: 0; + opacity: 1.0; + filter: alpha(opacity=100); + -moz-border-radius: 0 0 0 0; + -webkit-border-radius: 0 0 0 0; + border-radius: 0 0 0 0; +} +.searchbox a.m-btn-plain-active { + -moz-border-radius: 0 0 0 0; + -webkit-border-radius: 0 0 0 0; + border-radius: 0 0 0 0; +} +.searchbox .m-btn-active { + border-width: 0 1px 0 0; + -moz-border-radius: 0 0 0 0; + -webkit-border-radius: 0 0 0 0; + border-radius: 0 0 0 0; +} +.searchbox .textbox-button-right { + border-width: 0 0 0 1px; +} +.searchbox .textbox-button-left { + border-width: 0 1px 0 0; +} +.searchbox-button { + background: url('images/searchbox_button.png') no-repeat center center; +} +.searchbox .l-btn-plain { + background: #F2F2F2; +} +.searchbox .l-btn-plain-disabled, +.searchbox .l-btn-plain-disabled:hover { + opacity: 0.5; + filter: alpha(opacity=50); +} +.slider-disabled { + opacity: 0.5; + filter: alpha(opacity=50); +} +.slider-h { + height: 22px; +} +.slider-v { + width: 22px; +} +.slider-inner { + position: relative; + height: 6px; + top: 7px; + border-width: 1px; + border-style: solid; + border-radius: 5px; +} +.slider-handle { + position: absolute; + display: block; + outline: none; + width: 20px; + height: 20px; + top: 50%; + margin-top: -10px; + margin-left: -10px; +} +.slider-tip { + position: absolute; + display: inline-block; + line-height: 12px; + font-size: 12px; + white-space: nowrap; + top: -22px; +} +.slider-rule { + position: relative; + top: 15px; +} +.slider-rule span { + position: absolute; + display: inline-block; + font-size: 0; + height: 5px; + border-width: 0 0 0 1px; + border-style: solid; +} +.slider-rulelabel { + position: relative; + top: 20px; +} +.slider-rulelabel span { + position: absolute; + display: inline-block; + font-size: 12px; +} +.slider-v .slider-inner { + width: 6px; + left: 7px; + top: 0; + float: left; +} +.slider-v .slider-handle { + left: 50%; + margin-top: -10px; +} +.slider-v .slider-tip { + left: -10px; + margin-top: -6px; +} +.slider-v .slider-rule { + float: left; + top: 0; + left: 16px; +} +.slider-v .slider-rule span { + width: 5px; + height: 'auto'; + border-left: 0; + border-width: 1px 0 0 0; + border-style: solid; +} +.slider-v .slider-rulelabel { + float: left; + top: 0; + left: 23px; +} +.slider-handle { + background: url('images/slider_handle.png') no-repeat; +} +.slider-inner { + border-color: #D4D4D4; + background: #F2F2F2; +} +.slider-rule span { + border-color: #D4D4D4; +} +.slider-rulelabel span { + color: #333; +} +.menu { + position: absolute; + margin: 0; + padding: 2px; + border-width: 1px; + border-style: solid; + overflow: hidden; +} +.menu-inline { + position: relative; +} +.menu-item { + position: relative; + margin: 0; + padding: 0; + overflow: hidden; + white-space: nowrap; + cursor: pointer; + border-width: 1px; + border-style: solid; +} +.menu-text { + height: 20px; + line-height: 20px; + float: left; + padding-left: 28px; +} +.menu-icon { + position: absolute; + width: 16px; + height: 16px; + left: 2px; + top: 50%; + margin-top: -8px; +} +.menu-rightarrow { + position: absolute; + width: 16px; + height: 16px; + right: 0; + top: 50%; + margin-top: -8px; +} +.menu-line { + position: absolute; + left: 26px; + top: 0; + height: 2000px; + font-size: 1px; +} +.menu-sep { + margin: 3px 0px 3px 25px; + font-size: 1px; +} +.menu-noline .menu-line { + display: none; +} +.menu-noline .menu-sep { + margin-left: 0; + margin-right: 0; +} +.menu-active { + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.menu-item-disabled { + opacity: 0.5; + filter: alpha(opacity=50); + cursor: default; +} +.menu-text, +.menu-text span { + font-size: 12px; +} +.menu-shadow { + position: absolute; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + background: #ccc; + -moz-box-shadow: 2px 2px 3px #cccccc; + -webkit-box-shadow: 2px 2px 3px #cccccc; + box-shadow: 2px 2px 3px #cccccc; + filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); +} +.menu-rightarrow { + background: url('images/menu_arrows.png') no-repeat -32px center; +} +.menu-line { + border-left: 1px solid #ccc; + border-right: 1px solid #fff; +} +.menu-sep { + border-top: 1px solid #ccc; + border-bottom: 1px solid #fff; +} +.menu { + background-color: #fff; + border-color: #e6e6e6; + color: #333; +} +.menu-content { + background: #ffffff; +} +.menu-item { + border-color: transparent; + _border-color: #fff; +} +.menu-active { + border-color: #ddd; + color: #00438a; + background: #e6e6e6; +} +.menu-active-disabled { + border-color: transparent; + background: transparent; + color: #333; +} +.m-btn-downarrow, +.s-btn-downarrow { + display: inline-block; + position: absolute; + width: 16px; + height: 16px; + font-size: 1px; + right: 0; + top: 50%; + margin-top: -8px; +} +.m-btn-active, +.s-btn-active { + background: #e6e6e6; + color: #00438a; + border: 1px solid #ddd; + filter: none; +} +.m-btn-plain-active, +.s-btn-plain-active { + background: transparent; + padding: 0; + border-width: 1px; + border-style: solid; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.m-btn .l-btn-left .l-btn-text { + margin-right: 20px; +} +.m-btn .l-btn-icon-right .l-btn-text { + margin-right: 40px; +} +.m-btn .l-btn-icon-right .l-btn-icon { + right: 20px; +} +.m-btn .l-btn-icon-top .l-btn-text { + margin-right: 4px; + margin-bottom: 14px; +} +.m-btn .l-btn-icon-bottom .l-btn-text { + margin-right: 4px; + margin-bottom: 34px; +} +.m-btn .l-btn-icon-bottom .l-btn-icon { + top: auto; + bottom: 20px; +} +.m-btn .l-btn-icon-top .m-btn-downarrow, +.m-btn .l-btn-icon-bottom .m-btn-downarrow { + top: auto; + bottom: 0px; + left: 50%; + margin-left: -8px; +} +.m-btn-line { + display: inline-block; + position: absolute; + font-size: 1px; + display: none; +} +.m-btn .l-btn-left .m-btn-line { + right: 0; + width: 16px; + height: 500px; + border-style: solid; + border-color: #bbb; + border-width: 0 0 0 1px; +} +.m-btn .l-btn-icon-top .m-btn-line, +.m-btn .l-btn-icon-bottom .m-btn-line { + left: 0; + bottom: 0; + width: 500px; + height: 16px; + border-width: 1px 0 0 0; +} +.m-btn-large .l-btn-icon-right .l-btn-text { + margin-right: 56px; +} +.m-btn-large .l-btn-icon-bottom .l-btn-text { + margin-bottom: 50px; +} +.m-btn-downarrow, +.s-btn-downarrow { + background: url('images/menu_arrows.png') no-repeat 0 center; +} +.m-btn-plain-active, +.s-btn-plain-active { + border-color: #ddd; + background-color: #e6e6e6; + color: #00438a; +} +.s-btn:hover .m-btn-line, +.s-btn-active .m-btn-line, +.s-btn-plain-active .m-btn-line { + display: inline-block; +} +.l-btn:hover .s-btn-downarrow, +.s-btn-active .s-btn-downarrow, +.s-btn-plain-active .s-btn-downarrow { + border-style: solid; + border-color: #bbb; + border-width: 0 0 0 1px; +} +.messager-body { + padding: 10px 10px 30px 10px; + overflow: auto; +} +.messager-button { + text-align: center; + padding: 5px; +} +.messager-button .l-btn { + width: 70px; +} +.messager-icon { + float: left; + width: 32px; + height: 32px; + margin: 0 10px 10px 0; +} +.messager-error { + background: url('images/messager_icons.png') no-repeat scroll -64px 0; +} +.messager-info { + background: url('images/messager_icons.png') no-repeat scroll 0 0; +} +.messager-question { + background: url('images/messager_icons.png') no-repeat scroll -32px 0; +} +.messager-warning { + background: url('images/messager_icons.png') no-repeat scroll -96px 0; +} +.messager-progress { + padding: 10px; +} +.messager-p-msg { + margin-bottom: 5px; +} +.messager-body .messager-input { + width: 100%; + padding: 4px 0; + outline-style: none; + border: 1px solid #D4D4D4; +} +.window-thinborder .messager-button { + padding-bottom: 8px; +} +.tree { + margin: 0; + padding: 0; + list-style-type: none; +} +.tree li { + white-space: nowrap; +} +.tree li ul { + list-style-type: none; + margin: 0; + padding: 0; +} +.tree-node { + height: 18px; + white-space: nowrap; + cursor: pointer; +} +.tree-hit { + cursor: pointer; +} +.tree-expanded, +.tree-collapsed, +.tree-folder, +.tree-file, +.tree-checkbox, +.tree-indent { + display: inline-block; + width: 16px; + height: 18px; + vertical-align: top; + overflow: hidden; +} +.tree-expanded { + background: url('images/tree_icons.png') no-repeat -18px 0px; +} +.tree-expanded-hover { + background: url('images/tree_icons.png') no-repeat -50px 0px; +} +.tree-collapsed { + background: url('images/tree_icons.png') no-repeat 0px 0px; +} +.tree-collapsed-hover { + background: url('images/tree_icons.png') no-repeat -32px 0px; +} +.tree-lines .tree-expanded, +.tree-lines .tree-root-first .tree-expanded { + background: url('images/tree_icons.png') no-repeat -144px 0; +} +.tree-lines .tree-collapsed, +.tree-lines .tree-root-first .tree-collapsed { + background: url('images/tree_icons.png') no-repeat -128px 0; +} +.tree-lines .tree-node-last .tree-expanded, +.tree-lines .tree-root-one .tree-expanded { + background: url('images/tree_icons.png') no-repeat -80px 0; +} +.tree-lines .tree-node-last .tree-collapsed, +.tree-lines .tree-root-one .tree-collapsed { + background: url('images/tree_icons.png') no-repeat -64px 0; +} +.tree-line { + background: url('images/tree_icons.png') no-repeat -176px 0; +} +.tree-join { + background: url('images/tree_icons.png') no-repeat -192px 0; +} +.tree-joinbottom { + background: url('images/tree_icons.png') no-repeat -160px 0; +} +.tree-folder { + background: url('images/tree_icons.png') no-repeat -208px 0; +} +.tree-folder-open { + background: url('images/tree_icons.png') no-repeat -224px 0; +} +.tree-file { + background: url('images/tree_icons.png') no-repeat -240px 0; +} +.tree-loading { + background: url('images/loading.gif') no-repeat center center; +} +.tree-checkbox0 { + background: url('images/tree_icons.png') no-repeat -208px -18px; +} +.tree-checkbox1 { + background: url('images/tree_icons.png') no-repeat -224px -18px; +} +.tree-checkbox2 { + background: url('images/tree_icons.png') no-repeat -240px -18px; +} +.tree-title { + font-size: 12px; + display: inline-block; + text-decoration: none; + vertical-align: top; + white-space: nowrap; + padding: 0 2px; + height: 18px; + line-height: 18px; +} +.tree-node-proxy { + font-size: 12px; + line-height: 20px; + padding: 0 2px 0 20px; + border-width: 1px; + border-style: solid; + z-index: 9900000; +} +.tree-dnd-icon { + display: inline-block; + position: absolute; + width: 16px; + height: 18px; + left: 2px; + top: 50%; + margin-top: -9px; +} +.tree-dnd-yes { + background: url('images/tree_icons.png') no-repeat -256px 0; +} +.tree-dnd-no { + background: url('images/tree_icons.png') no-repeat -256px -18px; +} +.tree-node-top { + border-top: 1px dotted red; +} +.tree-node-bottom { + border-bottom: 1px dotted red; +} +.tree-node-append .tree-title { + border: 1px dotted red; +} +.tree-editor { + border: 1px solid #D4D4D4; + font-size: 12px; + line-height: 16px; + padding: 0 4px; + margin: 0; + width: 80px; + outline-style: none; + vertical-align: top; + position: absolute; + top: 0; +} +.tree-node-proxy { + background-color: #ffffff; + color: #333; + border-color: #D4D4D4; +} +.tree-node-hover { + background: #e6e6e6; + color: #00438a; +} +.tree-node-selected { + background: #0081c2; + color: #fff; +} +.tree-node-hidden { + display: none; +} +.validatebox-invalid { + border-color: #ffa8a8; + background-color: #fff3f3; + color: #000; +} +.tooltip { + position: absolute; + display: none; + z-index: 9900000; + outline: none; + opacity: 1; + filter: alpha(opacity=100); + padding: 5px; + border-width: 1px; + border-style: solid; + border-radius: 5px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.tooltip-content { + font-size: 12px; +} +.tooltip-arrow-outer, +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + line-height: 0; + font-size: 0; + border-style: solid; + border-width: 6px; + border-color: transparent; + _border-color: tomato; + _filter: chroma(color=tomato); +} +.tooltip-arrow { + display: none \9; +} +.tooltip-right .tooltip-arrow-outer { + left: 0; + top: 50%; + margin: -6px 0 0 -13px; +} +.tooltip-right .tooltip-arrow { + left: 0; + top: 50%; + margin: -6px 0 0 -12px; +} +.tooltip-left .tooltip-arrow-outer { + right: 0; + top: 50%; + margin: -6px -13px 0 0; +} +.tooltip-left .tooltip-arrow { + right: 0; + top: 50%; + margin: -6px -12px 0 0; +} +.tooltip-top .tooltip-arrow-outer { + bottom: 0; + left: 50%; + margin: 0 0 -13px -6px; +} +.tooltip-top .tooltip-arrow { + bottom: 0; + left: 50%; + margin: 0 0 -12px -6px; +} +.tooltip-bottom .tooltip-arrow-outer { + top: 0; + left: 50%; + margin: -13px 0 0 -6px; +} +.tooltip-bottom .tooltip-arrow { + top: 0; + left: 50%; + margin: -12px 0 0 -6px; +} +.tooltip { + background-color: #ffffff; + border-color: #D4D4D4; + color: #333; +} +.tooltip-right .tooltip-arrow-outer { + border-right-color: #D4D4D4; +} +.tooltip-right .tooltip-arrow { + border-right-color: #ffffff; +} +.tooltip-left .tooltip-arrow-outer { + border-left-color: #D4D4D4; +} +.tooltip-left .tooltip-arrow { + border-left-color: #ffffff; +} +.tooltip-top .tooltip-arrow-outer { + border-top-color: #D4D4D4; +} +.tooltip-top .tooltip-arrow { + border-top-color: #ffffff; +} +.tooltip-bottom .tooltip-arrow-outer { + border-bottom-color: #D4D4D4; +} +.tooltip-bottom .tooltip-arrow { + border-bottom-color: #ffffff; +} +.switchbutton { + text-decoration: none; + display: inline-block; + overflow: hidden; + vertical-align: middle; + margin: 0; + padding: 0; + cursor: pointer; + background: #bbb; + border: 1px solid #bbb; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.switchbutton-inner { + display: inline-block; + overflow: hidden; + position: relative; + top: -1px; + left: -1px; +} +.switchbutton-on, +.switchbutton-off, +.switchbutton-handle { + display: inline-block; + text-align: center; + height: 100%; + float: left; + font-size: 12px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.switchbutton-on { + background: #0081c2; + color: #fff; +} +.switchbutton-off { + background-color: #ffffff; + color: #333; +} +.switchbutton-on, +.switchbutton-reversed .switchbutton-off { + -moz-border-radius: 5px 0 0 5px; + -webkit-border-radius: 5px 0 0 5px; + border-radius: 5px 0 0 5px; +} +.switchbutton-off, +.switchbutton-reversed .switchbutton-on { + -moz-border-radius: 0 5px 5px 0; + -webkit-border-radius: 0 5px 5px 0; + border-radius: 0 5px 5px 0; +} +.switchbutton-handle { + position: absolute; + top: 0; + left: 50%; + background-color: #ffffff; + color: #333; + border: 1px solid #bbb; + -moz-box-shadow: 0 0 3px 0 #bbb; + -webkit-box-shadow: 0 0 3px 0 #bbb; + box-shadow: 0 0 3px 0 #bbb; +} +.switchbutton-value { + position: absolute; + top: 0; + left: -5000px; +} +.switchbutton-disabled { + opacity: 0.5; + filter: alpha(opacity=50); +} +.switchbutton-disabled, +.switchbutton-readonly { + cursor: default; +} +.tabs-panels { + border-color: transparent; +} +.tabs li a.tabs-inner { + border-color: transparent; + background: transparent; + filter: none; + color: #0088CC; +} +.menu-active { + background-color: #0081C2; + border-color: #0081C2; + color: #fff; +} +.menu-active-disabled { + border-color: transparent; + background: transparent; + color: #333; +} +.lh24 { line-height:24px; } \ No newline at end of file diff --git a/novel-front/src/main/resources/static/css/public.css b/novel-front/src/main/resources/static/css/public.css new file mode 100644 index 0000000..ade8bd2 --- /dev/null +++ b/novel-front/src/main/resources/static/css/public.css @@ -0,0 +1,1402 @@ +/*(C) 2012-2013 Douco Inc.*/ + +/* 全局通用 +----------------------------------------------- */ +body { + font-family: Microsoft Yahei, \5FAE\8F6F\96C5\9ED1, \5B8B\4F53, Arial, Verdana, sans-serif; + font-size: 12px; + color: #333; + margin: 0; + padding: 0; +} +body, button, input, textarea { + font-size: 12px; + line-height: 1.531; + outline: none; + margin: 0; + padding: 0; + border: 0; +} +p, ul, ol, dl, dt, dd, form, blockquote { + margin: 0; + padding: 0; +} +h1, h2, h3, h4, h5, h6 { + font-size: 12px; + margin: 0; + padding: 0; + font-weight: normal; +} +img { + border: 0; +} +ul, ol { + list-style: none; +} +img { + border: 0; +} +a { + text-decoration: none; + color: #333; + transition:color .2s, background-color .2s +} +a:hover { + text-decoration: none; +} +input, textarea, select { + vertical-align: middle; +} +*:focus { + outline: none; +} +em, i { + font-style: normal; +} +.bold { + font-weight: bold; +} +.gray { color:#999 !important } +.black { color:#000 !important } +.red { color:#EF5944 !important } +.ora { color:#e86320 !important } +.green { color:#457a2a!important } +.blue { color:#1B7DC6 !important } +.col6 { color:#666 !important } +.colc { color:#ccc !important } +.clear { + clear: both; + display: block; + height: 0; + line-height: 0; + font-size: 0; +} +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} +*html .clearfix { + height: 1%; +} +*+html .clearfix { + height: 1%; +} +.none { + display: none; +} +.cue { + /*color: #999;*/ +} +p.cue { + margin-top: 5px; +} +.cueRed { + color: #C00; +} +.ml { + padding-left: 10px; +} +.pl { + padding-left: 10px; +} +.pr { + padding-right: 10px; +} +.unread { + font-weight: bold; +} +#vcode { + cursor: pointer; +} +/* 主体框架 +----------------------------------------------- */ +#dcWrap { + width: 100%; + height: 100%; +} +#dcHead { + background-color: #585858; + float: left; + height: 40px; + width: 100%; +} +#dcLeft { + float: left; + width: 179px; +} +#dcMain { + background-color: #FFFFFF; + border-left: 1px solid #CCC; + margin-left: 179px; + padding-top: 40px; + *padding-top:0; + zoom: 1/* padding-top:40px; */ +} +#dcFooter { + height: 45px; + background-color: #EEEEEE; +} +/*- form -*/ +.btn { + display: inline-block; + background-color: #f80; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border: 1px solid #f70; + color: #FFF; + line-height:1; + padding: 7px 20px; + cursor: pointer; +} +.btnGray { + display: inline-block; + background-color: #EEE; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border: 0; + color: #666; + padding: 6px 15px; + font-weight: bold; + text-transform: capitalize; + cursor: pointer; + -webkit-appearance: none; +} +.btnPayment { + display: inline-block; + background-color: #ff4246; + color: #FFF; + padding: 7px 28px; + text-transform: capitalize; + cursor: pointer; + font-weight: bold; + font-size:14px; + text-align:center; + -webkit-appearance: none; +} +.inpMain { + border: 1px solid #DBDBDB; + background-color: #FFF; + padding: 4px 5px; + color: #727272; + font-size: 12x; + line-height: 20px; + -webkit-appearance: none; +} +.inpFlie { + border: 1px solid #DBDBDB; + background-color: #FFF; + padding: 5px 5px; + color: #999; + -webkit-appearance: none; +} +.textArea { + border: 1px solid #DBDBDB; + background-color: #FFF; + padding: 4px 5px; + color: #727272; + font-size: 12x; + line-height: 20px; + -webkit-appearance: none; +} +.textAreaAuto { + border: 1px solid #DBDBDB; + background-color: #FFF; + padding: 0; + color: #999; + font-size: 12x; + line-height: 20px; + resize: none; + min-height: 40px; + -webkit-appearance: none; +} +select { + border: 1px solid #DBDBDB; + padding: 2px 5px 2px 4px; +} +/*- tab -*/ +.tab { + border-bottom: 1px solid #60BBFF; + font-weight: bold; + font-size: 14px; + height: 35px; + overflow: hidden; +} +.tab li { + float: left; + line-height: 35px; + height: 35px; +} +.tab a { + display: block; + background-color: #F9F9F9; + padding: 0 44px; + text-decoration: none; + color: #999; +} +.tab a.selected { + background-color: #60BBFF; + color: #FFF; +} +/*- tableBasic -*/ +.tableBasic { + background-color: #F9F9F9; + /*color: #666666;*/ + border-left: 1px dotted #CCCCCC; + border-top: 1px dotted #CCCCCC; +} +.tableBasic select { + color: #727272; +} +.tableBasic td, .tableBasic th { + border-right: 1px dotted #CCCCCC; + border-bottom: 1px dotted #CCCCCC; +} +.tableBasic th { + text-align:right; + width:120px; + font-weight:normal; +} +.notes{color:Red;line-height:20px;} +.showNote{background: #fffae2;} +.tableBasic .child { + background-color: #FFFFFF; +} +/*- tableNobor -*/ +.tableNobor td { + border: 0; +} +/*- tableOnebor -*/ +.tableOnebor td { + border-right: 0; +} +/*- showHidden -*/ +.showHidden { + display: block; + float: right; + font-size: 12px; + background-color: #CCC; +} +.showHidden b, .showHidden s { + display: block; + float: left; + padding: 4px 15px; + background-color: #CCC; + color: #333; + cursor: pointer; +} +.showHidden .d b { + background-color: #0072C6; + color: #FFF; +} +.showHidden .h s { + background-color: #0072C6; + color: #FFF; +} +/*- unum -*/ +.unum { + display: inline-block; + background-color:#28B779; + color: #fff; + font-size: 9px; + line-height: 17px; + font-weight: 600; + margin: 1px 0 0 2px; + -webkit-border-radius: 10px; + border-radius: 10px; +} +.unum span { + display: block; + padding: 0 6px; +} +/* 公共顶部 +----------------------------------------------- */ +#head .logo { + border-right: 1px solid #515151; + float: left; + width: 179px; + height: 40px; +} +/*#head .logo img { + margin: 7px 0 0 13px; +}*/ +#head .nav { + margin-left: 180px; + height: 40px; + line-height: 40px; + color: #D9D9D9; + font-size: 13px; +} +#head .nav ul { + float: left; +} +#head .nav ul.navRight { + float: right; +} +#head .nav li { + float: left; + border-left: 1px solid #5f5f5f; + border-right: 1px solid #515151; +} +#head .nav a { + display: block; + color: #D9D9D9; + padding: 0 25px; +} +#head .nav a.topAdd { + background: url(../images/top_add.gif) no-repeat 15px top; + padding-left: 35px; +} +#head .nav a:hover, #head .nav a.cur { + background-color: #5f5f5f; + color: #FFF; +} +#head .nav a.topAdd:hover { + background: #60BBFF url(../images/top_add.gif) no-repeat 15px bottom; +} +#head .nav .noLeft { + border-left: 0; +} +#head .nav .noRight { + border-right: 0; +} +/*- 下拉菜单 -*/ +#head .nav .M { + position: relative; +} +#head .nav .active a { + background-color: #FFF; + color: #000; +} +#head .nav .active a.topAdd { + background: #FFF url(../images/top_add.gif) no-repeat 15px top; +} +#head .nav .drop { + display: none; + position: absolute; +} +#head .nav .drop a { + line-height: 30px; + font-size: 12px; +} +#head .nav .active .drop { + display: block; +} +/* mTopad */ +#head .nav .mTopad { + left: -1px; + top: 40px; + width: 120px; + border-left: 1px solid #FFF; + border-right: 1px solid #CCC; + border-bottom: 1px solid #CCC; +} +#head .nav .mTopad a { + border-bottom: 1px solid #EEE; + border-left: 1px solid #EEE; + border-right: 1px solid #EEE; + background-color: #FFF; + color: #333; + padding-left: 20px; +} +#head .nav .mTopad a:hover { + background-color: #F9F9F9; + color: #0072C6; +} +/* mUser */ +#head .nav .mUser { + left: -1px; + top: 40px; + width: 134px; + border-left: 1px solid #EEE; + border-right: 1px solid #EEE; +} +#head .nav .mUser a { + border-bottom: 1px solid #EEE; + background-color: #FFF; + color: #0072C6; +} +#head .nav .mUser a:hover { + background-color: #F9F9F9; + color: #0072C6; +} +/* 公共管理菜单 +----------------------------------------------- */ +#menu { + margin-right: -1px; + font-size: 13px; +} +#menu ul { + border-top: 1px solid #F9F9F9; + border-bottom: 1px solid #CCCCCC; + padding: 4px 0; +} +#menu .top { + border-top: 0; + border-right: 1px solid #CCC; + background-color: #F5F5F5; + /*margin-top:10px;*/ +} +#menu .bot { + border-bottom: 0; +} +#menu li { + height: 38px; + overflow: hidden; +} +#menu li.cur { + background: #60BBFF url(../images/menu_cur.gif) no-repeat right 50%; +} +#menu li.cur a { + color: #FFF; +} +#menu li a { + display: block; + height: 38px; + line-height: 38px; +} +#menu li i { + background: url(../images/icon_menu.png) no-repeat 13px 0; + float: left; + display: block; + width: 42px; + height: 38px; +} +#menu li em { + float: left; + display: block; + width: 130px; + height: 38px; + cursor: pointer; +} +#menu .top li { + height: 27px; +} +#menu .top li a { + height: 27px; + line-height: 27px; +} +#menu .top li i { + height: 27px; +} +#menu .top li i.home { + background-position: 13px -38px; +} +#menu li i.system { + background-position: 13px -79px; +} +#menu li i.nav { + background-position: 13px -119px; +} +#menu li i.show { + background-position: 13px -159px; +} +#menu li i.page { + background-position: 13px -199px; +} +#menu li i.productCat { + background-position: 13px -239px; +} +#menu li i.product { + background-position: 13px -279px; +} +#menu li i.list { + background-position: 13px -199px; +} +#menu li i.write { + background-position: 13px -558px; +} +#menu li i.Statistics { + background-position: 13px -719px; +} +#menu li i.book { + background-position: 13px -798px; +} +#menu li i.articleCat { + background-position: 13px -319px; +} +#menu li i.article { + background-position: 13px -359px; +} +#menu li i.manager { + background-position: 13px -399px; +} +#menu li i.managerLog { + background-position: 13px -439px; +} +#menu li i.backup { + background-position: 13px -479px; +} +#menu li i.link { + background-position: 13px -519px; +} +#menu li i.guestbook { + background-position: 13px -559px; +} +#menu li i.mobile { + background-position: 13px -599px; +} +#menu li i.user { + background-position: 13px -639px; +} +#menu li i.order { + background-position: 13px -679px; +} +#menu li i.plugin { + background-position: 13px -719px; +} +#menu li i.menuPage { + background-position: 13px -759px; +} +#menu li i.theme { + background-position: 13px -799px; +} +#menu li i.caseCat { + background-position: 13px -839px; +} +#menu li i.case { + background-position: 13px -879px; +} +#menu li i.downloadCat { + background-position: 13px -919px; +} +#menu li i.download { + background-position: 13px -959px; +} +/* 当前位置 +----------------------------------------------- */ +#urHere { + background-color:#F5F5F5; + border-left: 1px solid #FFF; + border-bottom:1px solid #ccc; + height: 35px; + line-height: 37px; + color: #666; + padding-left: 10px; +} +#urHere strong { font-weight:normal; } +#urHere a { + color: #A0A0A0; +} +#urHere b { + margin: 0 10px; +} +/* 公共主区域 +----------------------------------------------- */ +.mainBox { + border-left: 1px solid #FFF; + padding: 30px 22px 50px 22px; +} +.mainBox h3 { + border-bottom: 1px solid #D7D7D7; + color: #666666; + font-size: 28px; + padding-bottom: 20px; + margin-bottom: 30px; +} +.mainBox h3 .actionBtn { + float: right; + display: inline-block; + background-color: #28B779; + padding: 0 20px; + height: 27px; + line-height: 27px; + color: #FFFFFF; + font-size: 13px; + font-weight: bold; +} +.mainBox h3 .add { + background: #28B779 url(../images/action_btn.gif) no-repeat 20px 50%; + padding-left: 40px; +} +.mainBox .filter { + margin: 0 0 10px -2px; + height: 35px; +} +.mainBox .filter form { + float: left; +} +.mainBox .filter span { + float: right; +} +.mainBox .action { + margin: 10px 0 0 -2px; +} +.mainBox .warning { + border: 1px solid #E6DB55; + background: #FFFBCC; + padding: 10px; + margin-bottom: 20px; +} +/* 公共样式 +----------------------------------------------- */ +#maskBox { + position: relative; +} +#maskBox dt { + font-size: 14px; + margin-bottom: 30px; + color: #999; + font-weight: 700; + zoom: 1; + overflow: hidden; + line-height: 28px; +} +#maskBox em, #maskBox form { + float: left; + margin-right: 20px; +} +#maskBox .count { + position: relative; +} +#maskBox i { + display: block; + float: left; + width: 30px; + height: 30px; + margin: 0 20px 20px 0; +} +#maskBox .maskBg { + position: absolute; + z-index: 1; +} +#maskBox .maskBg i { + background: url(../images/icon_picture_big.png) no-repeat; +} +#maskBox #mask { + position: absolute; + z-index: 2; +} +#maskBox #mask i { + background: url(../images/icon_picture_big.png) no-repeat left bottom; +} +#maskBox #success { + background: #60BBFF url(); + display: none; + width: 60px; + padding: 0 10px; + line-height: 30px; + color: #FFF; + font-weight: bold; +} +/* 首页 +----------------------------------------------- */ +#index .indexBox { + margin-bottom: 20px; +} +#index .indexBox .boxTitle { + border-bottom: 1px solid #D7D7D7; + color: #666666; + font-size: 16px; + padding-bottom: 10px; + margin-bottom: 15px; +} +#index .indexBox em { + color:#999; +} +/*- ipage -*/ +#index .indexBox .ipage { + overflow: hidden; +} +#index .indexBox .ipage a { + display: block; + background-color: #DDDDDD; + color: #555555; + font-weight: bold; + border: 1px dotted #CCCCCC; + float: left; + width: 122px; + height: 37px; + line-height: 37px; + text-align: center; + margin: 0 15px 12px 0; +} +#index .indexBox .ipage a.child1 { + border: 1px dotted #DDDDDD; + background-color: #EEEEEE; +} +#index .indexBox .ipage a.child2 { + border: 1px dotted #EEEEEE; + background-color: #F6F6F6; +} +#index .indexBox .ipage a.child3 { + border: 1px dotted #F6F6F6; + background-color: #FFFFFF; +} +#index .indexBox .ipage a:hover { + border: 1px dotted #FFFFFF; + background: #60BBFF url(../images/icon_edit_white.png) no-repeat 12px 50%; + color: #FFF; +} +/*- help -*/ +#index .help { + margin-top:10px; +} +#index .help a { + color:#60BBFF; +} +#index .help .text { + line-height: 200%; +} +/* 单页面 +----------------------------------------------- */ +.page dl { + border: 1px dotted #CCC; + background-color: #DDDDDD; + float: left; + width: 120px; + height: 75px; + margin: 0 15px 15px 0; + text-align: center; +} +.page dl.child1 { + border: 1px dotted #DDDDDD; + background-color: #EEEEEE; +} +.page dl.child2 { + border: 1px dotted #EEEEEE; + background-color: #F6F6F6; +} +.page dl.child3 { + border: 1px dotted #F6F6F6; + background-color: #FFFFFF; +} +.page dt { + padding: 8px 0; + color: #555; +} +.page dt p { + padding-top: 5px; + color: #999; +} +.page dd { + color: #CCC; +} +.page dd a { + color: #999; +} +/* 首页商品筛选 +----------------------------------------------- */ +.homeSortLeft { + margin-right: 70px; +} +.homeSortRight { + float: right; + width: 62px; + position: relative; + z-index: 10; +} +.homeSortRight .homeSortBg { + position: absolute; + left: 0; + top: 0; + z-index: 11; +} +.homeSortRight .homeSortList { + position: absolute; + left: 0; + top: 0; + z-index: 12; +} +.homeSortRight li { + margin-bottom: 10px; + height: 72px; +} +.homeSortRight li img, .homeSortRight li em { + border: 1px solid #EEE; +} +.homeSortRight li em { + display: block; + padding: 3px; + width: 54px; + height: 54px; + overflow: hidden; + color: #666; +} +.homeSortRight li a { + display: block; + font-family: Arial, Verdana, sans-serif; + text-align: right; + color: #666; +} +/* 图片模块管理 +----------------------------------------------- */ +.imgModule form { + padding:0 7px; +} +.imgModule b { + display:block; + margin-bottom:8px; +} +.imgModule .formEdit { + border: 4px solid #9FD7FF; +} +.imgModule .active td { + border-bottom: 4px solid #9FD7FF; + background-color:#FFF; +} +.imgModule .formEdit .btn { + float:right; +} +/* 订单中心 +----------------------------------------------- */ +#order .tracking .trackingNo { + float:left; + width:50%; + font-size:14px; + color:#333; +} +#order .tracking .trackingSubmit { + float:right; + width:50%; + text-align:right; +} +#order .btnShow { + background: #FFFFFF url(../images/icon_edit_blue.png) no-repeat; + border: none; + width:16px; + height:16px; + text-indent:-999px; + overflow:hidden; + cursor:pointer; + margin-left:10px; +} +#order .btnHide { + background: #FFFFFF url(../images/icon_no.png) no-repeat; + border: none; + width:14px; + height:14px; + text-indent:-999px; + overflow:hidden; + cursor:pointer; + margin-top:5px; +} +#order .trackingSubmit .edit { + display:none; +} +/* 网站管理员 +----------------------------------------------- */ +#manager .cloudAccount { + background: url(../images/icon_cloud_account.png) no-repeat center top; + text-align:center; + padding-top:80px; + margin-top:150px; +} +#manager .cloudAccount .inpMain { + margin-right:20px; +} +#manager .cloudAccount .reg { + margin-top:60px; + color:#999; +} +#manager .cloudAccount .reg a { + color:#60BBFF; +} +#manager .cloudAccount em { + font-size:18px; + margin-right:20px; + color:#60BBFF; +} +/* 留言板 +----------------------------------------------- */ +#guestBook .book { + border: 1px dotted #CCCCCC; + background-color: #F9F9F9; +} +#guestBook .book dt { + font-weight: bold; + color: #555; + font-size: 16px; + padding: 10px; +} +#guestBook .book dd { + padding: 10px; + color: #666; +} +#guestBook .book p { + background-color: #60BBFF; + color: #FFF; + padding: 10px; +} +#guestBook .book p b { + margin-right: 35px; +} +#guestBook .reply { + margin-top: 30px; +} +#guestBook .replySubmit { + margin-top: 30px; +} +/* 云中心 +----------------------------------------------- */ +#cloud .filter a { + margin-right:20px; +} +#cloud .handbook { + margin-bottom:20px; +} +/*- handle -*/ +#cloud .handle h2 { + background:url(../images/icon_cloud_handle.png) no-repeat left top; + height:46px; + padding-left:45px; + font-size:18px; +} +#cloud .handle p { + margin-bottom:12px; +} +#cloud .handle a { + margin-right:15px; +} +#cloud .handle i { + margin:0 8px; +} +/*- order -*/ +#cloud .order h2 { + background:url(../images/icon_cloud_order.png) no-repeat left top; + height:46px; + padding-left:45px; + font-size:18px; +} +#cloud .order li { + margin-bottom:10px; +} +#cloud .order em { + color:#999; +} +#cloud .order .btn, #cloud .order .btnPayment { + margin-top:20px; +} +/*- cloudList -*/ +.cloudList p { + margin-top:2px; +} +.cloudList p a { + color:#0072C6; +} +.cloudList p i { + margin:0 8px; + color:#DDD; +} +.cloudList p b { + background-color:#28B779; + padding:0 10px; + color:#FFF; + -webkit-border-radius: 10px; + border-radius: 10px; +} +/*- douFrame -*/ +#douFrame .bg { + position: fixed; + top: 0; + left: 0; + z-index: 10000001; + width: 100%; + height: 100%; + background: #000; + filter: alpha(opacity=45); + opacity:0.45 +} +#douFrame .frame { + position: absolute; + z-index: 10000002; + overflow: hidden; + padding: 0; + left:50%; +} +#douFrame .frame h2 { + padding: 0 10px; + background: #0072C6; + line-height: 32px; + color: #FFF; + font-size:14px; +} +#douFrame .frame h2 .close { + background: url(../images/icon_fork.png) no-repeat; + width:12px; + height:12px; + display:block; + float:right; + text-indent:-9999px; + margin-top:11px; +} +#douFrame .details { + border: 2px solid #C4C4C4; + background-color:#FFF; + width:800px; + top:100px; + margin-left:-400px; +} +#douFrame .selectBox { + border: 2px solid #FFF; + background-color: #F5F5F5; + width:400px; + top:300px; + margin-left:-200px; + text-align:center; + padding:10px 0 30px 0; +} +#douFrame .selectBox a { + margin:0 25px; +} +/* 模块扩展 +----------------------------------------------- */ +#module .install { + margin-top:150px; + padding-left:10px; + text-align:center; +} +#module .install h2 { + margin-bottom:20px; + font-size:18px; + color:#999; +} +#module .uninstall .handbook { + border: 1px solid #EEE; + font-size:14px; + margin:20px 0; + padding:15px; + color:#555; +} +#module .uninstall .handbook a { + color:#60BBFF; + text-decoration:underline; +} +#module .uninstall .list h2 { + background:url(../images/icon_cloud_uninstall.png) no-repeat left top; + padding-left:40px; + height:30px; + color:#60BBFF; + font-size:16px; + margin-bottom:10px; +} +#module .uninstall .list ul { + zoom:1; + overflow:hidden; +} +#module .uninstall .list ul li { + float:left; + margin:0 20px 20px 0; + text-align:center; +} +#module .uninstall .list ul li em { + display:block; + border: 1px solid #C4C4C4; + padding:15px 50px; + font-size:14px; + margin-bottom:3px; +} +#module .uninstall .list ul li a { +} +/* 模板扩展 +----------------------------------------------- */ +#theme .enable { + border-bottom: 1px solid #DDD; + padding:30px 0; + zoom:1; + overflow:hidden; +} +#theme .enable h2 { + font-size:14px; + font-weight:bold; + color:#999; + margin-bottom:10px; +} +#theme .enable p { + float:left; + padding:4px; + background-color:#FFF; + border: 1px solid #DDD; +} +#theme .enable dl { + float:left; + padding:10px; +} +#theme .enable dl dt { + font-weight:bold; + font-size:14px; + margin-bottom:10px; +} +#theme .enable dl dd { + margin-bottom:5px; +} +/* -- themeList -- */ +#theme .themeList { + padding-top:30px; + zoom:1; + overflow:hidden; +} +#theme .themeList h2 { + font-size:14px; + font-weight:bold; + color:#60BBFF; + margin-bottom:15px; +} +#theme .themeList dl { + border: 1px solid #DDD; + width:288px; + background-color:#FAFAFA; + float:left; + margin:0 20px 20px 0; + padding-bottom:5px; +} +#theme .themeList dl p { + padding:4px 4px 10px 4px; + background-color:#FFF; + border-bottom: 1px solid #EEE; +} +#theme .themeList dl p img { + width:280px; + height:175px; +} +#theme .themeList dl.mobile { + width:178px; + margin-right:40px; +} +#theme .themeList dl.mobile p img { + width:170px; + height:230px; +} +#theme .themeList dl dt { + font-weight:bold; + padding:5px; +} +#theme .themeList dl dd { + padding:2px 5px; +} +#theme .themeList dl dd.btnList span a { + color:#0072C6; + margin-right:10px; +} +#theme .themeList dl dd.btnList span em { + margin-right:10px; +} +#theme .themeList dl dd.btnList .del { + float:right; + color:#999; +} +/* 手机版 +----------------------------------------------- */ +#mobileBox { + background-color:#F5F5F5; + border-top: 1px solid #CCCCCC; +} +#mobileBox #mMenu { + float: left; + width: 120px; +} +#mobileBox #mMain { + background-color: #FFFFFF; + border-left: 1px solid #DDD; + margin-left: 120px; +} +#mobileBox #mMenu h3 { + background:#60BBFF url(../images/icon_mobile.png) no-repeat center 30px; + color:#FFF; + font-size:14px; + font-weight:bold; + text-align:center; + height:50px; + padding-top:80px; +} +#mobileBox #mMenu li a { + display:block; + line-height:50px; + height:50px; + border-bottom: 1px solid #DDD; + padding-left:20px; + font-weight:bold; +} +#mobileBox #mMenu li a.cur { + background-color:#FFF; + margin-right:-1px; +} +/* 用户登录 +----------------------------------------------- */ +#login { + margin: 0px auto; + width: 368px; + margin-top: 120px; + overflow: hidden; +} +#login .dologo { + background: url(../images/logo.gif) no-repeat 0 0; + height: 50px; + margin-bottom: 30px; +} +#login li { + height: 34px; + margin-bottom: 15px; +} +#login .inpLi { + border: 1px solid #CCC; +} +#login .inpLi b { + background-color: #E0E0E0; + float: left; + display: block; + width: 70px; + height: 34px; + line-height: 34px; + text-align: center; + font-weight: normal; +} +#login .inpLi .inpLogin, #login .inpLi .captcha { + float: left; + background-color: #EBEBEB; + border: 0; + padding: 7px 8px; + height: 20px; + line-height: 20px; + color: #000; + font-size: 14px; +} +#login .inpLi .inpLogin { + width: 280px; +} +#login .inpLi .captcha { + width: 198px; + text-transform: uppercase; +} +#login .captchaPic { + height: 38px; +} +#login .captchaPic .inpLi { + float: left; + width: 288px; +} +#login .captchaPic #vcode { + float: right; +} +#login .btn { + padding:6px 40px; +} +#login .sub { + margin:30px 0; +} +#login .action .separator { + color: #DDD; + margin:0 10px; +} +#login .reset .inpLi b { + width: 100px; +} +#login .reset .inpLi .inpLogin { + width: 250px; +} +/* 分页 +----------------------------------------------- */ +.pager { + text-align: right; + padding-top: 20px; + color: #666; +} +.pager a { + color: #666; + text-decoration: underline; +} +/* 信息提示 +----------------------------------------------- */ +/*- douMsg -*/ +#douMsg { + background: url(../images/icon_exc_small.gif) no-repeat left top; + padding: 27px 0 0 70px; + margin-top: 30px; +} +#douMsg h2 { + font-size: 16px; + font-weight: bold; + color: #0574C7; +} +#douMsg dl { + background: url(../images/icon_back_arrow.gif) no-repeat right bottom; +} +#douMsg dt { + padding: 10px 0 25px 0; + font-size: 13px; + color: #999999; +} +#douMsg dd { + padding: 100px 20px 20px 0; + font-size: 12px; + text-align: right; +} +#douMsg dd a { + color: #60BBFF; +} +/*- outMsg -*/ +#outMsg { + background: url(../images/icon_exc.gif) no-repeat left top; + margin: 0px auto; + width: 340px; + padding: 30px 0 0 80px; + margin-top: 160px; +} +#outMsg h2 { + font-size: 22px; + font-weight: bold; + color: #0574C7; +} +#outMsg dt { + padding: 10px 0 25px 0; + font-size: 13px; + color: #666666; +} +#outMsg dd { + background: url(../images/icon_back.gif) no-repeat left top; + padding-left: 25px; + font-size: 14px; +} +/* 公共底部 +----------------------------------------------- */ +#footer { + margin-top: -1px; + color: #999; +} +#footer .line { + border-top: 1px solid #FFFFFF; + background-color: #CCCCCC; + height: 1px; + line-height: 1px; + font-size: 0; + margin-left: 180px; +} +#footer ul { + text-align: center; + padding: 15px 0; +} + + +.w50{width:50px;} +.w100{width:100px;} +.w150{width:150px;} +.w200{width:200px;} +.w250{width:250px;} +.w300{width:300px;} +.w500{width:500px;} +.w1f1{width:95%;} + +a.lista,a.listag,a.listred{display:inline-block;margin-right:4px;margin-left:4px;color:#444444;text-decoration: none} +a.lista:hover,a.listag:hover{color:#0066cc;} + +a.listred,a.listred:hover{color:Red} +/*gsq*/ +#menu li a:hover, #menu li .selected, .red { color:#f60 } +.panel-header, .panel-body { border-left:none!important; } +.datagrid-row-selected { background:#f6f6f6!important; color:#000 } +.datagrid-row-over { background:#f6f6f6!important } +a.easyui-linkbutton { text-align:center } +a.easyui-linkbutton.on { color:#f60 } +a.l-btn span span.icon-search { padding:0; display: none } +/*.l-btn-icon-left .l-btn-text { + margin: 0 4px!important; +}*/ +table.querytable { padding:5px 0 } +.panel-title { font-weight:normal; padding-left:5px } +.auther_box { padding:30px } +.auther_news { background-color: #F9F9F9 } +.auther_news li { line-height: 30px; margin-bottom: 20px; } +.auther_news li .dot { width: 5px; height: 5px; background: #888; border-radius: 50%; display: inline-block; margin: 0 5px 2px 14px; } +#LabErr{ color:Red;line-height:24px; } \ No newline at end of file diff --git a/novel-front/src/main/resources/static/javascript/YT.js b/novel-front/src/main/resources/static/javascript/YT.js new file mode 100644 index 0000000..2950211 --- /dev/null +++ b/novel-front/src/main/resources/static/javascript/YT.js @@ -0,0 +1,617 @@ +var $C = function (objName) { + if (typeof (document.getElementById(objName)) != "object") + { return null; } + else + { return document.getElementById(objName); } +} +var YT = { + BaseCommon: { + gL: function (x) { var l = 0; while (x) { l += x.offsetLeft; x = x.offsetParent; } return l }, + gT: function (x) { var t = 0; while (x) { t += x.offsetTop; x = x.offsetParent; } return t } + }, + BaseData: { + WaitImg: "/images/loading.gif" + }, + Fun: { + GetWordLength: function (str) { + str = str.replace(/(\n)+|(\r\n)+/g, ""); + str = str.replace(" ", ""); + str = str.replace(" ", ""); + return str.length; + }, + ConvertToMoney: function (btanch) { + if (btanch != undefined) { + return parseFloat(btanch) / 100; + } + else { + return 0; + } + }, + LoadShow: function () { + if ($C("LayerShowPic") == null) { + var sp = document.createElement("div"); + sp.innerHTML = "

请稍后…
"; + document.body.appendChild(sp); + } + $C("LayerShowPic").style.display = ''; + $C("LayerCover").style.display = ''; + $C("LayerCover").style.height = String(document.documentElement.scrollHeight) + 'px'; + YT.Fun.ScreenCenter($C("LayerShowPic"), 266, 200); + + }, + LoadHide: function () { + if ($C("LayerShowPic") != null) { + $C("LayerShowPic").style.display = 'none'; + $C("LayerCover").style.display = 'none'; + } + }, + ScreenCenter: function (obj, width, height) { + if (obj.style.display == 'none') { + obj.style.display = ''; + } + var scrolltop = document.documentElement.scrollTop; + if (width <= 0) { + width = obj.offsetWidth; + } + if (height <= 0) { + height = obj.offsetHeight; + } + if (scrolltop == null || scrolltop == 0) { + scrolltop = document.body.scrollTop; + } + var offsetHT = document.body.clientHeight / 2 - height / 2; + if (offsetHT <= 0) { offsetHT = 10; } + var offsetWT = document.body.clientWidth / 2 - width / 2; + if (offsetWT <= 0) { offsetWT = 10; } + obj.style.top = String(scrolltop + offsetHT) + 'px'; + obj.style.left = String(offsetWT) + 'px'; + }, + NewPanel: function (url, title, width, height, needFits) { + if (typeof (width) == 'undefind' || width == null) { width = 750; } + if (typeof (height) == 'undefind' || height == null) { height = 550; } + var fits = false; + if (typeof (needFits) != "undefined" && needFits) { + if (document.body.clientWidth < 650 || document.body.clientHeight < 450 || document.body.clientHeight - 50 < height) + { fits = true; } + } + if ($C("YT_Panel") == null) { + var sp = document.createElement("div"); + sp.innerHTML = "
"; + document.body.appendChild(sp); + } + if (url.indexOf("?") > 0) { + url = url + "&"; + } + else { + url = url + "?"; + } + url = url + "randomkeys=" + Math.random(); + $C("YT_Panel_i").src = url; + var sTop = null, sLeft = null; + if (window.screen.height < 800) { + sTop = 0; + } + if (fits) { + sLeft = 0; + } + $('#YT_Panel').window({ + width: width, + height: height, + title: title, + collapsible: true, + minimizable: false, + maximizable: true, + closable: true, + modal: true, + fit: fits, + top: sTop, + left: sLeft + }); + }, + NewPanelNoClose: function (url, title, width, height) { + if (typeof (width) == 'undefind' || width == null) { width = 750; } + if (typeof (height) == 'undefind' || height == null) { height = 550; } + if ($C("YT_Panel") == null) { + var sp = document.createElement("div"); + sp.innerHTML = "
"; + document.body.appendChild(sp); + } + if (url.indexOf("?") > 0) { + url = url + "&"; + } + else { + url = url + "?"; + } + url = url + "randomkeys=" + Math.random(); + $C("YT_Panel_i").src = url; + $('#YT_Panel').window({ + width: width, + height: height, + title: title, + collapsible: false, + minimizable: false, + maximizable: true, + closable: false, + modal: true + }); + }, + ClosePanel: function (id) { + if (typeof (id) == 'undefind' || id == null) { + $('#YT_Panel').panel('close'); + /*CreateGrid();*/ + CreateGridReload(); + } + else { $('#' + id).panel('close'); } + }, + /*格式化时间字符串*/ + formatDate: function (now, types) { + if (now != null && now != "") { + var dateN = new Date(+/\d+/.exec(now)[0]); + var year = dateN.getFullYear(); + var month = dateN.getMonth() + 1; + var date = dateN.getDate(); + var hour = dateN.getHours(); + var minute = dateN.getMinutes(); + var second = dateN.getSeconds(); + if (typeof (types) != "undefined" && types != null) { + return year + "-" + month + "-" + date; + } + else if (hour == 0 && minute == 0 && second == 0) { + return year + "-" + month + "-" + date; + } + else { + return year + "-" + month + "-" + date + " " + hour + ":" + minute + ":" + second; + } + } + else { + return ""; + } + }, + /** 获取当前时间月份*/ + formatMonth: function (now) { + if (now != null && now != "") { + var dateN = new Date(+/\d+/.exec(now)[0]); + var month = dateN.getMonth() + 1; + return month; + } + else { + return ""; + } + }, + /** 获取当前时间具体的某一天*/ + formatDay: function (now) { + if (now != null && now != "") { + var dateN = new Date(+/\d+/.exec(now)[0]); + var month = dateN.getMonth() + 1; + var date = dateN.getDate(); + return month + "-" + date; + } + else { + return ""; + } + }, + /** 获取所属时间的季度*/ + formatSeasonal: function (now) { + if (now != null && now != "") { + var dateN = new Date(+/\d+/.exec(now)[0]); + var year = dateN.getFullYear(); + var month = dateN.getMonth() + 1; + if (month == 1) { + return year + "年第1季度"; + } + else if (month == 4) { + return year + "年第2季度"; + } + else if (month == 7) { + return year + "年第三季度"; + } + else { + return year + "年第四季度"; + } + } + else { + return ""; + } + }, + + formatStatus: function (id) { + if (id == 0) { + return "无效"; + } + else { + return "有效"; + } + }, + ShowPanel: function (obj, divName, xlong, ylong) { + var showobj = $C(divName); + if (showobj) { + if (showobj.style.display == 'none') { + showobj.style.display = ''; + } + if (xlong) + { showobj.style.top = YT.BaseCommon.gT(obj) + 20 + xlong + "px"; } + else + { showobj.style.top = YT.BaseCommon.gT(obj) + 20 + "px"; } + if (ylong) + { showobj.style.left = YT.BaseCommon.gL(obj) + ylong + "px"; } + else + { showobj.style.left = YT.BaseCommon.gL(obj) + "px"; } + } + }, + GetDateDiff:function(startTime,endTime, diffType) { + startTime = startTime.replace(/\-/g, "/"); + endTime= endTime.replace(/\-/g, "/"); + diffType = diffType.toLowerCase(); + var sTime = new Date(startTime); + var eTime = new Date(endTime); + var timeType = 1; + switch (diffType) { + case "second": + timeType = 1000; + break; + case "minute": + timeType = 1000 * 60; + break; + case "hour": + timeType = 1000 * 3600; + break; + case "day": + timeType = 1000 * 3600 * 24; + break; + default: + break; + } + return parseInt((eTime.getTime() - sTime.getTime()) / parseInt(timeType)); + } + }, + Dirt: { + /*绑定到列表*/ + BindList: function (listId, dirtName, needBlock) { + var obj = $C(listId); + if (obj != undefined) { + obj.length = 0; + var objV = eval("DirtInfo." + dirtName); + if (objV != undefined && objV != null) { + for (var i = 0; i < objV.length; i++) { + obj.options.add(new Option(objV[i][1], objV[i][0])); + } + } + if (needBlock) { + obj.options.add(new Option("请选择", "0")); + obj.value = ""; + } + } + }, + /*获取值表示的意义*/ + GetName: function (dirtName, dValue) { + var obj = eval("DirtInfo." + dirtName); + if (obj != undefined && obj != null) { + for (var i = 0; i < obj.length; i++) { + if (obj[i][0] == dValue) { + return obj[i][1]; + } + } + } + return ""; + } + }, + Cookie: function (name, value, options) { + if (typeof value != 'undefined') { /* name and value given, set cookie*/ + options = options || {}; + if (value === null) { + value = ''; + options.expires = -1; + } + var expires = ''; + if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) { + var date; + if (typeof options.expires == 'number') { + date = new Date(); + date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000)); + } else { + date = options.expires; + } + expires = '; expires=' + date.toUTCString(); /* use expires attribute, max-age is not supported by IE */ + } + var path = options.path ? '; path=' + options.path : ''; + var domain = options.domain ? '; domain=' + options.domain : ''; + var secure = options.secure ? '; secure' : ''; + document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join(''); + } else { /* only name given, get cookie */ + var cookieValue = null; + if (document.cookie && document.cookie != '') { + var cookies = document.cookie.split(';'); + for (var i = 0; i < cookies.length; i++) { + var cookie = jQuery.trim(cookies[i]); + if (cookie.substring(0, name.length + 1) == (name + '=')) { + cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); + break; + } + } + } + return cookieValue; + } + } +} + +/*重新定义录入框校验规则*/ +$.extend($.fn.validatebox.defaults.rules, { + chinaMobile: {/*手机号码*/ + validator: function (value, param) { + var reg = /^(13|14|15|17|18)\d{9}$/; + var reglt = /^(\d{3}|\d{4})-\d{8}$/; + /*var reg = /^\d{11,12}$/;*/ + if (value.indexOf('-') > 0) { + return reglt.test(value); + } + else { + return reg.test(value); + } + }, message: '手机号码有误' + }, + chinaName: {/*中文名称*/ + validator: function (value, param) { + // var reg = /^[\u4e00-\u9fa5a-zA-Z0-9]{2,6}$/; + var reg = /^[a-zA-Z\u4e00-\u9fa5][a-zA-Z0-9\u4e00-\u9fa5]{1,5}$/; + // var reg = /^[\u4e00-\u9fa5,a-zA-Z0-9]{2,5}$/; + return reg.test(value); + }, message: '在笔名中数字不能开头,且昵称的长度应在2-6之间' + }, + realName: {/*真实姓名*/ + validator: function (value, param) { + // var reg = /^[a-zA-Z\u4e00-\u9fa5][a-zA-Z0-9\u4e00-\u9fa5]{1,5}$/; + var reg = /^[\u4e00-\u9fa5,a-zA-Z0-9]{2,5}$/; + return reg.test(value); + }, message: '真实姓名的长度为2-5位中文字符' + }, + maxLength: { + validator: function (value, param) { + $.fn.validatebox.defaults.rules.maxLength.message = '只能少于' + param + '字符串'; + return value.length < param; + } + }, + isNumber: { + validator: function (value, param) { + var reg = /^(-|[0-9])(|\d{1,9})$/; + return reg.test(value); + }, message: '必须是数字' + }, + isBankNumber: { + validator: function (value, param) { + var reg = /^([0-9]{16}|[0-9]{19})$/; + return reg.test(value); + }, message: '银行卡号错误' + }, + isEmail: { + validator: function (value, param) { + var reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/; + return reg.test(value); + }, message: '邮箱格式错误' + }, + + isPosInt: { + validator: function (value, param) { + var reg = /^(\d{1,9})$/; + if (reg.test(value) && value > 0) { + return true; + } + else { + return false; + } + }, message: '必须是大于0的正整数' + }, + isPosIntTen: { + validator: function (value, param) { + var reg = /^(\d{1,9})$/; + if (reg.test(value) && value > 10) { + return true; + } + else { + return false; + } + }, message: '必须是大于10的正整数' + }, + isDate: { + validator: function (value, param) { + var reg = /^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29))$/; + return reg.test(value); + }, message: 'yyyy-MM-dd' + }, + isIdCard: { + validator: function (value, param) { + var reg = /^(^\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$/; + return isCardID(value); + }, message: '身份证号码错误' + }, + isFloat: { + validator: function (value, param) { + var reg = /^(^\+?[1-9][0-9]*$)$|^(\d{1,9}\.\d{1,9})$/; + return reg.test(value); + }, message: '必须是大于零的数字' + }, + isFloatMin0: + { + validator: function (value, param) { + var reg = /^(^\d{1,9})$|^(\d{1,9}\.\d{1,9})$/; + return reg.test(value); + }, message: '必须是大于零的数字' + }, + isPassWord: { + validator: function (value, param) { + var reg = /^[a-zA-Z0-9_]{5,15}$/; + return reg.test(value); + }, message: '密码格式错误' + }, + isConfirmPassword: { + validator: function (value, param) { + return $(param[0]).val() == value; + }, message: '两次录入的密码不同' + }, + phoneCheck: { + validator: function (value, param) { + var reg = /^(((\()?\d{2,4}(\))?[-(\s)*]){0,2})?(\d{8})$/; + return reg.test(value); + }, message: '输入的电话不正确' + }, + isUserName: { + validator: function (value, param) { + var reg = /^[a-zA-Z0-9_]{3,15}$/; + return reg.test(value); + }, message: '用户名格式错误' + }, + equalTo: { + validator: function (value, param) { + return $(param[0]).val() == value; + }, + message: '字段不匹配' + } +}); + +/*空函数*/ +function CreateGrid() { } +function CreateGridReload() { } + +/*身份证校验正确性*/ +var NumbCardCity = { 11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "内蒙古", 21: "辽宁", 22: "吉林", 23: "黑龙江", 31: "上海", 32: "江苏", 33: "浙江", 34: "安徽", 35: "福建", 36: "江西", 37: "山东", 41: "河南", 42: "湖北", 43: "湖南", 44: "广东", 45: "广西", 46: "海南", 50: "重庆", 51: "四川", 52: "贵州", 53: "云南", 54: "西藏", 61: "陕西", 62: "甘肃", 63: "青海", 64: "宁夏", 65: "新疆", 71: "台湾", 81: "香港", 82: "澳门", 91: "国外" }; +function isCardID(sId) { + var iSum = 0; + var info = ""; + if (!/^\d{17}(\d|x)$/i.test(sId)) return false; /* "你输入的身份证长度或格式错误"; */ + sId = sId.replace(/x$/i, "a"); + if (NumbCardCity[parseInt(sId.substr(0, 2))] == null) return false; /*"你的身份证地区非法";*/ + sBirthday = sId.substr(6, 4) + "-" + Number(sId.substr(10, 2)) + "-" + Number(sId.substr(12, 2)); + var d = new Date(sBirthday.replace(/-/g, "/")); + if (sBirthday != (d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate())) return false; /* "身份证上的出生日期非法";*/ + for (var i = 17; i >= 0; i--) iSum += (Math.pow(2, i) % 11) * parseInt(sId.charAt(17 - i), 11); + if (iSum % 11 != 1) return false; /*"你输入的身份证号非法";*/ + return true; +} + +function getSex(val) { + if (parseInt(val.charAt(16) / 2) * 2 != val.charAt(16)) + return '1'; + else + return '0'; +} +function showBirthday(val) { + var mm; + if (18 == val.length) {/*18位身份证号码*/ + mm = val.charAt(6) + val.charAt(7) + val.charAt(8) + val.charAt(9) + '-' + val.charAt(10) + val.charAt(11) + '-' + val.charAt(12) + val.charAt(13); + + } + return mm; +} + + +var DirtInfo = { + TrueOrFalse: [[0, "否"], [1, "是"]], + EnumUserCommendStatus: [[0, "新"], [1, "已处理"], [2, "已查看"]], + AvailablesStatus: [[0, "禁用"], [1, "可用"]], + SettleClass: [[0, "现金"], [1, "预付扣款"]], + EnumSexClass: [[0, "不限"], [1, "男"], [2, "女"]], + EnumUserType: [[1, "手机端app"], [2, "手机wap端"]], + EnumPayClass: [[1, "支付宝"], [2, "微信"], [3, "微信扫码"], [100, "绑定手机奖励"]], + EnumPayStatus: [[0, "新申请"], [2, "充值失败"], [3, "成功"]], + EnumMoneyClass: [[0, "购买"], [1, "赠送"]], + EnumUserFrom: [[1, "其他"], [2, "微博"], [3, "qq"], [4, "微信"], [10, "app注册"], [11, "wap注册"], [12, "微博绑定"], [13, "qq绑定"], [14, "微信绑定"]], + EnumSignType: [[0, "未签约"], [1, "分成"], [2, "买断"], [3, "保底"], [4, "买断整本"], [9, "保底"], [15, "道具结算"], [30, "全勤奖励"]], + EnumLogType: [[0, "app登录"], [1, "wap登录"]], + EnumAuditStatus: [[-10, "下线"], [-1, "审核失败"], [0, "编辑中"], [1, "提交申请"], [2, "通过审核"], [3, "已发布"]], + EnumHandleStatus: [[-1, "处理失败"], [0, "新申请"], [1, "待处理"], [2, "处理成功"]], + EnumAuthorLevel: [[1, "一级"], [2, "二级"], [3, "三级"], [4, "四级"], [5, "五级"]], + EnumChannelClass: [[0, "特级"], [1, "一级"], [2, "二级"], [3, "三级"], [4, "四级"], [5, "五级"], [6, "六级"], [7, "七级"], [8, "八级"], [9, "九级"], [1100, "千级"]], + EnumVipChapter: [[0, "公众"], [1, "VIP"]], + EnumBookLeveType: [[1, "A级"], [2, "B级"], [3, "C级"], [4, "普通"], [5, "S级"]], + EnumBookLeveTypeL: [[1, "A"], [2, "B"], [3, "C"]], + EnumAdmActClass: [[50, "签约等级修改"], [51, "封面修改"], [52, "渠道添加"], [53, "渠道修改"], [54, "渠道删除"], [55, "章节删除"]], + EnumSettlementType: [[0, "未结算"], [1, "已结算"], [2, "结算失败"]], + EnumBookProcess: [[0, "连载"], [1, "完结"]], + EnumAuthStatus: [[1 ,"独家"], [2, "非独家"]] +}; + +function dateToDate(date) { + var sDate = new Date(); + if (typeof date == 'object' + && typeof new Date().getMonth == "function" + ) { + sDate = date; + } + else if (typeof date == "string") { + var arr = date.split('-') + if (arr.length == 3) { + sDate = new Date(arr[0] + '-' + arr[1] + '-' + arr[2]); + } + } + + return sDate; +} + + +function addMonth(date, num) { + num = parseInt(num); + var sDate = dateToDate(date); + + var sYear = sDate.getFullYear(); + var sMonth = sDate.getMonth() + 1; + var sDay = sDate.getDate(); + + var eYear = sYear; + var eMonth = sMonth + num; + var eDay = sDay; + while (eMonth > 12) { + eYear++; + eMonth -= 12; + } + + var eDate = new Date(eYear, eMonth - 1, eDay); + + while (eDate.getMonth() != eMonth - 1) { + eDay--; + eDate = new Date(eYear, eMonth - 1, eDay); + } + + return eDate; +} + +function checkAll() { + if ($("#selAll").attr("checked")) { + $("input[name='selBox']").each(function () { + $(this).attr("checked", true); + }); + } + else { + $("input[name='selBox']").each(function () { + $(this).removeAttr("checked"); + }); + } +} + +$(function () { + initSubmitButton(3); +}); + +//停留时间 +function initSubmitButton(wait) { + $("input[type='submit']").each(function () { + $(this).click(function () { + if ($(this).attr("submited") == "1") { + return false; + } + var oldVal = $(this).val(); + $(this).val("正在处理,请稍等(" + wait + ")"); + $(this).attr("submited", "1"); + setTimeout('ButtonLimit("' + $(this).attr("id") + '",' + wait + ',"' + oldVal + '")', 1000); + }); + }); +} +function ButtonLimit(objId, wait, oldVal) { + wait--; + if (wait > 0) { + $("#" + objId).val("正在处理,请稍等(" + wait + ")"); + setTimeout('ButtonLimit("' + objId + '",' + wait + ',"' + oldVal + '");', 1000); + } + else { + $("#" + objId).removeAttr("submited"); + $("#" + objId).val(oldVal); + } +} \ No newline at end of file diff --git a/novel-front/src/main/resources/static/javascript/common.js b/novel-front/src/main/resources/static/javascript/common.js index 750008d..0a75196 100644 --- a/novel-front/src/main/resources/static/javascript/common.js +++ b/novel-front/src/main/resources/static/javascript/common.js @@ -1,6 +1,8 @@ var needLoginPath = ['/user/favorites.html','/user/comment.html','/user/feedback.html', '/user/feedback_list.html','/user/read_history.html','/user/set_name.html', - '/user/set_password.html','/user/set_sex.html','/user/setup.html','/user/userinfo.html',"/pay/index.html"]; + '/user/set_password.html','/user/set_sex.html','/user/setup.html','/user/userinfo.html', + "/pay/index.html," + + "/author/register.html","/author/index.html"]; var isLogin = false; var url = window.location.search; //key(需要检索的键) diff --git a/novel-front/src/main/resources/static/javascript/easyui-lang-zh_CN.js b/novel-front/src/main/resources/static/javascript/easyui-lang-zh_CN.js new file mode 100644 index 0000000..96e410e --- /dev/null +++ b/novel-front/src/main/resources/static/javascript/easyui-lang-zh_CN.js @@ -0,0 +1,70 @@ +if ($.fn.pagination){ + $.fn.pagination.defaults.beforePageText = '第'; + $.fn.pagination.defaults.afterPageText = '共{pages}页'; + $.fn.pagination.defaults.displayMsg = '显示{from}到{to},共{total}记录'; +} +if ($.fn.datagrid){ + $.fn.datagrid.defaults.loadMsg = '请稍后…'; +} +if ($.fn.treegrid && $.fn.datagrid){ + $.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg; +} +if ($.messager){ + $.messager.defaults.ok = '确定'; + $.messager.defaults.cancel = '取消'; +} +if ($.fn.validatebox){ + $.fn.validatebox.defaults.missingMessage = '该输入项为必输项'; + $.fn.validatebox.defaults.rules.email.message = '请输入有效的电子邮件地址'; + $.fn.validatebox.defaults.rules.url.message = '请输入有效的URL地址'; + $.fn.validatebox.defaults.rules.length.message = '输入内容长度必须介于{0}和{1}之间'; + $.fn.validatebox.defaults.rules.remote.message = '请修正该字段'; +} +if ($.fn.numberbox){ + $.fn.numberbox.defaults.missingMessage = '该输入项为必输项'; +} +if ($.fn.combobox){ + $.fn.combobox.defaults.missingMessage = '该输入项为必输项'; +} +if ($.fn.combotree){ + $.fn.combotree.defaults.missingMessage = '该输入项为必输项'; +} +if ($.fn.combogrid){ + $.fn.combogrid.defaults.missingMessage = '该输入项为必输项'; +} +if ($.fn.calendar){ + $.fn.calendar.defaults.weeks = ['日','一','二','三','四','五','六']; + $.fn.calendar.defaults.months = ['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月']; +} +if ($.fn.datebox){ + $.fn.datebox.defaults.currentText = '今天'; + $.fn.datebox.defaults.closeText = '关闭'; + $.fn.datebox.defaults.okText = '确定'; + $.fn.datebox.defaults.missingMessage = '该输入项为必输项'; + $.fn.datebox.defaults.formatter = function(date){ + var y = date.getFullYear(); + var m = date.getMonth()+1; + var d = date.getDate(); + return y+'-'+(m<10?('0'+m):m)+'-'+(d<10?('0'+d):d); + }; + $.fn.datebox.defaults.parser = function(s){ + if (!s) return new Date(); + var ss = s.split('-'); + var y = parseInt(ss[0],10); + var m = parseInt(ss[1],10); + var d = parseInt(ss[2],10); + if (!isNaN(y) && !isNaN(m) && !isNaN(d)){ + return new Date(y,m-1,d); + } else { + return new Date(); + } + }; +} +if ($.fn.datetimebox && $.fn.datebox){ + $.extend($.fn.datetimebox.defaults,{ + currentText: $.fn.datebox.defaults.currentText, + closeText: $.fn.datebox.defaults.closeText, + okText: $.fn.datebox.defaults.okText, + missingMessage: $.fn.datebox.defaults.missingMessage + }); +} diff --git a/novel-front/src/main/resources/static/javascript/jquery.easyui.min.js b/novel-front/src/main/resources/static/javascript/jquery.easyui.min.js new file mode 100644 index 0000000..29aed05 --- /dev/null +++ b/novel-front/src/main/resources/static/javascript/jquery.easyui.min.js @@ -0,0 +1,16103 @@ +/** + * EasyUI for jQuery 1.5.3 + * + * Copyright (c) 2009-2017 www.jeasyui.com. All rights reserved. + * + * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php + * To use it on other terms please contact us: info@jeasyui.com + * + */ +(function($){ + $.easyui={indexOfArray:function(a,o,id){ + for(var i=0,_1=a.length;i<_1;i++){ + if(id==undefined){ + if(a[i]==o){ + return i; + } + }else{ + if(a[i][o]==id){ + return i; + } + } + } + return -1; + },removeArrayItem:function(a,o,id){ + if(typeof o=="string"){ + for(var i=0,_2=a.length;i<_2;i++){ + if(a[i][o]==id){ + a.splice(i,1); + return; + } + } + }else{ + var _3=this.indexOfArray(a,o); + if(_3!=-1){ + a.splice(_3,1); + } + } + },addArrayItem:function(a,o,r){ + var _4=this.indexOfArray(a,o,r?r[o]:undefined); + if(_4==-1){ + a.push(r?r:o); + }else{ + a[_4]=r?r:o; + } + },getArrayItem:function(a,o,id){ + var _5=this.indexOfArray(a,o,id); + return _5==-1?null:a[_5]; + },forEach:function(_6,_7,_8){ + var _9=[]; + for(var i=0;i<_6.length;i++){ + _9.push(_6[i]); + } + while(_9.length){ + var _a=_9.shift(); + if(_8(_a)==false){ + return; + } + if(_7&&_a.children){ + for(var i=_a.children.length-1;i>=0;i--){ + _9.unshift(_a.children[i]); + } + } + } + }}; + $.parser={auto:true,onComplete:function(_b){ + },plugins:["draggable","droppable","resizable","pagination","tooltip","linkbutton","menu","menubutton","splitbutton","switchbutton","progressbar","tree","textbox","passwordbox","filebox","combo","combobox","combotree","combogrid","combotreegrid","tagbox","numberbox","validatebox","searchbox","spinner","numberspinner","timespinner","datetimespinner","calendar","datebox","datetimebox","slider","layout","panel","datagrid","propertygrid","treegrid","datalist","tabs","accordion","window","dialog","form"],parse:function(_c){ + var aa=[]; + for(var i=0;i<$.parser.plugins.length;i++){ + var _d=$.parser.plugins[i]; + var r=$(".easyui-"+_d,_c); + if(r.length){ + if(r[_d]){ + r.each(function(){ + $(this)[_d]($.data(this,"options")||{}); + }); + }else{ + aa.push({name:_d,jq:r}); + } + } + } + if(aa.length&&window.easyloader){ + var _e=[]; + for(var i=0;i=0){ + v=Math.floor((_12.width()-_13)*v/100); + }else{ + v=Math.floor((_12.height()-_13)*v/100); + } + }else{ + v=parseInt(v)||undefined; + } + return v; + },parseOptions:function(_15,_16){ + var t=$(_15); + var _17={}; + var s=$.trim(t.attr("data-options")); + if(s){ + if(s.substring(0,1)!="{"){ + s="{"+s+"}"; + } + _17=(new Function("return "+s))(); + } + $.map(["width","height","left","top","minWidth","maxWidth","minHeight","maxHeight"],function(p){ + var pv=$.trim(_15.style[p]||""); + if(pv){ + if(pv.indexOf("%")==-1){ + pv=parseInt(pv); + if(isNaN(pv)){ + pv=undefined; + } + } + _17[p]=pv; + } + }); + if(_16){ + var _18={}; + for(var i=0;i<_16.length;i++){ + var pp=_16[i]; + if(typeof pp=="string"){ + _18[pp]=t.attr(pp); + }else{ + for(var _19 in pp){ + var _1a=pp[_19]; + if(_1a=="boolean"){ + _18[_19]=t.attr(_19)?(t.attr(_19)=="true"):undefined; + }else{ + if(_1a=="number"){ + _18[_19]=t.attr(_19)=="0"?0:parseFloat(t.attr(_19))||undefined; + } + } + } + } + } + $.extend(_17,_18); + } + return _17; + }}; + $(function(){ + var d=$("
").appendTo("body"); + $._boxModel=d.outerWidth()!=100; + d.remove(); + d=$("
").appendTo("body"); + $._positionFixed=(d.css("position")=="fixed"); + d.remove(); + if(!window.easyloader&&$.parser.auto){ + $.parser.parse(); + } + }); + $.fn._outerWidth=function(_1b){ + if(_1b==undefined){ + if(this[0]==window){ + return this.width()||document.body.clientWidth; + } + return this.outerWidth()||0; + } + return this._size("width",_1b); + }; + $.fn._outerHeight=function(_1c){ + if(_1c==undefined){ + if(this[0]==window){ + return this.height()||document.body.clientHeight; + } + return this.outerHeight()||0; + } + return this._size("height",_1c); + }; + $.fn._scrollLeft=function(_1d){ + if(_1d==undefined){ + return this.scrollLeft(); + }else{ + return this.each(function(){ + $(this).scrollLeft(_1d); + }); + } + }; + $.fn._propAttr=$.fn.prop||$.fn.attr; + $.fn._size=function(_1e,_1f){ + if(typeof _1e=="string"){ + if(_1e=="clear"){ + return this.each(function(){ + $(this).css({width:"",minWidth:"",maxWidth:"",height:"",minHeight:"",maxHeight:""}); + }); + }else{ + if(_1e=="fit"){ + return this.each(function(){ + _20(this,this.tagName=="BODY"?$("body"):$(this).parent(),true); + }); + }else{ + if(_1e=="unfit"){ + return this.each(function(){ + _20(this,$(this).parent(),false); + }); + }else{ + if(_1f==undefined){ + return _21(this[0],_1e); + }else{ + return this.each(function(){ + _21(this,_1e,_1f); + }); + } + } + } + } + }else{ + return this.each(function(){ + _1f=_1f||$(this).parent(); + $.extend(_1e,_20(this,_1f,_1e.fit)||{}); + var r1=_22(this,"width",_1f,_1e); + var r2=_22(this,"height",_1f,_1e); + if(r1||r2){ + $(this).addClass("easyui-fluid"); + }else{ + $(this).removeClass("easyui-fluid"); + } + }); + } + function _20(_23,_24,fit){ + if(!_24.length){ + return false; + } + var t=$(_23)[0]; + var p=_24[0]; + var _25=p.fcount||0; + if(fit){ + if(!t.fitted){ + t.fitted=true; + p.fcount=_25+1; + $(p).addClass("panel-noscroll"); + if(p.tagName=="BODY"){ + $("html").addClass("panel-fit"); + } + } + return {width:($(p).width()||1),height:($(p).height()||1)}; + }else{ + if(t.fitted){ + t.fitted=false; + p.fcount=_25-1; + if(p.fcount==0){ + $(p).removeClass("panel-noscroll"); + if(p.tagName=="BODY"){ + $("html").removeClass("panel-fit"); + } + } + } + return false; + } + }; + function _22(_26,_27,_28,_29){ + var t=$(_26); + var p=_27; + var p1=p.substr(0,1).toUpperCase()+p.substr(1); + var min=$.parser.parseValue("min"+p1,_29["min"+p1],_28); + var max=$.parser.parseValue("max"+p1,_29["max"+p1],_28); + var val=$.parser.parseValue(p,_29[p],_28); + var _2a=(String(_29[p]||"").indexOf("%")>=0?true:false); + if(!isNaN(val)){ + var v=Math.min(Math.max(val,min||0),max||99999); + if(!_2a){ + _29[p]=v; + } + t._size("min"+p1,""); + t._size("max"+p1,""); + t._size(p,v); + }else{ + t._size(p,""); + t._size("min"+p1,min); + t._size("max"+p1,max); + } + return _2a||_29.fit; + }; + function _21(_2b,_2c,_2d){ + var t=$(_2b); + if(_2d==undefined){ + _2d=parseInt(_2b.style[_2c]); + if(isNaN(_2d)){ + return undefined; + } + if($._boxModel){ + _2d+=_2e(); + } + return _2d; + }else{ + if(_2d===""){ + t.css(_2c,""); + }else{ + if($._boxModel){ + _2d-=_2e(); + if(_2d<0){ + _2d=0; + } + } + t.css(_2c,_2d+"px"); + } + } + function _2e(){ + if(_2c.toLowerCase().indexOf("width")>=0){ + return t.outerWidth()-t.width(); + }else{ + return t.outerHeight()-t.height(); + } + }; + }; + }; +})(jQuery); +(function($){ + var _2f=null; + var _30=null; + var _31=false; + function _32(e){ + if(e.touches.length!=1){ + return; + } + if(!_31){ + _31=true; + dblClickTimer=setTimeout(function(){ + _31=false; + },500); + }else{ + clearTimeout(dblClickTimer); + _31=false; + _33(e,"dblclick"); + } + _2f=setTimeout(function(){ + _33(e,"contextmenu",3); + },1000); + _33(e,"mousedown"); + if($.fn.draggable.isDragging||$.fn.resizable.isResizing){ + e.preventDefault(); + } + }; + function _34(e){ + if(e.touches.length!=1){ + return; + } + if(_2f){ + clearTimeout(_2f); + } + _33(e,"mousemove"); + if($.fn.draggable.isDragging||$.fn.resizable.isResizing){ + e.preventDefault(); + } + }; + function _35(e){ + if(_2f){ + clearTimeout(_2f); + } + _33(e,"mouseup"); + if($.fn.draggable.isDragging||$.fn.resizable.isResizing){ + e.preventDefault(); + } + }; + function _33(e,_36,_37){ + var _38=new $.Event(_36); + _38.pageX=e.changedTouches[0].pageX; + _38.pageY=e.changedTouches[0].pageY; + _38.which=_37||1; + $(e.target).trigger(_38); + }; + if(document.addEventListener){ + document.addEventListener("touchstart",_32,true); + document.addEventListener("touchmove",_34,true); + document.addEventListener("touchend",_35,true); + } +})(jQuery); +(function($){ + function _39(e){ + var _3a=$.data(e.data.target,"draggable"); + var _3b=_3a.options; + var _3c=_3a.proxy; + var _3d=e.data; + var _3e=_3d.startLeft+e.pageX-_3d.startX; + var top=_3d.startTop+e.pageY-_3d.startY; + if(_3c){ + if(_3c.parent()[0]==document.body){ + if(_3b.deltaX!=null&&_3b.deltaX!=undefined){ + _3e=e.pageX+_3b.deltaX; + }else{ + _3e=e.pageX-e.data.offsetWidth; + } + if(_3b.deltaY!=null&&_3b.deltaY!=undefined){ + top=e.pageY+_3b.deltaY; + }else{ + top=e.pageY-e.data.offsetHeight; + } + }else{ + if(_3b.deltaX!=null&&_3b.deltaX!=undefined){ + _3e+=e.data.offsetWidth+_3b.deltaX; + } + if(_3b.deltaY!=null&&_3b.deltaY!=undefined){ + top+=e.data.offsetHeight+_3b.deltaY; + } + } + } + if(e.data.parent!=document.body){ + _3e+=$(e.data.parent).scrollLeft(); + top+=$(e.data.parent).scrollTop(); + } + if(_3b.axis=="h"){ + _3d.left=_3e; + }else{ + if(_3b.axis=="v"){ + _3d.top=top; + }else{ + _3d.left=_3e; + _3d.top=top; + } + } + }; + function _3f(e){ + var _40=$.data(e.data.target,"draggable"); + var _41=_40.options; + var _42=_40.proxy; + if(!_42){ + _42=$(e.data.target); + } + _42.css({left:e.data.left,top:e.data.top}); + $("body").css("cursor",_41.cursor); + }; + function _43(e){ + if(!$.fn.draggable.isDragging){ + return false; + } + var _44=$.data(e.data.target,"draggable"); + var _45=_44.options; + var _46=$(".droppable:visible").filter(function(){ + return e.data.target!=this; + }).filter(function(){ + var _47=$.data(this,"droppable").options.accept; + if(_47){ + return $(_47).filter(function(){ + return this==e.data.target; + }).length>0; + }else{ + return true; + } + }); + _44.droppables=_46; + var _48=_44.proxy; + if(!_48){ + if(_45.proxy){ + if(_45.proxy=="clone"){ + _48=$(e.data.target).clone().insertAfter(e.data.target); + }else{ + _48=_45.proxy.call(e.data.target,e.data.target); + } + _44.proxy=_48; + }else{ + _48=$(e.data.target); + } + } + _48.css("position","absolute"); + _39(e); + _3f(e); + _45.onStartDrag.call(e.data.target,e); + return false; + }; + function _49(e){ + if(!$.fn.draggable.isDragging){ + return false; + } + var _4a=$.data(e.data.target,"draggable"); + _39(e); + if(_4a.options.onDrag.call(e.data.target,e)!=false){ + _3f(e); + } + var _4b=e.data.target; + _4a.droppables.each(function(){ + var _4c=$(this); + if(_4c.droppable("options").disabled){ + return; + } + var p2=_4c.offset(); + if(e.pageX>p2.left&&e.pageXp2.top&&e.pageYp2.left&&e.pageXp2.top&&e.pageY_62.options.edge; + }; + }); + }; + $.fn.draggable.methods={options:function(jq){ + return $.data(jq[0],"draggable").options; + },proxy:function(jq){ + return $.data(jq[0],"draggable").proxy; + },enable:function(jq){ + return jq.each(function(){ + $(this).draggable({disabled:false}); + }); + },disable:function(jq){ + return jq.each(function(){ + $(this).draggable({disabled:true}); + }); + }}; + $.fn.draggable.parseOptions=function(_67){ + var t=$(_67); + return $.extend({},$.parser.parseOptions(_67,["cursor","handle","axis",{"revert":"boolean","deltaX":"number","deltaY":"number","edge":"number","delay":"number"}]),{disabled:(t.attr("disabled")?true:undefined)}); + }; + $.fn.draggable.defaults={proxy:null,revert:false,cursor:"move",deltaX:null,deltaY:null,handle:null,disabled:false,edge:0,axis:null,delay:100,onBeforeDrag:function(e){ + },onStartDrag:function(e){ + },onDrag:function(e){ + },onEndDrag:function(e){ + },onStopDrag:function(e){ + }}; + $.fn.draggable.isDragging=false; +})(jQuery); +(function($){ + function _68(_69){ + $(_69).addClass("droppable"); + $(_69).bind("_dragenter",function(e,_6a){ + $.data(_69,"droppable").options.onDragEnter.apply(_69,[e,_6a]); + }); + $(_69).bind("_dragleave",function(e,_6b){ + $.data(_69,"droppable").options.onDragLeave.apply(_69,[e,_6b]); + }); + $(_69).bind("_dragover",function(e,_6c){ + $.data(_69,"droppable").options.onDragOver.apply(_69,[e,_6c]); + }); + $(_69).bind("_drop",function(e,_6d){ + $.data(_69,"droppable").options.onDrop.apply(_69,[e,_6d]); + }); + }; + $.fn.droppable=function(_6e,_6f){ + if(typeof _6e=="string"){ + return $.fn.droppable.methods[_6e](this,_6f); + } + _6e=_6e||{}; + return this.each(function(){ + var _70=$.data(this,"droppable"); + if(_70){ + $.extend(_70.options,_6e); + }else{ + _68(this); + $.data(this,"droppable",{options:$.extend({},$.fn.droppable.defaults,$.fn.droppable.parseOptions(this),_6e)}); + } + }); + }; + $.fn.droppable.methods={options:function(jq){ + return $.data(jq[0],"droppable").options; + },enable:function(jq){ + return jq.each(function(){ + $(this).droppable({disabled:false}); + }); + },disable:function(jq){ + return jq.each(function(){ + $(this).droppable({disabled:true}); + }); + }}; + $.fn.droppable.parseOptions=function(_71){ + var t=$(_71); + return $.extend({},$.parser.parseOptions(_71,["accept"]),{disabled:(t.attr("disabled")?true:undefined)}); + }; + $.fn.droppable.defaults={accept:null,disabled:false,onDragEnter:function(e,_72){ + },onDragOver:function(e,_73){ + },onDragLeave:function(e,_74){ + },onDrop:function(e,_75){ + }}; +})(jQuery); +(function($){ + function _76(e){ + var _77=e.data; + var _78=$.data(_77.target,"resizable").options; + if(_77.dir.indexOf("e")!=-1){ + var _79=_77.startWidth+e.pageX-_77.startX; + _79=Math.min(Math.max(_79,_78.minWidth),_78.maxWidth); + _77.width=_79; + } + if(_77.dir.indexOf("s")!=-1){ + var _7a=_77.startHeight+e.pageY-_77.startY; + _7a=Math.min(Math.max(_7a,_78.minHeight),_78.maxHeight); + _77.height=_7a; + } + if(_77.dir.indexOf("w")!=-1){ + var _79=_77.startWidth-e.pageX+_77.startX; + _79=Math.min(Math.max(_79,_78.minWidth),_78.maxWidth); + _77.width=_79; + _77.left=_77.startLeft+_77.startWidth-_77.width; + } + if(_77.dir.indexOf("n")!=-1){ + var _7a=_77.startHeight-e.pageY+_77.startY; + _7a=Math.min(Math.max(_7a,_78.minHeight),_78.maxHeight); + _77.height=_7a; + _77.top=_77.startTop+_77.startHeight-_77.height; + } + }; + function _7b(e){ + var _7c=e.data; + var t=$(_7c.target); + t.css({left:_7c.left,top:_7c.top}); + if(t.outerWidth()!=_7c.width){ + t._outerWidth(_7c.width); + } + if(t.outerHeight()!=_7c.height){ + t._outerHeight(_7c.height); + } + }; + function _7d(e){ + $.fn.resizable.isResizing=true; + $.data(e.data.target,"resizable").options.onStartResize.call(e.data.target,e); + return false; + }; + function _7e(e){ + _76(e); + if($.data(e.data.target,"resizable").options.onResize.call(e.data.target,e)!=false){ + _7b(e); + } + return false; + }; + function _7f(e){ + $.fn.resizable.isResizing=false; + _76(e,true); + _7b(e); + $.data(e.data.target,"resizable").options.onStopResize.call(e.data.target,e); + $(document).unbind(".resizable"); + $("body").css("cursor",""); + return false; + }; + function _80(e){ + var _81=$(e.data.target).resizable("options"); + var tt=$(e.data.target); + var dir=""; + var _82=tt.offset(); + var _83=tt.outerWidth(); + var _84=tt.outerHeight(); + var _85=_81.edge; + if(e.pageY>_82.top&&e.pageY<_82.top+_85){ + dir+="n"; + }else{ + if(e.pageY<_82.top+_84&&e.pageY>_82.top+_84-_85){ + dir+="s"; + } + } + if(e.pageX>_82.left&&e.pageX<_82.left+_85){ + dir+="w"; + }else{ + if(e.pageX<_82.left+_83&&e.pageX>_82.left+_83-_85){ + dir+="e"; + } + } + var _86=_81.handles.split(","); + _86=$.map(_86,function(h){ + return $.trim(h).toLowerCase(); + }); + if($.inArray("all",_86)>=0||$.inArray(dir,_86)>=0){ + return dir; + } + for(var i=0;i=0){ + return _86[_87]; + } + } + return ""; + }; + $.fn.resizable=function(_88,_89){ + if(typeof _88=="string"){ + return $.fn.resizable.methods[_88](this,_89); + } + return this.each(function(){ + var _8a=null; + var _8b=$.data(this,"resizable"); + if(_8b){ + $(this).unbind(".resizable"); + _8a=$.extend(_8b.options,_88||{}); + }else{ + _8a=$.extend({},$.fn.resizable.defaults,$.fn.resizable.parseOptions(this),_88||{}); + $.data(this,"resizable",{options:_8a}); + } + if(_8a.disabled==true){ + return; + } + $(this).bind("mousemove.resizable",{target:this},function(e){ + if($.fn.resizable.isResizing){ + return; + } + var dir=_80(e); + $(e.data.target).css("cursor",dir?dir+"-resize":""); + }).bind("mouseleave.resizable",{target:this},function(e){ + $(e.data.target).css("cursor",""); + }).bind("mousedown.resizable",{target:this},function(e){ + var dir=_80(e); + if(dir==""){ + return; + } + function _8c(css){ + var val=parseInt($(e.data.target).css(css)); + if(isNaN(val)){ + return 0; + }else{ + return val; + } + }; + var _8d={target:e.data.target,dir:dir,startLeft:_8c("left"),startTop:_8c("top"),left:_8c("left"),top:_8c("top"),startX:e.pageX,startY:e.pageY,startWidth:$(e.data.target).outerWidth(),startHeight:$(e.data.target).outerHeight(),width:$(e.data.target).outerWidth(),height:$(e.data.target).outerHeight(),deltaWidth:$(e.data.target).outerWidth()-$(e.data.target).width(),deltaHeight:$(e.data.target).outerHeight()-$(e.data.target).height()}; + $(document).bind("mousedown.resizable",_8d,_7d); + $(document).bind("mousemove.resizable",_8d,_7e); + $(document).bind("mouseup.resizable",_8d,_7f); + $("body").css("cursor",dir+"-resize"); + }); + }); + }; + $.fn.resizable.methods={options:function(jq){ + return $.data(jq[0],"resizable").options; + },enable:function(jq){ + return jq.each(function(){ + $(this).resizable({disabled:false}); + }); + },disable:function(jq){ + return jq.each(function(){ + $(this).resizable({disabled:true}); + }); + }}; + $.fn.resizable.parseOptions=function(_8e){ + var t=$(_8e); + return $.extend({},$.parser.parseOptions(_8e,["handles",{minWidth:"number",minHeight:"number",maxWidth:"number",maxHeight:"number",edge:"number"}]),{disabled:(t.attr("disabled")?true:undefined)}); + }; + $.fn.resizable.defaults={disabled:false,handles:"n, e, s, w, ne, se, sw, nw, all",minWidth:10,minHeight:10,maxWidth:10000,maxHeight:10000,edge:5,onStartResize:function(e){ + },onResize:function(e){ + },onStopResize:function(e){ + }}; + $.fn.resizable.isResizing=false; +})(jQuery); +(function($){ + function _8f(_90,_91){ + var _92=$.data(_90,"linkbutton").options; + if(_91){ + $.extend(_92,_91); + } + if(_92.width||_92.height||_92.fit){ + var btn=$(_90); + var _93=btn.parent(); + var _94=btn.is(":visible"); + if(!_94){ + var _95=$("
").insertBefore(_90); + var _96={position:btn.css("position"),display:btn.css("display"),left:btn.css("left")}; + btn.appendTo("body"); + btn.css({position:"absolute",display:"inline-block",left:-20000}); + } + btn._size(_92,_93); + var _97=btn.find(".l-btn-left"); + _97.css("margin-top",0); + _97.css("margin-top",parseInt((btn.height()-_97.height())/2)+"px"); + if(!_94){ + btn.insertAfter(_95); + btn.css(_96); + _95.remove(); + } + } + }; + function _98(_99){ + var _9a=$.data(_99,"linkbutton").options; + var t=$(_99).empty(); + t.addClass("l-btn").removeClass("l-btn-plain l-btn-selected l-btn-plain-selected l-btn-outline"); + t.removeClass("l-btn-small l-btn-medium l-btn-large").addClass("l-btn-"+_9a.size); + if(_9a.plain){ + t.addClass("l-btn-plain"); + } + if(_9a.outline){ + t.addClass("l-btn-outline"); + } + if(_9a.selected){ + t.addClass(_9a.plain?"l-btn-selected l-btn-plain-selected":"l-btn-selected"); + } + t.attr("group",_9a.group||""); + t.attr("id",_9a.id||""); + var _9b=$("").appendTo(t); + if(_9a.text){ + $("").html(_9a.text).appendTo(_9b); + }else{ + $(" ").appendTo(_9b); + } + if(_9a.iconCls){ + $(" ").addClass(_9a.iconCls).appendTo(_9b); + _9b.addClass("l-btn-icon-"+_9a.iconAlign); + } + t.unbind(".linkbutton").bind("focus.linkbutton",function(){ + if(!_9a.disabled){ + $(this).addClass("l-btn-focus"); + } + }).bind("blur.linkbutton",function(){ + $(this).removeClass("l-btn-focus"); + }).bind("click.linkbutton",function(){ + if(!_9a.disabled){ + if(_9a.toggle){ + if(_9a.selected){ + $(this).linkbutton("unselect"); + }else{ + $(this).linkbutton("select"); + } + } + _9a.onClick.call(this); + } + }); + _9c(_99,_9a.selected); + _9d(_99,_9a.disabled); + }; + function _9c(_9e,_9f){ + var _a0=$.data(_9e,"linkbutton").options; + if(_9f){ + if(_a0.group){ + $("a.l-btn[group=\""+_a0.group+"\"]").each(function(){ + var o=$(this).linkbutton("options"); + if(o.toggle){ + $(this).removeClass("l-btn-selected l-btn-plain-selected"); + o.selected=false; + } + }); + } + $(_9e).addClass(_a0.plain?"l-btn-selected l-btn-plain-selected":"l-btn-selected"); + _a0.selected=true; + }else{ + if(!_a0.group){ + $(_9e).removeClass("l-btn-selected l-btn-plain-selected"); + _a0.selected=false; + } + } + }; + function _9d(_a1,_a2){ + var _a3=$.data(_a1,"linkbutton"); + var _a4=_a3.options; + $(_a1).removeClass("l-btn-disabled l-btn-plain-disabled"); + if(_a2){ + _a4.disabled=true; + var _a5=$(_a1).attr("href"); + if(_a5){ + _a3.href=_a5; + $(_a1).attr("href","javascript:;"); + } + if(_a1.onclick){ + _a3.onclick=_a1.onclick; + _a1.onclick=null; + } + _a4.plain?$(_a1).addClass("l-btn-disabled l-btn-plain-disabled"):$(_a1).addClass("l-btn-disabled"); + }else{ + _a4.disabled=false; + if(_a3.href){ + $(_a1).attr("href",_a3.href); + } + if(_a3.onclick){ + _a1.onclick=_a3.onclick; + } + } + }; + $.fn.linkbutton=function(_a6,_a7){ + if(typeof _a6=="string"){ + return $.fn.linkbutton.methods[_a6](this,_a7); + } + _a6=_a6||{}; + return this.each(function(){ + var _a8=$.data(this,"linkbutton"); + if(_a8){ + $.extend(_a8.options,_a6); + }else{ + $.data(this,"linkbutton",{options:$.extend({},$.fn.linkbutton.defaults,$.fn.linkbutton.parseOptions(this),_a6)}); + $(this).removeAttr("disabled"); + $(this).bind("_resize",function(e,_a9){ + if($(this).hasClass("easyui-fluid")||_a9){ + _8f(this); + } + return false; + }); + } + _98(this); + _8f(this); + }); + }; + $.fn.linkbutton.methods={options:function(jq){ + return $.data(jq[0],"linkbutton").options; + },resize:function(jq,_aa){ + return jq.each(function(){ + _8f(this,_aa); + }); + },enable:function(jq){ + return jq.each(function(){ + _9d(this,false); + }); + },disable:function(jq){ + return jq.each(function(){ + _9d(this,true); + }); + },select:function(jq){ + return jq.each(function(){ + _9c(this,true); + }); + },unselect:function(jq){ + return jq.each(function(){ + _9c(this,false); + }); + }}; + $.fn.linkbutton.parseOptions=function(_ab){ + var t=$(_ab); + return $.extend({},$.parser.parseOptions(_ab,["id","iconCls","iconAlign","group","size","text",{plain:"boolean",toggle:"boolean",selected:"boolean",outline:"boolean"}]),{disabled:(t.attr("disabled")?true:undefined),text:($.trim(t.html())||undefined),iconCls:(t.attr("icon")||t.attr("iconCls"))}); + }; + $.fn.linkbutton.defaults={id:null,disabled:false,toggle:false,selected:false,outline:false,group:null,plain:false,text:"",iconCls:null,iconAlign:"left",size:"small",onClick:function(){ + }}; +})(jQuery); +(function($){ + function _ac(_ad){ + var _ae=$.data(_ad,"pagination"); + var _af=_ae.options; + var bb=_ae.bb={}; + var _b0=$(_ad).addClass("pagination").html("
"); + var tr=_b0.find("tr"); + var aa=$.extend([],_af.layout); + if(!_af.showPageList){ + _b1(aa,"list"); + } + if(!_af.showPageInfo){ + _b1(aa,"info"); + } + if(!_af.showRefresh){ + _b1(aa,"refresh"); + } + if(aa[0]=="sep"){ + aa.shift(); + } + if(aa[aa.length-1]=="sep"){ + aa.pop(); + } + for(var _b2=0;_b2"); + ps.bind("change",function(){ + _af.pageSize=parseInt($(this).val()); + _af.onChangePageSize.call(_ad,_af.pageSize); + _b9(_ad,_af.pageNumber); + }); + for(var i=0;i<_af.pageList.length;i++){ + $("").text(_af.pageList[i]).appendTo(ps); + } + $("").append(ps).appendTo(tr); + }else{ + if(_b3=="sep"){ + $("
").appendTo(tr); + }else{ + if(_b3=="first"){ + bb.first=_b4("first"); + }else{ + if(_b3=="prev"){ + bb.prev=_b4("prev"); + }else{ + if(_b3=="next"){ + bb.next=_b4("next"); + }else{ + if(_b3=="last"){ + bb.last=_b4("last"); + }else{ + if(_b3=="manual"){ + $("").html(_af.beforePageText).appendTo(tr).wrap(""); + bb.num=$("").appendTo(tr).wrap(""); + bb.num.unbind(".pagination").bind("keydown.pagination",function(e){ + if(e.keyCode==13){ + var _b5=parseInt($(this).val())||1; + _b9(_ad,_b5); + return false; + } + }); + bb.after=$("").appendTo(tr).wrap(""); + }else{ + if(_b3=="refresh"){ + bb.refresh=_b4("refresh"); + }else{ + if(_b3=="links"){ + $("").appendTo(tr); + }else{ + if(_b3=="info"){ + if(_b2==aa.length-1){ + $("
").appendTo(_b0); + }else{ + $("
").appendTo(tr); + } + } + } + } + } + } + } + } + } + } + } + } + if(_af.buttons){ + $("
").appendTo(tr); + if($.isArray(_af.buttons)){ + for(var i=0;i<_af.buttons.length;i++){ + var btn=_af.buttons[i]; + if(btn=="-"){ + $("
").appendTo(tr); + }else{ + var td=$("").appendTo(tr); + var a=$("").appendTo(td); + a[0].onclick=eval(btn.handler||function(){ + }); + a.linkbutton($.extend({},btn,{plain:true})); + } + } + }else{ + var td=$("").appendTo(tr); + $(_af.buttons).appendTo(td).show(); + } + } + $("
").appendTo(_b0); + function _b4(_b6){ + var btn=_af.nav[_b6]; + var a=$("").appendTo(tr); + a.wrap(""); + a.linkbutton({iconCls:btn.iconCls,plain:true}).unbind(".pagination").bind("click.pagination",function(){ + btn.handler.call(_ad); + }); + return a; + }; + function _b1(aa,_b7){ + var _b8=$.inArray(_b7,aa); + if(_b8>=0){ + aa.splice(_b8,1); + } + return aa; + }; + }; + function _b9(_ba,_bb){ + var _bc=$.data(_ba,"pagination").options; + _bd(_ba,{pageNumber:_bb}); + _bc.onSelectPage.call(_ba,_bc.pageNumber,_bc.pageSize); + }; + function _bd(_be,_bf){ + var _c0=$.data(_be,"pagination"); + var _c1=_c0.options; + var bb=_c0.bb; + $.extend(_c1,_bf||{}); + var ps=$(_be).find("select.pagination-page-list"); + if(ps.length){ + ps.val(_c1.pageSize+""); + _c1.pageSize=parseInt(ps.val()); + } + var _c2=Math.ceil(_c1.total/_c1.pageSize)||1; + if(_c1.pageNumber<1){ + _c1.pageNumber=1; + } + if(_c1.pageNumber>_c2){ + _c1.pageNumber=_c2; + } + if(_c1.total==0){ + _c1.pageNumber=0; + _c2=0; + } + if(bb.num){ + bb.num.val(_c1.pageNumber); + } + if(bb.after){ + bb.after.html(_c1.afterPageText.replace(/{pages}/,_c2)); + } + var td=$(_be).find("td.pagination-links"); + if(td.length){ + td.empty(); + var _c3=_c1.pageNumber-Math.floor(_c1.links/2); + if(_c3<1){ + _c3=1; + } + var _c4=_c3+_c1.links-1; + if(_c4>_c2){ + _c4=_c2; + } + _c3=_c4-_c1.links+1; + if(_c3<1){ + _c3=1; + } + for(var i=_c3;i<=_c4;i++){ + var a=$("").appendTo(td); + a.linkbutton({plain:true,text:i}); + if(i==_c1.pageNumber){ + a.linkbutton("select"); + }else{ + a.unbind(".pagination").bind("click.pagination",{pageNumber:i},function(e){ + _b9(_be,e.data.pageNumber); + }); + } + } + } + var _c5=_c1.displayMsg; + _c5=_c5.replace(/{from}/,_c1.total==0?0:_c1.pageSize*(_c1.pageNumber-1)+1); + _c5=_c5.replace(/{to}/,Math.min(_c1.pageSize*(_c1.pageNumber),_c1.total)); + _c5=_c5.replace(/{total}/,_c1.total); + $(_be).find("div.pagination-info").html(_c5); + if(bb.first){ + bb.first.linkbutton({disabled:((!_c1.total)||_c1.pageNumber==1)}); + } + if(bb.prev){ + bb.prev.linkbutton({disabled:((!_c1.total)||_c1.pageNumber==1)}); + } + if(bb.next){ + bb.next.linkbutton({disabled:(_c1.pageNumber==_c2)}); + } + if(bb.last){ + bb.last.linkbutton({disabled:(_c1.pageNumber==_c2)}); + } + _c6(_be,_c1.loading); + }; + function _c6(_c7,_c8){ + var _c9=$.data(_c7,"pagination"); + var _ca=_c9.options; + _ca.loading=_c8; + if(_ca.showRefresh&&_c9.bb.refresh){ + _c9.bb.refresh.linkbutton({iconCls:(_ca.loading?"pagination-loading":"pagination-load")}); + } + }; + $.fn.pagination=function(_cb,_cc){ + if(typeof _cb=="string"){ + return $.fn.pagination.methods[_cb](this,_cc); + } + _cb=_cb||{}; + return this.each(function(){ + var _cd; + var _ce=$.data(this,"pagination"); + if(_ce){ + _cd=$.extend(_ce.options,_cb); + }else{ + _cd=$.extend({},$.fn.pagination.defaults,$.fn.pagination.parseOptions(this),_cb); + $.data(this,"pagination",{options:_cd}); + } + _ac(this); + _bd(this); + }); + }; + $.fn.pagination.methods={options:function(jq){ + return $.data(jq[0],"pagination").options; + },loading:function(jq){ + return jq.each(function(){ + _c6(this,true); + }); + },loaded:function(jq){ + return jq.each(function(){ + _c6(this,false); + }); + },refresh:function(jq,_cf){ + return jq.each(function(){ + _bd(this,_cf); + }); + },select:function(jq,_d0){ + return jq.each(function(){ + _b9(this,_d0); + }); + }}; + $.fn.pagination.parseOptions=function(_d1){ + var t=$(_d1); + return $.extend({},$.parser.parseOptions(_d1,[{total:"number",pageSize:"number",pageNumber:"number",links:"number"},{loading:"boolean",showPageList:"boolean",showPageInfo:"boolean",showRefresh:"boolean"}]),{pageList:(t.attr("pageList")?eval(t.attr("pageList")):undefined)}); + }; + $.fn.pagination.defaults={total:1,pageSize:10,pageNumber:1,pageList:[10,20,30,50],loading:false,buttons:null,showPageList:true,showPageInfo:true,showRefresh:true,links:10,layout:["list","sep","first","prev","sep","manual","sep","next","last","sep","refresh","info"],onSelectPage:function(_d2,_d3){ + },onBeforeRefresh:function(_d4,_d5){ + },onRefresh:function(_d6,_d7){ + },onChangePageSize:function(_d8){ + },beforePageText:"Page",afterPageText:"of {pages}",displayMsg:"Displaying {from} to {to} of {total} items",nav:{first:{iconCls:"pagination-first",handler:function(){ + var _d9=$(this).pagination("options"); + if(_d9.pageNumber>1){ + $(this).pagination("select",1); + } + }},prev:{iconCls:"pagination-prev",handler:function(){ + var _da=$(this).pagination("options"); + if(_da.pageNumber>1){ + $(this).pagination("select",_da.pageNumber-1); + } + }},next:{iconCls:"pagination-next",handler:function(){ + var _db=$(this).pagination("options"); + var _dc=Math.ceil(_db.total/_db.pageSize); + if(_db.pageNumber<_dc){ + $(this).pagination("select",_db.pageNumber+1); + } + }},last:{iconCls:"pagination-last",handler:function(){ + var _dd=$(this).pagination("options"); + var _de=Math.ceil(_dd.total/_dd.pageSize); + if(_dd.pageNumber<_de){ + $(this).pagination("select",_de); + } + }},refresh:{iconCls:"pagination-refresh",handler:function(){ + var _df=$(this).pagination("options"); + if(_df.onBeforeRefresh.call(this,_df.pageNumber,_df.pageSize)!=false){ + $(this).pagination("select",_df.pageNumber); + _df.onRefresh.call(this,_df.pageNumber,_df.pageSize); + } + }}}}; +})(jQuery); +(function($){ + function _e0(_e1){ + var _e2=$(_e1); + _e2.addClass("tree"); + return _e2; + }; + function _e3(_e4){ + var _e5=$.data(_e4,"tree").options; + $(_e4).unbind().bind("mouseover",function(e){ + var tt=$(e.target); + var _e6=tt.closest("div.tree-node"); + if(!_e6.length){ + return; + } + _e6.addClass("tree-node-hover"); + if(tt.hasClass("tree-hit")){ + if(tt.hasClass("tree-expanded")){ + tt.addClass("tree-expanded-hover"); + }else{ + tt.addClass("tree-collapsed-hover"); + } + } + e.stopPropagation(); + }).bind("mouseout",function(e){ + var tt=$(e.target); + var _e7=tt.closest("div.tree-node"); + if(!_e7.length){ + return; + } + _e7.removeClass("tree-node-hover"); + if(tt.hasClass("tree-hit")){ + if(tt.hasClass("tree-expanded")){ + tt.removeClass("tree-expanded-hover"); + }else{ + tt.removeClass("tree-collapsed-hover"); + } + } + e.stopPropagation(); + }).bind("click",function(e){ + var tt=$(e.target); + var _e8=tt.closest("div.tree-node"); + if(!_e8.length){ + return; + } + if(tt.hasClass("tree-hit")){ + _146(_e4,_e8[0]); + return false; + }else{ + if(tt.hasClass("tree-checkbox")){ + _10d(_e4,_e8[0]); + return false; + }else{ + _189(_e4,_e8[0]); + _e5.onClick.call(_e4,_eb(_e4,_e8[0])); + } + } + e.stopPropagation(); + }).bind("dblclick",function(e){ + var _e9=$(e.target).closest("div.tree-node"); + if(!_e9.length){ + return; + } + _189(_e4,_e9[0]); + _e5.onDblClick.call(_e4,_eb(_e4,_e9[0])); + e.stopPropagation(); + }).bind("contextmenu",function(e){ + var _ea=$(e.target).closest("div.tree-node"); + if(!_ea.length){ + return; + } + _e5.onContextMenu.call(_e4,e,_eb(_e4,_ea[0])); + e.stopPropagation(); + }); + }; + function _ec(_ed){ + var _ee=$.data(_ed,"tree").options; + _ee.dnd=false; + var _ef=$(_ed).find("div.tree-node"); + _ef.draggable("disable"); + _ef.css("cursor","pointer"); + }; + function _f0(_f1){ + var _f2=$.data(_f1,"tree"); + var _f3=_f2.options; + var _f4=_f2.tree; + _f2.disabledNodes=[]; + _f3.dnd=true; + _f4.find("div.tree-node").draggable({disabled:false,revert:true,cursor:"pointer",proxy:function(_f5){ + var p=$("
").appendTo("body"); + p.html(" "+$(_f5).find(".tree-title").html()); + p.hide(); + return p; + },deltaX:15,deltaY:15,onBeforeDrag:function(e){ + if(_f3.onBeforeDrag.call(_f1,_eb(_f1,this))==false){ + return false; + } + if($(e.target).hasClass("tree-hit")||$(e.target).hasClass("tree-checkbox")){ + return false; + } + if(e.which!=1){ + return false; + } + var _f6=$(this).find("span.tree-indent"); + if(_f6.length){ + e.data.offsetWidth-=_f6.length*_f6.width(); + } + },onStartDrag:function(e){ + $(this).next("ul").find("div.tree-node").each(function(){ + $(this).droppable("disable"); + _f2.disabledNodes.push(this); + }); + $(this).draggable("proxy").css({left:-10000,top:-10000}); + _f3.onStartDrag.call(_f1,_eb(_f1,this)); + var _f7=_eb(_f1,this); + if(_f7.id==undefined){ + _f7.id="easyui_tree_node_id_temp"; + _12d(_f1,_f7); + } + _f2.draggingNodeId=_f7.id; + },onDrag:function(e){ + var x1=e.pageX,y1=e.pageY,x2=e.data.startX,y2=e.data.startY; + var d=Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); + if(d>3){ + $(this).draggable("proxy").show(); + } + this.pageY=e.pageY; + },onStopDrag:function(){ + for(var i=0;i<_f2.disabledNodes.length;i++){ + $(_f2.disabledNodes[i]).droppable("enable"); + } + _f2.disabledNodes=[]; + var _f8=_183(_f1,_f2.draggingNodeId); + if(_f8&&_f8.id=="easyui_tree_node_id_temp"){ + _f8.id=""; + _12d(_f1,_f8); + } + _f3.onStopDrag.call(_f1,_f8); + }}).droppable({accept:"div.tree-node",onDragEnter:function(e,_f9){ + if(_f3.onDragEnter.call(_f1,this,_fa(_f9))==false){ + _fb(_f9,false); + $(this).removeClass("tree-node-append tree-node-top tree-node-bottom"); + $(this).droppable("disable"); + _f2.disabledNodes.push(this); + } + },onDragOver:function(e,_fc){ + if($(this).droppable("options").disabled){ + return; + } + var _fd=_fc.pageY; + var top=$(this).offset().top; + var _fe=top+$(this).outerHeight(); + _fb(_fc,true); + $(this).removeClass("tree-node-append tree-node-top tree-node-bottom"); + if(_fd>top+(_fe-top)/2){ + if(_fe-_fd<5){ + $(this).addClass("tree-node-bottom"); + }else{ + $(this).addClass("tree-node-append"); + } + }else{ + if(_fd-top<5){ + $(this).addClass("tree-node-top"); + }else{ + $(this).addClass("tree-node-append"); + } + } + if(_f3.onDragOver.call(_f1,this,_fa(_fc))==false){ + _fb(_fc,false); + $(this).removeClass("tree-node-append tree-node-top tree-node-bottom"); + $(this).droppable("disable"); + _f2.disabledNodes.push(this); + } + },onDragLeave:function(e,_ff){ + _fb(_ff,false); + $(this).removeClass("tree-node-append tree-node-top tree-node-bottom"); + _f3.onDragLeave.call(_f1,this,_fa(_ff)); + },onDrop:function(e,_100){ + var dest=this; + var _101,_102; + if($(this).hasClass("tree-node-append")){ + _101=_103; + _102="append"; + }else{ + _101=_104; + _102=$(this).hasClass("tree-node-top")?"top":"bottom"; + } + if(_f3.onBeforeDrop.call(_f1,dest,_fa(_100),_102)==false){ + $(this).removeClass("tree-node-append tree-node-top tree-node-bottom"); + return; + } + _101(_100,dest,_102); + $(this).removeClass("tree-node-append tree-node-top tree-node-bottom"); + }}); + function _fa(_105,pop){ + return $(_105).closest("ul.tree").tree(pop?"pop":"getData",_105); + }; + function _fb(_106,_107){ + var icon=$(_106).draggable("proxy").find("span.tree-dnd-icon"); + icon.removeClass("tree-dnd-yes tree-dnd-no").addClass(_107?"tree-dnd-yes":"tree-dnd-no"); + }; + function _103(_108,dest){ + if(_eb(_f1,dest).state=="closed"){ + _13e(_f1,dest,function(){ + _109(); + }); + }else{ + _109(); + } + function _109(){ + var node=_fa(_108,true); + $(_f1).tree("append",{parent:dest,data:[node]}); + _f3.onDrop.call(_f1,dest,node,"append"); + }; + }; + function _104(_10a,dest,_10b){ + var _10c={}; + if(_10b=="top"){ + _10c.before=dest; + }else{ + _10c.after=dest; + } + var node=_fa(_10a,true); + _10c.data=node; + $(_f1).tree("insert",_10c); + _f3.onDrop.call(_f1,dest,node,_10b); + }; + }; + function _10d(_10e,_10f,_110,_111){ + var _112=$.data(_10e,"tree"); + var opts=_112.options; + if(!opts.checkbox){ + return; + } + var _113=_eb(_10e,_10f); + if(!_113.checkState){ + return; + } + var ck=$(_10f).find(".tree-checkbox"); + if(_110==undefined){ + if(ck.hasClass("tree-checkbox1")){ + _110=false; + }else{ + if(ck.hasClass("tree-checkbox0")){ + _110=true; + }else{ + if(_113._checked==undefined){ + _113._checked=$(_10f).find(".tree-checkbox").hasClass("tree-checkbox1"); + } + _110=!_113._checked; + } + } + } + _113._checked=_110; + if(_110){ + if(ck.hasClass("tree-checkbox1")){ + return; + } + }else{ + if(ck.hasClass("tree-checkbox0")){ + return; + } + } + if(!_111){ + if(opts.onBeforeCheck.call(_10e,_113,_110)==false){ + return; + } + } + if(opts.cascadeCheck){ + _114(_10e,_113,_110); + _115(_10e,_113); + }else{ + _116(_10e,_113,_110?"1":"0"); + } + if(!_111){ + opts.onCheck.call(_10e,_113,_110); + } + }; + function _114(_117,_118,_119){ + var opts=$.data(_117,"tree").options; + var flag=_119?1:0; + _116(_117,_118,flag); + if(opts.deepCheck){ + $.easyui.forEach(_118.children||[],true,function(n){ + _116(_117,n,flag); + }); + }else{ + var _11a=[]; + if(_118.children&&_118.children.length){ + _11a.push(_118); + } + $.easyui.forEach(_118.children||[],true,function(n){ + if(!n.hidden){ + _116(_117,n,flag); + if(n.children&&n.children.length){ + _11a.push(n); + } + } + }); + for(var i=_11a.length-1;i>=0;i--){ + var node=_11a[i]; + _116(_117,node,_11b(node)); + } + } + }; + function _116(_11c,_11d,flag){ + var opts=$.data(_11c,"tree").options; + if(!_11d.checkState||flag==undefined){ + return; + } + if(_11d.hidden&&!opts.deepCheck){ + return; + } + var ck=$("#"+_11d.domId).find(".tree-checkbox"); + _11d.checkState=["unchecked","checked","indeterminate"][flag]; + _11d.checked=(_11d.checkState=="checked"); + ck.removeClass("tree-checkbox0 tree-checkbox1 tree-checkbox2"); + ck.addClass("tree-checkbox"+flag); + }; + function _115(_11e,_11f){ + var pd=_120(_11e,$("#"+_11f.domId)[0]); + if(pd){ + _116(_11e,pd,_11b(pd)); + _115(_11e,pd); + } + }; + function _11b(row){ + var c0=0; + var c1=0; + var len=0; + $.easyui.forEach(row.children||[],false,function(r){ + if(r.checkState){ + len++; + if(r.checkState=="checked"){ + c1++; + }else{ + if(r.checkState=="unchecked"){ + c0++; + } + } + } + }); + if(len==0){ + return undefined; + } + var flag=0; + if(c0==len){ + flag=0; + }else{ + if(c1==len){ + flag=1; + }else{ + flag=2; + } + } + return flag; + }; + function _121(_122,_123){ + var opts=$.data(_122,"tree").options; + if(!opts.checkbox){ + return; + } + var node=$(_123); + var ck=node.find(".tree-checkbox"); + var _124=_eb(_122,_123); + if(opts.view.hasCheckbox(_122,_124)){ + if(!ck.length){ + _124.checkState=_124.checkState||"unchecked"; + $("").insertBefore(node.find(".tree-title")); + } + if(_124.checkState=="checked"){ + _10d(_122,_123,true,true); + }else{ + if(_124.checkState=="unchecked"){ + _10d(_122,_123,false,true); + }else{ + var flag=_11b(_124); + if(flag===0){ + _10d(_122,_123,false,true); + }else{ + if(flag===1){ + _10d(_122,_123,true,true); + } + } + } + } + }else{ + ck.remove(); + _124.checkState=undefined; + _124.checked=undefined; + _115(_122,_124); + } + }; + function _125(_126,ul,data,_127,_128){ + var _129=$.data(_126,"tree"); + var opts=_129.options; + var _12a=$(ul).prevAll("div.tree-node:first"); + data=opts.loadFilter.call(_126,data,_12a[0]); + var _12b=_12c(_126,"domId",_12a.attr("id")); + if(!_127){ + _12b?_12b.children=data:_129.data=data; + $(ul).empty(); + }else{ + if(_12b){ + _12b.children?_12b.children=_12b.children.concat(data):_12b.children=data; + }else{ + _129.data=_129.data.concat(data); + } + } + opts.view.render.call(opts.view,_126,ul,data); + if(opts.dnd){ + _f0(_126); + } + if(_12b){ + _12d(_126,_12b); + } + for(var i=0;i<_129.tmpIds.length;i++){ + _10d(_126,$("#"+_129.tmpIds[i])[0],true,true); + } + _129.tmpIds=[]; + setTimeout(function(){ + _12e(_126,_126); + },0); + if(!_128){ + opts.onLoadSuccess.call(_126,_12b,data); + } + }; + function _12e(_12f,ul,_130){ + var opts=$.data(_12f,"tree").options; + if(opts.lines){ + $(_12f).addClass("tree-lines"); + }else{ + $(_12f).removeClass("tree-lines"); + return; + } + if(!_130){ + _130=true; + $(_12f).find("span.tree-indent").removeClass("tree-line tree-join tree-joinbottom"); + $(_12f).find("div.tree-node").removeClass("tree-node-last tree-root-first tree-root-one"); + var _131=$(_12f).tree("getRoots"); + if(_131.length>1){ + $(_131[0].target).addClass("tree-root-first"); + }else{ + if(_131.length==1){ + $(_131[0].target).addClass("tree-root-one"); + } + } + } + $(ul).children("li").each(function(){ + var node=$(this).children("div.tree-node"); + var ul=node.next("ul"); + if(ul.length){ + if($(this).next().length){ + _132(node); + } + _12e(_12f,ul,_130); + }else{ + _133(node); + } + }); + var _134=$(ul).children("li:last").children("div.tree-node").addClass("tree-node-last"); + _134.children("span.tree-join").removeClass("tree-join").addClass("tree-joinbottom"); + function _133(node,_135){ + var icon=node.find("span.tree-icon"); + icon.prev("span.tree-indent").addClass("tree-join"); + }; + function _132(node){ + var _136=node.find("span.tree-indent, span.tree-hit").length; + node.next().find("div.tree-node").each(function(){ + $(this).children("span:eq("+(_136-1)+")").addClass("tree-line"); + }); + }; + }; + function _137(_138,ul,_139,_13a){ + var opts=$.data(_138,"tree").options; + _139=$.extend({},opts.queryParams,_139||{}); + var _13b=null; + if(_138!=ul){ + var node=$(ul).prev(); + _13b=_eb(_138,node[0]); + } + if(opts.onBeforeLoad.call(_138,_13b,_139)==false){ + return; + } + var _13c=$(ul).prev().children("span.tree-folder"); + _13c.addClass("tree-loading"); + var _13d=opts.loader.call(_138,_139,function(data){ + _13c.removeClass("tree-loading"); + _125(_138,ul,data); + if(_13a){ + _13a(); + } + },function(){ + _13c.removeClass("tree-loading"); + opts.onLoadError.apply(_138,arguments); + if(_13a){ + _13a(); + } + }); + if(_13d==false){ + _13c.removeClass("tree-loading"); + } + }; + function _13e(_13f,_140,_141){ + var opts=$.data(_13f,"tree").options; + var hit=$(_140).children("span.tree-hit"); + if(hit.length==0){ + return; + } + if(hit.hasClass("tree-expanded")){ + return; + } + var node=_eb(_13f,_140); + if(opts.onBeforeExpand.call(_13f,node)==false){ + return; + } + hit.removeClass("tree-collapsed tree-collapsed-hover").addClass("tree-expanded"); + hit.next().addClass("tree-folder-open"); + var ul=$(_140).next(); + if(ul.length){ + if(opts.animate){ + ul.slideDown("normal",function(){ + node.state="open"; + opts.onExpand.call(_13f,node); + if(_141){ + _141(); + } + }); + }else{ + ul.css("display","block"); + node.state="open"; + opts.onExpand.call(_13f,node); + if(_141){ + _141(); + } + } + }else{ + var _142=$("
    ").insertAfter(_140); + _137(_13f,_142[0],{id:node.id},function(){ + if(_142.is(":empty")){ + _142.remove(); + } + if(opts.animate){ + _142.slideDown("normal",function(){ + node.state="open"; + opts.onExpand.call(_13f,node); + if(_141){ + _141(); + } + }); + }else{ + _142.css("display","block"); + node.state="open"; + opts.onExpand.call(_13f,node); + if(_141){ + _141(); + } + } + }); + } + }; + function _143(_144,_145){ + var opts=$.data(_144,"tree").options; + var hit=$(_145).children("span.tree-hit"); + if(hit.length==0){ + return; + } + if(hit.hasClass("tree-collapsed")){ + return; + } + var node=_eb(_144,_145); + if(opts.onBeforeCollapse.call(_144,node)==false){ + return; + } + hit.removeClass("tree-expanded tree-expanded-hover").addClass("tree-collapsed"); + hit.next().removeClass("tree-folder-open"); + var ul=$(_145).next(); + if(opts.animate){ + ul.slideUp("normal",function(){ + node.state="closed"; + opts.onCollapse.call(_144,node); + }); + }else{ + ul.css("display","none"); + node.state="closed"; + opts.onCollapse.call(_144,node); + } + }; + function _146(_147,_148){ + var hit=$(_148).children("span.tree-hit"); + if(hit.length==0){ + return; + } + if(hit.hasClass("tree-expanded")){ + _143(_147,_148); + }else{ + _13e(_147,_148); + } + }; + function _149(_14a,_14b){ + var _14c=_14d(_14a,_14b); + if(_14b){ + _14c.unshift(_eb(_14a,_14b)); + } + for(var i=0;i<_14c.length;i++){ + _13e(_14a,_14c[i].target); + } + }; + function _14e(_14f,_150){ + var _151=[]; + var p=_120(_14f,_150); + while(p){ + _151.unshift(p); + p=_120(_14f,p.target); + } + for(var i=0;i<_151.length;i++){ + _13e(_14f,_151[i].target); + } + }; + function _152(_153,_154){ + var c=$(_153).parent(); + while(c[0].tagName!="BODY"&&c.css("overflow-y")!="auto"){ + c=c.parent(); + } + var n=$(_154); + var ntop=n.offset().top; + if(c[0].tagName!="BODY"){ + var ctop=c.offset().top; + if(ntopctop+c.outerHeight()-18){ + c.scrollTop(c.scrollTop()+ntop+n.outerHeight()-ctop-c.outerHeight()+18); + } + } + }else{ + c.scrollTop(ntop); + } + }; + function _155(_156,_157){ + var _158=_14d(_156,_157); + if(_157){ + _158.unshift(_eb(_156,_157)); + } + for(var i=0;i<_158.length;i++){ + _143(_156,_158[i].target); + } + }; + function _159(_15a,_15b){ + var node=$(_15b.parent); + var data=_15b.data; + if(!data){ + return; + } + data=$.isArray(data)?data:[data]; + if(!data.length){ + return; + } + var ul; + if(node.length==0){ + ul=$(_15a); + }else{ + if(_15c(_15a,node[0])){ + var _15d=node.find("span.tree-icon"); + _15d.removeClass("tree-file").addClass("tree-folder tree-folder-open"); + var hit=$("").insertBefore(_15d); + if(hit.prev().length){ + hit.prev().remove(); + } + } + ul=node.next(); + if(!ul.length){ + ul=$("
      ").insertAfter(node); + } + } + _125(_15a,ul[0],data,true,true); + }; + function _15e(_15f,_160){ + var ref=_160.before||_160.after; + var _161=_120(_15f,ref); + var data=_160.data; + if(!data){ + return; + } + data=$.isArray(data)?data:[data]; + if(!data.length){ + return; + } + _159(_15f,{parent:(_161?_161.target:null),data:data}); + var _162=_161?_161.children:$(_15f).tree("getRoots"); + for(var i=0;i<_162.length;i++){ + if(_162[i].domId==$(ref).attr("id")){ + for(var j=data.length-1;j>=0;j--){ + _162.splice((_160.before?i:(i+1)),0,data[j]); + } + _162.splice(_162.length-data.length,data.length); + break; + } + } + var li=$(); + for(var i=0;i").prependTo(node); + node.next().remove(); + } + _12d(_164,_166); + } + _12e(_164,_164); + function del(_167){ + var id=$(_167).attr("id"); + var _168=_120(_164,_167); + var cc=_168?_168.children:$.data(_164,"tree").data; + for(var i=0;i").appendTo(nt); + _192.val(node.text).focus(); + _192.width(_191+20); + _192._outerHeight(18); + _192.bind("click",function(e){ + return false; + }).bind("mousedown",function(e){ + e.stopPropagation(); + }).bind("mousemove",function(e){ + e.stopPropagation(); + }).bind("keydown",function(e){ + if(e.keyCode==13){ + _193(_18f,_190); + return false; + }else{ + if(e.keyCode==27){ + _197(_18f,_190); + return false; + } + } + }).bind("blur",function(e){ + e.stopPropagation(); + _193(_18f,_190); + }); + }; + function _193(_194,_195){ + var opts=$.data(_194,"tree").options; + $(_195).css("position",""); + var _196=$(_195).find("input.tree-editor"); + var val=_196.val(); + _196.remove(); + var node=_eb(_194,_195); + node.text=val; + _12d(_194,node); + opts.onAfterEdit.call(_194,node); + }; + function _197(_198,_199){ + var opts=$.data(_198,"tree").options; + $(_199).css("position",""); + $(_199).find("input.tree-editor").remove(); + var node=_eb(_198,_199); + _12d(_198,node); + opts.onCancelEdit.call(_198,node); + }; + function _19a(_19b,q){ + var _19c=$.data(_19b,"tree"); + var opts=_19c.options; + var ids={}; + $.easyui.forEach(_19c.data,true,function(node){ + if(opts.filter.call(_19b,q,node)){ + $("#"+node.domId).removeClass("tree-node-hidden"); + ids[node.domId]=1; + node.hidden=false; + }else{ + $("#"+node.domId).addClass("tree-node-hidden"); + node.hidden=true; + } + }); + for(var id in ids){ + _19d(id); + } + function _19d(_19e){ + var p=$(_19b).tree("getParent",$("#"+_19e)[0]); + while(p){ + $(p.target).removeClass("tree-node-hidden"); + p.hidden=false; + p=$(_19b).tree("getParent",p.target); + } + }; + }; + $.fn.tree=function(_19f,_1a0){ + if(typeof _19f=="string"){ + return $.fn.tree.methods[_19f](this,_1a0); + } + var _19f=_19f||{}; + return this.each(function(){ + var _1a1=$.data(this,"tree"); + var opts; + if(_1a1){ + opts=$.extend(_1a1.options,_19f); + _1a1.options=opts; + }else{ + opts=$.extend({},$.fn.tree.defaults,$.fn.tree.parseOptions(this),_19f); + $.data(this,"tree",{options:opts,tree:_e0(this),data:[],tmpIds:[]}); + var data=$.fn.tree.parseData(this); + if(data.length){ + _125(this,this,data); + } + } + _e3(this); + if(opts.data){ + _125(this,this,$.extend(true,[],opts.data)); + } + _137(this,this); + }); + }; + $.fn.tree.methods={options:function(jq){ + return $.data(jq[0],"tree").options; + },loadData:function(jq,data){ + return jq.each(function(){ + _125(this,this,data); + }); + },getNode:function(jq,_1a2){ + return _eb(jq[0],_1a2); + },getData:function(jq,_1a3){ + return _17e(jq[0],_1a3); + },reload:function(jq,_1a4){ + return jq.each(function(){ + if(_1a4){ + var node=$(_1a4); + var hit=node.children("span.tree-hit"); + hit.removeClass("tree-expanded tree-expanded-hover").addClass("tree-collapsed"); + node.next().remove(); + _13e(this,_1a4); + }else{ + $(this).empty(); + _137(this,this); + } + }); + },getRoot:function(jq,_1a5){ + return _16b(jq[0],_1a5); + },getRoots:function(jq){ + return _16f(jq[0]); + },getParent:function(jq,_1a6){ + return _120(jq[0],_1a6); + },getChildren:function(jq,_1a7){ + return _14d(jq[0],_1a7); + },getChecked:function(jq,_1a8){ + return _178(jq[0],_1a8); + },getSelected:function(jq){ + return _17c(jq[0]); + },isLeaf:function(jq,_1a9){ + return _15c(jq[0],_1a9); + },find:function(jq,id){ + return _183(jq[0],id); + },select:function(jq,_1aa){ + return jq.each(function(){ + _189(this,_1aa); + }); + },check:function(jq,_1ab){ + return jq.each(function(){ + _10d(this,_1ab,true); + }); + },uncheck:function(jq,_1ac){ + return jq.each(function(){ + _10d(this,_1ac,false); + }); + },collapse:function(jq,_1ad){ + return jq.each(function(){ + _143(this,_1ad); + }); + },expand:function(jq,_1ae){ + return jq.each(function(){ + _13e(this,_1ae); + }); + },collapseAll:function(jq,_1af){ + return jq.each(function(){ + _155(this,_1af); + }); + },expandAll:function(jq,_1b0){ + return jq.each(function(){ + _149(this,_1b0); + }); + },expandTo:function(jq,_1b1){ + return jq.each(function(){ + _14e(this,_1b1); + }); + },scrollTo:function(jq,_1b2){ + return jq.each(function(){ + _152(this,_1b2); + }); + },toggle:function(jq,_1b3){ + return jq.each(function(){ + _146(this,_1b3); + }); + },append:function(jq,_1b4){ + return jq.each(function(){ + _159(this,_1b4); + }); + },insert:function(jq,_1b5){ + return jq.each(function(){ + _15e(this,_1b5); + }); + },remove:function(jq,_1b6){ + return jq.each(function(){ + _163(this,_1b6); + }); + },pop:function(jq,_1b7){ + var node=jq.tree("getData",_1b7); + jq.tree("remove",_1b7); + return node; + },update:function(jq,_1b8){ + return jq.each(function(){ + _12d(this,$.extend({},_1b8,{checkState:_1b8.checked?"checked":(_1b8.checked===false?"unchecked":undefined)})); + }); + },enableDnd:function(jq){ + return jq.each(function(){ + _f0(this); + }); + },disableDnd:function(jq){ + return jq.each(function(){ + _ec(this); + }); + },beginEdit:function(jq,_1b9){ + return jq.each(function(){ + _18e(this,_1b9); + }); + },endEdit:function(jq,_1ba){ + return jq.each(function(){ + _193(this,_1ba); + }); + },cancelEdit:function(jq,_1bb){ + return jq.each(function(){ + _197(this,_1bb); + }); + },doFilter:function(jq,q){ + return jq.each(function(){ + _19a(this,q); + }); + }}; + $.fn.tree.parseOptions=function(_1bc){ + var t=$(_1bc); + return $.extend({},$.parser.parseOptions(_1bc,["url","method",{checkbox:"boolean",cascadeCheck:"boolean",onlyLeafCheck:"boolean"},{animate:"boolean",lines:"boolean",dnd:"boolean"}])); + }; + $.fn.tree.parseData=function(_1bd){ + var data=[]; + _1be(data,$(_1bd)); + return data; + function _1be(aa,tree){ + tree.children("li").each(function(){ + var node=$(this); + var item=$.extend({},$.parser.parseOptions(this,["id","iconCls","state"]),{checked:(node.attr("checked")?true:undefined)}); + item.text=node.children("span").html(); + if(!item.text){ + item.text=node.html(); + } + var _1bf=node.children("ul"); + if(_1bf.length){ + item.children=[]; + _1be(item.children,_1bf); + } + aa.push(item); + }); + }; + }; + var _1c0=1; + var _1c1={render:function(_1c2,ul,data){ + var _1c3=$.data(_1c2,"tree"); + var opts=_1c3.options; + var _1c4=$(ul).prev(".tree-node"); + var _1c5=_1c4.length?$(_1c2).tree("getNode",_1c4[0]):null; + var _1c6=_1c4.find("span.tree-indent, span.tree-hit").length; + var cc=_1c7.call(this,_1c6,data); + $(ul).append(cc.join("")); + function _1c7(_1c8,_1c9){ + var cc=[]; + for(var i=0;i<_1c9.length;i++){ + var item=_1c9[i]; + if(item.state!="open"&&item.state!="closed"){ + item.state="open"; + } + item.domId="_easyui_tree_"+_1c0++; + cc.push("
    • "); + cc.push("
      "); + for(var j=0;j<_1c8;j++){ + cc.push(""); + } + if(item.state=="closed"){ + cc.push(""); + cc.push(""); + }else{ + if(item.children&&item.children.length){ + cc.push(""); + cc.push(""); + }else{ + cc.push(""); + cc.push(""); + } + } + if(this.hasCheckbox(_1c2,item)){ + var flag=0; + if(_1c5&&_1c5.checkState=="checked"&&opts.cascadeCheck){ + flag=1; + item.checked=true; + }else{ + if(item.checked){ + $.easyui.addArrayItem(_1c3.tmpIds,item.domId); + } + } + item.checkState=flag?"checked":"unchecked"; + cc.push(""); + }else{ + item.checkState=undefined; + item.checked=undefined; + } + cc.push(""+opts.formatter.call(_1c2,item)+""); + cc.push("
      "); + if(item.children&&item.children.length){ + var tmp=_1c7.call(this,_1c8+1,item.children); + cc.push("
        "); + cc=cc.concat(tmp); + cc.push("
      "); + } + cc.push("
    • "); + } + return cc; + }; + },hasCheckbox:function(_1ca,item){ + var _1cb=$.data(_1ca,"tree"); + var opts=_1cb.options; + if(opts.checkbox){ + if($.isFunction(opts.checkbox)){ + if(opts.checkbox.call(_1ca,item)){ + return true; + }else{ + return false; + } + }else{ + if(opts.onlyLeafCheck){ + if(item.state=="open"&&!(item.children&&item.children.length)){ + return true; + } + }else{ + return true; + } + } + } + return false; + }}; + $.fn.tree.defaults={url:null,method:"post",animate:false,checkbox:false,cascadeCheck:true,onlyLeafCheck:false,lines:false,dnd:false,data:null,queryParams:{},formatter:function(node){ + return node.text; + },filter:function(q,node){ + var qq=[]; + $.map($.isArray(q)?q:[q],function(q){ + q=$.trim(q); + if(q){ + qq.push(q); + } + }); + for(var i=0;i=0){ + return true; + } + } + return !qq.length; + },loader:function(_1cd,_1ce,_1cf){ + var opts=$(this).tree("options"); + if(!opts.url){ + return false; + } + $.ajax({type:opts.method,url:opts.url,data:_1cd,dataType:"json",success:function(data){ + _1ce(data); + },error:function(){ + _1cf.apply(this,arguments); + }}); + },loadFilter:function(data,_1d0){ + return data; + },view:_1c1,onBeforeLoad:function(node,_1d1){ + },onLoadSuccess:function(node,data){ + },onLoadError:function(){ + },onClick:function(node){ + },onDblClick:function(node){ + },onBeforeExpand:function(node){ + },onExpand:function(node){ + },onBeforeCollapse:function(node){ + },onCollapse:function(node){ + },onBeforeCheck:function(node,_1d2){ + },onCheck:function(node,_1d3){ + },onBeforeSelect:function(node){ + },onSelect:function(node){ + },onContextMenu:function(e,node){ + },onBeforeDrag:function(node){ + },onStartDrag:function(node){ + },onStopDrag:function(node){ + },onDragEnter:function(_1d4,_1d5){ + },onDragOver:function(_1d6,_1d7){ + },onDragLeave:function(_1d8,_1d9){ + },onBeforeDrop:function(_1da,_1db,_1dc){ + },onDrop:function(_1dd,_1de,_1df){ + },onBeforeEdit:function(node){ + },onAfterEdit:function(node){ + },onCancelEdit:function(node){ + }}; +})(jQuery); +(function($){ + function init(_1e0){ + $(_1e0).addClass("progressbar"); + $(_1e0).html("
      "); + $(_1e0).bind("_resize",function(e,_1e1){ + if($(this).hasClass("easyui-fluid")||_1e1){ + _1e2(_1e0); + } + return false; + }); + return $(_1e0); + }; + function _1e2(_1e3,_1e4){ + var opts=$.data(_1e3,"progressbar").options; + var bar=$.data(_1e3,"progressbar").bar; + if(_1e4){ + opts.width=_1e4; + } + bar._size(opts); + bar.find("div.progressbar-text").css("width",bar.width()); + bar.find("div.progressbar-text,div.progressbar-value").css({height:bar.height()+"px",lineHeight:bar.height()+"px"}); + }; + $.fn.progressbar=function(_1e5,_1e6){ + if(typeof _1e5=="string"){ + var _1e7=$.fn.progressbar.methods[_1e5]; + if(_1e7){ + return _1e7(this,_1e6); + } + } + _1e5=_1e5||{}; + return this.each(function(){ + var _1e8=$.data(this,"progressbar"); + if(_1e8){ + $.extend(_1e8.options,_1e5); + }else{ + _1e8=$.data(this,"progressbar",{options:$.extend({},$.fn.progressbar.defaults,$.fn.progressbar.parseOptions(this),_1e5),bar:init(this)}); + } + $(this).progressbar("setValue",_1e8.options.value); + _1e2(this); + }); + }; + $.fn.progressbar.methods={options:function(jq){ + return $.data(jq[0],"progressbar").options; + },resize:function(jq,_1e9){ + return jq.each(function(){ + _1e2(this,_1e9); + }); + },getValue:function(jq){ + return $.data(jq[0],"progressbar").options.value; + },setValue:function(jq,_1ea){ + if(_1ea<0){ + _1ea=0; + } + if(_1ea>100){ + _1ea=100; + } + return jq.each(function(){ + var opts=$.data(this,"progressbar").options; + var text=opts.text.replace(/{value}/,_1ea); + var _1eb=opts.value; + opts.value=_1ea; + $(this).find("div.progressbar-value").width(_1ea+"%"); + $(this).find("div.progressbar-text").html(text); + if(_1eb!=_1ea){ + opts.onChange.call(this,_1ea,_1eb); + } + }); + }}; + $.fn.progressbar.parseOptions=function(_1ec){ + return $.extend({},$.parser.parseOptions(_1ec,["width","height","text",{value:"number"}])); + }; + $.fn.progressbar.defaults={width:"auto",height:22,value:0,text:"{value}%",onChange:function(_1ed,_1ee){ + }}; +})(jQuery); +(function($){ + function init(_1ef){ + $(_1ef).addClass("tooltip-f"); + }; + function _1f0(_1f1){ + var opts=$.data(_1f1,"tooltip").options; + $(_1f1).unbind(".tooltip").bind(opts.showEvent+".tooltip",function(e){ + $(_1f1).tooltip("show",e); + }).bind(opts.hideEvent+".tooltip",function(e){ + $(_1f1).tooltip("hide",e); + }).bind("mousemove.tooltip",function(e){ + if(opts.trackMouse){ + opts.trackMouseX=e.pageX; + opts.trackMouseY=e.pageY; + $(_1f1).tooltip("reposition"); + } + }); + }; + function _1f2(_1f3){ + var _1f4=$.data(_1f3,"tooltip"); + if(_1f4.showTimer){ + clearTimeout(_1f4.showTimer); + _1f4.showTimer=null; + } + if(_1f4.hideTimer){ + clearTimeout(_1f4.hideTimer); + _1f4.hideTimer=null; + } + }; + function _1f5(_1f6){ + var _1f7=$.data(_1f6,"tooltip"); + if(!_1f7||!_1f7.tip){ + return; + } + var opts=_1f7.options; + var tip=_1f7.tip; + var pos={left:-100000,top:-100000}; + if($(_1f6).is(":visible")){ + pos=_1f8(opts.position); + if(opts.position=="top"&&pos.top<0){ + pos=_1f8("bottom"); + }else{ + if((opts.position=="bottom")&&(pos.top+tip._outerHeight()>$(window)._outerHeight()+$(document).scrollTop())){ + pos=_1f8("top"); + } + } + if(pos.left<0){ + if(opts.position=="left"){ + pos=_1f8("right"); + }else{ + $(_1f6).tooltip("arrow").css("left",tip._outerWidth()/2+pos.left); + pos.left=0; + } + }else{ + if(pos.left+tip._outerWidth()>$(window)._outerWidth()+$(document)._scrollLeft()){ + if(opts.position=="right"){ + pos=_1f8("left"); + }else{ + var left=pos.left; + pos.left=$(window)._outerWidth()+$(document)._scrollLeft()-tip._outerWidth(); + $(_1f6).tooltip("arrow").css("left",tip._outerWidth()/2-(pos.left-left)); + } + } + } + } + tip.css({left:pos.left,top:pos.top,zIndex:(opts.zIndex!=undefined?opts.zIndex:($.fn.window?$.fn.window.defaults.zIndex++:""))}); + opts.onPosition.call(_1f6,pos.left,pos.top); + function _1f8(_1f9){ + opts.position=_1f9||"bottom"; + tip.removeClass("tooltip-top tooltip-bottom tooltip-left tooltip-right").addClass("tooltip-"+opts.position); + var left,top; + var _1fa=$.isFunction(opts.deltaX)?opts.deltaX.call(_1f6,opts.position):opts.deltaX; + var _1fb=$.isFunction(opts.deltaY)?opts.deltaY.call(_1f6,opts.position):opts.deltaY; + if(opts.trackMouse){ + t=$(); + left=opts.trackMouseX+_1fa; + top=opts.trackMouseY+_1fb; + }else{ + var t=$(_1f6); + left=t.offset().left+_1fa; + top=t.offset().top+_1fb; + } + switch(opts.position){ + case "right": + left+=t._outerWidth()+12+(opts.trackMouse?12:0); + top-=(tip._outerHeight()-t._outerHeight())/2; + break; + case "left": + left-=tip._outerWidth()+12+(opts.trackMouse?12:0); + top-=(tip._outerHeight()-t._outerHeight())/2; + break; + case "top": + left-=(tip._outerWidth()-t._outerWidth())/2; + top-=tip._outerHeight()+12+(opts.trackMouse?12:0); + break; + case "bottom": + left-=(tip._outerWidth()-t._outerWidth())/2; + top+=t._outerHeight()+12+(opts.trackMouse?12:0); + break; + } + return {left:left,top:top}; + }; + }; + function _1fc(_1fd,e){ + var _1fe=$.data(_1fd,"tooltip"); + var opts=_1fe.options; + var tip=_1fe.tip; + if(!tip){ + tip=$("
      "+"
      "+"
      "+"
      "+"
      ").appendTo("body"); + _1fe.tip=tip; + _1ff(_1fd); + } + _1f2(_1fd); + _1fe.showTimer=setTimeout(function(){ + $(_1fd).tooltip("reposition"); + tip.show(); + opts.onShow.call(_1fd,e); + var _200=tip.children(".tooltip-arrow-outer"); + var _201=tip.children(".tooltip-arrow"); + var bc="border-"+opts.position+"-color"; + _200.add(_201).css({borderTopColor:"",borderBottomColor:"",borderLeftColor:"",borderRightColor:""}); + _200.css(bc,tip.css(bc)); + _201.css(bc,tip.css("backgroundColor")); + },opts.showDelay); + }; + function _202(_203,e){ + var _204=$.data(_203,"tooltip"); + if(_204&&_204.tip){ + _1f2(_203); + _204.hideTimer=setTimeout(function(){ + _204.tip.hide(); + _204.options.onHide.call(_203,e); + },_204.options.hideDelay); + } + }; + function _1ff(_205,_206){ + var _207=$.data(_205,"tooltip"); + var opts=_207.options; + if(_206){ + opts.content=_206; + } + if(!_207.tip){ + return; + } + var cc=typeof opts.content=="function"?opts.content.call(_205):opts.content; + _207.tip.children(".tooltip-content").html(cc); + opts.onUpdate.call(_205,cc); + }; + function _208(_209){ + var _20a=$.data(_209,"tooltip"); + if(_20a){ + _1f2(_209); + var opts=_20a.options; + if(_20a.tip){ + _20a.tip.remove(); + } + if(opts._title){ + $(_209).attr("title",opts._title); + } + $.removeData(_209,"tooltip"); + $(_209).unbind(".tooltip").removeClass("tooltip-f"); + opts.onDestroy.call(_209); + } + }; + $.fn.tooltip=function(_20b,_20c){ + if(typeof _20b=="string"){ + return $.fn.tooltip.methods[_20b](this,_20c); + } + _20b=_20b||{}; + return this.each(function(){ + var _20d=$.data(this,"tooltip"); + if(_20d){ + $.extend(_20d.options,_20b); + }else{ + $.data(this,"tooltip",{options:$.extend({},$.fn.tooltip.defaults,$.fn.tooltip.parseOptions(this),_20b)}); + init(this); + } + _1f0(this); + _1ff(this); + }); + }; + $.fn.tooltip.methods={options:function(jq){ + return $.data(jq[0],"tooltip").options; + },tip:function(jq){ + return $.data(jq[0],"tooltip").tip; + },arrow:function(jq){ + return jq.tooltip("tip").children(".tooltip-arrow-outer,.tooltip-arrow"); + },show:function(jq,e){ + return jq.each(function(){ + _1fc(this,e); + }); + },hide:function(jq,e){ + return jq.each(function(){ + _202(this,e); + }); + },update:function(jq,_20e){ + return jq.each(function(){ + _1ff(this,_20e); + }); + },reposition:function(jq){ + return jq.each(function(){ + _1f5(this); + }); + },destroy:function(jq){ + return jq.each(function(){ + _208(this); + }); + }}; + $.fn.tooltip.parseOptions=function(_20f){ + var t=$(_20f); + var opts=$.extend({},$.parser.parseOptions(_20f,["position","showEvent","hideEvent","content",{trackMouse:"boolean",deltaX:"number",deltaY:"number",showDelay:"number",hideDelay:"number"}]),{_title:t.attr("title")}); + t.attr("title",""); + if(!opts.content){ + opts.content=opts._title; + } + return opts; + }; + $.fn.tooltip.defaults={position:"bottom",content:null,trackMouse:false,deltaX:0,deltaY:0,showEvent:"mouseenter",hideEvent:"mouseleave",showDelay:200,hideDelay:100,onShow:function(e){ + },onHide:function(e){ + },onUpdate:function(_210){ + },onPosition:function(left,top){ + },onDestroy:function(){ + }}; +})(jQuery); +(function($){ + $.fn._remove=function(){ + return this.each(function(){ + $(this).remove(); + try{ + this.outerHTML=""; + } + catch(err){ + } + }); + }; + function _211(node){ + node._remove(); + }; + function _212(_213,_214){ + var _215=$.data(_213,"panel"); + var opts=_215.options; + var _216=_215.panel; + var _217=_216.children(".panel-header"); + var _218=_216.children(".panel-body"); + var _219=_216.children(".panel-footer"); + var _21a=(opts.halign=="left"||opts.halign=="right"); + if(_214){ + $.extend(opts,{width:_214.width,height:_214.height,minWidth:_214.minWidth,maxWidth:_214.maxWidth,minHeight:_214.minHeight,maxHeight:_214.maxHeight,left:_214.left,top:_214.top}); + } + _216._size(opts); + if(!_21a){ + _217._outerWidth(_216.width()); + } + _218._outerWidth(_216.width()); + if(!isNaN(parseInt(opts.height))){ + if(_21a){ + if(opts.header){ + var _21b=$(opts.header)._outerWidth(); + }else{ + _217.css("width",""); + var _21b=_217._outerWidth(); + } + var _21c=_217.find(".panel-title"); + _21b+=Math.min(_21c._outerWidth(),_21c._outerHeight()); + var _21d=_216.height(); + _217._outerWidth(_21b)._outerHeight(_21d); + _21c._outerWidth(_217.height()); + _218._outerWidth(_216.width()-_21b-_219._outerWidth())._outerHeight(_21d); + _219._outerHeight(_21d); + _218.css({left:"",right:""}).css(opts.halign,(_217.position()[opts.halign]+_21b)+"px"); + opts.panelCssWidth=_216.css("width"); + if(opts.collapsed){ + _216._outerWidth(_21b+_219._outerWidth()); + } + }else{ + _218._outerHeight(_216.height()-_217._outerHeight()-_219._outerHeight()); + } + }else{ + _218.css("height",""); + var min=$.parser.parseValue("minHeight",opts.minHeight,_216.parent()); + var max=$.parser.parseValue("maxHeight",opts.maxHeight,_216.parent()); + var _21e=_217._outerHeight()+_219._outerHeight()+_216._outerHeight()-_216.height(); + _218._size("minHeight",min?(min-_21e):""); + _218._size("maxHeight",max?(max-_21e):""); + } + _216.css({height:(_21a?undefined:""),minHeight:"",maxHeight:"",left:opts.left,top:opts.top}); + opts.onResize.apply(_213,[opts.width,opts.height]); + $(_213).panel("doLayout"); + }; + function _21f(_220,_221){ + var _222=$.data(_220,"panel"); + var opts=_222.options; + var _223=_222.panel; + if(_221){ + if(_221.left!=null){ + opts.left=_221.left; + } + if(_221.top!=null){ + opts.top=_221.top; + } + } + _223.css({left:opts.left,top:opts.top}); + _223.find(".tooltip-f").each(function(){ + $(this).tooltip("reposition"); + }); + opts.onMove.apply(_220,[opts.left,opts.top]); + }; + function _224(_225){ + $(_225).addClass("panel-body")._size("clear"); + var _226=$("
      ").insertBefore(_225); + _226[0].appendChild(_225); + _226.bind("_resize",function(e,_227){ + if($(this).hasClass("easyui-fluid")||_227){ + _212(_225); + } + return false; + }); + return _226; + }; + function _228(_229){ + var _22a=$.data(_229,"panel"); + var opts=_22a.options; + var _22b=_22a.panel; + _22b.css(opts.style); + _22b.addClass(opts.cls); + _22b.removeClass("panel-hleft panel-hright").addClass("panel-h"+opts.halign); + _22c(); + _22d(); + var _22e=$(_229).panel("header"); + var body=$(_229).panel("body"); + var _22f=$(_229).siblings(".panel-footer"); + if(opts.border){ + _22e.removeClass("panel-header-noborder"); + body.removeClass("panel-body-noborder"); + _22f.removeClass("panel-footer-noborder"); + }else{ + _22e.addClass("panel-header-noborder"); + body.addClass("panel-body-noborder"); + _22f.addClass("panel-footer-noborder"); + } + _22e.addClass(opts.headerCls); + body.addClass(opts.bodyCls); + $(_229).attr("id",opts.id||""); + if(opts.content){ + $(_229).panel("clear"); + $(_229).html(opts.content); + $.parser.parse($(_229)); + } + function _22c(){ + if(opts.noheader||(!opts.title&&!opts.header)){ + _211(_22b.children(".panel-header")); + _22b.children(".panel-body").addClass("panel-body-noheader"); + }else{ + if(opts.header){ + $(opts.header).addClass("panel-header").prependTo(_22b); + }else{ + var _230=_22b.children(".panel-header"); + if(!_230.length){ + _230=$("
      ").prependTo(_22b); + } + if(!$.isArray(opts.tools)){ + _230.find("div.panel-tool .panel-tool-a").appendTo(opts.tools); + } + _230.empty(); + var _231=$("
      ").html(opts.title).appendTo(_230); + if(opts.iconCls){ + _231.addClass("panel-with-icon"); + $("
      ").addClass(opts.iconCls).appendTo(_230); + } + if(opts.halign=="left"||opts.halign=="right"){ + _231.addClass("panel-title-"+opts.titleDirection); + } + var tool=$("
      ").appendTo(_230); + tool.bind("click",function(e){ + e.stopPropagation(); + }); + if(opts.tools){ + if($.isArray(opts.tools)){ + $.map(opts.tools,function(t){ + _232(tool,t.iconCls,eval(t.handler)); + }); + }else{ + $(opts.tools).children().each(function(){ + $(this).addClass($(this).attr("iconCls")).addClass("panel-tool-a").appendTo(tool); + }); + } + } + if(opts.collapsible){ + _232(tool,"panel-tool-collapse",function(){ + if(opts.collapsed==true){ + _252(_229,true); + }else{ + _243(_229,true); + } + }); + } + if(opts.minimizable){ + _232(tool,"panel-tool-min",function(){ + _258(_229); + }); + } + if(opts.maximizable){ + _232(tool,"panel-tool-max",function(){ + if(opts.maximized==true){ + _25b(_229); + }else{ + _242(_229); + } + }); + } + if(opts.closable){ + _232(tool,"panel-tool-close",function(){ + _244(_229); + }); + } + } + _22b.children("div.panel-body").removeClass("panel-body-noheader"); + } + }; + function _232(c,icon,_233){ + var a=$("").addClass(icon).appendTo(c); + a.bind("click",_233); + }; + function _22d(){ + if(opts.footer){ + $(opts.footer).addClass("panel-footer").appendTo(_22b); + $(_229).addClass("panel-body-nobottom"); + }else{ + _22b.children(".panel-footer").remove(); + $(_229).removeClass("panel-body-nobottom"); + } + }; + }; + function _234(_235,_236){ + var _237=$.data(_235,"panel"); + var opts=_237.options; + if(_238){ + opts.queryParams=_236; + } + if(!opts.href){ + return; + } + if(!_237.isLoaded||!opts.cache){ + var _238=$.extend({},opts.queryParams); + if(opts.onBeforeLoad.call(_235,_238)==false){ + return; + } + _237.isLoaded=false; + if(opts.loadingMessage){ + $(_235).panel("clear"); + $(_235).html($("
      ").html(opts.loadingMessage)); + } + opts.loader.call(_235,_238,function(data){ + var _239=opts.extractor.call(_235,data); + $(_235).panel("clear"); + $(_235).html(_239); + $.parser.parse($(_235)); + opts.onLoad.apply(_235,arguments); + _237.isLoaded=true; + },function(){ + opts.onLoadError.apply(_235,arguments); + }); + } + }; + function _23a(_23b){ + var t=$(_23b); + t.find(".combo-f").each(function(){ + $(this).combo("destroy"); + }); + t.find(".m-btn").each(function(){ + $(this).menubutton("destroy"); + }); + t.find(".s-btn").each(function(){ + $(this).splitbutton("destroy"); + }); + t.find(".tooltip-f").each(function(){ + $(this).tooltip("destroy"); + }); + t.children("div").each(function(){ + $(this)._size("unfit"); + }); + t.empty(); + }; + function _23c(_23d){ + $(_23d).panel("doLayout",true); + }; + function _23e(_23f,_240){ + var opts=$.data(_23f,"panel").options; + var _241=$.data(_23f,"panel").panel; + if(_240!=true){ + if(opts.onBeforeOpen.call(_23f)==false){ + return; + } + } + _241.stop(true,true); + if($.isFunction(opts.openAnimation)){ + opts.openAnimation.call(_23f,cb); + }else{ + switch(opts.openAnimation){ + case "slide": + _241.slideDown(opts.openDuration,cb); + break; + case "fade": + _241.fadeIn(opts.openDuration,cb); + break; + case "show": + _241.show(opts.openDuration,cb); + break; + default: + _241.show(); + cb(); + } + } + function cb(){ + opts.closed=false; + opts.minimized=false; + var tool=_241.children(".panel-header").find("a.panel-tool-restore"); + if(tool.length){ + opts.maximized=true; + } + opts.onOpen.call(_23f); + if(opts.maximized==true){ + opts.maximized=false; + _242(_23f); + } + if(opts.collapsed==true){ + opts.collapsed=false; + _243(_23f); + } + if(!opts.collapsed){ + _234(_23f); + _23c(_23f); + } + }; + }; + function _244(_245,_246){ + var _247=$.data(_245,"panel"); + var opts=_247.options; + var _248=_247.panel; + if(_246!=true){ + if(opts.onBeforeClose.call(_245)==false){ + return; + } + } + _248.find(".tooltip-f").each(function(){ + $(this).tooltip("hide"); + }); + _248.stop(true,true); + _248._size("unfit"); + if($.isFunction(opts.closeAnimation)){ + opts.closeAnimation.call(_245,cb); + }else{ + switch(opts.closeAnimation){ + case "slide": + _248.slideUp(opts.closeDuration,cb); + break; + case "fade": + _248.fadeOut(opts.closeDuration,cb); + break; + case "hide": + _248.hide(opts.closeDuration,cb); + break; + default: + _248.hide(); + cb(); + } + } + function cb(){ + opts.closed=true; + opts.onClose.call(_245); + }; + }; + function _249(_24a,_24b){ + var _24c=$.data(_24a,"panel"); + var opts=_24c.options; + var _24d=_24c.panel; + if(_24b!=true){ + if(opts.onBeforeDestroy.call(_24a)==false){ + return; + } + } + $(_24a).panel("clear").panel("clear","footer"); + _211(_24d); + opts.onDestroy.call(_24a); + }; + function _243(_24e,_24f){ + var opts=$.data(_24e,"panel").options; + var _250=$.data(_24e,"panel").panel; + var body=_250.children(".panel-body"); + var _251=_250.children(".panel-header"); + var tool=_251.find("a.panel-tool-collapse"); + if(opts.collapsed==true){ + return; + } + body.stop(true,true); + if(opts.onBeforeCollapse.call(_24e)==false){ + return; + } + tool.addClass("panel-tool-expand"); + if(_24f==true){ + if(opts.halign=="left"||opts.halign=="right"){ + _250.animate({width:_251._outerWidth()+_250.children(".panel-footer")._outerWidth()},function(){ + cb(); + }); + }else{ + body.slideUp("normal",function(){ + cb(); + }); + } + }else{ + if(opts.halign=="left"||opts.halign=="right"){ + _250._outerWidth(_251._outerWidth()+_250.children(".panel-footer")._outerWidth()); + } + cb(); + } + function cb(){ + body.hide(); + opts.collapsed=true; + opts.onCollapse.call(_24e); + }; + }; + function _252(_253,_254){ + var opts=$.data(_253,"panel").options; + var _255=$.data(_253,"panel").panel; + var body=_255.children(".panel-body"); + var tool=_255.children(".panel-header").find("a.panel-tool-collapse"); + if(opts.collapsed==false){ + return; + } + body.stop(true,true); + if(opts.onBeforeExpand.call(_253)==false){ + return; + } + tool.removeClass("panel-tool-expand"); + if(_254==true){ + if(opts.halign=="left"||opts.halign=="right"){ + body.show(); + _255.animate({width:opts.panelCssWidth},function(){ + cb(); + }); + }else{ + body.slideDown("normal",function(){ + cb(); + }); + } + }else{ + if(opts.halign=="left"||opts.halign=="right"){ + _255.css("width",opts.panelCssWidth); + } + cb(); + } + function cb(){ + body.show(); + opts.collapsed=false; + opts.onExpand.call(_253); + _234(_253); + _23c(_253); + }; + }; + function _242(_256){ + var opts=$.data(_256,"panel").options; + var _257=$.data(_256,"panel").panel; + var tool=_257.children(".panel-header").find("a.panel-tool-max"); + if(opts.maximized==true){ + return; + } + tool.addClass("panel-tool-restore"); + if(!$.data(_256,"panel").original){ + $.data(_256,"panel").original={width:opts.width,height:opts.height,left:opts.left,top:opts.top,fit:opts.fit}; + } + opts.left=0; + opts.top=0; + opts.fit=true; + _212(_256); + opts.minimized=false; + opts.maximized=true; + opts.onMaximize.call(_256); + }; + function _258(_259){ + var opts=$.data(_259,"panel").options; + var _25a=$.data(_259,"panel").panel; + _25a._size("unfit"); + _25a.hide(); + opts.minimized=true; + opts.maximized=false; + opts.onMinimize.call(_259); + }; + function _25b(_25c){ + var opts=$.data(_25c,"panel").options; + var _25d=$.data(_25c,"panel").panel; + var tool=_25d.children(".panel-header").find("a.panel-tool-max"); + if(opts.maximized==false){ + return; + } + _25d.show(); + tool.removeClass("panel-tool-restore"); + $.extend(opts,$.data(_25c,"panel").original); + _212(_25c); + opts.minimized=false; + opts.maximized=false; + $.data(_25c,"panel").original=null; + opts.onRestore.call(_25c); + }; + function _25e(_25f,_260){ + $.data(_25f,"panel").options.title=_260; + $(_25f).panel("header").find("div.panel-title").html(_260); + }; + var _261=null; + $(window).unbind(".panel").bind("resize.panel",function(){ + if(_261){ + clearTimeout(_261); + } + _261=setTimeout(function(){ + var _262=$("body.layout"); + if(_262.length){ + _262.layout("resize"); + $("body").children(".easyui-fluid:visible").each(function(){ + $(this).triggerHandler("_resize"); + }); + }else{ + $("body").panel("doLayout"); + } + _261=null; + },100); + }); + $.fn.panel=function(_263,_264){ + if(typeof _263=="string"){ + return $.fn.panel.methods[_263](this,_264); + } + _263=_263||{}; + return this.each(function(){ + var _265=$.data(this,"panel"); + var opts; + if(_265){ + opts=$.extend(_265.options,_263); + _265.isLoaded=false; + }else{ + opts=$.extend({},$.fn.panel.defaults,$.fn.panel.parseOptions(this),_263); + $(this).attr("title",""); + _265=$.data(this,"panel",{options:opts,panel:_224(this),isLoaded:false}); + } + _228(this); + $(this).show(); + if(opts.doSize==true){ + _265.panel.css("display","block"); + _212(this); + } + if(opts.closed==true||opts.minimized==true){ + _265.panel.hide(); + }else{ + _23e(this); + } + }); + }; + $.fn.panel.methods={options:function(jq){ + return $.data(jq[0],"panel").options; + },panel:function(jq){ + return $.data(jq[0],"panel").panel; + },header:function(jq){ + return $.data(jq[0],"panel").panel.children(".panel-header"); + },footer:function(jq){ + return jq.panel("panel").children(".panel-footer"); + },body:function(jq){ + return $.data(jq[0],"panel").panel.children(".panel-body"); + },setTitle:function(jq,_266){ + return jq.each(function(){ + _25e(this,_266); + }); + },open:function(jq,_267){ + return jq.each(function(){ + _23e(this,_267); + }); + },close:function(jq,_268){ + return jq.each(function(){ + _244(this,_268); + }); + },destroy:function(jq,_269){ + return jq.each(function(){ + _249(this,_269); + }); + },clear:function(jq,type){ + return jq.each(function(){ + _23a(type=="footer"?$(this).panel("footer"):this); + }); + },refresh:function(jq,href){ + return jq.each(function(){ + var _26a=$.data(this,"panel"); + _26a.isLoaded=false; + if(href){ + if(typeof href=="string"){ + _26a.options.href=href; + }else{ + _26a.options.queryParams=href; + } + } + _234(this); + }); + },resize:function(jq,_26b){ + return jq.each(function(){ + _212(this,_26b); + }); + },doLayout:function(jq,all){ + return jq.each(function(){ + _26c(this,"body"); + _26c($(this).siblings(".panel-footer")[0],"footer"); + function _26c(_26d,type){ + if(!_26d){ + return; + } + var _26e=_26d==$("body")[0]; + var s=$(_26d).find("div.panel:visible,div.accordion:visible,div.tabs-container:visible,div.layout:visible,.easyui-fluid:visible").filter(function(_26f,el){ + var p=$(el).parents(".panel-"+type+":first"); + return _26e?p.length==0:p[0]==_26d; + }); + s.each(function(){ + $(this).triggerHandler("_resize",[all||false]); + }); + }; + }); + },move:function(jq,_270){ + return jq.each(function(){ + _21f(this,_270); + }); + },maximize:function(jq){ + return jq.each(function(){ + _242(this); + }); + },minimize:function(jq){ + return jq.each(function(){ + _258(this); + }); + },restore:function(jq){ + return jq.each(function(){ + _25b(this); + }); + },collapse:function(jq,_271){ + return jq.each(function(){ + _243(this,_271); + }); + },expand:function(jq,_272){ + return jq.each(function(){ + _252(this,_272); + }); + }}; + $.fn.panel.parseOptions=function(_273){ + var t=$(_273); + var hh=t.children(".panel-header,header"); + var ff=t.children(".panel-footer,footer"); + return $.extend({},$.parser.parseOptions(_273,["id","width","height","left","top","title","iconCls","cls","headerCls","bodyCls","tools","href","method","header","footer","halign","titleDirection",{cache:"boolean",fit:"boolean",border:"boolean",noheader:"boolean"},{collapsible:"boolean",minimizable:"boolean",maximizable:"boolean"},{closable:"boolean",collapsed:"boolean",minimized:"boolean",maximized:"boolean",closed:"boolean"},"openAnimation","closeAnimation",{openDuration:"number",closeDuration:"number"},]),{loadingMessage:(t.attr("loadingMessage")!=undefined?t.attr("loadingMessage"):undefined),header:(hh.length?hh.removeClass("panel-header"):undefined),footer:(ff.length?ff.removeClass("panel-footer"):undefined)}); + }; + $.fn.panel.defaults={id:null,title:null,iconCls:null,width:"auto",height:"auto",left:null,top:null,cls:null,headerCls:null,bodyCls:null,style:{},href:null,cache:true,fit:false,border:true,doSize:true,noheader:false,content:null,halign:"top",titleDirection:"down",collapsible:false,minimizable:false,maximizable:false,closable:false,collapsed:false,minimized:false,maximized:false,closed:false,openAnimation:false,openDuration:400,closeAnimation:false,closeDuration:400,tools:null,footer:null,header:null,queryParams:{},method:"get",href:null,loadingMessage:"Loading...",loader:function(_274,_275,_276){ + var opts=$(this).panel("options"); + if(!opts.href){ + return false; + } + $.ajax({type:opts.method,url:opts.href,cache:false,data:_274,dataType:"html",success:function(data){ + _275(data); + },error:function(){ + _276.apply(this,arguments); + }}); + },extractor:function(data){ + var _277=/]*>((.|[\n\r])*)<\/body>/im; + var _278=_277.exec(data); + if(_278){ + return _278[1]; + }else{ + return data; + } + },onBeforeLoad:function(_279){ + },onLoad:function(){ + },onLoadError:function(){ + },onBeforeOpen:function(){ + },onOpen:function(){ + },onBeforeClose:function(){ + },onClose:function(){ + },onBeforeDestroy:function(){ + },onDestroy:function(){ + },onResize:function(_27a,_27b){ + },onMove:function(left,top){ + },onMaximize:function(){ + },onRestore:function(){ + },onMinimize:function(){ + },onBeforeCollapse:function(){ + },onBeforeExpand:function(){ + },onCollapse:function(){ + },onExpand:function(){ + }}; +})(jQuery); +(function($){ + function _27c(_27d,_27e){ + var _27f=$.data(_27d,"window"); + if(_27e){ + if(_27e.left!=null){ + _27f.options.left=_27e.left; + } + if(_27e.top!=null){ + _27f.options.top=_27e.top; + } + } + $(_27d).panel("move",_27f.options); + if(_27f.shadow){ + _27f.shadow.css({left:_27f.options.left,top:_27f.options.top}); + } + }; + function _280(_281,_282){ + var opts=$.data(_281,"window").options; + var pp=$(_281).window("panel"); + var _283=pp._outerWidth(); + if(opts.inline){ + var _284=pp.parent(); + opts.left=Math.ceil((_284.width()-_283)/2+_284.scrollLeft()); + }else{ + opts.left=Math.ceil(($(window)._outerWidth()-_283)/2+$(document).scrollLeft()); + } + if(_282){ + _27c(_281); + } + }; + function _285(_286,_287){ + var opts=$.data(_286,"window").options; + var pp=$(_286).window("panel"); + var _288=pp._outerHeight(); + if(opts.inline){ + var _289=pp.parent(); + opts.top=Math.ceil((_289.height()-_288)/2+_289.scrollTop()); + }else{ + opts.top=Math.ceil(($(window)._outerHeight()-_288)/2+$(document).scrollTop()); + } + if(_287){ + _27c(_286); + } + }; + function _28a(_28b){ + var _28c=$.data(_28b,"window"); + var opts=_28c.options; + var win=$(_28b).panel($.extend({},_28c.options,{border:false,doSize:true,closed:true,cls:"window "+(!opts.border?"window-thinborder window-noborder ":(opts.border=="thin"?"window-thinborder ":""))+(opts.cls||""),headerCls:"window-header "+(opts.headerCls||""),bodyCls:"window-body "+(opts.noheader?"window-body-noheader ":" ")+(opts.bodyCls||""),onBeforeDestroy:function(){ + if(opts.onBeforeDestroy.call(_28b)==false){ + return false; + } + if(_28c.shadow){ + _28c.shadow.remove(); + } + if(_28c.mask){ + _28c.mask.remove(); + } + },onClose:function(){ + if(_28c.shadow){ + _28c.shadow.hide(); + } + if(_28c.mask){ + _28c.mask.hide(); + } + opts.onClose.call(_28b); + },onOpen:function(){ + if(_28c.mask){ + _28c.mask.css($.extend({display:"block",zIndex:$.fn.window.defaults.zIndex++},$.fn.window.getMaskSize(_28b))); + } + if(_28c.shadow){ + _28c.shadow.css({display:"block",zIndex:$.fn.window.defaults.zIndex++,left:opts.left,top:opts.top,width:_28c.window._outerWidth(),height:_28c.window._outerHeight()}); + } + _28c.window.css("z-index",$.fn.window.defaults.zIndex++); + opts.onOpen.call(_28b); + },onResize:function(_28d,_28e){ + var _28f=$(this).panel("options"); + $.extend(opts,{width:_28f.width,height:_28f.height,left:_28f.left,top:_28f.top}); + if(_28c.shadow){ + _28c.shadow.css({left:opts.left,top:opts.top,width:_28c.window._outerWidth(),height:_28c.window._outerHeight()}); + } + opts.onResize.call(_28b,_28d,_28e); + },onMinimize:function(){ + if(_28c.shadow){ + _28c.shadow.hide(); + } + if(_28c.mask){ + _28c.mask.hide(); + } + _28c.options.onMinimize.call(_28b); + },onBeforeCollapse:function(){ + if(opts.onBeforeCollapse.call(_28b)==false){ + return false; + } + if(_28c.shadow){ + _28c.shadow.hide(); + } + },onExpand:function(){ + if(_28c.shadow){ + _28c.shadow.show(); + } + opts.onExpand.call(_28b); + }})); + _28c.window=win.panel("panel"); + if(_28c.mask){ + _28c.mask.remove(); + } + if(opts.modal){ + _28c.mask=$("
      ").insertAfter(_28c.window); + } + if(_28c.shadow){ + _28c.shadow.remove(); + } + if(opts.shadow){ + _28c.shadow=$("
      ").insertAfter(_28c.window); + } + var _290=opts.closed; + if(opts.left==null){ + _280(_28b); + } + if(opts.top==null){ + _285(_28b); + } + _27c(_28b); + if(!_290){ + win.window("open"); + } + }; + function _291(left,top,_292,_293){ + var _294=this; + var _295=$.data(_294,"window"); + var opts=_295.options; + if(!opts.constrain){ + return {}; + } + if($.isFunction(opts.constrain)){ + return opts.constrain.call(_294,left,top,_292,_293); + } + var win=$(_294).window("window"); + var _296=opts.inline?win.parent():$(window); + if(left<0){ + left=0; + } + if(top<_296.scrollTop()){ + top=_296.scrollTop(); + } + if(left+_292>_296.width()){ + if(_292==win.outerWidth()){ + left=_296.width()-_292; + }else{ + _292=_296.width()-left; + } + } + if(top-_296.scrollTop()+_293>_296.height()){ + if(_293==win.outerHeight()){ + top=_296.height()-_293+_296.scrollTop(); + }else{ + _293=_296.height()-top+_296.scrollTop(); + } + } + return {left:left,top:top,width:_292,height:_293}; + }; + function _297(_298){ + var _299=$.data(_298,"window"); + _299.window.draggable({handle:">div.panel-header>div.panel-title",disabled:_299.options.draggable==false,onBeforeDrag:function(e){ + if(_299.mask){ + _299.mask.css("z-index",$.fn.window.defaults.zIndex++); + } + if(_299.shadow){ + _299.shadow.css("z-index",$.fn.window.defaults.zIndex++); + } + _299.window.css("z-index",$.fn.window.defaults.zIndex++); + },onStartDrag:function(e){ + _29a(e); + },onDrag:function(e){ + _29b(e); + return false; + },onStopDrag:function(e){ + _29c(e,"move"); + }}); + _299.window.resizable({disabled:_299.options.resizable==false,onStartResize:function(e){ + _29a(e); + },onResize:function(e){ + _29b(e); + return false; + },onStopResize:function(e){ + _29c(e,"resize"); + }}); + function _29a(e){ + if(_299.pmask){ + _299.pmask.remove(); + } + _299.pmask=$("
      ").insertAfter(_299.window); + _299.pmask.css({display:"none",zIndex:$.fn.window.defaults.zIndex++,left:e.data.left,top:e.data.top,width:_299.window._outerWidth(),height:_299.window._outerHeight()}); + if(_299.proxy){ + _299.proxy.remove(); + } + _299.proxy=$("
      ").insertAfter(_299.window); + _299.proxy.css({display:"none",zIndex:$.fn.window.defaults.zIndex++,left:e.data.left,top:e.data.top}); + _299.proxy._outerWidth(e.data.width)._outerHeight(e.data.height); + _299.proxy.hide(); + setTimeout(function(){ + if(_299.pmask){ + _299.pmask.show(); + } + if(_299.proxy){ + _299.proxy.show(); + } + },500); + }; + function _29b(e){ + $.extend(e.data,_291.call(_298,e.data.left,e.data.top,e.data.width,e.data.height)); + _299.pmask.show(); + _299.proxy.css({display:"block",left:e.data.left,top:e.data.top}); + _299.proxy._outerWidth(e.data.width); + _299.proxy._outerHeight(e.data.height); + }; + function _29c(e,_29d){ + $.extend(e.data,_291.call(_298,e.data.left,e.data.top,e.data.width+0.1,e.data.height+0.1)); + $(_298).window(_29d,e.data); + _299.pmask.remove(); + _299.pmask=null; + _299.proxy.remove(); + _299.proxy=null; + }; + }; + $(function(){ + if(!$._positionFixed){ + $(window).resize(function(){ + $("body>div.window-mask:visible").css({width:"",height:""}); + setTimeout(function(){ + $("body>div.window-mask:visible").css($.fn.window.getMaskSize()); + },50); + }); + } + }); + $.fn.window=function(_29e,_29f){ + if(typeof _29e=="string"){ + var _2a0=$.fn.window.methods[_29e]; + if(_2a0){ + return _2a0(this,_29f); + }else{ + return this.panel(_29e,_29f); + } + } + _29e=_29e||{}; + return this.each(function(){ + var _2a1=$.data(this,"window"); + if(_2a1){ + $.extend(_2a1.options,_29e); + }else{ + _2a1=$.data(this,"window",{options:$.extend({},$.fn.window.defaults,$.fn.window.parseOptions(this),_29e)}); + if(!_2a1.options.inline){ + document.body.appendChild(this); + } + } + _28a(this); + _297(this); + }); + }; + $.fn.window.methods={options:function(jq){ + var _2a2=jq.panel("options"); + var _2a3=$.data(jq[0],"window").options; + return $.extend(_2a3,{closed:_2a2.closed,collapsed:_2a2.collapsed,minimized:_2a2.minimized,maximized:_2a2.maximized}); + },window:function(jq){ + return $.data(jq[0],"window").window; + },move:function(jq,_2a4){ + return jq.each(function(){ + _27c(this,_2a4); + }); + },hcenter:function(jq){ + return jq.each(function(){ + _280(this,true); + }); + },vcenter:function(jq){ + return jq.each(function(){ + _285(this,true); + }); + },center:function(jq){ + return jq.each(function(){ + _280(this); + _285(this); + _27c(this); + }); + }}; + $.fn.window.getMaskSize=function(_2a5){ + var _2a6=$(_2a5).data("window"); + if(_2a6&&_2a6.options.inline){ + return {}; + }else{ + if($._positionFixed){ + return {position:"fixed"}; + }else{ + return {width:$(document).width(),height:$(document).height()}; + } + } + }; + $.fn.window.parseOptions=function(_2a7){ + return $.extend({},$.fn.panel.parseOptions(_2a7),$.parser.parseOptions(_2a7,[{draggable:"boolean",resizable:"boolean",shadow:"boolean",modal:"boolean",inline:"boolean"}])); + }; + $.fn.window.defaults=$.extend({},$.fn.panel.defaults,{zIndex:9000,draggable:true,resizable:true,shadow:true,modal:false,border:true,inline:false,title:"New Window",collapsible:true,minimizable:true,maximizable:true,closable:true,closed:false,constrain:false}); +})(jQuery); +(function($){ + function _2a8(_2a9){ + var opts=$.data(_2a9,"dialog").options; + opts.inited=false; + $(_2a9).window($.extend({},opts,{onResize:function(w,h){ + if(opts.inited){ + _2ae(this); + opts.onResize.call(this,w,h); + } + }})); + var win=$(_2a9).window("window"); + if(opts.toolbar){ + if($.isArray(opts.toolbar)){ + $(_2a9).siblings("div.dialog-toolbar").remove(); + var _2aa=$("
      ").appendTo(win); + var tr=_2aa.find("tr"); + for(var i=0;i
      ").appendTo(tr); + }else{ + var td=$("").appendTo(tr); + var tool=$("").appendTo(td); + tool[0].onclick=eval(btn.handler||function(){ + }); + tool.linkbutton($.extend({},btn,{plain:true})); + } + } + }else{ + $(opts.toolbar).addClass("dialog-toolbar").appendTo(win); + $(opts.toolbar).show(); + } + }else{ + $(_2a9).siblings("div.dialog-toolbar").remove(); + } + if(opts.buttons){ + if($.isArray(opts.buttons)){ + $(_2a9).siblings("div.dialog-button").remove(); + var _2ab=$("
      ").appendTo(win); + for(var i=0;i").appendTo(_2ab); + if(p.handler){ + _2ac[0].onclick=p.handler; + } + _2ac.linkbutton(p); + } + }else{ + $(opts.buttons).addClass("dialog-button").appendTo(win); + $(opts.buttons).show(); + } + }else{ + $(_2a9).siblings("div.dialog-button").remove(); + } + opts.inited=true; + var _2ad=opts.closed; + win.show(); + $(_2a9).window("resize"); + if(_2ad){ + win.hide(); + } + }; + function _2ae(_2af,_2b0){ + var t=$(_2af); + var opts=t.dialog("options"); + var _2b1=opts.noheader; + var tb=t.siblings(".dialog-toolbar"); + var bb=t.siblings(".dialog-button"); + tb.insertBefore(_2af).css({borderTopWidth:(_2b1?1:0),top:(_2b1?tb.length:0)}); + bb.insertAfter(_2af); + tb.add(bb)._outerWidth(t._outerWidth()).find(".easyui-fluid:visible").each(function(){ + $(this).triggerHandler("_resize"); + }); + var _2b2=tb._outerHeight()+bb._outerHeight(); + if(!isNaN(parseInt(opts.height))){ + t._outerHeight(t._outerHeight()-_2b2); + }else{ + var _2b3=t._size("min-height"); + if(_2b3){ + t._size("min-height",_2b3-_2b2); + } + var _2b4=t._size("max-height"); + if(_2b4){ + t._size("max-height",_2b4-_2b2); + } + } + var _2b5=$.data(_2af,"window").shadow; + if(_2b5){ + var cc=t.panel("panel"); + _2b5.css({width:cc._outerWidth(),height:cc._outerHeight()}); + } + }; + $.fn.dialog=function(_2b6,_2b7){ + if(typeof _2b6=="string"){ + var _2b8=$.fn.dialog.methods[_2b6]; + if(_2b8){ + return _2b8(this,_2b7); + }else{ + return this.window(_2b6,_2b7); + } + } + _2b6=_2b6||{}; + return this.each(function(){ + var _2b9=$.data(this,"dialog"); + if(_2b9){ + $.extend(_2b9.options,_2b6); + }else{ + $.data(this,"dialog",{options:$.extend({},$.fn.dialog.defaults,$.fn.dialog.parseOptions(this),_2b6)}); + } + _2a8(this); + }); + }; + $.fn.dialog.methods={options:function(jq){ + var _2ba=$.data(jq[0],"dialog").options; + var _2bb=jq.panel("options"); + $.extend(_2ba,{width:_2bb.width,height:_2bb.height,left:_2bb.left,top:_2bb.top,closed:_2bb.closed,collapsed:_2bb.collapsed,minimized:_2bb.minimized,maximized:_2bb.maximized}); + return _2ba; + },dialog:function(jq){ + return jq.window("window"); + }}; + $.fn.dialog.parseOptions=function(_2bc){ + var t=$(_2bc); + return $.extend({},$.fn.window.parseOptions(_2bc),$.parser.parseOptions(_2bc,["toolbar","buttons"]),{toolbar:(t.children(".dialog-toolbar").length?t.children(".dialog-toolbar").removeClass("dialog-toolbar"):undefined),buttons:(t.children(".dialog-button").length?t.children(".dialog-button").removeClass("dialog-button"):undefined)}); + }; + $.fn.dialog.defaults=$.extend({},$.fn.window.defaults,{title:"New Dialog",collapsible:false,minimizable:false,maximizable:false,resizable:false,toolbar:null,buttons:null}); +})(jQuery); +(function($){ + function _2bd(){ + $(document).unbind(".messager").bind("keydown.messager",function(e){ + if(e.keyCode==27){ + $("body").children("div.messager-window").children("div.messager-body").each(function(){ + $(this).dialog("close"); + }); + }else{ + if(e.keyCode==9){ + var win=$("body").children("div.messager-window"); + if(!win.length){ + return; + } + var _2be=win.find(".messager-input,.messager-button .l-btn"); + for(var i=0;i<_2be.length;i++){ + if($(_2be[i]).is(":focus")){ + $(_2be[i>=_2be.length-1?0:i+1]).focus(); + return false; + } + } + }else{ + if(e.keyCode==13){ + var _2bf=$(e.target).closest("input.messager-input"); + if(_2bf.length){ + var dlg=_2bf.closest(".messager-body"); + _2c0(dlg,_2bf.val()); + } + } + } + } + }); + }; + function _2c1(){ + $(document).unbind(".messager"); + }; + function _2c2(_2c3){ + var opts=$.extend({},$.messager.defaults,{modal:false,shadow:false,draggable:false,resizable:false,closed:true,style:{left:"",top:"",right:0,zIndex:$.fn.window.defaults.zIndex++,bottom:-document.body.scrollTop-document.documentElement.scrollTop},title:"",width:250,height:100,minHeight:0,showType:"slide",showSpeed:600,content:_2c3.msg,timeout:4000},_2c3); + var dlg=$("
      ").appendTo("body"); + dlg.dialog($.extend({},opts,{noheader:(opts.title?false:true),openAnimation:(opts.showType),closeAnimation:(opts.showType=="show"?"hide":opts.showType),openDuration:opts.showSpeed,closeDuration:opts.showSpeed,onOpen:function(){ + dlg.dialog("dialog").hover(function(){ + if(opts.timer){ + clearTimeout(opts.timer); + } + },function(){ + _2c4(); + }); + _2c4(); + function _2c4(){ + if(opts.timeout>0){ + opts.timer=setTimeout(function(){ + if(dlg.length&&dlg.data("dialog")){ + dlg.dialog("close"); + } + },opts.timeout); + } + }; + if(_2c3.onOpen){ + _2c3.onOpen.call(this); + }else{ + opts.onOpen.call(this); + } + },onClose:function(){ + if(opts.timer){ + clearTimeout(opts.timer); + } + if(_2c3.onClose){ + _2c3.onClose.call(this); + }else{ + opts.onClose.call(this); + } + dlg.dialog("destroy"); + }})); + dlg.dialog("dialog").css(opts.style); + dlg.dialog("open"); + return dlg; + }; + function _2c5(_2c6){ + _2bd(); + var dlg=$("
      ").appendTo("body"); + dlg.dialog($.extend({},_2c6,{noheader:(_2c6.title?false:true),onClose:function(){ + _2c1(); + if(_2c6.onClose){ + _2c6.onClose.call(this); + } + dlg.dialog("destroy"); + }})); + var win=dlg.dialog("dialog").addClass("messager-window"); + win.find(".dialog-button").addClass("messager-button").find("a:first").focus(); + return dlg; + }; + function _2c0(dlg,_2c7){ + var opts=dlg.dialog("options"); + dlg.dialog("close"); + opts.fn(_2c7); + }; + $.messager={show:function(_2c8){ + return _2c2(_2c8); + },alert:function(_2c9,msg,icon,fn){ + var opts=typeof _2c9=="object"?_2c9:{title:_2c9,msg:msg,icon:icon,fn:fn}; + var cls=opts.icon?"messager-icon messager-"+opts.icon:""; + opts=$.extend({},$.messager.defaults,{content:"
      "+"
      "+opts.msg+"
      "+"
      "},opts); + if(!opts.buttons){ + opts.buttons=[{text:opts.ok,onClick:function(){ + _2c0(dlg); + }}]; + } + var dlg=_2c5(opts); + return dlg; + },confirm:function(_2ca,msg,fn){ + var opts=typeof _2ca=="object"?_2ca:{title:_2ca,msg:msg,fn:fn}; + opts=$.extend({},$.messager.defaults,{content:"
      "+"
      "+opts.msg+"
      "+"
      "},opts); + if(!opts.buttons){ + opts.buttons=[{text:opts.ok,onClick:function(){ + _2c0(dlg,true); + }},{text:opts.cancel,onClick:function(){ + _2c0(dlg,false); + }}]; + } + var dlg=_2c5(opts); + return dlg; + },prompt:function(_2cb,msg,fn){ + var opts=typeof _2cb=="object"?_2cb:{title:_2cb,msg:msg,fn:fn}; + opts=$.extend({},$.messager.defaults,{content:"
      "+"
      "+opts.msg+"
      "+"
      "+"
      "+"
      "},opts); + if(!opts.buttons){ + opts.buttons=[{text:opts.ok,onClick:function(){ + _2c0(dlg,dlg.find(".messager-input").val()); + }},{text:opts.cancel,onClick:function(){ + _2c0(dlg); + }}]; + } + var dlg=_2c5(opts); + dlg.find(".messager-input").focus(); + return dlg; + },progress:function(_2cc){ + var _2cd={bar:function(){ + return $("body>div.messager-window").find("div.messager-p-bar"); + },close:function(){ + var dlg=$("body>div.messager-window>div.messager-body:has(div.messager-progress)"); + if(dlg.length){ + dlg.dialog("close"); + } + }}; + if(typeof _2cc=="string"){ + var _2ce=_2cd[_2cc]; + return _2ce(); + } + _2cc=_2cc||{}; + var opts=$.extend({},{title:"",minHeight:0,content:undefined,msg:"",text:undefined,interval:300},_2cc); + var dlg=_2c5($.extend({},$.messager.defaults,{content:"
      "+opts.msg+"
      ",closable:false,doSize:false},opts,{onClose:function(){ + if(this.timer){ + clearInterval(this.timer); + } + if(_2cc.onClose){ + _2cc.onClose.call(this); + }else{ + $.messager.defaults.onClose.call(this); + } + }})); + var bar=dlg.find("div.messager-p-bar"); + bar.progressbar({text:opts.text}); + dlg.dialog("resize"); + if(opts.interval){ + dlg[0].timer=setInterval(function(){ + var v=bar.progressbar("getValue"); + v+=10; + if(v>100){ + v=0; + } + bar.progressbar("setValue",v); + },opts.interval); + } + return dlg; + }}; + $.messager.defaults=$.extend({},$.fn.dialog.defaults,{ok:"Ok",cancel:"Cancel",width:300,height:"auto",minHeight:150,modal:true,collapsible:false,minimizable:false,maximizable:false,resizable:false,fn:function(){ + }}); +})(jQuery); +(function($){ + function _2cf(_2d0,_2d1){ + var _2d2=$.data(_2d0,"accordion"); + var opts=_2d2.options; + var _2d3=_2d2.panels; + var cc=$(_2d0); + var _2d4=(opts.halign=="left"||opts.halign=="right"); + cc.children(".panel-last").removeClass("panel-last"); + cc.children(".panel:last").addClass("panel-last"); + if(_2d1){ + $.extend(opts,{width:_2d1.width,height:_2d1.height}); + } + cc._size(opts); + var _2d5=0; + var _2d6="auto"; + var _2d7=cc.find(">.panel>.accordion-header"); + if(_2d7.length){ + if(_2d4){ + $(_2d3[0]).panel("resize",{width:cc.width(),height:cc.height()}); + _2d5=$(_2d7[0])._outerWidth(); + }else{ + _2d5=$(_2d7[0]).css("height","")._outerHeight(); + } + } + if(!isNaN(parseInt(opts.height))){ + if(_2d4){ + _2d6=cc.width()-_2d5*_2d7.length; + }else{ + _2d6=cc.height()-_2d5*_2d7.length; + } + } + _2d8(true,_2d6-_2d8(false)); + function _2d8(_2d9,_2da){ + var _2db=0; + for(var i=0;i<_2d3.length;i++){ + var p=_2d3[i]; + if(_2d4){ + var h=p.panel("header")._outerWidth(_2d5); + }else{ + var h=p.panel("header")._outerHeight(_2d5); + } + if(p.panel("options").collapsible==_2d9){ + var _2dc=isNaN(_2da)?undefined:(_2da+_2d5*h.length); + if(_2d4){ + p.panel("resize",{height:cc.height(),width:(_2d9?_2dc:undefined)}); + _2db+=p.panel("panel")._outerWidth()-_2d5*h.length; + }else{ + p.panel("resize",{width:cc.width(),height:(_2d9?_2dc:undefined)}); + _2db+=p.panel("panel").outerHeight()-_2d5*h.length; + } + } + } + return _2db; + }; + }; + function _2dd(_2de,_2df,_2e0,all){ + var _2e1=$.data(_2de,"accordion").panels; + var pp=[]; + for(var i=0;i<_2e1.length;i++){ + var p=_2e1[i]; + if(_2df){ + if(p.panel("options")[_2df]==_2e0){ + pp.push(p); + } + }else{ + if(p[0]==$(_2e0)[0]){ + return i; + } + } + } + if(_2df){ + return all?pp:(pp.length?pp[0]:null); + }else{ + return -1; + } + }; + function _2e2(_2e3){ + return _2dd(_2e3,"collapsed",false,true); + }; + function _2e4(_2e5){ + var pp=_2e2(_2e5); + return pp.length?pp[0]:null; + }; + function _2e6(_2e7,_2e8){ + return _2dd(_2e7,null,_2e8); + }; + function _2e9(_2ea,_2eb){ + var _2ec=$.data(_2ea,"accordion").panels; + if(typeof _2eb=="number"){ + if(_2eb<0||_2eb>=_2ec.length){ + return null; + }else{ + return _2ec[_2eb]; + } + } + return _2dd(_2ea,"title",_2eb); + }; + function _2ed(_2ee){ + var opts=$.data(_2ee,"accordion").options; + var cc=$(_2ee); + if(opts.border){ + cc.removeClass("accordion-noborder"); + }else{ + cc.addClass("accordion-noborder"); + } + }; + function init(_2ef){ + var _2f0=$.data(_2ef,"accordion"); + var cc=$(_2ef); + cc.addClass("accordion"); + _2f0.panels=[]; + cc.children("div").each(function(){ + var opts=$.extend({},$.parser.parseOptions(this),{selected:($(this).attr("selected")?true:undefined)}); + var pp=$(this); + _2f0.panels.push(pp); + _2f2(_2ef,pp,opts); + }); + cc.bind("_resize",function(e,_2f1){ + if($(this).hasClass("easyui-fluid")||_2f1){ + _2cf(_2ef); + } + return false; + }); + }; + function _2f2(_2f3,pp,_2f4){ + var opts=$.data(_2f3,"accordion").options; + pp.panel($.extend({},{collapsible:true,minimizable:false,maximizable:false,closable:false,doSize:false,collapsed:true,headerCls:"accordion-header",bodyCls:"accordion-body",halign:opts.halign},_2f4,{onBeforeExpand:function(){ + if(_2f4.onBeforeExpand){ + if(_2f4.onBeforeExpand.call(this)==false){ + return false; + } + } + if(!opts.multiple){ + var all=$.grep(_2e2(_2f3),function(p){ + return p.panel("options").collapsible; + }); + for(var i=0;i.panel-last>.accordion-header").removeClass("accordion-header-border"); + if(_2f4.onExpand){ + _2f4.onExpand.call(this); + } + opts.onSelect.call(_2f3,$(this).panel("options").title,_2e6(_2f3,this)); + },onBeforeCollapse:function(){ + if(_2f4.onBeforeCollapse){ + if(_2f4.onBeforeCollapse.call(this)==false){ + return false; + } + } + $(_2f3).find(">.panel-last>.accordion-header").addClass("accordion-header-border"); + var _2f6=$(this).panel("header"); + _2f6.removeClass("accordion-header-selected"); + _2f6.find(".accordion-collapse").addClass("accordion-expand"); + },onCollapse:function(){ + if(isNaN(parseInt(opts.height))){ + $(_2f3).find(">.panel-last>.accordion-header").removeClass("accordion-header-border"); + } + if(_2f4.onCollapse){ + _2f4.onCollapse.call(this); + } + opts.onUnselect.call(_2f3,$(this).panel("options").title,_2e6(_2f3,this)); + }})); + var _2f7=pp.panel("header"); + var tool=_2f7.children("div.panel-tool"); + tool.children("a.panel-tool-collapse").hide(); + var t=$("").addClass("accordion-collapse accordion-expand").appendTo(tool); + t.bind("click",function(){ + _2f8(pp); + return false; + }); + pp.panel("options").collapsible?t.show():t.hide(); + if(opts.halign=="left"||opts.halign=="right"){ + t.hide(); + } + _2f7.click(function(){ + _2f8(pp); + return false; + }); + function _2f8(p){ + var _2f9=p.panel("options"); + if(_2f9.collapsible){ + var _2fa=_2e6(_2f3,p); + if(_2f9.collapsed){ + _2fb(_2f3,_2fa); + }else{ + _2fc(_2f3,_2fa); + } + } + }; + }; + function _2fb(_2fd,_2fe){ + var p=_2e9(_2fd,_2fe); + if(!p){ + return; + } + _2ff(_2fd); + var opts=$.data(_2fd,"accordion").options; + p.panel("expand",opts.animate); + }; + function _2fc(_300,_301){ + var p=_2e9(_300,_301); + if(!p){ + return; + } + _2ff(_300); + var opts=$.data(_300,"accordion").options; + p.panel("collapse",opts.animate); + }; + function _302(_303){ + var opts=$.data(_303,"accordion").options; + $(_303).find(">.panel-last>.accordion-header").addClass("accordion-header-border"); + var p=_2dd(_303,"selected",true); + if(p){ + _304(_2e6(_303,p)); + }else{ + _304(opts.selected); + } + function _304(_305){ + var _306=opts.animate; + opts.animate=false; + _2fb(_303,_305); + opts.animate=_306; + }; + }; + function _2ff(_307){ + var _308=$.data(_307,"accordion").panels; + for(var i=0;i<_308.length;i++){ + _308[i].stop(true,true); + } + }; + function add(_309,_30a){ + var _30b=$.data(_309,"accordion"); + var opts=_30b.options; + var _30c=_30b.panels; + if(_30a.selected==undefined){ + _30a.selected=true; + } + _2ff(_309); + var pp=$("
      ").appendTo(_309); + _30c.push(pp); + _2f2(_309,pp,_30a); + _2cf(_309); + opts.onAdd.call(_309,_30a.title,_30c.length-1); + if(_30a.selected){ + _2fb(_309,_30c.length-1); + } + }; + function _30d(_30e,_30f){ + var _310=$.data(_30e,"accordion"); + var opts=_310.options; + var _311=_310.panels; + _2ff(_30e); + var _312=_2e9(_30e,_30f); + var _313=_312.panel("options").title; + var _314=_2e6(_30e,_312); + if(!_312){ + return; + } + if(opts.onBeforeRemove.call(_30e,_313,_314)==false){ + return; + } + _311.splice(_314,1); + _312.panel("destroy"); + if(_311.length){ + _2cf(_30e); + var curr=_2e4(_30e); + if(!curr){ + _2fb(_30e,0); + } + } + opts.onRemove.call(_30e,_313,_314); + }; + $.fn.accordion=function(_315,_316){ + if(typeof _315=="string"){ + return $.fn.accordion.methods[_315](this,_316); + } + _315=_315||{}; + return this.each(function(){ + var _317=$.data(this,"accordion"); + if(_317){ + $.extend(_317.options,_315); + }else{ + $.data(this,"accordion",{options:$.extend({},$.fn.accordion.defaults,$.fn.accordion.parseOptions(this),_315),accordion:$(this).addClass("accordion"),panels:[]}); + init(this); + } + _2ed(this); + _2cf(this); + _302(this); + }); + }; + $.fn.accordion.methods={options:function(jq){ + return $.data(jq[0],"accordion").options; + },panels:function(jq){ + return $.data(jq[0],"accordion").panels; + },resize:function(jq,_318){ + return jq.each(function(){ + _2cf(this,_318); + }); + },getSelections:function(jq){ + return _2e2(jq[0]); + },getSelected:function(jq){ + return _2e4(jq[0]); + },getPanel:function(jq,_319){ + return _2e9(jq[0],_319); + },getPanelIndex:function(jq,_31a){ + return _2e6(jq[0],_31a); + },select:function(jq,_31b){ + return jq.each(function(){ + _2fb(this,_31b); + }); + },unselect:function(jq,_31c){ + return jq.each(function(){ + _2fc(this,_31c); + }); + },add:function(jq,_31d){ + return jq.each(function(){ + add(this,_31d); + }); + },remove:function(jq,_31e){ + return jq.each(function(){ + _30d(this,_31e); + }); + }}; + $.fn.accordion.parseOptions=function(_31f){ + var t=$(_31f); + return $.extend({},$.parser.parseOptions(_31f,["width","height","halign",{fit:"boolean",border:"boolean",animate:"boolean",multiple:"boolean",selected:"number"}])); + }; + $.fn.accordion.defaults={width:"auto",height:"auto",fit:false,border:true,animate:true,multiple:false,selected:0,halign:"top",onSelect:function(_320,_321){ + },onUnselect:function(_322,_323){ + },onAdd:function(_324,_325){ + },onBeforeRemove:function(_326,_327){ + },onRemove:function(_328,_329){ + }}; +})(jQuery); +(function($){ + function _32a(c){ + var w=0; + $(c).children().each(function(){ + w+=$(this).outerWidth(true); + }); + return w; + }; + function _32b(_32c){ + var opts=$.data(_32c,"tabs").options; + if(opts.tabPosition=="left"||opts.tabPosition=="right"||!opts.showHeader){ + return; + } + var _32d=$(_32c).children("div.tabs-header"); + var tool=_32d.children("div.tabs-tool:not(.tabs-tool-hidden)"); + var _32e=_32d.children("div.tabs-scroller-left"); + var _32f=_32d.children("div.tabs-scroller-right"); + var wrap=_32d.children("div.tabs-wrap"); + var _330=_32d.outerHeight(); + if(opts.plain){ + _330-=_330-_32d.height(); + } + tool._outerHeight(_330); + var _331=_32a(_32d.find("ul.tabs")); + var _332=_32d.width()-tool._outerWidth(); + if(_331>_332){ + _32e.add(_32f).show()._outerHeight(_330); + if(opts.toolPosition=="left"){ + tool.css({left:_32e.outerWidth(),right:""}); + wrap.css({marginLeft:_32e.outerWidth()+tool._outerWidth(),marginRight:_32f._outerWidth(),width:_332-_32e.outerWidth()-_32f.outerWidth()}); + }else{ + tool.css({left:"",right:_32f.outerWidth()}); + wrap.css({marginLeft:_32e.outerWidth(),marginRight:_32f.outerWidth()+tool._outerWidth(),width:_332-_32e.outerWidth()-_32f.outerWidth()}); + } + }else{ + _32e.add(_32f).hide(); + if(opts.toolPosition=="left"){ + tool.css({left:0,right:""}); + wrap.css({marginLeft:tool._outerWidth(),marginRight:0,width:_332}); + }else{ + tool.css({left:"",right:0}); + wrap.css({marginLeft:0,marginRight:tool._outerWidth(),width:_332}); + } + } + }; + function _333(_334){ + var opts=$.data(_334,"tabs").options; + var _335=$(_334).children("div.tabs-header"); + if(opts.tools){ + if(typeof opts.tools=="string"){ + $(opts.tools).addClass("tabs-tool").appendTo(_335); + $(opts.tools).show(); + }else{ + _335.children("div.tabs-tool").remove(); + var _336=$("
      ").appendTo(_335); + var tr=_336.find("tr"); + for(var i=0;i").appendTo(tr); + var tool=$("").appendTo(td); + tool[0].onclick=eval(opts.tools[i].handler||function(){ + }); + tool.linkbutton($.extend({},opts.tools[i],{plain:true})); + } + } + }else{ + _335.children("div.tabs-tool").remove(); + } + }; + function _337(_338,_339){ + var _33a=$.data(_338,"tabs"); + var opts=_33a.options; + var cc=$(_338); + if(!opts.doSize){ + return; + } + if(_339){ + $.extend(opts,{width:_339.width,height:_339.height}); + } + cc._size(opts); + var _33b=cc.children("div.tabs-header"); + var _33c=cc.children("div.tabs-panels"); + var wrap=_33b.find("div.tabs-wrap"); + var ul=wrap.find(".tabs"); + ul.children("li").removeClass("tabs-first tabs-last"); + ul.children("li:first").addClass("tabs-first"); + ul.children("li:last").addClass("tabs-last"); + if(opts.tabPosition=="left"||opts.tabPosition=="right"){ + _33b._outerWidth(opts.showHeader?opts.headerWidth:0); + _33c._outerWidth(cc.width()-_33b.outerWidth()); + _33b.add(_33c)._size("height",isNaN(parseInt(opts.height))?"":cc.height()); + wrap._outerWidth(_33b.width()); + ul._outerWidth(wrap.width()).css("height",""); + }else{ + _33b.children("div.tabs-scroller-left,div.tabs-scroller-right,div.tabs-tool:not(.tabs-tool-hidden)").css("display",opts.showHeader?"block":"none"); + _33b._outerWidth(cc.width()).css("height",""); + if(opts.showHeader){ + _33b.css("background-color",""); + wrap.css("height",""); + }else{ + _33b.css("background-color","transparent"); + _33b._outerHeight(0); + wrap._outerHeight(0); + } + ul._outerHeight(opts.tabHeight).css("width",""); + ul._outerHeight(ul.outerHeight()-ul.height()-1+opts.tabHeight).css("width",""); + _33c._size("height",isNaN(parseInt(opts.height))?"":(cc.height()-_33b.outerHeight())); + _33c._size("width",cc.width()); + } + if(_33a.tabs.length){ + var d1=ul.outerWidth(true)-ul.width(); + var li=ul.children("li:first"); + var d2=li.outerWidth(true)-li.width(); + var _33d=_33b.width()-_33b.children(".tabs-tool:not(.tabs-tool-hidden)")._outerWidth(); + var _33e=Math.floor((_33d-d1-d2*_33a.tabs.length)/_33a.tabs.length); + $.map(_33a.tabs,function(p){ + _33f(p,(opts.justified&&$.inArray(opts.tabPosition,["top","bottom"])>=0)?_33e:undefined); + }); + if(opts.justified&&$.inArray(opts.tabPosition,["top","bottom"])>=0){ + var _340=_33d-d1-_32a(ul); + _33f(_33a.tabs[_33a.tabs.length-1],_33e+_340); + } + } + _32b(_338); + function _33f(p,_341){ + var _342=p.panel("options"); + var p_t=_342.tab.find("a.tabs-inner"); + var _341=_341?_341:(parseInt(_342.tabWidth||opts.tabWidth||undefined)); + if(_341){ + p_t._outerWidth(_341); + }else{ + p_t.css("width",""); + } + p_t._outerHeight(opts.tabHeight); + p_t.css("lineHeight",p_t.height()+"px"); + p_t.find(".easyui-fluid:visible").triggerHandler("_resize"); + }; + }; + function _343(_344){ + var opts=$.data(_344,"tabs").options; + var tab=_345(_344); + if(tab){ + var _346=$(_344).children("div.tabs-panels"); + var _347=opts.width=="auto"?"auto":_346.width(); + var _348=opts.height=="auto"?"auto":_346.height(); + tab.panel("resize",{width:_347,height:_348}); + } + }; + function _349(_34a){ + var tabs=$.data(_34a,"tabs").tabs; + var cc=$(_34a).addClass("tabs-container"); + var _34b=$("
      ").insertBefore(cc); + cc.children("div").each(function(){ + _34b[0].appendChild(this); + }); + cc[0].appendChild(_34b[0]); + $("
      "+"
      "+"
      "+"
      "+"
        "+"
        "+"
        ").prependTo(_34a); + cc.children("div.tabs-panels").children("div").each(function(i){ + var opts=$.extend({},$.parser.parseOptions(this),{disabled:($(this).attr("disabled")?true:undefined),selected:($(this).attr("selected")?true:undefined)}); + _358(_34a,opts,$(this)); + }); + cc.children("div.tabs-header").find(".tabs-scroller-left, .tabs-scroller-right").hover(function(){ + $(this).addClass("tabs-scroller-over"); + },function(){ + $(this).removeClass("tabs-scroller-over"); + }); + cc.bind("_resize",function(e,_34c){ + if($(this).hasClass("easyui-fluid")||_34c){ + _337(_34a); + _343(_34a); + } + return false; + }); + }; + function _34d(_34e){ + var _34f=$.data(_34e,"tabs"); + var opts=_34f.options; + $(_34e).children("div.tabs-header").unbind().bind("click",function(e){ + if($(e.target).hasClass("tabs-scroller-left")){ + $(_34e).tabs("scrollBy",-opts.scrollIncrement); + }else{ + if($(e.target).hasClass("tabs-scroller-right")){ + $(_34e).tabs("scrollBy",opts.scrollIncrement); + }else{ + var li=$(e.target).closest("li"); + if(li.hasClass("tabs-disabled")){ + return false; + } + var a=$(e.target).closest("a.tabs-close"); + if(a.length){ + _371(_34e,_350(li)); + }else{ + if(li.length){ + var _351=_350(li); + var _352=_34f.tabs[_351].panel("options"); + if(_352.collapsible){ + _352.closed?_368(_34e,_351):_385(_34e,_351); + }else{ + _368(_34e,_351); + } + } + } + return false; + } + } + }).bind("contextmenu",function(e){ + var li=$(e.target).closest("li"); + if(li.hasClass("tabs-disabled")){ + return; + } + if(li.length){ + opts.onContextMenu.call(_34e,e,li.find("span.tabs-title").html(),_350(li)); + } + }); + function _350(li){ + var _353=0; + li.parent().children("li").each(function(i){ + if(li[0]==this){ + _353=i; + return false; + } + }); + return _353; + }; + }; + function _354(_355){ + var opts=$.data(_355,"tabs").options; + var _356=$(_355).children("div.tabs-header"); + var _357=$(_355).children("div.tabs-panels"); + _356.removeClass("tabs-header-top tabs-header-bottom tabs-header-left tabs-header-right"); + _357.removeClass("tabs-panels-top tabs-panels-bottom tabs-panels-left tabs-panels-right"); + if(opts.tabPosition=="top"){ + _356.insertBefore(_357); + }else{ + if(opts.tabPosition=="bottom"){ + _356.insertAfter(_357); + _356.addClass("tabs-header-bottom"); + _357.addClass("tabs-panels-top"); + }else{ + if(opts.tabPosition=="left"){ + _356.addClass("tabs-header-left"); + _357.addClass("tabs-panels-right"); + }else{ + if(opts.tabPosition=="right"){ + _356.addClass("tabs-header-right"); + _357.addClass("tabs-panels-left"); + } + } + } + } + if(opts.plain==true){ + _356.addClass("tabs-header-plain"); + }else{ + _356.removeClass("tabs-header-plain"); + } + _356.removeClass("tabs-header-narrow").addClass(opts.narrow?"tabs-header-narrow":""); + var tabs=_356.find(".tabs"); + tabs.removeClass("tabs-pill").addClass(opts.pill?"tabs-pill":""); + tabs.removeClass("tabs-narrow").addClass(opts.narrow?"tabs-narrow":""); + tabs.removeClass("tabs-justified").addClass(opts.justified?"tabs-justified":""); + if(opts.border==true){ + _356.removeClass("tabs-header-noborder"); + _357.removeClass("tabs-panels-noborder"); + }else{ + _356.addClass("tabs-header-noborder"); + _357.addClass("tabs-panels-noborder"); + } + opts.doSize=true; + }; + function _358(_359,_35a,pp){ + _35a=_35a||{}; + var _35b=$.data(_359,"tabs"); + var tabs=_35b.tabs; + if(_35a.index==undefined||_35a.index>tabs.length){ + _35a.index=tabs.length; + } + if(_35a.index<0){ + _35a.index=0; + } + var ul=$(_359).children("div.tabs-header").find("ul.tabs"); + var _35c=$(_359).children("div.tabs-panels"); + var tab=$("
      • "+""+""+""+""+"
      • "); + if(!pp){ + pp=$("
        "); + } + if(_35a.index>=tabs.length){ + tab.appendTo(ul); + pp.appendTo(_35c); + tabs.push(pp); + }else{ + tab.insertBefore(ul.children("li:eq("+_35a.index+")")); + pp.insertBefore(_35c.children("div.panel:eq("+_35a.index+")")); + tabs.splice(_35a.index,0,pp); + } + pp.panel($.extend({},_35a,{tab:tab,border:false,noheader:true,closed:true,doSize:false,iconCls:(_35a.icon?_35a.icon:undefined),onLoad:function(){ + if(_35a.onLoad){ + _35a.onLoad.apply(this,arguments); + } + _35b.options.onLoad.call(_359,$(this)); + },onBeforeOpen:function(){ + if(_35a.onBeforeOpen){ + if(_35a.onBeforeOpen.call(this)==false){ + return false; + } + } + var p=$(_359).tabs("getSelected"); + if(p){ + if(p[0]!=this){ + $(_359).tabs("unselect",_363(_359,p)); + p=$(_359).tabs("getSelected"); + if(p){ + return false; + } + }else{ + _343(_359); + return false; + } + } + var _35d=$(this).panel("options"); + _35d.tab.addClass("tabs-selected"); + var wrap=$(_359).find(">div.tabs-header>div.tabs-wrap"); + var left=_35d.tab.position().left; + var _35e=left+_35d.tab.outerWidth(); + if(left<0||_35e>wrap.width()){ + var _35f=left-(wrap.width()-_35d.tab.width())/2; + $(_359).tabs("scrollBy",_35f); + }else{ + $(_359).tabs("scrollBy",0); + } + var _360=$(this).panel("panel"); + _360.css("display","block"); + _343(_359); + _360.css("display","none"); + },onOpen:function(){ + if(_35a.onOpen){ + _35a.onOpen.call(this); + } + var _361=$(this).panel("options"); + _35b.selectHis.push(_361.title); + _35b.options.onSelect.call(_359,_361.title,_363(_359,this)); + },onBeforeClose:function(){ + if(_35a.onBeforeClose){ + if(_35a.onBeforeClose.call(this)==false){ + return false; + } + } + $(this).panel("options").tab.removeClass("tabs-selected"); + },onClose:function(){ + if(_35a.onClose){ + _35a.onClose.call(this); + } + var _362=$(this).panel("options"); + _35b.options.onUnselect.call(_359,_362.title,_363(_359,this)); + }})); + $(_359).tabs("update",{tab:pp,options:pp.panel("options"),type:"header"}); + }; + function _364(_365,_366){ + var _367=$.data(_365,"tabs"); + var opts=_367.options; + if(_366.selected==undefined){ + _366.selected=true; + } + _358(_365,_366); + opts.onAdd.call(_365,_366.title,_366.index); + if(_366.selected){ + _368(_365,_366.index); + } + }; + function _369(_36a,_36b){ + _36b.type=_36b.type||"all"; + var _36c=$.data(_36a,"tabs").selectHis; + var pp=_36b.tab; + var opts=pp.panel("options"); + var _36d=opts.title; + $.extend(opts,_36b.options,{iconCls:(_36b.options.icon?_36b.options.icon:undefined)}); + if(_36b.type=="all"||_36b.type=="body"){ + pp.panel(); + } + if(_36b.type=="all"||_36b.type=="header"){ + var tab=opts.tab; + if(opts.header){ + tab.find(".tabs-inner").html($(opts.header)); + }else{ + var _36e=tab.find("span.tabs-title"); + var _36f=tab.find("span.tabs-icon"); + _36e.html(opts.title); + _36f.attr("class","tabs-icon"); + tab.find("a.tabs-close").remove(); + if(opts.closable){ + _36e.addClass("tabs-closable"); + $("").appendTo(tab); + }else{ + _36e.removeClass("tabs-closable"); + } + if(opts.iconCls){ + _36e.addClass("tabs-with-icon"); + _36f.addClass(opts.iconCls); + }else{ + _36e.removeClass("tabs-with-icon"); + } + if(opts.tools){ + var _370=tab.find("span.tabs-p-tool"); + if(!_370.length){ + var _370=$("").insertAfter(tab.find("a.tabs-inner")); + } + if($.isArray(opts.tools)){ + _370.empty(); + for(var i=0;i").appendTo(_370); + t.addClass(opts.tools[i].iconCls); + if(opts.tools[i].handler){ + t.bind("click",{handler:opts.tools[i].handler},function(e){ + if($(this).parents("li").hasClass("tabs-disabled")){ + return; + } + e.data.handler.call(this); + }); + } + } + }else{ + $(opts.tools).children().appendTo(_370); + } + var pr=_370.children().length*12; + if(opts.closable){ + pr+=8; + _370.css("right",""); + }else{ + pr-=3; + _370.css("right","5px"); + } + _36e.css("padding-right",pr+"px"); + }else{ + tab.find("span.tabs-p-tool").remove(); + _36e.css("padding-right",""); + } + } + if(_36d!=opts.title){ + for(var i=0;i<_36c.length;i++){ + if(_36c[i]==_36d){ + _36c[i]=opts.title; + } + } + } + } + if(opts.disabled){ + opts.tab.addClass("tabs-disabled"); + }else{ + opts.tab.removeClass("tabs-disabled"); + } + _337(_36a); + $.data(_36a,"tabs").options.onUpdate.call(_36a,opts.title,_363(_36a,pp)); + }; + function _371(_372,_373){ + var opts=$.data(_372,"tabs").options; + var tabs=$.data(_372,"tabs").tabs; + var _374=$.data(_372,"tabs").selectHis; + if(!_375(_372,_373)){ + return; + } + var tab=_376(_372,_373); + var _377=tab.panel("options").title; + var _378=_363(_372,tab); + if(opts.onBeforeClose.call(_372,_377,_378)==false){ + return; + } + var tab=_376(_372,_373,true); + tab.panel("options").tab.remove(); + tab.panel("destroy"); + opts.onClose.call(_372,_377,_378); + _337(_372); + for(var i=0;i<_374.length;i++){ + if(_374[i]==_377){ + _374.splice(i,1); + i--; + } + } + var _379=_374.pop(); + if(_379){ + _368(_372,_379); + }else{ + if(tabs.length){ + _368(_372,0); + } + } + }; + function _376(_37a,_37b,_37c){ + var tabs=$.data(_37a,"tabs").tabs; + var tab=null; + if(typeof _37b=="number"){ + if(_37b>=0&&_37b"); + for(var i=0;i.tabs-header>.tabs-tool"); + if(_390){ + tool.removeClass("tabs-tool-hidden").show(); + }else{ + tool.addClass("tabs-tool-hidden").hide(); + } + $(_38f).tabs("resize").tabs("scrollBy",0); + }; + $.fn.tabs=function(_391,_392){ + if(typeof _391=="string"){ + return $.fn.tabs.methods[_391](this,_392); + } + _391=_391||{}; + return this.each(function(){ + var _393=$.data(this,"tabs"); + if(_393){ + $.extend(_393.options,_391); + }else{ + $.data(this,"tabs",{options:$.extend({},$.fn.tabs.defaults,$.fn.tabs.parseOptions(this),_391),tabs:[],selectHis:[]}); + _349(this); + } + _333(this); + _354(this); + _337(this); + _34d(this); + _37f(this); + }); + }; + $.fn.tabs.methods={options:function(jq){ + var cc=jq[0]; + var opts=$.data(cc,"tabs").options; + var s=_345(cc); + opts.selected=s?_363(cc,s):-1; + return opts; + },tabs:function(jq){ + return $.data(jq[0],"tabs").tabs; + },resize:function(jq,_394){ + return jq.each(function(){ + _337(this,_394); + _343(this); + }); + },add:function(jq,_395){ + return jq.each(function(){ + _364(this,_395); + }); + },close:function(jq,_396){ + return jq.each(function(){ + _371(this,_396); + }); + },getTab:function(jq,_397){ + return _376(jq[0],_397); + },getTabIndex:function(jq,tab){ + return _363(jq[0],tab); + },getSelected:function(jq){ + return _345(jq[0]); + },select:function(jq,_398){ + return jq.each(function(){ + _368(this,_398); + }); + },unselect:function(jq,_399){ + return jq.each(function(){ + _385(this,_399); + }); + },exists:function(jq,_39a){ + return _375(jq[0],_39a); + },update:function(jq,_39b){ + return jq.each(function(){ + _369(this,_39b); + }); + },enableTab:function(jq,_39c){ + return jq.each(function(){ + var opts=$(this).tabs("getTab",_39c).panel("options"); + opts.tab.removeClass("tabs-disabled"); + opts.disabled=false; + }); + },disableTab:function(jq,_39d){ + return jq.each(function(){ + var opts=$(this).tabs("getTab",_39d).panel("options"); + opts.tab.addClass("tabs-disabled"); + opts.disabled=true; + }); + },showHeader:function(jq){ + return jq.each(function(){ + _38b(this,true); + }); + },hideHeader:function(jq){ + return jq.each(function(){ + _38b(this,false); + }); + },showTool:function(jq){ + return jq.each(function(){ + _38e(this,true); + }); + },hideTool:function(jq){ + return jq.each(function(){ + _38e(this,false); + }); + },scrollBy:function(jq,_39e){ + return jq.each(function(){ + var opts=$(this).tabs("options"); + var wrap=$(this).find(">div.tabs-header>div.tabs-wrap"); + var pos=Math.min(wrap._scrollLeft()+_39e,_39f()); + wrap.animate({scrollLeft:pos},opts.scrollDuration); + function _39f(){ + var w=0; + var ul=wrap.children("ul"); + ul.children("li").each(function(){ + w+=$(this).outerWidth(true); + }); + return w-wrap.width()+(ul.outerWidth()-ul.width()); + }; + }); + }}; + $.fn.tabs.parseOptions=function(_3a0){ + return $.extend({},$.parser.parseOptions(_3a0,["tools","toolPosition","tabPosition",{fit:"boolean",border:"boolean",plain:"boolean"},{headerWidth:"number",tabWidth:"number",tabHeight:"number",selected:"number"},{showHeader:"boolean",justified:"boolean",narrow:"boolean",pill:"boolean"}])); + }; + $.fn.tabs.defaults={width:"auto",height:"auto",headerWidth:150,tabWidth:"auto",tabHeight:27,selected:0,showHeader:true,plain:false,fit:false,border:true,justified:false,narrow:false,pill:false,tools:null,toolPosition:"right",tabPosition:"top",scrollIncrement:100,scrollDuration:400,onLoad:function(_3a1){ + },onSelect:function(_3a2,_3a3){ + },onUnselect:function(_3a4,_3a5){ + },onBeforeClose:function(_3a6,_3a7){ + },onClose:function(_3a8,_3a9){ + },onAdd:function(_3aa,_3ab){ + },onUpdate:function(_3ac,_3ad){ + },onContextMenu:function(e,_3ae,_3af){ + }}; +})(jQuery); +(function($){ + var _3b0=false; + function _3b1(_3b2,_3b3){ + var _3b4=$.data(_3b2,"layout"); + var opts=_3b4.options; + var _3b5=_3b4.panels; + var cc=$(_3b2); + if(_3b3){ + $.extend(opts,{width:_3b3.width,height:_3b3.height}); + } + if(_3b2.tagName.toLowerCase()=="body"){ + cc._size("fit"); + }else{ + cc._size(opts); + } + var cpos={top:0,left:0,width:cc.width(),height:cc.height()}; + _3b6(_3b7(_3b5.expandNorth)?_3b5.expandNorth:_3b5.north,"n"); + _3b6(_3b7(_3b5.expandSouth)?_3b5.expandSouth:_3b5.south,"s"); + _3b8(_3b7(_3b5.expandEast)?_3b5.expandEast:_3b5.east,"e"); + _3b8(_3b7(_3b5.expandWest)?_3b5.expandWest:_3b5.west,"w"); + _3b5.center.panel("resize",cpos); + function _3b6(pp,type){ + if(!pp.length||!_3b7(pp)){ + return; + } + var opts=pp.panel("options"); + pp.panel("resize",{width:cc.width(),height:opts.height}); + var _3b9=pp.panel("panel").outerHeight(); + pp.panel("move",{left:0,top:(type=="n"?0:cc.height()-_3b9)}); + cpos.height-=_3b9; + if(type=="n"){ + cpos.top+=_3b9; + if(!opts.split&&opts.border){ + cpos.top--; + } + } + if(!opts.split&&opts.border){ + cpos.height++; + } + }; + function _3b8(pp,type){ + if(!pp.length||!_3b7(pp)){ + return; + } + var opts=pp.panel("options"); + pp.panel("resize",{width:opts.width,height:cpos.height}); + var _3ba=pp.panel("panel").outerWidth(); + pp.panel("move",{left:(type=="e"?cc.width()-_3ba:0),top:cpos.top}); + cpos.width-=_3ba; + if(type=="w"){ + cpos.left+=_3ba; + if(!opts.split&&opts.border){ + cpos.left--; + } + } + if(!opts.split&&opts.border){ + cpos.width++; + } + }; + }; + function init(_3bb){ + var cc=$(_3bb); + cc.addClass("layout"); + function _3bc(el){ + var _3bd=$.fn.layout.parsePanelOptions(el); + if("north,south,east,west,center".indexOf(_3bd.region)>=0){ + _3c0(_3bb,_3bd,el); + } + }; + var opts=cc.layout("options"); + var _3be=opts.onAdd; + opts.onAdd=function(){ + }; + cc.find(">div,>form>div").each(function(){ + _3bc(this); + }); + opts.onAdd=_3be; + cc.append("
        "); + cc.bind("_resize",function(e,_3bf){ + if($(this).hasClass("easyui-fluid")||_3bf){ + _3b1(_3bb); + } + return false; + }); + }; + function _3c0(_3c1,_3c2,el){ + _3c2.region=_3c2.region||"center"; + var _3c3=$.data(_3c1,"layout").panels; + var cc=$(_3c1); + var dir=_3c2.region; + if(_3c3[dir].length){ + return; + } + var pp=$(el); + if(!pp.length){ + pp=$("
        ").appendTo(cc); + } + var _3c4=$.extend({},$.fn.layout.paneldefaults,{width:(pp.length?parseInt(pp[0].style.width)||pp.outerWidth():"auto"),height:(pp.length?parseInt(pp[0].style.height)||pp.outerHeight():"auto"),doSize:false,collapsible:true,onOpen:function(){ + var tool=$(this).panel("header").children("div.panel-tool"); + tool.children("a.panel-tool-collapse").hide(); + var _3c5={north:"up",south:"down",east:"right",west:"left"}; + if(!_3c5[dir]){ + return; + } + var _3c6="layout-button-"+_3c5[dir]; + var t=tool.children("a."+_3c6); + if(!t.length){ + t=$("").addClass(_3c6).appendTo(tool); + t.bind("click",{dir:dir},function(e){ + _3dd(_3c1,e.data.dir); + return false; + }); + } + $(this).panel("options").collapsible?t.show():t.hide(); + }},_3c2,{cls:((_3c2.cls||"")+" layout-panel layout-panel-"+dir),bodyCls:((_3c2.bodyCls||"")+" layout-body")}); + pp.panel(_3c4); + _3c3[dir]=pp; + var _3c7={north:"s",south:"n",east:"w",west:"e"}; + var _3c8=pp.panel("panel"); + if(pp.panel("options").split){ + _3c8.addClass("layout-split-"+dir); + } + _3c8.resizable($.extend({},{handles:(_3c7[dir]||""),disabled:(!pp.panel("options").split),onStartResize:function(e){ + _3b0=true; + if(dir=="north"||dir=="south"){ + var _3c9=$(">div.layout-split-proxy-v",_3c1); + }else{ + var _3c9=$(">div.layout-split-proxy-h",_3c1); + } + var top=0,left=0,_3ca=0,_3cb=0; + var pos={display:"block"}; + if(dir=="north"){ + pos.top=parseInt(_3c8.css("top"))+_3c8.outerHeight()-_3c9.height(); + pos.left=parseInt(_3c8.css("left")); + pos.width=_3c8.outerWidth(); + pos.height=_3c9.height(); + }else{ + if(dir=="south"){ + pos.top=parseInt(_3c8.css("top")); + pos.left=parseInt(_3c8.css("left")); + pos.width=_3c8.outerWidth(); + pos.height=_3c9.height(); + }else{ + if(dir=="east"){ + pos.top=parseInt(_3c8.css("top"))||0; + pos.left=parseInt(_3c8.css("left"))||0; + pos.width=_3c9.width(); + pos.height=_3c8.outerHeight(); + }else{ + if(dir=="west"){ + pos.top=parseInt(_3c8.css("top"))||0; + pos.left=_3c8.outerWidth()-_3c9.width(); + pos.width=_3c9.width(); + pos.height=_3c8.outerHeight(); + } + } + } + } + _3c9.css(pos); + $("
        ").css({left:0,top:0,width:cc.width(),height:cc.height()}).appendTo(cc); + },onResize:function(e){ + if(dir=="north"||dir=="south"){ + var _3cc=_3cd(this); + $(this).resizable("options").maxHeight=_3cc; + var _3ce=$(">div.layout-split-proxy-v",_3c1); + var top=dir=="north"?e.data.height-_3ce.height():$(_3c1).height()-e.data.height; + _3ce.css("top",top); + }else{ + var _3cf=_3cd(this); + $(this).resizable("options").maxWidth=_3cf; + var _3ce=$(">div.layout-split-proxy-h",_3c1); + var left=dir=="west"?e.data.width-_3ce.width():$(_3c1).width()-e.data.width; + _3ce.css("left",left); + } + return false; + },onStopResize:function(e){ + cc.children("div.layout-split-proxy-v,div.layout-split-proxy-h").hide(); + pp.panel("resize",e.data); + _3b1(_3c1); + _3b0=false; + cc.find(">div.layout-mask").remove(); + }},_3c2)); + cc.layout("options").onAdd.call(_3c1,dir); + function _3cd(p){ + var _3d0="expand"+dir.substring(0,1).toUpperCase()+dir.substring(1); + var _3d1=_3c3["center"]; + var _3d2=(dir=="north"||dir=="south")?"minHeight":"minWidth"; + var _3d3=(dir=="north"||dir=="south")?"maxHeight":"maxWidth"; + var _3d4=(dir=="north"||dir=="south")?"_outerHeight":"_outerWidth"; + var _3d5=$.parser.parseValue(_3d3,_3c3[dir].panel("options")[_3d3],$(_3c1)); + var _3d6=$.parser.parseValue(_3d2,_3d1.panel("options")[_3d2],$(_3c1)); + var _3d7=_3d1.panel("panel")[_3d4]()-_3d6; + if(_3b7(_3c3[_3d0])){ + _3d7+=_3c3[_3d0][_3d4]()-1; + }else{ + _3d7+=$(p)[_3d4](); + } + if(_3d7>_3d5){ + _3d7=_3d5; + } + return _3d7; + }; + }; + function _3d8(_3d9,_3da){ + var _3db=$.data(_3d9,"layout").panels; + if(_3db[_3da].length){ + _3db[_3da].panel("destroy"); + _3db[_3da]=$(); + var _3dc="expand"+_3da.substring(0,1).toUpperCase()+_3da.substring(1); + if(_3db[_3dc]){ + _3db[_3dc].panel("destroy"); + _3db[_3dc]=undefined; + } + $(_3d9).layout("options").onRemove.call(_3d9,_3da); + } + }; + function _3dd(_3de,_3df,_3e0){ + if(_3e0==undefined){ + _3e0="normal"; + } + var _3e1=$.data(_3de,"layout").panels; + var p=_3e1[_3df]; + var _3e2=p.panel("options"); + if(_3e2.onBeforeCollapse.call(p)==false){ + return; + } + var _3e3="expand"+_3df.substring(0,1).toUpperCase()+_3df.substring(1); + if(!_3e1[_3e3]){ + _3e1[_3e3]=_3e4(_3df); + var ep=_3e1[_3e3].panel("panel"); + if(!_3e2.expandMode){ + ep.css("cursor","default"); + }else{ + ep.bind("click",function(){ + if(_3e2.expandMode=="dock"){ + _3f0(_3de,_3df); + }else{ + p.panel("expand",false).panel("open"); + var _3e5=_3e6(); + p.panel("resize",_3e5.collapse); + p.panel("panel").animate(_3e5.expand,function(){ + $(this).unbind(".layout").bind("mouseleave.layout",{region:_3df},function(e){ + if(_3b0==true){ + return; + } + if($("body>div.combo-p>div.combo-panel:visible").length){ + return; + } + _3dd(_3de,e.data.region); + }); + $(_3de).layout("options").onExpand.call(_3de,_3df); + }); + } + return false; + }); + } + } + var _3e7=_3e6(); + if(!_3b7(_3e1[_3e3])){ + _3e1.center.panel("resize",_3e7.resizeC); + } + p.panel("panel").animate(_3e7.collapse,_3e0,function(){ + p.panel("collapse",false).panel("close"); + _3e1[_3e3].panel("open").panel("resize",_3e7.expandP); + $(this).unbind(".layout"); + $(_3de).layout("options").onCollapse.call(_3de,_3df); + }); + function _3e4(dir){ + var _3e8={"east":"left","west":"right","north":"down","south":"up"}; + var isns=(_3e2.region=="north"||_3e2.region=="south"); + var icon="layout-button-"+_3e8[dir]; + var p=$("
        ").appendTo(_3de); + p.panel($.extend({},$.fn.layout.paneldefaults,{cls:("layout-expand layout-expand-"+dir),title:" ",titleDirection:_3e2.titleDirection,iconCls:(_3e2.hideCollapsedContent?null:_3e2.iconCls),closed:true,minWidth:0,minHeight:0,doSize:false,region:_3e2.region,collapsedSize:_3e2.collapsedSize,noheader:(!isns&&_3e2.hideExpandTool),tools:((isns&&_3e2.hideExpandTool)?null:[{iconCls:icon,handler:function(){ + _3f0(_3de,_3df); + return false; + }}]),onResize:function(){ + var _3e9=$(this).children(".layout-expand-title"); + if(_3e9.length){ + _3e9._outerWidth($(this).height()); + var left=($(this).width()-Math.min(_3e9._outerWidth(),_3e9._outerHeight()))/2; + var top=Math.max(_3e9._outerWidth(),_3e9._outerHeight()); + if(_3e9.hasClass("layout-expand-title-down")){ + left+=Math.min(_3e9._outerWidth(),_3e9._outerHeight()); + top=0; + } + _3e9.css({left:(left+"px"),top:(top+"px")}); + } + }})); + if(!_3e2.hideCollapsedContent){ + var _3ea=typeof _3e2.collapsedContent=="function"?_3e2.collapsedContent.call(p[0],_3e2.title):_3e2.collapsedContent; + isns?p.panel("setTitle",_3ea):p.html(_3ea); + } + p.panel("panel").hover(function(){ + $(this).addClass("layout-expand-over"); + },function(){ + $(this).removeClass("layout-expand-over"); + }); + return p; + }; + function _3e6(){ + var cc=$(_3de); + var _3eb=_3e1.center.panel("options"); + var _3ec=_3e2.collapsedSize; + if(_3df=="east"){ + var _3ed=p.panel("panel")._outerWidth(); + var _3ee=_3eb.width+_3ed-_3ec; + if(_3e2.split||!_3e2.border){ + _3ee++; + } + return {resizeC:{width:_3ee},expand:{left:cc.width()-_3ed},expandP:{top:_3eb.top,left:cc.width()-_3ec,width:_3ec,height:_3eb.height},collapse:{left:cc.width(),top:_3eb.top,height:_3eb.height}}; + }else{ + if(_3df=="west"){ + var _3ed=p.panel("panel")._outerWidth(); + var _3ee=_3eb.width+_3ed-_3ec; + if(_3e2.split||!_3e2.border){ + _3ee++; + } + return {resizeC:{width:_3ee,left:_3ec-1},expand:{left:0},expandP:{left:0,top:_3eb.top,width:_3ec,height:_3eb.height},collapse:{left:-_3ed,top:_3eb.top,height:_3eb.height}}; + }else{ + if(_3df=="north"){ + var _3ef=p.panel("panel")._outerHeight(); + var hh=_3eb.height; + if(!_3b7(_3e1.expandNorth)){ + hh+=_3ef-_3ec+((_3e2.split||!_3e2.border)?1:0); + } + _3e1.east.add(_3e1.west).add(_3e1.expandEast).add(_3e1.expandWest).panel("resize",{top:_3ec-1,height:hh}); + return {resizeC:{top:_3ec-1,height:hh},expand:{top:0},expandP:{top:0,left:0,width:cc.width(),height:_3ec},collapse:{top:-_3ef,width:cc.width()}}; + }else{ + if(_3df=="south"){ + var _3ef=p.panel("panel")._outerHeight(); + var hh=_3eb.height; + if(!_3b7(_3e1.expandSouth)){ + hh+=_3ef-_3ec+((_3e2.split||!_3e2.border)?1:0); + } + _3e1.east.add(_3e1.west).add(_3e1.expandEast).add(_3e1.expandWest).panel("resize",{height:hh}); + return {resizeC:{height:hh},expand:{top:cc.height()-_3ef},expandP:{top:cc.height()-_3ec,left:0,width:cc.width(),height:_3ec},collapse:{top:cc.height(),width:cc.width()}}; + } + } + } + } + }; + }; + function _3f0(_3f1,_3f2){ + var _3f3=$.data(_3f1,"layout").panels; + var p=_3f3[_3f2]; + var _3f4=p.panel("options"); + if(_3f4.onBeforeExpand.call(p)==false){ + return; + } + var _3f5="expand"+_3f2.substring(0,1).toUpperCase()+_3f2.substring(1); + if(_3f3[_3f5]){ + _3f3[_3f5].panel("close"); + p.panel("panel").stop(true,true); + p.panel("expand",false).panel("open"); + var _3f6=_3f7(); + p.panel("resize",_3f6.collapse); + p.panel("panel").animate(_3f6.expand,function(){ + _3b1(_3f1); + $(_3f1).layout("options").onExpand.call(_3f1,_3f2); + }); + } + function _3f7(){ + var cc=$(_3f1); + var _3f8=_3f3.center.panel("options"); + if(_3f2=="east"&&_3f3.expandEast){ + return {collapse:{left:cc.width(),top:_3f8.top,height:_3f8.height},expand:{left:cc.width()-p.panel("panel")._outerWidth()}}; + }else{ + if(_3f2=="west"&&_3f3.expandWest){ + return {collapse:{left:-p.panel("panel")._outerWidth(),top:_3f8.top,height:_3f8.height},expand:{left:0}}; + }else{ + if(_3f2=="north"&&_3f3.expandNorth){ + return {collapse:{top:-p.panel("panel")._outerHeight(),width:cc.width()},expand:{top:0}}; + }else{ + if(_3f2=="south"&&_3f3.expandSouth){ + return {collapse:{top:cc.height(),width:cc.width()},expand:{top:cc.height()-p.panel("panel")._outerHeight()}}; + } + } + } + } + }; + }; + function _3b7(pp){ + if(!pp){ + return false; + } + if(pp.length){ + return pp.panel("panel").is(":visible"); + }else{ + return false; + } + }; + function _3f9(_3fa){ + var _3fb=$.data(_3fa,"layout"); + var opts=_3fb.options; + var _3fc=_3fb.panels; + var _3fd=opts.onCollapse; + opts.onCollapse=function(){ + }; + _3fe("east"); + _3fe("west"); + _3fe("north"); + _3fe("south"); + opts.onCollapse=_3fd; + function _3fe(_3ff){ + var p=_3fc[_3ff]; + if(p.length&&p.panel("options").collapsed){ + _3dd(_3fa,_3ff,0); + } + }; + }; + function _400(_401,_402,_403){ + var p=$(_401).layout("panel",_402); + p.panel("options").split=_403; + var cls="layout-split-"+_402; + var _404=p.panel("panel").removeClass(cls); + if(_403){ + _404.addClass(cls); + } + _404.resizable({disabled:(!_403)}); + _3b1(_401); + }; + $.fn.layout=function(_405,_406){ + if(typeof _405=="string"){ + return $.fn.layout.methods[_405](this,_406); + } + _405=_405||{}; + return this.each(function(){ + var _407=$.data(this,"layout"); + if(_407){ + $.extend(_407.options,_405); + }else{ + var opts=$.extend({},$.fn.layout.defaults,$.fn.layout.parseOptions(this),_405); + $.data(this,"layout",{options:opts,panels:{center:$(),north:$(),south:$(),east:$(),west:$()}}); + init(this); + } + _3b1(this); + _3f9(this); + }); + }; + $.fn.layout.methods={options:function(jq){ + return $.data(jq[0],"layout").options; + },resize:function(jq,_408){ + return jq.each(function(){ + _3b1(this,_408); + }); + },panel:function(jq,_409){ + return $.data(jq[0],"layout").panels[_409]; + },collapse:function(jq,_40a){ + return jq.each(function(){ + _3dd(this,_40a); + }); + },expand:function(jq,_40b){ + return jq.each(function(){ + _3f0(this,_40b); + }); + },add:function(jq,_40c){ + return jq.each(function(){ + _3c0(this,_40c); + _3b1(this); + if($(this).layout("panel",_40c.region).panel("options").collapsed){ + _3dd(this,_40c.region,0); + } + }); + },remove:function(jq,_40d){ + return jq.each(function(){ + _3d8(this,_40d); + _3b1(this); + }); + },split:function(jq,_40e){ + return jq.each(function(){ + _400(this,_40e,true); + }); + },unsplit:function(jq,_40f){ + return jq.each(function(){ + _400(this,_40f,false); + }); + }}; + $.fn.layout.parseOptions=function(_410){ + return $.extend({},$.parser.parseOptions(_410,[{fit:"boolean"}])); + }; + $.fn.layout.defaults={fit:false,onExpand:function(_411){ + },onCollapse:function(_412){ + },onAdd:function(_413){ + },onRemove:function(_414){ + }}; + $.fn.layout.parsePanelOptions=function(_415){ + var t=$(_415); + return $.extend({},$.fn.panel.parseOptions(_415),$.parser.parseOptions(_415,["region",{split:"boolean",collpasedSize:"number",minWidth:"number",minHeight:"number",maxWidth:"number",maxHeight:"number"}])); + }; + $.fn.layout.paneldefaults=$.extend({},$.fn.panel.defaults,{region:null,split:false,collapsedSize:28,expandMode:"float",hideExpandTool:false,hideCollapsedContent:true,collapsedContent:function(_416){ + var p=$(this); + var opts=p.panel("options"); + if(opts.region=="north"||opts.region=="south"){ + return _416; + } + var cc=[]; + if(opts.iconCls){ + cc.push("
        "); + } + cc.push("
        "); + cc.push(_416); + cc.push("
        "); + return cc.join(""); + },minWidth:10,minHeight:10,maxWidth:10000,maxHeight:10000}); +})(jQuery); +(function($){ + $(function(){ + $(document).unbind(".menu").bind("mousedown.menu",function(e){ + var m=$(e.target).closest("div.menu,div.combo-p"); + if(m.length){ + return; + } + $("body>div.menu-top:visible").not(".menu-inline").menu("hide"); + _417($("body>div.menu:visible").not(".menu-inline")); + }); + }); + function init(_418){ + var opts=$.data(_418,"menu").options; + $(_418).addClass("menu-top"); + opts.inline?$(_418).addClass("menu-inline"):$(_418).appendTo("body"); + $(_418).bind("_resize",function(e,_419){ + if($(this).hasClass("easyui-fluid")||_419){ + $(_418).menu("resize",_418); + } + return false; + }); + var _41a=_41b($(_418)); + for(var i=0;i<_41a.length;i++){ + _41e(_418,_41a[i]); + } + function _41b(menu){ + var _41c=[]; + menu.addClass("menu"); + _41c.push(menu); + if(!menu.hasClass("menu-content")){ + menu.children("div").each(function(){ + var _41d=$(this).children("div"); + if(_41d.length){ + _41d.appendTo("body"); + this.submenu=_41d; + var mm=_41b(_41d); + _41c=_41c.concat(mm); + } + }); + } + return _41c; + }; + }; + function _41e(_41f,div){ + var menu=$(div).addClass("menu"); + if(!menu.data("menu")){ + menu.data("menu",{options:$.parser.parseOptions(menu[0],["width","height"])}); + } + if(!menu.hasClass("menu-content")){ + menu.children("div").each(function(){ + _420(_41f,this); + }); + $("
        ").prependTo(menu); + } + _421(_41f,menu); + if(!menu.hasClass("menu-inline")){ + menu.hide(); + } + _422(_41f,menu); + }; + function _420(_423,div,_424){ + var item=$(div); + var _425=$.extend({},$.parser.parseOptions(item[0],["id","name","iconCls","href",{separator:"boolean"}]),{disabled:(item.attr("disabled")?true:undefined),text:$.trim(item.html()),onclick:item[0].onclick},_424||{}); + _425.onclick=_425.onclick||_425.handler||null; + item.data("menuitem",{options:_425}); + if(_425.separator){ + item.addClass("menu-sep"); + } + if(!item.hasClass("menu-sep")){ + item.addClass("menu-item"); + item.empty().append($("
        ").html(_425.text)); + if(_425.iconCls){ + $("
        ").addClass(_425.iconCls).appendTo(item); + } + if(_425.id){ + item.attr("id",_425.id); + } + if(_425.onclick){ + if(typeof _425.onclick=="string"){ + item.attr("onclick",_425.onclick); + }else{ + item[0].onclick=eval(_425.onclick); + } + } + if(_425.disabled){ + _426(_423,item[0],true); + } + if(item[0].submenu){ + $("
        ").appendTo(item); + } + } + }; + function _421(_427,menu){ + var opts=$.data(_427,"menu").options; + var _428=menu.attr("style")||""; + var _429=menu.is(":visible"); + menu.css({display:"block",left:-10000,height:"auto",overflow:"hidden"}); + menu.find(".menu-item").each(function(){ + $(this)._outerHeight(opts.itemHeight); + $(this).find(".menu-text").css({height:(opts.itemHeight-2)+"px",lineHeight:(opts.itemHeight-2)+"px"}); + }); + menu.removeClass("menu-noline").addClass(opts.noline?"menu-noline":""); + var _42a=menu.data("menu").options; + var _42b=_42a.width; + var _42c=_42a.height; + if(isNaN(parseInt(_42b))){ + _42b=0; + menu.find("div.menu-text").each(function(){ + if(_42b<$(this).outerWidth()){ + _42b=$(this).outerWidth(); + } + }); + _42b=_42b?_42b+40:""; + } + var _42d=menu.outerHeight(); + if(isNaN(parseInt(_42c))){ + _42c=_42d; + if(menu.hasClass("menu-top")&&opts.alignTo){ + var at=$(opts.alignTo); + var h1=at.offset().top-$(document).scrollTop(); + var h2=$(window)._outerHeight()+$(document).scrollTop()-at.offset().top-at._outerHeight(); + _42c=Math.min(_42c,Math.max(h1,h2)); + }else{ + if(_42c>$(window)._outerHeight()){ + _42c=$(window).height(); + } + } + } + menu.attr("style",_428); + menu.show(); + menu._size($.extend({},_42a,{width:_42b,height:_42c,minWidth:_42a.minWidth||opts.minWidth,maxWidth:_42a.maxWidth||opts.maxWidth})); + menu.find(".easyui-fluid").triggerHandler("_resize",[true]); + menu.css("overflow",menu.outerHeight()<_42d?"auto":"hidden"); + menu.children("div.menu-line")._outerHeight(_42d-2); + if(!_429){ + menu.hide(); + } + }; + function _422(_42e,menu){ + var _42f=$.data(_42e,"menu"); + var opts=_42f.options; + menu.unbind(".menu"); + for(var _430 in opts.events){ + menu.bind(_430+".menu",{target:_42e},opts.events[_430]); + } + }; + function _431(e){ + var _432=e.data.target; + var _433=$.data(_432,"menu"); + if(_433.timer){ + clearTimeout(_433.timer); + _433.timer=null; + } + }; + function _434(e){ + var _435=e.data.target; + var _436=$.data(_435,"menu"); + if(_436.options.hideOnUnhover){ + _436.timer=setTimeout(function(){ + _437(_435,$(_435).hasClass("menu-inline")); + },_436.options.duration); + } + }; + function _438(e){ + var _439=e.data.target; + var item=$(e.target).closest(".menu-item"); + if(item.length){ + item.siblings().each(function(){ + if(this.submenu){ + _417(this.submenu); + } + $(this).removeClass("menu-active"); + }); + item.addClass("menu-active"); + if(item.hasClass("menu-item-disabled")){ + item.addClass("menu-active-disabled"); + return; + } + var _43a=item[0].submenu; + if(_43a){ + $(_439).menu("show",{menu:_43a,parent:item}); + } + } + }; + function _43b(e){ + var item=$(e.target).closest(".menu-item"); + if(item.length){ + item.removeClass("menu-active menu-active-disabled"); + var _43c=item[0].submenu; + if(_43c){ + if(e.pageX>=parseInt(_43c.css("left"))){ + item.addClass("menu-active"); + }else{ + _417(_43c); + } + }else{ + item.removeClass("menu-active"); + } + } + }; + function _43d(e){ + var _43e=e.data.target; + var item=$(e.target).closest(".menu-item"); + if(item.length){ + var opts=$(_43e).data("menu").options; + var _43f=item.data("menuitem").options; + if(_43f.disabled){ + return; + } + if(!item[0].submenu){ + _437(_43e,opts.inline); + if(_43f.href){ + location.href=_43f.href; + } + } + item.trigger("mouseenter"); + opts.onClick.call(_43e,$(_43e).menu("getItem",item[0])); + } + }; + function _437(_440,_441){ + var _442=$.data(_440,"menu"); + if(_442){ + if($(_440).is(":visible")){ + _417($(_440)); + if(_441){ + $(_440).show(); + }else{ + _442.options.onHide.call(_440); + } + } + } + return false; + }; + function _443(_444,_445){ + _445=_445||{}; + var left,top; + var opts=$.data(_444,"menu").options; + var menu=$(_445.menu||_444); + $(_444).menu("resize",menu[0]); + if(menu.hasClass("menu-top")){ + $.extend(opts,_445); + left=opts.left; + top=opts.top; + if(opts.alignTo){ + var at=$(opts.alignTo); + left=at.offset().left; + top=at.offset().top+at._outerHeight(); + if(opts.align=="right"){ + left+=at.outerWidth()-menu.outerWidth(); + } + } + if(left+menu.outerWidth()>$(window)._outerWidth()+$(document)._scrollLeft()){ + left=$(window)._outerWidth()+$(document).scrollLeft()-menu.outerWidth()-5; + } + if(left<0){ + left=0; + } + top=_446(top,opts.alignTo); + }else{ + var _447=_445.parent; + left=_447.offset().left+_447.outerWidth()-2; + if(left+menu.outerWidth()+5>$(window)._outerWidth()+$(document).scrollLeft()){ + left=_447.offset().left-menu.outerWidth()+2; + } + top=_446(_447.offset().top-3); + } + function _446(top,_448){ + if(top+menu.outerHeight()>$(window)._outerHeight()+$(document).scrollTop()){ + if(_448){ + top=$(_448).offset().top-menu._outerHeight(); + }else{ + top=$(window)._outerHeight()+$(document).scrollTop()-menu.outerHeight(); + } + } + if(top<0){ + top=0; + } + return top; + }; + menu.css(opts.position.call(_444,menu[0],left,top)); + menu.show(0,function(){ + if(!menu[0].shadow){ + menu[0].shadow=$("
        ").insertAfter(menu); + } + menu[0].shadow.css({display:(menu.hasClass("menu-inline")?"none":"block"),zIndex:$.fn.menu.defaults.zIndex++,left:menu.css("left"),top:menu.css("top"),width:menu.outerWidth(),height:menu.outerHeight()}); + menu.css("z-index",$.fn.menu.defaults.zIndex++); + if(menu.hasClass("menu-top")){ + opts.onShow.call(_444); + } + }); + }; + function _417(menu){ + if(menu&&menu.length){ + _449(menu); + menu.find("div.menu-item").each(function(){ + if(this.submenu){ + _417(this.submenu); + } + $(this).removeClass("menu-active"); + }); + } + function _449(m){ + m.stop(true,true); + if(m[0].shadow){ + m[0].shadow.hide(); + } + m.hide(); + }; + }; + function _44a(_44b,text){ + var _44c=null; + var tmp=$("
        "); + function find(menu){ + menu.children("div.menu-item").each(function(){ + var item=$(_44b).menu("getItem",this); + var s=tmp.empty().html(item.text).text(); + if(text==$.trim(s)){ + _44c=item; + }else{ + if(this.submenu&&!_44c){ + find(this.submenu); + } + } + }); + }; + find($(_44b)); + tmp.remove(); + return _44c; + }; + function _426(_44d,_44e,_44f){ + var t=$(_44e); + if(t.hasClass("menu-item")){ + var opts=t.data("menuitem").options; + opts.disabled=_44f; + if(_44f){ + t.addClass("menu-item-disabled"); + t[0].onclick=null; + }else{ + t.removeClass("menu-item-disabled"); + t[0].onclick=opts.onclick; + } + } + }; + function _450(_451,_452){ + var opts=$.data(_451,"menu").options; + var menu=$(_451); + if(_452.parent){ + if(!_452.parent.submenu){ + var _453=$("
        ").appendTo("body"); + _452.parent.submenu=_453; + $("
        ").appendTo(_452.parent); + _41e(_451,_453); + } + menu=_452.parent.submenu; + } + var div=$("
        ").appendTo(menu); + _420(_451,div,_452); + }; + function _454(_455,_456){ + function _457(el){ + if(el.submenu){ + el.submenu.children("div.menu-item").each(function(){ + _457(this); + }); + var _458=el.submenu[0].shadow; + if(_458){ + _458.remove(); + } + el.submenu.remove(); + } + $(el).remove(); + }; + _457(_456); + }; + function _459(_45a,_45b,_45c){ + var menu=$(_45b).parent(); + if(_45c){ + $(_45b).show(); + }else{ + $(_45b).hide(); + } + _421(_45a,menu); + }; + function _45d(_45e){ + $(_45e).children("div.menu-item").each(function(){ + _454(_45e,this); + }); + if(_45e.shadow){ + _45e.shadow.remove(); + } + $(_45e).remove(); + }; + $.fn.menu=function(_45f,_460){ + if(typeof _45f=="string"){ + return $.fn.menu.methods[_45f](this,_460); + } + _45f=_45f||{}; + return this.each(function(){ + var _461=$.data(this,"menu"); + if(_461){ + $.extend(_461.options,_45f); + }else{ + _461=$.data(this,"menu",{options:$.extend({},$.fn.menu.defaults,$.fn.menu.parseOptions(this),_45f)}); + init(this); + } + $(this).css({left:_461.options.left,top:_461.options.top}); + }); + }; + $.fn.menu.methods={options:function(jq){ + return $.data(jq[0],"menu").options; + },show:function(jq,pos){ + return jq.each(function(){ + _443(this,pos); + }); + },hide:function(jq){ + return jq.each(function(){ + _437(this); + }); + },destroy:function(jq){ + return jq.each(function(){ + _45d(this); + }); + },setText:function(jq,_462){ + return jq.each(function(){ + var item=$(_462.target).data("menuitem").options; + item.text=_462.text; + $(_462.target).children("div.menu-text").html(_462.text); + }); + },setIcon:function(jq,_463){ + return jq.each(function(){ + var item=$(_463.target).data("menuitem").options; + item.iconCls=_463.iconCls; + $(_463.target).children("div.menu-icon").remove(); + if(_463.iconCls){ + $("
        ").addClass(_463.iconCls).appendTo(_463.target); + } + }); + },getItem:function(jq,_464){ + var item=$(_464).data("menuitem").options; + return $.extend({},item,{target:$(_464)[0]}); + },findItem:function(jq,text){ + return _44a(jq[0],text); + },appendItem:function(jq,_465){ + return jq.each(function(){ + _450(this,_465); + }); + },removeItem:function(jq,_466){ + return jq.each(function(){ + _454(this,_466); + }); + },enableItem:function(jq,_467){ + return jq.each(function(){ + _426(this,_467,false); + }); + },disableItem:function(jq,_468){ + return jq.each(function(){ + _426(this,_468,true); + }); + },showItem:function(jq,_469){ + return jq.each(function(){ + _459(this,_469,true); + }); + },hideItem:function(jq,_46a){ + return jq.each(function(){ + _459(this,_46a,false); + }); + },resize:function(jq,_46b){ + return jq.each(function(){ + _421(this,_46b?$(_46b):$(this)); + }); + }}; + $.fn.menu.parseOptions=function(_46c){ + return $.extend({},$.parser.parseOptions(_46c,[{minWidth:"number",itemHeight:"number",duration:"number",hideOnUnhover:"boolean"},{fit:"boolean",inline:"boolean",noline:"boolean"}])); + }; + $.fn.menu.defaults={zIndex:110000,left:0,top:0,alignTo:null,align:"left",minWidth:120,itemHeight:22,duration:100,hideOnUnhover:true,inline:false,fit:false,noline:false,events:{mouseenter:_431,mouseleave:_434,mouseover:_438,mouseout:_43b,click:_43d},position:function(_46d,left,top){ + return {left:left,top:top}; + },onShow:function(){ + },onHide:function(){ + },onClick:function(item){ + }}; +})(jQuery); +(function($){ + function init(_46e){ + var opts=$.data(_46e,"menubutton").options; + var btn=$(_46e); + btn.linkbutton(opts); + if(opts.hasDownArrow){ + btn.removeClass(opts.cls.btn1+" "+opts.cls.btn2).addClass("m-btn"); + btn.removeClass("m-btn-small m-btn-medium m-btn-large").addClass("m-btn-"+opts.size); + var _46f=btn.find(".l-btn-left"); + $("").addClass(opts.cls.arrow).appendTo(_46f); + $("").addClass("m-btn-line").appendTo(_46f); + } + $(_46e).menubutton("resize"); + if(opts.menu){ + $(opts.menu).menu({duration:opts.duration}); + var _470=$(opts.menu).menu("options"); + var _471=_470.onShow; + var _472=_470.onHide; + $.extend(_470,{onShow:function(){ + var _473=$(this).menu("options"); + var btn=$(_473.alignTo); + var opts=btn.menubutton("options"); + btn.addClass((opts.plain==true)?opts.cls.btn2:opts.cls.btn1); + _471.call(this); + },onHide:function(){ + var _474=$(this).menu("options"); + var btn=$(_474.alignTo); + var opts=btn.menubutton("options"); + btn.removeClass((opts.plain==true)?opts.cls.btn2:opts.cls.btn1); + _472.call(this); + }}); + } + }; + function _475(_476){ + var opts=$.data(_476,"menubutton").options; + var btn=$(_476); + var t=btn.find("."+opts.cls.trigger); + if(!t.length){ + t=btn; + } + t.unbind(".menubutton"); + var _477=null; + t.bind("click.menubutton",function(){ + if(!_478()){ + _479(_476); + return false; + } + }).bind("mouseenter.menubutton",function(){ + if(!_478()){ + _477=setTimeout(function(){ + _479(_476); + },opts.duration); + return false; + } + }).bind("mouseleave.menubutton",function(){ + if(_477){ + clearTimeout(_477); + } + $(opts.menu).triggerHandler("mouseleave"); + }); + function _478(){ + return $(_476).linkbutton("options").disabled; + }; + }; + function _479(_47a){ + var opts=$(_47a).menubutton("options"); + if(opts.disabled||!opts.menu){ + return; + } + $("body>div.menu-top").menu("hide"); + var btn=$(_47a); + var mm=$(opts.menu); + if(mm.length){ + mm.menu("options").alignTo=btn; + mm.menu("show",{alignTo:btn,align:opts.menuAlign}); + } + btn.blur(); + }; + $.fn.menubutton=function(_47b,_47c){ + if(typeof _47b=="string"){ + var _47d=$.fn.menubutton.methods[_47b]; + if(_47d){ + return _47d(this,_47c); + }else{ + return this.linkbutton(_47b,_47c); + } + } + _47b=_47b||{}; + return this.each(function(){ + var _47e=$.data(this,"menubutton"); + if(_47e){ + $.extend(_47e.options,_47b); + }else{ + $.data(this,"menubutton",{options:$.extend({},$.fn.menubutton.defaults,$.fn.menubutton.parseOptions(this),_47b)}); + $(this).removeAttr("disabled"); + } + init(this); + _475(this); + }); + }; + $.fn.menubutton.methods={options:function(jq){ + var _47f=jq.linkbutton("options"); + return $.extend($.data(jq[0],"menubutton").options,{toggle:_47f.toggle,selected:_47f.selected,disabled:_47f.disabled}); + },destroy:function(jq){ + return jq.each(function(){ + var opts=$(this).menubutton("options"); + if(opts.menu){ + $(opts.menu).menu("destroy"); + } + $(this).remove(); + }); + }}; + $.fn.menubutton.parseOptions=function(_480){ + var t=$(_480); + return $.extend({},$.fn.linkbutton.parseOptions(_480),$.parser.parseOptions(_480,["menu",{plain:"boolean",hasDownArrow:"boolean",duration:"number"}])); + }; + $.fn.menubutton.defaults=$.extend({},$.fn.linkbutton.defaults,{plain:true,hasDownArrow:true,menu:null,menuAlign:"left",duration:100,cls:{btn1:"m-btn-active",btn2:"m-btn-plain-active",arrow:"m-btn-downarrow",trigger:"m-btn"}}); +})(jQuery); +(function($){ + function init(_481){ + var opts=$.data(_481,"splitbutton").options; + $(_481).menubutton(opts); + $(_481).addClass("s-btn"); + }; + $.fn.splitbutton=function(_482,_483){ + if(typeof _482=="string"){ + var _484=$.fn.splitbutton.methods[_482]; + if(_484){ + return _484(this,_483); + }else{ + return this.menubutton(_482,_483); + } + } + _482=_482||{}; + return this.each(function(){ + var _485=$.data(this,"splitbutton"); + if(_485){ + $.extend(_485.options,_482); + }else{ + $.data(this,"splitbutton",{options:$.extend({},$.fn.splitbutton.defaults,$.fn.splitbutton.parseOptions(this),_482)}); + $(this).removeAttr("disabled"); + } + init(this); + }); + }; + $.fn.splitbutton.methods={options:function(jq){ + var _486=jq.menubutton("options"); + var _487=$.data(jq[0],"splitbutton").options; + $.extend(_487,{disabled:_486.disabled,toggle:_486.toggle,selected:_486.selected}); + return _487; + }}; + $.fn.splitbutton.parseOptions=function(_488){ + var t=$(_488); + return $.extend({},$.fn.linkbutton.parseOptions(_488),$.parser.parseOptions(_488,["menu",{plain:"boolean",duration:"number"}])); + }; + $.fn.splitbutton.defaults=$.extend({},$.fn.linkbutton.defaults,{plain:true,menu:null,duration:100,cls:{btn1:"m-btn-active s-btn-active",btn2:"m-btn-plain-active s-btn-plain-active",arrow:"m-btn-downarrow",trigger:"m-btn-line"}}); +})(jQuery); +(function($){ + function init(_489){ + var _48a=$(""+""+""+""+""+""+""+"").insertAfter(_489); + var t=$(_489); + t.addClass("switchbutton-f").hide(); + var name=t.attr("name"); + if(name){ + t.removeAttr("name").attr("switchbuttonName",name); + _48a.find(".switchbutton-value").attr("name",name); + } + _48a.bind("_resize",function(e,_48b){ + if($(this).hasClass("easyui-fluid")||_48b){ + _48c(_489); + } + return false; + }); + return _48a; + }; + function _48c(_48d,_48e){ + var _48f=$.data(_48d,"switchbutton"); + var opts=_48f.options; + var _490=_48f.switchbutton; + if(_48e){ + $.extend(opts,_48e); + } + var _491=_490.is(":visible"); + if(!_491){ + _490.appendTo("body"); + } + _490._size(opts); + var w=_490.width(); + var h=_490.height(); + var w=_490.outerWidth(); + var h=_490.outerHeight(); + var _492=parseInt(opts.handleWidth)||_490.height(); + var _493=w*2-_492; + _490.find(".switchbutton-inner").css({width:_493+"px",height:h+"px",lineHeight:h+"px"}); + _490.find(".switchbutton-handle")._outerWidth(_492)._outerHeight(h).css({marginLeft:-_492/2+"px"}); + _490.find(".switchbutton-on").css({width:(w-_492/2)+"px",textIndent:(opts.reversed?"":"-")+_492/2+"px"}); + _490.find(".switchbutton-off").css({width:(w-_492/2)+"px",textIndent:(opts.reversed?"-":"")+_492/2+"px"}); + opts.marginWidth=w-_492; + _494(_48d,opts.checked,false); + if(!_491){ + _490.insertAfter(_48d); + } + }; + function _495(_496){ + var _497=$.data(_496,"switchbutton"); + var opts=_497.options; + var _498=_497.switchbutton; + var _499=_498.find(".switchbutton-inner"); + var on=_499.find(".switchbutton-on").html(opts.onText); + var off=_499.find(".switchbutton-off").html(opts.offText); + var _49a=_499.find(".switchbutton-handle").html(opts.handleText); + if(opts.reversed){ + off.prependTo(_499); + on.insertAfter(_49a); + }else{ + on.prependTo(_499); + off.insertAfter(_49a); + } + _498.find(".switchbutton-value")._propAttr("checked",opts.checked); + _498.removeClass("switchbutton-disabled").addClass(opts.disabled?"switchbutton-disabled":""); + _498.removeClass("switchbutton-reversed").addClass(opts.reversed?"switchbutton-reversed":""); + _494(_496,opts.checked); + _49b(_496,opts.readonly); + $(_496).switchbutton("setValue",opts.value); + }; + function _494(_49c,_49d,_49e){ + var _49f=$.data(_49c,"switchbutton"); + var opts=_49f.options; + opts.checked=_49d; + var _4a0=_49f.switchbutton.find(".switchbutton-inner"); + var _4a1=_4a0.find(".switchbutton-on"); + var _4a2=opts.reversed?(opts.checked?opts.marginWidth:0):(opts.checked?0:opts.marginWidth); + var dir=_4a1.css("float").toLowerCase(); + var css={}; + css["margin-"+dir]=-_4a2+"px"; + _49e?_4a0.animate(css,200):_4a0.css(css); + var _4a3=_4a0.find(".switchbutton-value"); + var ck=_4a3.is(":checked"); + $(_49c).add(_4a3)._propAttr("checked",opts.checked); + if(ck!=opts.checked){ + opts.onChange.call(_49c,opts.checked); + } + }; + function _4a4(_4a5,_4a6){ + var _4a7=$.data(_4a5,"switchbutton"); + var opts=_4a7.options; + var _4a8=_4a7.switchbutton; + var _4a9=_4a8.find(".switchbutton-value"); + if(_4a6){ + opts.disabled=true; + $(_4a5).add(_4a9).attr("disabled","disabled"); + _4a8.addClass("switchbutton-disabled"); + }else{ + opts.disabled=false; + $(_4a5).add(_4a9).removeAttr("disabled"); + _4a8.removeClass("switchbutton-disabled"); + } + }; + function _49b(_4aa,mode){ + var _4ab=$.data(_4aa,"switchbutton"); + var opts=_4ab.options; + opts.readonly=mode==undefined?true:mode; + _4ab.switchbutton.removeClass("switchbutton-readonly").addClass(opts.readonly?"switchbutton-readonly":""); + }; + function _4ac(_4ad){ + var _4ae=$.data(_4ad,"switchbutton"); + var opts=_4ae.options; + _4ae.switchbutton.unbind(".switchbutton").bind("click.switchbutton",function(){ + if(!opts.disabled&&!opts.readonly){ + _494(_4ad,opts.checked?false:true,true); + } + }); + }; + $.fn.switchbutton=function(_4af,_4b0){ + if(typeof _4af=="string"){ + return $.fn.switchbutton.methods[_4af](this,_4b0); + } + _4af=_4af||{}; + return this.each(function(){ + var _4b1=$.data(this,"switchbutton"); + if(_4b1){ + $.extend(_4b1.options,_4af); + }else{ + _4b1=$.data(this,"switchbutton",{options:$.extend({},$.fn.switchbutton.defaults,$.fn.switchbutton.parseOptions(this),_4af),switchbutton:init(this)}); + } + _4b1.options.originalChecked=_4b1.options.checked; + _495(this); + _48c(this); + _4ac(this); + }); + }; + $.fn.switchbutton.methods={options:function(jq){ + var _4b2=jq.data("switchbutton"); + return $.extend(_4b2.options,{value:_4b2.switchbutton.find(".switchbutton-value").val()}); + },resize:function(jq,_4b3){ + return jq.each(function(){ + _48c(this,_4b3); + }); + },enable:function(jq){ + return jq.each(function(){ + _4a4(this,false); + }); + },disable:function(jq){ + return jq.each(function(){ + _4a4(this,true); + }); + },readonly:function(jq,mode){ + return jq.each(function(){ + _49b(this,mode); + }); + },check:function(jq){ + return jq.each(function(){ + _494(this,true); + }); + },uncheck:function(jq){ + return jq.each(function(){ + _494(this,false); + }); + },clear:function(jq){ + return jq.each(function(){ + _494(this,false); + }); + },reset:function(jq){ + return jq.each(function(){ + var opts=$(this).switchbutton("options"); + _494(this,opts.originalChecked); + }); + },setValue:function(jq,_4b4){ + return jq.each(function(){ + $(this).val(_4b4); + $.data(this,"switchbutton").switchbutton.find(".switchbutton-value").val(_4b4); + }); + }}; + $.fn.switchbutton.parseOptions=function(_4b5){ + var t=$(_4b5); + return $.extend({},$.parser.parseOptions(_4b5,["onText","offText","handleText",{handleWidth:"number",reversed:"boolean"}]),{value:(t.val()||undefined),checked:(t.attr("checked")?true:undefined),disabled:(t.attr("disabled")?true:undefined),readonly:(t.attr("readonly")?true:undefined)}); + }; + $.fn.switchbutton.defaults={handleWidth:"auto",width:60,height:26,checked:false,disabled:false,readonly:false,reversed:false,onText:"ON",offText:"OFF",handleText:"",value:"on",onChange:function(_4b6){ + }}; +})(jQuery); +(function($){ + function init(_4b7){ + $(_4b7).addClass("validatebox-text"); + }; + function _4b8(_4b9){ + var _4ba=$.data(_4b9,"validatebox"); + _4ba.validating=false; + if(_4ba.vtimer){ + clearTimeout(_4ba.vtimer); + } + if(_4ba.ftimer){ + clearTimeout(_4ba.ftimer); + } + $(_4b9).tooltip("destroy"); + $(_4b9).unbind(); + $(_4b9).remove(); + }; + function _4bb(_4bc){ + var opts=$.data(_4bc,"validatebox").options; + $(_4bc).unbind(".validatebox"); + if(opts.novalidate||opts.disabled){ + return; + } + for(var _4bd in opts.events){ + $(_4bc).bind(_4bd+".validatebox",{target:_4bc},opts.events[_4bd]); + } + }; + function _4be(e){ + var _4bf=e.data.target; + var _4c0=$.data(_4bf,"validatebox"); + var opts=_4c0.options; + if($(_4bf).attr("readonly")){ + return; + } + _4c0.validating=true; + _4c0.value=opts.val(_4bf); + (function(){ + if(!$(_4bf).is(":visible")){ + _4c0.validating=false; + } + if(_4c0.validating){ + var _4c1=opts.val(_4bf); + if(_4c0.value!=_4c1){ + _4c0.value=_4c1; + if(_4c0.vtimer){ + clearTimeout(_4c0.vtimer); + } + _4c0.vtimer=setTimeout(function(){ + $(_4bf).validatebox("validate"); + },opts.delay); + }else{ + if(_4c0.message){ + opts.err(_4bf,_4c0.message); + } + } + _4c0.ftimer=setTimeout(arguments.callee,opts.interval); + } + })(); + }; + function _4c2(e){ + var _4c3=e.data.target; + var _4c4=$.data(_4c3,"validatebox"); + var opts=_4c4.options; + _4c4.validating=false; + if(_4c4.vtimer){ + clearTimeout(_4c4.vtimer); + _4c4.vtimer=undefined; + } + if(_4c4.ftimer){ + clearTimeout(_4c4.ftimer); + _4c4.ftimer=undefined; + } + if(opts.validateOnBlur){ + setTimeout(function(){ + $(_4c3).validatebox("validate"); + },0); + } + opts.err(_4c3,_4c4.message,"hide"); + }; + function _4c5(e){ + var _4c6=e.data.target; + var _4c7=$.data(_4c6,"validatebox"); + _4c7.options.err(_4c6,_4c7.message,"show"); + }; + function _4c8(e){ + var _4c9=e.data.target; + var _4ca=$.data(_4c9,"validatebox"); + if(!_4ca.validating){ + _4ca.options.err(_4c9,_4ca.message,"hide"); + } + }; + function _4cb(_4cc,_4cd,_4ce){ + var _4cf=$.data(_4cc,"validatebox"); + var opts=_4cf.options; + var t=$(_4cc); + if(_4ce=="hide"||!_4cd){ + t.tooltip("hide"); + }else{ + if((t.is(":focus")&&_4cf.validating)||_4ce=="show"){ + t.tooltip($.extend({},opts.tipOptions,{content:_4cd,position:opts.tipPosition,deltaX:opts.deltaX,deltaY:opts.deltaY})).tooltip("show"); + } + } + }; + function _4d0(_4d1){ + var _4d2=$.data(_4d1,"validatebox"); + var opts=_4d2.options; + var box=$(_4d1); + opts.onBeforeValidate.call(_4d1); + var _4d3=_4d4(); + _4d3?box.removeClass("validatebox-invalid"):box.addClass("validatebox-invalid"); + opts.err(_4d1,_4d2.message); + opts.onValidate.call(_4d1,_4d3); + return _4d3; + function _4d5(msg){ + _4d2.message=msg; + }; + function _4d6(_4d7,_4d8){ + var _4d9=opts.val(_4d1); + var _4da=/([a-zA-Z_]+)(.*)/.exec(_4d7); + var rule=opts.rules[_4da[1]]; + if(rule&&_4d9){ + var _4db=_4d8||opts.validParams||eval(_4da[2]); + if(!rule["validator"].call(_4d1,_4d9,_4db)){ + var _4dc=rule["message"]; + if(_4db){ + for(var i=0;i<_4db.length;i++){ + _4dc=_4dc.replace(new RegExp("\\{"+i+"\\}","g"),_4db[i]); + } + } + _4d5(opts.invalidMessage||_4dc); + return false; + } + } + return true; + }; + function _4d4(){ + _4d5(""); + if(!opts._validateOnCreate){ + setTimeout(function(){ + opts._validateOnCreate=true; + },0); + return true; + } + if(opts.novalidate||opts.disabled){ + return true; + } + if(opts.required){ + if(opts.val(_4d1)==""){ + _4d5(opts.missingMessage); + return false; + } + } + if(opts.validType){ + if($.isArray(opts.validType)){ + for(var i=0;i=_4ef[0]&&len<=_4ef[1]; + },message:"Please enter a value between {0} and {1}."},remote:{validator:function(_4f0,_4f1){ + var data={}; + data[_4f1[1]]=_4f0; + var _4f2=$.ajax({url:_4f1[0],dataType:"json",data:data,async:false,cache:false,type:"post"}).responseText; + return _4f2=="true"; + },message:"Please fix this field."}},onBeforeValidate:function(){ + },onValidate:function(_4f3){ + }}; +})(jQuery); +(function($){ + var _4f4=0; + function init(_4f5){ + $(_4f5).addClass("textbox-f").hide(); + var span=$(""+""+""+"").insertAfter(_4f5); + var name=$(_4f5).attr("name"); + if(name){ + span.find("input.textbox-value").attr("name",name); + $(_4f5).removeAttr("name").attr("textboxName",name); + } + return span; + }; + function _4f6(_4f7){ + var _4f8=$.data(_4f7,"textbox"); + var opts=_4f8.options; + var tb=_4f8.textbox; + var _4f9="_easyui_textbox_input"+(++_4f4); + tb.addClass(opts.cls); + tb.find(".textbox-text").remove(); + if(opts.multiline){ + $("").prependTo(tb); + }else{ + $("").prependTo(tb); + } + $("#"+_4f9).attr("tabindex",$(_4f7).attr("tabindex")||"").css("text-align",_4f7.style.textAlign||""); + tb.find(".textbox-addon").remove(); + var bb=opts.icons?$.extend(true,[],opts.icons):[]; + if(opts.iconCls){ + bb.push({iconCls:opts.iconCls,disabled:true}); + } + if(bb.length){ + var bc=$("").prependTo(tb); + bc.addClass("textbox-addon-"+opts.iconAlign); + for(var i=0;i"); + } + } + tb.find(".textbox-button").remove(); + if(opts.buttonText||opts.buttonIcon){ + var btn=$("").prependTo(tb); + btn.addClass("textbox-button-"+opts.buttonAlign).linkbutton({text:opts.buttonText,iconCls:opts.buttonIcon,onClick:function(){ + var t=$(this).parent().prev(); + t.textbox("options").onClickButton.call(t[0]); + }}); + } + if(opts.label){ + if(typeof opts.label=="object"){ + _4f8.label=$(opts.label); + _4f8.label.attr("for",_4f9); + }else{ + $(_4f8.label).remove(); + _4f8.label=$("").html(opts.label); + _4f8.label.css("textAlign",opts.labelAlign).attr("for",_4f9); + if(opts.labelPosition=="after"){ + _4f8.label.insertAfter(tb); + }else{ + _4f8.label.insertBefore(_4f7); + } + _4f8.label.removeClass("textbox-label-left textbox-label-right textbox-label-top"); + _4f8.label.addClass("textbox-label-"+opts.labelPosition); + } + }else{ + $(_4f8.label).remove(); + } + _4fa(_4f7); + _4fb(_4f7,opts.disabled); + _4fc(_4f7,opts.readonly); + }; + function _4fd(_4fe){ + var _4ff=$.data(_4fe,"textbox"); + var tb=_4ff.textbox; + tb.find(".textbox-text").validatebox("destroy"); + tb.remove(); + $(_4ff.label).remove(); + $(_4fe).remove(); + }; + function _500(_501,_502){ + var _503=$.data(_501,"textbox"); + var opts=_503.options; + var tb=_503.textbox; + var _504=tb.parent(); + if(_502){ + if(typeof _502=="object"){ + $.extend(opts,_502); + }else{ + opts.width=_502; + } + } + if(isNaN(parseInt(opts.width))){ + var c=$(_501).clone(); + c.css("visibility","hidden"); + c.insertAfter(_501); + opts.width=c.outerWidth(); + c.remove(); + } + var _505=tb.is(":visible"); + if(!_505){ + tb.appendTo("body"); + } + var _506=tb.find(".textbox-text"); + var btn=tb.find(".textbox-button"); + var _507=tb.find(".textbox-addon"); + var _508=_507.find(".textbox-icon"); + if(opts.height=="auto"){ + _506.css({margin:"",paddingTop:"",paddingBottom:"",height:"",lineHeight:""}); + } + tb._size(opts,_504); + if(opts.label&&opts.labelPosition){ + if(opts.labelPosition=="top"){ + _503.label._size({width:opts.labelWidth=="auto"?tb.outerWidth():opts.labelWidth},tb); + if(opts.height!="auto"){ + tb._size("height",tb.outerHeight()-_503.label.outerHeight()); + } + }else{ + _503.label._size({width:opts.labelWidth,height:tb.outerHeight()},tb); + if(!opts.multiline){ + _503.label.css("lineHeight",_503.label.height()+"px"); + } + tb._size("width",tb.outerWidth()-_503.label.outerWidth()); + } + } + if(opts.buttonAlign=="left"||opts.buttonAlign=="right"){ + btn.linkbutton("resize",{height:tb.height()}); + }else{ + btn.linkbutton("resize",{width:"100%"}); + } + var _509=tb.width()-_508.length*opts.iconWidth-_50a("left")-_50a("right"); + var _50b=opts.height=="auto"?_506.outerHeight():(tb.height()-_50a("top")-_50a("bottom")); + _507.css(opts.iconAlign,_50a(opts.iconAlign)+"px"); + _507.css("top",_50a("top")+"px"); + _508.css({width:opts.iconWidth+"px",height:_50b+"px"}); + _506.css({paddingLeft:(_501.style.paddingLeft||""),paddingRight:(_501.style.paddingRight||""),marginLeft:_50c("left"),marginRight:_50c("right"),marginTop:_50a("top"),marginBottom:_50a("bottom")}); + if(opts.multiline){ + _506.css({paddingTop:(_501.style.paddingTop||""),paddingBottom:(_501.style.paddingBottom||"")}); + _506._outerHeight(_50b); + }else{ + _506.css({paddingTop:0,paddingBottom:0,height:_50b+"px",lineHeight:_50b+"px"}); + } + _506._outerWidth(_509); + opts.onResizing.call(_501,opts.width,opts.height); + if(!_505){ + tb.insertAfter(_501); + } + opts.onResize.call(_501,opts.width,opts.height); + function _50c(_50d){ + return (opts.iconAlign==_50d?_507._outerWidth():0)+_50a(_50d); + }; + function _50a(_50e){ + var w=0; + btn.filter(".textbox-button-"+_50e).each(function(){ + if(_50e=="left"||_50e=="right"){ + w+=$(this).outerWidth(); + }else{ + w+=$(this).outerHeight(); + } + }); + return w; + }; + }; + function _4fa(_50f){ + var opts=$(_50f).textbox("options"); + var _510=$(_50f).textbox("textbox"); + _510.validatebox($.extend({},opts,{deltaX:function(_511){ + return $(_50f).textbox("getTipX",_511); + },deltaY:function(_512){ + return $(_50f).textbox("getTipY",_512); + },onBeforeValidate:function(){ + opts.onBeforeValidate.call(_50f); + var box=$(this); + if(!box.is(":focus")){ + if(box.val()!==opts.value){ + opts.oldInputValue=box.val(); + box.val(opts.value); + } + } + },onValidate:function(_513){ + var box=$(this); + if(opts.oldInputValue!=undefined){ + box.val(opts.oldInputValue); + opts.oldInputValue=undefined; + } + var tb=box.parent(); + if(_513){ + tb.removeClass("textbox-invalid"); + }else{ + tb.addClass("textbox-invalid"); + } + opts.onValidate.call(_50f,_513); + }})); + }; + function _514(_515){ + var _516=$.data(_515,"textbox"); + var opts=_516.options; + var tb=_516.textbox; + var _517=tb.find(".textbox-text"); + _517.attr("placeholder",opts.prompt); + _517.unbind(".textbox"); + $(_516.label).unbind(".textbox"); + if(!opts.disabled&&!opts.readonly){ + if(_516.label){ + $(_516.label).bind("click.textbox",function(e){ + if(!opts.hasFocusMe){ + _517.focus(); + $(_515).textbox("setSelectionRange",{start:0,end:_517.val().length}); + } + }); + } + _517.bind("blur.textbox",function(e){ + if(!tb.hasClass("textbox-focused")){ + return; + } + opts.value=$(this).val(); + if(opts.value==""){ + $(this).val(opts.prompt).addClass("textbox-prompt"); + }else{ + $(this).removeClass("textbox-prompt"); + } + tb.removeClass("textbox-focused"); + }).bind("focus.textbox",function(e){ + opts.hasFocusMe=true; + if(tb.hasClass("textbox-focused")){ + return; + } + if($(this).val()!=opts.value){ + $(this).val(opts.value); + } + $(this).removeClass("textbox-prompt"); + tb.addClass("textbox-focused"); + }); + for(var _518 in opts.inputEvents){ + _517.bind(_518+".textbox",{target:_515},opts.inputEvents[_518]); + } + } + var _519=tb.find(".textbox-addon"); + _519.unbind().bind("click",{target:_515},function(e){ + var icon=$(e.target).closest("a.textbox-icon:not(.textbox-icon-disabled)"); + if(icon.length){ + var _51a=parseInt(icon.attr("icon-index")); + var conf=opts.icons[_51a]; + if(conf&&conf.handler){ + conf.handler.call(icon[0],e); + } + opts.onClickIcon.call(_515,_51a); + } + }); + _519.find(".textbox-icon").each(function(_51b){ + var conf=opts.icons[_51b]; + var icon=$(this); + if(!conf||conf.disabled||opts.disabled||opts.readonly){ + icon.addClass("textbox-icon-disabled"); + }else{ + icon.removeClass("textbox-icon-disabled"); + } + }); + var btn=tb.find(".textbox-button"); + btn.linkbutton((opts.disabled||opts.readonly)?"disable":"enable"); + tb.unbind(".textbox").bind("_resize.textbox",function(e,_51c){ + if($(this).hasClass("easyui-fluid")||_51c){ + _500(_515); + } + return false; + }); + }; + function _4fb(_51d,_51e){ + var _51f=$.data(_51d,"textbox"); + var opts=_51f.options; + var tb=_51f.textbox; + var _520=tb.find(".textbox-text"); + var ss=$(_51d).add(tb.find(".textbox-value")); + opts.disabled=_51e; + if(opts.disabled){ + _520.blur(); + _520.validatebox("disable"); + tb.addClass("textbox-disabled"); + ss.attr("disabled","disabled"); + $(_51f.label).addClass("textbox-label-disabled"); + }else{ + _520.validatebox("enable"); + tb.removeClass("textbox-disabled"); + ss.removeAttr("disabled"); + $(_51f.label).removeClass("textbox-label-disabled"); + } + }; + function _4fc(_521,mode){ + var _522=$.data(_521,"textbox"); + var opts=_522.options; + var tb=_522.textbox; + var _523=tb.find(".textbox-text"); + opts.readonly=mode==undefined?true:mode; + if(opts.readonly){ + _523.triggerHandler("blur.textbox"); + } + _523.validatebox("readonly",opts.readonly); + tb.removeClass("textbox-readonly").addClass(opts.readonly?"textbox-readonly":""); + }; + $.fn.textbox=function(_524,_525){ + if(typeof _524=="string"){ + var _526=$.fn.textbox.methods[_524]; + if(_526){ + return _526(this,_525); + }else{ + return this.each(function(){ + var _527=$(this).textbox("textbox"); + _527.validatebox(_524,_525); + }); + } + } + _524=_524||{}; + return this.each(function(){ + var _528=$.data(this,"textbox"); + if(_528){ + $.extend(_528.options,_524); + if(_524.value!=undefined){ + _528.options.originalValue=_524.value; + } + }else{ + _528=$.data(this,"textbox",{options:$.extend({},$.fn.textbox.defaults,$.fn.textbox.parseOptions(this),_524),textbox:init(this)}); + _528.options.originalValue=_528.options.value; + } + _4f6(this); + _514(this); + if(_528.options.doSize){ + _500(this); + } + var _529=_528.options.value; + _528.options.value=""; + $(this).textbox("initValue",_529); + }); + }; + $.fn.textbox.methods={options:function(jq){ + return $.data(jq[0],"textbox").options; + },cloneFrom:function(jq,from){ + return jq.each(function(){ + var t=$(this); + if(t.data("textbox")){ + return; + } + if(!$(from).data("textbox")){ + $(from).textbox(); + } + var opts=$.extend(true,{},$(from).textbox("options")); + var name=t.attr("name")||""; + t.addClass("textbox-f").hide(); + t.removeAttr("name").attr("textboxName",name); + var span=$(from).next().clone().insertAfter(t); + var _52a="_easyui_textbox_input"+(++_4f4); + span.find(".textbox-value").attr("name",name); + span.find(".textbox-text").attr("id",_52a); + var _52b=$($(from).textbox("label")).clone(); + if(_52b.length){ + _52b.attr("for",_52a); + if(opts.labelPosition=="after"){ + _52b.insertAfter(t.next()); + }else{ + _52b.insertBefore(t); + } + } + $.data(this,"textbox",{options:opts,textbox:span,label:(_52b.length?_52b:undefined)}); + var _52c=$(from).textbox("button"); + if(_52c.length){ + t.textbox("button").linkbutton($.extend(true,{},_52c.linkbutton("options"))); + } + _514(this); + _4fa(this); + }); + },textbox:function(jq){ + return $.data(jq[0],"textbox").textbox.find(".textbox-text"); + },button:function(jq){ + return $.data(jq[0],"textbox").textbox.find(".textbox-button"); + },label:function(jq){ + return $.data(jq[0],"textbox").label; + },destroy:function(jq){ + return jq.each(function(){ + _4fd(this); + }); + },resize:function(jq,_52d){ + return jq.each(function(){ + _500(this,_52d); + }); + },disable:function(jq){ + return jq.each(function(){ + _4fb(this,true); + _514(this); + }); + },enable:function(jq){ + return jq.each(function(){ + _4fb(this,false); + _514(this); + }); + },readonly:function(jq,mode){ + return jq.each(function(){ + _4fc(this,mode); + _514(this); + }); + },isValid:function(jq){ + return jq.textbox("textbox").validatebox("isValid"); + },clear:function(jq){ + return jq.each(function(){ + $(this).textbox("setValue",""); + }); + },setText:function(jq,_52e){ + return jq.each(function(){ + var opts=$(this).textbox("options"); + var _52f=$(this).textbox("textbox"); + _52e=_52e==undefined?"":String(_52e); + if($(this).textbox("getText")!=_52e){ + _52f.val(_52e); + } + opts.value=_52e; + if(!_52f.is(":focus")){ + if(_52e){ + _52f.removeClass("textbox-prompt"); + }else{ + _52f.val(opts.prompt).addClass("textbox-prompt"); + } + } + $(this).textbox("validate"); + }); + },initValue:function(jq,_530){ + return jq.each(function(){ + var _531=$.data(this,"textbox"); + $(this).textbox("setText",_530); + _531.textbox.find(".textbox-value").val(_530); + $(this).val(_530); + }); + },setValue:function(jq,_532){ + return jq.each(function(){ + var opts=$.data(this,"textbox").options; + var _533=$(this).textbox("getValue"); + $(this).textbox("initValue",_532); + if(_533!=_532){ + opts.onChange.call(this,_532,_533); + $(this).closest("form").trigger("_change",[this]); + } + }); + },getText:function(jq){ + var _534=jq.textbox("textbox"); + if(_534.is(":focus")){ + return _534.val(); + }else{ + return jq.textbox("options").value; + } + },getValue:function(jq){ + return jq.data("textbox").textbox.find(".textbox-value").val(); + },reset:function(jq){ + return jq.each(function(){ + var opts=$(this).textbox("options"); + $(this).textbox("textbox").val(opts.originalValue); + $(this).textbox("setValue",opts.originalValue); + }); + },getIcon:function(jq,_535){ + return jq.data("textbox").textbox.find(".textbox-icon:eq("+_535+")"); + },getTipX:function(jq,_536){ + var _537=jq.data("textbox"); + var opts=_537.options; + var tb=_537.textbox; + var _538=tb.find(".textbox-text"); + var _536=_536||opts.tipPosition; + var p1=tb.offset(); + var p2=_538.offset(); + var w1=tb.outerWidth(); + var w2=_538.outerWidth(); + if(_536=="right"){ + return w1-w2-p2.left+p1.left; + }else{ + if(_536=="left"){ + return p1.left-p2.left; + }else{ + return (w1-w2-p2.left+p1.left)/2-(p2.left-p1.left)/2; + } + } + },getTipY:function(jq,_539){ + var _53a=jq.data("textbox"); + var opts=_53a.options; + var tb=_53a.textbox; + var _53b=tb.find(".textbox-text"); + var _539=_539||opts.tipPosition; + var p1=tb.offset(); + var p2=_53b.offset(); + var h1=tb.outerHeight(); + var h2=_53b.outerHeight(); + if(_539=="left"||_539=="right"){ + return (h1-h2-p2.top+p1.top)/2-(p2.top-p1.top)/2; + }else{ + if(_539=="bottom"){ + return (h1-h2-p2.top+p1.top); + }else{ + return (p1.top-p2.top); + } + } + },getSelectionStart:function(jq){ + return jq.textbox("getSelectionRange").start; + },getSelectionRange:function(jq){ + var _53c=jq.textbox("textbox")[0]; + var _53d=0; + var end=0; + if(typeof _53c.selectionStart=="number"){ + _53d=_53c.selectionStart; + end=_53c.selectionEnd; + }else{ + if(_53c.createTextRange){ + var s=document.selection.createRange(); + var _53e=_53c.createTextRange(); + _53e.setEndPoint("EndToStart",s); + _53d=_53e.text.length; + end=_53d+s.text.length; + } + } + return {start:_53d,end:end}; + },setSelectionRange:function(jq,_53f){ + return jq.each(function(){ + var _540=$(this).textbox("textbox")[0]; + var _541=_53f.start; + var end=_53f.end; + if(_540.setSelectionRange){ + _540.setSelectionRange(_541,end); + }else{ + if(_540.createTextRange){ + var _542=_540.createTextRange(); + _542.collapse(); + _542.moveEnd("character",end); + _542.moveStart("character",_541); + _542.select(); + } + } + }); + }}; + $.fn.textbox.parseOptions=function(_543){ + var t=$(_543); + return $.extend({},$.fn.validatebox.parseOptions(_543),$.parser.parseOptions(_543,["prompt","iconCls","iconAlign","buttonText","buttonIcon","buttonAlign","label","labelPosition","labelAlign",{multiline:"boolean",iconWidth:"number",labelWidth:"number"}]),{value:(t.val()||undefined),type:(t.attr("type")?t.attr("type"):undefined)}); + }; + $.fn.textbox.defaults=$.extend({},$.fn.validatebox.defaults,{doSize:true,width:"auto",height:"auto",cls:null,prompt:"",value:"",type:"text",multiline:false,icons:[],iconCls:null,iconAlign:"right",iconWidth:18,buttonText:"",buttonIcon:null,buttonAlign:"right",label:null,labelWidth:"auto",labelPosition:"before",labelAlign:"left",inputEvents:{blur:function(e){ + var t=$(e.data.target); + var opts=t.textbox("options"); + if(t.textbox("getValue")!=opts.value){ + t.textbox("setValue",opts.value); + } + },keydown:function(e){ + if(e.keyCode==13){ + var t=$(e.data.target); + t.textbox("setValue",t.textbox("getText")); + } + }},onChange:function(_544,_545){ + },onResizing:function(_546,_547){ + },onResize:function(_548,_549){ + },onClickButton:function(){ + },onClickIcon:function(_54a){ + }}); +})(jQuery); +(function($){ + function _54b(_54c){ + var _54d=$.data(_54c,"passwordbox"); + var opts=_54d.options; + var _54e=$.extend(true,[],opts.icons); + if(opts.showEye){ + _54e.push({iconCls:"passwordbox-open",handler:function(e){ + opts.revealed=!opts.revealed; + _54f(_54c); + }}); + } + $(_54c).addClass("passwordbox-f").textbox($.extend({},opts,{icons:_54e})); + _54f(_54c); + }; + function _550(_551,_552,all){ + var t=$(_551); + var opts=t.passwordbox("options"); + if(opts.revealed){ + t.textbox("setValue",_552); + return; + } + var _553=unescape(opts.passwordChar); + var cc=_552.split(""); + var vv=t.passwordbox("getValue").split(""); + for(var i=0;i").appendTo(btn); + if(btn.linkbutton("options").disabled){ + file.attr("disabled","disabled"); + }else{ + file.removeAttr("disabled"); + } + } + }; + function _569(_56a){ + var _56b=$.data(_56a,"filebox"); + var opts=_56b.options; + _56b.filebox.find(".textbox-value").remove(); + opts.oldValue=""; + var file=$("").appendTo(_56b.filebox); + file.attr("id",opts.fileboxId).attr("name",$(_56a).attr("textboxName")||""); + file.attr("accept",opts.accept); + file.attr("capture",opts.capture); + if(opts.multiple){ + file.attr("multiple","multiple"); + } + file.change(function(){ + var _56c=this.value; + if(this.files){ + _56c=$.map(this.files,function(file){ + return file.name; + }).join(opts.separator); + } + $(_56a).filebox("setText",_56c); + opts.onChange.call(_56a,_56c,opts.oldValue); + opts.oldValue=_56c; + }); + return file; + }; + $.fn.filebox=function(_56d,_56e){ + if(typeof _56d=="string"){ + var _56f=$.fn.filebox.methods[_56d]; + if(_56f){ + return _56f(this,_56e); + }else{ + return this.textbox(_56d,_56e); + } + } + _56d=_56d||{}; + return this.each(function(){ + var _570=$.data(this,"filebox"); + if(_570){ + $.extend(_570.options,_56d); + }else{ + $.data(this,"filebox",{options:$.extend({},$.fn.filebox.defaults,$.fn.filebox.parseOptions(this),_56d)}); + } + _566(this); + }); + }; + $.fn.filebox.methods={options:function(jq){ + var opts=jq.textbox("options"); + return $.extend($.data(jq[0],"filebox").options,{width:opts.width,value:opts.value,originalValue:opts.originalValue,disabled:opts.disabled,readonly:opts.readonly}); + },clear:function(jq){ + return jq.each(function(){ + $(this).textbox("clear"); + _569(this); + }); + },reset:function(jq){ + return jq.each(function(){ + $(this).filebox("clear"); + }); + },setValue:function(jq){ + return jq; + },setValues:function(jq){ + return jq; + }}; + $.fn.filebox.parseOptions=function(_571){ + var t=$(_571); + return $.extend({},$.fn.textbox.parseOptions(_571),$.parser.parseOptions(_571,["accept","capture","separator"]),{multiple:(t.attr("multiple")?true:undefined)}); + }; + $.fn.filebox.defaults=$.extend({},$.fn.textbox.defaults,{buttonIcon:null,buttonText:"Choose File",buttonAlign:"right",inputEvents:{},accept:"",capture:"",separator:",",multiple:false}); +})(jQuery); +(function($){ + function _572(_573){ + var _574=$.data(_573,"searchbox"); + var opts=_574.options; + var _575=$.extend(true,[],opts.icons); + _575.push({iconCls:"searchbox-button",handler:function(e){ + var t=$(e.data.target); + var opts=t.searchbox("options"); + opts.searcher.call(e.data.target,t.searchbox("getValue"),t.searchbox("getName")); + }}); + _576(); + var _577=_578(); + $(_573).addClass("searchbox-f").textbox($.extend({},opts,{icons:_575,buttonText:(_577?_577.text:"")})); + $(_573).attr("searchboxName",$(_573).attr("textboxName")); + _574.searchbox=$(_573).next(); + _574.searchbox.addClass("searchbox"); + _579(_577); + function _576(){ + if(opts.menu){ + _574.menu=$(opts.menu).menu(); + var _57a=_574.menu.menu("options"); + var _57b=_57a.onClick; + _57a.onClick=function(item){ + _579(item); + _57b.call(this,item); + }; + }else{ + if(_574.menu){ + _574.menu.menu("destroy"); + } + _574.menu=null; + } + }; + function _578(){ + if(_574.menu){ + var item=_574.menu.children("div.menu-item:first"); + _574.menu.children("div.menu-item").each(function(){ + var _57c=$.extend({},$.parser.parseOptions(this),{selected:($(this).attr("selected")?true:undefined)}); + if(_57c.selected){ + item=$(this); + return false; + } + }); + return _574.menu.menu("getItem",item[0]); + }else{ + return null; + } + }; + function _579(item){ + if(!item){ + return; + } + $(_573).textbox("button").menubutton({text:item.text,iconCls:(item.iconCls||null),menu:_574.menu,menuAlign:opts.buttonAlign,plain:false}); + _574.searchbox.find("input.textbox-value").attr("name",item.name||item.text); + $(_573).searchbox("resize"); + }; + }; + $.fn.searchbox=function(_57d,_57e){ + if(typeof _57d=="string"){ + var _57f=$.fn.searchbox.methods[_57d]; + if(_57f){ + return _57f(this,_57e); + }else{ + return this.textbox(_57d,_57e); + } + } + _57d=_57d||{}; + return this.each(function(){ + var _580=$.data(this,"searchbox"); + if(_580){ + $.extend(_580.options,_57d); + }else{ + $.data(this,"searchbox",{options:$.extend({},$.fn.searchbox.defaults,$.fn.searchbox.parseOptions(this),_57d)}); + } + _572(this); + }); + }; + $.fn.searchbox.methods={options:function(jq){ + var opts=jq.textbox("options"); + return $.extend($.data(jq[0],"searchbox").options,{width:opts.width,value:opts.value,originalValue:opts.originalValue,disabled:opts.disabled,readonly:opts.readonly}); + },menu:function(jq){ + return $.data(jq[0],"searchbox").menu; + },getName:function(jq){ + return $.data(jq[0],"searchbox").searchbox.find("input.textbox-value").attr("name"); + },selectName:function(jq,name){ + return jq.each(function(){ + var menu=$.data(this,"searchbox").menu; + if(menu){ + menu.children("div.menu-item").each(function(){ + var item=menu.menu("getItem",this); + if(item.name==name){ + $(this).triggerHandler("click"); + return false; + } + }); + } + }); + },destroy:function(jq){ + return jq.each(function(){ + var menu=$(this).searchbox("menu"); + if(menu){ + menu.menu("destroy"); + } + $(this).textbox("destroy"); + }); + }}; + $.fn.searchbox.parseOptions=function(_581){ + var t=$(_581); + return $.extend({},$.fn.textbox.parseOptions(_581),$.parser.parseOptions(_581,["menu"]),{searcher:(t.attr("searcher")?eval(t.attr("searcher")):undefined)}); + }; + $.fn.searchbox.defaults=$.extend({},$.fn.textbox.defaults,{inputEvents:$.extend({},$.fn.textbox.defaults.inputEvents,{keydown:function(e){ + if(e.keyCode==13){ + e.preventDefault(); + var t=$(e.data.target); + var opts=t.searchbox("options"); + t.searchbox("setValue",$(this).val()); + opts.searcher.call(e.data.target,t.searchbox("getValue"),t.searchbox("getName")); + return false; + } + }}),buttonAlign:"left",menu:null,searcher:function(_582,name){ + }}); +})(jQuery); +(function($){ + function _583(_584,_585){ + var opts=$.data(_584,"form").options; + $.extend(opts,_585||{}); + var _586=$.extend({},opts.queryParams); + if(opts.onSubmit.call(_584,_586)==false){ + return; + } + var _587=$(_584).find(".textbox-text:focus"); + _587.triggerHandler("blur"); + _587.focus(); + var _588=null; + if(opts.dirty){ + var ff=[]; + $.map(opts.dirtyFields,function(f){ + if($(f).hasClass("textbox-f")){ + $(f).next().find(".textbox-value").each(function(){ + ff.push(this); + }); + }else{ + ff.push(f); + } + }); + _588=$(_584).find("input[name]:enabled,textarea[name]:enabled,select[name]:enabled").filter(function(){ + return $.inArray(this,ff)==-1; + }); + _588.attr("disabled","disabled"); + } + if(opts.ajax){ + if(opts.iframe){ + _589(_584,_586); + }else{ + if(window.FormData!==undefined){ + _58a(_584,_586); + }else{ + _589(_584,_586); + } + } + }else{ + $(_584).submit(); + } + if(opts.dirty){ + _588.removeAttr("disabled"); + } + }; + function _589(_58b,_58c){ + var opts=$.data(_58b,"form").options; + var _58d="easyui_frame_"+(new Date().getTime()); + var _58e=$("").appendTo("body"); + _58e.attr("src",window.ActiveXObject?"javascript:false":"about:blank"); + _58e.css({position:"absolute",top:-1000,left:-1000}); + _58e.bind("load",cb); + _58f(_58c); + function _58f(_590){ + var form=$(_58b); + if(opts.url){ + form.attr("action",opts.url); + } + var t=form.attr("target"),a=form.attr("action"); + form.attr("target",_58d); + var _591=$(); + try{ + for(var n in _590){ + var _592=$("").val(_590[n]).appendTo(form); + _591=_591.add(_592); + } + _593(); + form[0].submit(); + } + finally{ + form.attr("action",a); + t?form.attr("target",t):form.removeAttr("target"); + _591.remove(); + } + }; + function _593(){ + var f=$("#"+_58d); + if(!f.length){ + return; + } + try{ + var s=f.contents()[0].readyState; + if(s&&s.toLowerCase()=="uninitialized"){ + setTimeout(_593,100); + } + } + catch(e){ + cb(); + } + }; + var _594=10; + function cb(){ + var f=$("#"+_58d); + if(!f.length){ + return; + } + f.unbind(); + var data=""; + try{ + var body=f.contents().find("body"); + data=body.html(); + if(data==""){ + if(--_594){ + setTimeout(cb,100); + return; + } + } + var ta=body.find(">textarea"); + if(ta.length){ + data=ta.val(); + }else{ + var pre=body.find(">pre"); + if(pre.length){ + data=pre.html(); + } + } + } + catch(e){ + } + opts.success.call(_58b,data); + setTimeout(function(){ + f.unbind(); + f.remove(); + },100); + }; + }; + function _58a(_595,_596){ + var opts=$.data(_595,"form").options; + var _597=new FormData($(_595)[0]); + for(var name in _596){ + _597.append(name,_596[name]); + } + $.ajax({url:opts.url,type:"post",xhr:function(){ + var xhr=$.ajaxSettings.xhr(); + if(xhr.upload){ + xhr.upload.addEventListener("progress",function(e){ + if(e.lengthComputable){ + var _598=e.total; + var _599=e.loaded||e.position; + var _59a=Math.ceil(_599*100/_598); + opts.onProgress.call(_595,_59a); + } + },false); + } + return xhr; + },data:_597,dataType:"html",cache:false,contentType:false,processData:false,complete:function(res){ + opts.success.call(_595,res.responseText); + }}); + }; + function load(_59b,data){ + var opts=$.data(_59b,"form").options; + if(typeof data=="string"){ + var _59c={}; + if(opts.onBeforeLoad.call(_59b,_59c)==false){ + return; + } + $.ajax({url:data,data:_59c,dataType:"json",success:function(data){ + _59d(data); + },error:function(){ + opts.onLoadError.apply(_59b,arguments); + }}); + }else{ + _59d(data); + } + function _59d(data){ + var form=$(_59b); + for(var name in data){ + var val=data[name]; + if(!_59e(name,val)){ + if(!_59f(name,val)){ + form.find("input[name=\""+name+"\"]").val(val); + form.find("textarea[name=\""+name+"\"]").val(val); + form.find("select[name=\""+name+"\"]").val(val); + } + } + } + opts.onLoadSuccess.call(_59b,data); + form.form("validate"); + }; + function _59e(name,val){ + var cc=$(_59b).find("[switchbuttonName=\""+name+"\"]"); + if(cc.length){ + cc.switchbutton("uncheck"); + cc.each(function(){ + if(_5a0($(this).switchbutton("options").value,val)){ + $(this).switchbutton("check"); + } + }); + return true; + } + cc=$(_59b).find("input[name=\""+name+"\"][type=radio], input[name=\""+name+"\"][type=checkbox]"); + if(cc.length){ + cc._propAttr("checked",false); + cc.each(function(){ + if(_5a0($(this).val(),val)){ + $(this)._propAttr("checked",true); + } + }); + return true; + } + return false; + }; + function _5a0(v,val){ + if(v==String(val)||$.inArray(v,$.isArray(val)?val:[val])>=0){ + return true; + }else{ + return false; + } + }; + function _59f(name,val){ + var _5a1=$(_59b).find("[textboxName=\""+name+"\"],[sliderName=\""+name+"\"]"); + if(_5a1.length){ + for(var i=0;i=0;i--){ + var type=opts.fieldTypes[i]; + var _5a9=form.find("."+type+"-f"); + if(_5a9.length&&_5a9[type]){ + _5a9[type]("reset"); + } + } + form.form("validate"); + }; + function _5aa(_5ab){ + var _5ac=$.data(_5ab,"form").options; + $(_5ab).unbind(".form"); + if(_5ac.ajax){ + $(_5ab).bind("submit.form",function(){ + setTimeout(function(){ + _583(_5ab,_5ac); + },0); + return false; + }); + } + $(_5ab).bind("_change.form",function(e,t){ + if($.inArray(t,_5ac.dirtyFields)==-1){ + _5ac.dirtyFields.push(t); + } + _5ac.onChange.call(this,t); + }).bind("change.form",function(e){ + var t=e.target; + if(!$(t).hasClass("textbox-text")){ + if($.inArray(t,_5ac.dirtyFields)==-1){ + _5ac.dirtyFields.push(t); + } + _5ac.onChange.call(this,t); + } + }); + _5ad(_5ab,_5ac.novalidate); + }; + function _5ae(_5af,_5b0){ + _5b0=_5b0||{}; + var _5b1=$.data(_5af,"form"); + if(_5b1){ + $.extend(_5b1.options,_5b0); + }else{ + $.data(_5af,"form",{options:$.extend({},$.fn.form.defaults,$.fn.form.parseOptions(_5af),_5b0)}); + } + }; + function _5b2(_5b3){ + if($.fn.validatebox){ + var t=$(_5b3); + t.find(".validatebox-text:not(:disabled)").validatebox("validate"); + var _5b4=t.find(".validatebox-invalid"); + _5b4.filter(":not(:disabled):first").focus(); + return _5b4.length==0; + } + return true; + }; + function _5ad(_5b5,_5b6){ + var opts=$.data(_5b5,"form").options; + opts.novalidate=_5b6; + $(_5b5).find(".validatebox-text:not(:disabled)").validatebox(_5b6?"disableValidation":"enableValidation"); + }; + $.fn.form=function(_5b7,_5b8){ + if(typeof _5b7=="string"){ + this.each(function(){ + _5ae(this); + }); + return $.fn.form.methods[_5b7](this,_5b8); + } + return this.each(function(){ + _5ae(this,_5b7); + _5aa(this); + }); + }; + $.fn.form.methods={options:function(jq){ + return $.data(jq[0],"form").options; + },submit:function(jq,_5b9){ + return jq.each(function(){ + _583(this,_5b9); + }); + },load:function(jq,data){ + return jq.each(function(){ + load(this,data); + }); + },clear:function(jq){ + return jq.each(function(){ + _5a3(this); + }); + },reset:function(jq){ + return jq.each(function(){ + _5a7(this); + }); + },validate:function(jq){ + return _5b2(jq[0]); + },disableValidation:function(jq){ + return jq.each(function(){ + _5ad(this,true); + }); + },enableValidation:function(jq){ + return jq.each(function(){ + _5ad(this,false); + }); + },resetValidation:function(jq){ + return jq.each(function(){ + $(this).find(".validatebox-text:not(:disabled)").validatebox("resetValidation"); + }); + },resetDirty:function(jq){ + return jq.each(function(){ + $(this).form("options").dirtyFields=[]; + }); + }}; + $.fn.form.parseOptions=function(_5ba){ + var t=$(_5ba); + return $.extend({},$.parser.parseOptions(_5ba,[{ajax:"boolean",dirty:"boolean"}]),{url:(t.attr("action")?t.attr("action"):undefined)}); + }; + $.fn.form.defaults={fieldTypes:["tagbox","combobox","combotree","combogrid","combotreegrid","datetimebox","datebox","combo","datetimespinner","timespinner","numberspinner","spinner","slider","searchbox","numberbox","passwordbox","filebox","textbox","switchbutton"],novalidate:false,ajax:true,iframe:true,dirty:false,dirtyFields:[],url:null,queryParams:{},onSubmit:function(_5bb){ + return $(this).form("validate"); + },onProgress:function(_5bc){ + },success:function(data){ + },onBeforeLoad:function(_5bd){ + },onLoadSuccess:function(data){ + },onLoadError:function(){ + },onChange:function(_5be){ + }}; +})(jQuery); +(function($){ + function _5bf(_5c0){ + var _5c1=$.data(_5c0,"numberbox"); + var opts=_5c1.options; + $(_5c0).addClass("numberbox-f").textbox(opts); + $(_5c0).textbox("textbox").css({imeMode:"disabled"}); + $(_5c0).attr("numberboxName",$(_5c0).attr("textboxName")); + _5c1.numberbox=$(_5c0).next(); + _5c1.numberbox.addClass("numberbox"); + var _5c2=opts.parser.call(_5c0,opts.value); + var _5c3=opts.formatter.call(_5c0,_5c2); + $(_5c0).numberbox("initValue",_5c2).numberbox("setText",_5c3); + }; + function _5c4(_5c5,_5c6){ + var _5c7=$.data(_5c5,"numberbox"); + var opts=_5c7.options; + opts.value=parseFloat(_5c6); + var _5c6=opts.parser.call(_5c5,_5c6); + var text=opts.formatter.call(_5c5,_5c6); + opts.value=_5c6; + $(_5c5).textbox("setText",text).textbox("setValue",_5c6); + text=opts.formatter.call(_5c5,$(_5c5).textbox("getValue")); + $(_5c5).textbox("setText",text); + }; + $.fn.numberbox=function(_5c8,_5c9){ + if(typeof _5c8=="string"){ + var _5ca=$.fn.numberbox.methods[_5c8]; + if(_5ca){ + return _5ca(this,_5c9); + }else{ + return this.textbox(_5c8,_5c9); + } + } + _5c8=_5c8||{}; + return this.each(function(){ + var _5cb=$.data(this,"numberbox"); + if(_5cb){ + $.extend(_5cb.options,_5c8); + }else{ + _5cb=$.data(this,"numberbox",{options:$.extend({},$.fn.numberbox.defaults,$.fn.numberbox.parseOptions(this),_5c8)}); + } + _5bf(this); + }); + }; + $.fn.numberbox.methods={options:function(jq){ + var opts=jq.data("textbox")?jq.textbox("options"):{}; + return $.extend($.data(jq[0],"numberbox").options,{width:opts.width,originalValue:opts.originalValue,disabled:opts.disabled,readonly:opts.readonly}); + },fix:function(jq){ + return jq.each(function(){ + var opts=$(this).numberbox("options"); + opts.value=null; + var _5cc=opts.parser.call(this,$(this).numberbox("getText")); + $(this).numberbox("setValue",_5cc); + }); + },setValue:function(jq,_5cd){ + return jq.each(function(){ + _5c4(this,_5cd); + }); + },clear:function(jq){ + return jq.each(function(){ + $(this).textbox("clear"); + $(this).numberbox("options").value=""; + }); + },reset:function(jq){ + return jq.each(function(){ + $(this).textbox("reset"); + $(this).numberbox("setValue",$(this).numberbox("getValue")); + }); + }}; + $.fn.numberbox.parseOptions=function(_5ce){ + var t=$(_5ce); + return $.extend({},$.fn.textbox.parseOptions(_5ce),$.parser.parseOptions(_5ce,["decimalSeparator","groupSeparator","suffix",{min:"number",max:"number",precision:"number"}]),{prefix:(t.attr("prefix")?t.attr("prefix"):undefined)}); + }; + $.fn.numberbox.defaults=$.extend({},$.fn.textbox.defaults,{inputEvents:{keypress:function(e){ + var _5cf=e.data.target; + var opts=$(_5cf).numberbox("options"); + return opts.filter.call(_5cf,e); + },blur:function(e){ + $(e.data.target).numberbox("fix"); + },keydown:function(e){ + if(e.keyCode==13){ + $(e.data.target).numberbox("fix"); + } + }},min:null,max:null,precision:0,decimalSeparator:".",groupSeparator:"",prefix:"",suffix:"",filter:function(e){ + var opts=$(this).numberbox("options"); + var s=$(this).numberbox("getText"); + if(e.metaKey||e.ctrlKey){ + return true; + } + if($.inArray(String(e.which),["46","8","13","0"])>=0){ + return true; + } + var tmp=$(""); + tmp.html(String.fromCharCode(e.which)); + var c=tmp.text(); + tmp.remove(); + if(!c){ + return true; + } + if(c=="-"||c==opts.decimalSeparator){ + return (s.indexOf(c)==-1)?true:false; + }else{ + if(c==opts.groupSeparator){ + return true; + }else{ + if("0123456789".indexOf(c)>=0){ + return true; + }else{ + return false; + } + } + } + },formatter:function(_5d0){ + if(!_5d0){ + return _5d0; + } + _5d0=_5d0+""; + var opts=$(this).numberbox("options"); + var s1=_5d0,s2=""; + var dpos=_5d0.indexOf("."); + if(dpos>=0){ + s1=_5d0.substring(0,dpos); + s2=_5d0.substring(dpos+1,_5d0.length); + } + if(opts.groupSeparator){ + var p=/(\d+)(\d{3})/; + while(p.test(s1)){ + s1=s1.replace(p,"$1"+opts.groupSeparator+"$2"); + } + } + if(s2){ + return opts.prefix+s1+opts.decimalSeparator+s2+opts.suffix; + }else{ + return opts.prefix+s1+opts.suffix; + } + },parser:function(s){ + s=s+""; + var opts=$(this).numberbox("options"); + if(opts.prefix){ + s=$.trim(s.replace(new RegExp("\\"+$.trim(opts.prefix),"g"),"")); + } + if(opts.suffix){ + s=$.trim(s.replace(new RegExp("\\"+$.trim(opts.suffix),"g"),"")); + } + if(parseFloat(s)!=opts.value){ + if(opts.groupSeparator){ + s=$.trim(s.replace(new RegExp("\\"+opts.groupSeparator,"g"),"")); + } + if(opts.decimalSeparator){ + s=$.trim(s.replace(new RegExp("\\"+opts.decimalSeparator,"g"),".")); + } + s=s.replace(/\s/g,""); + } + var val=parseFloat(s).toFixed(opts.precision); + if(isNaN(val)){ + val=""; + }else{ + if(typeof (opts.min)=="number"&&valopts.max){ + val=opts.max.toFixed(opts.precision); + } + } + } + return val; + }}); +})(jQuery); +(function($){ + function _5d1(_5d2,_5d3){ + var opts=$.data(_5d2,"calendar").options; + var t=$(_5d2); + if(_5d3){ + $.extend(opts,{width:_5d3.width,height:_5d3.height}); + } + t._size(opts,t.parent()); + t.find(".calendar-body")._outerHeight(t.height()-t.find(".calendar-header")._outerHeight()); + if(t.find(".calendar-menu").is(":visible")){ + _5d4(_5d2); + } + }; + function init(_5d5){ + $(_5d5).addClass("calendar").html("
        "+"
        "+"
        "+"
        "+"
        "+"
        "+""+"
        "+"
        "+"
        "+"
        "+"
        "+""+""+""+"
        "+"
        "+"
        "+"
        "+"
        "); + $(_5d5).bind("_resize",function(e,_5d6){ + if($(this).hasClass("easyui-fluid")||_5d6){ + _5d1(_5d5); + } + return false; + }); + }; + function _5d7(_5d8){ + var opts=$.data(_5d8,"calendar").options; + var menu=$(_5d8).find(".calendar-menu"); + menu.find(".calendar-menu-year").unbind(".calendar").bind("keypress.calendar",function(e){ + if(e.keyCode==13){ + _5d9(true); + } + }); + $(_5d8).unbind(".calendar").bind("mouseover.calendar",function(e){ + var t=_5da(e.target); + if(t.hasClass("calendar-nav")||t.hasClass("calendar-text")||(t.hasClass("calendar-day")&&!t.hasClass("calendar-disabled"))){ + t.addClass("calendar-nav-hover"); + } + }).bind("mouseout.calendar",function(e){ + var t=_5da(e.target); + if(t.hasClass("calendar-nav")||t.hasClass("calendar-text")||(t.hasClass("calendar-day")&&!t.hasClass("calendar-disabled"))){ + t.removeClass("calendar-nav-hover"); + } + }).bind("click.calendar",function(e){ + var t=_5da(e.target); + if(t.hasClass("calendar-menu-next")||t.hasClass("calendar-nextyear")){ + _5db(1); + }else{ + if(t.hasClass("calendar-menu-prev")||t.hasClass("calendar-prevyear")){ + _5db(-1); + }else{ + if(t.hasClass("calendar-menu-month")){ + menu.find(".calendar-selected").removeClass("calendar-selected"); + t.addClass("calendar-selected"); + _5d9(true); + }else{ + if(t.hasClass("calendar-prevmonth")){ + _5dc(-1); + }else{ + if(t.hasClass("calendar-nextmonth")){ + _5dc(1); + }else{ + if(t.hasClass("calendar-text")){ + if(menu.is(":visible")){ + menu.hide(); + }else{ + _5d4(_5d8); + } + }else{ + if(t.hasClass("calendar-day")){ + if(t.hasClass("calendar-disabled")){ + return; + } + var _5dd=opts.current; + t.closest("div.calendar-body").find(".calendar-selected").removeClass("calendar-selected"); + t.addClass("calendar-selected"); + var _5de=t.attr("abbr").split(","); + var y=parseInt(_5de[0]); + var m=parseInt(_5de[1]); + var d=parseInt(_5de[2]); + opts.current=new Date(y,m-1,d); + opts.onSelect.call(_5d8,opts.current); + if(!_5dd||_5dd.getTime()!=opts.current.getTime()){ + opts.onChange.call(_5d8,opts.current,_5dd); + } + if(opts.year!=y||opts.month!=m){ + opts.year=y; + opts.month=m; + show(_5d8); + } + } + } + } + } + } + } + } + }); + function _5da(t){ + var day=$(t).closest(".calendar-day"); + if(day.length){ + return day; + }else{ + return $(t); + } + }; + function _5d9(_5df){ + var menu=$(_5d8).find(".calendar-menu"); + var year=menu.find(".calendar-menu-year").val(); + var _5e0=menu.find(".calendar-selected").attr("abbr"); + if(!isNaN(year)){ + opts.year=parseInt(year); + opts.month=parseInt(_5e0); + show(_5d8); + } + if(_5df){ + menu.hide(); + } + }; + function _5db(_5e1){ + opts.year+=_5e1; + show(_5d8); + menu.find(".calendar-menu-year").val(opts.year); + }; + function _5dc(_5e2){ + opts.month+=_5e2; + if(opts.month>12){ + opts.year++; + opts.month=1; + }else{ + if(opts.month<1){ + opts.year--; + opts.month=12; + } + } + show(_5d8); + menu.find("td.calendar-selected").removeClass("calendar-selected"); + menu.find("td:eq("+(opts.month-1)+")").addClass("calendar-selected"); + }; + }; + function _5d4(_5e3){ + var opts=$.data(_5e3,"calendar").options; + $(_5e3).find(".calendar-menu").show(); + if($(_5e3).find(".calendar-menu-month-inner").is(":empty")){ + $(_5e3).find(".calendar-menu-month-inner").empty(); + var t=$("
        ").appendTo($(_5e3).find(".calendar-menu-month-inner")); + var idx=0; + for(var i=0;i<3;i++){ + var tr=$("").appendTo(t); + for(var j=0;j<4;j++){ + $("").html(opts.months[idx++]).attr("abbr",idx).appendTo(tr); + } + } + } + var body=$(_5e3).find(".calendar-body"); + var sele=$(_5e3).find(".calendar-menu"); + var _5e4=sele.find(".calendar-menu-year-inner"); + var _5e5=sele.find(".calendar-menu-month-inner"); + _5e4.find("input").val(opts.year).focus(); + _5e5.find("td.calendar-selected").removeClass("calendar-selected"); + _5e5.find("td:eq("+(opts.month-1)+")").addClass("calendar-selected"); + sele._outerWidth(body._outerWidth()); + sele._outerHeight(body._outerHeight()); + _5e5._outerHeight(sele.height()-_5e4._outerHeight()); + }; + function _5e6(_5e7,year,_5e8){ + var opts=$.data(_5e7,"calendar").options; + var _5e9=[]; + var _5ea=new Date(year,_5e8,0).getDate(); + for(var i=1;i<=_5ea;i++){ + _5e9.push([year,_5e8,i]); + } + var _5eb=[],week=[]; + var _5ec=-1; + while(_5e9.length>0){ + var date=_5e9.shift(); + week.push(date); + var day=new Date(date[0],date[1]-1,date[2]).getDay(); + if(_5ec==day){ + day=0; + }else{ + if(day==(opts.firstDay==0?7:opts.firstDay)-1){ + _5eb.push(week); + week=[]; + } + } + _5ec=day; + } + if(week.length){ + _5eb.push(week); + } + var _5ed=_5eb[0]; + if(_5ed.length<7){ + while(_5ed.length<7){ + var _5ee=_5ed[0]; + var date=new Date(_5ee[0],_5ee[1]-1,_5ee[2]-1); + _5ed.unshift([date.getFullYear(),date.getMonth()+1,date.getDate()]); + } + }else{ + var _5ee=_5ed[0]; + var week=[]; + for(var i=1;i<=7;i++){ + var date=new Date(_5ee[0],_5ee[1]-1,_5ee[2]-i); + week.unshift([date.getFullYear(),date.getMonth()+1,date.getDate()]); + } + _5eb.unshift(week); + } + var _5ef=_5eb[_5eb.length-1]; + while(_5ef.length<7){ + var _5f0=_5ef[_5ef.length-1]; + var date=new Date(_5f0[0],_5f0[1]-1,_5f0[2]+1); + _5ef.push([date.getFullYear(),date.getMonth()+1,date.getDate()]); + } + if(_5eb.length<6){ + var _5f0=_5ef[_5ef.length-1]; + var week=[]; + for(var i=1;i<=7;i++){ + var date=new Date(_5f0[0],_5f0[1]-1,_5f0[2]+i); + week.push([date.getFullYear(),date.getMonth()+1,date.getDate()]); + } + _5eb.push(week); + } + return _5eb; + }; + function show(_5f1){ + var opts=$.data(_5f1,"calendar").options; + if(opts.current&&!opts.validator.call(_5f1,opts.current)){ + opts.current=null; + } + var now=new Date(); + var _5f2=now.getFullYear()+","+(now.getMonth()+1)+","+now.getDate(); + var _5f3=opts.current?(opts.current.getFullYear()+","+(opts.current.getMonth()+1)+","+opts.current.getDate()):""; + var _5f4=6-opts.firstDay; + var _5f5=_5f4+1; + if(_5f4>=7){ + _5f4-=7; + } + if(_5f5>=7){ + _5f5-=7; + } + $(_5f1).find(".calendar-title span").html(opts.months[opts.month-1]+" "+opts.year); + var body=$(_5f1).find("div.calendar-body"); + body.children("table").remove(); + var data=[""]; + data.push(""); + if(opts.showWeek){ + data.push(""); + } + for(var i=opts.firstDay;i"+opts.weeks[i]+""); + } + for(var i=0;i"+opts.weeks[i]+""); + } + data.push(""); + data.push(""); + var _5f6=_5e6(_5f1,opts.year,opts.month); + for(var i=0;i<_5f6.length;i++){ + var week=_5f6[i]; + var cls=""; + if(i==0){ + cls="calendar-first"; + }else{ + if(i==_5f6.length-1){ + cls="calendar-last"; + } + } + data.push(""); + if(opts.showWeek){ + var _5f7=opts.getWeekNumber(new Date(week[0][0],parseInt(week[0][1])-1,week[0][2])); + data.push(""); + } + for(var j=0;j"+d+""); + } + data.push(""); + } + data.push(""); + data.push("
        "+opts.weekNumberHeader+"
        "+_5f7+"
        "); + body.append(data.join("")); + body.children("table.calendar-dtable").prependTo(body); + opts.onNavigate.call(_5f1,opts.year,opts.month); + }; + $.fn.calendar=function(_5fb,_5fc){ + if(typeof _5fb=="string"){ + return $.fn.calendar.methods[_5fb](this,_5fc); + } + _5fb=_5fb||{}; + return this.each(function(){ + var _5fd=$.data(this,"calendar"); + if(_5fd){ + $.extend(_5fd.options,_5fb); + }else{ + _5fd=$.data(this,"calendar",{options:$.extend({},$.fn.calendar.defaults,$.fn.calendar.parseOptions(this),_5fb)}); + init(this); + } + if(_5fd.options.border==false){ + $(this).addClass("calendar-noborder"); + } + _5d1(this); + _5d7(this); + show(this); + $(this).find("div.calendar-menu").hide(); + }); + }; + $.fn.calendar.methods={options:function(jq){ + return $.data(jq[0],"calendar").options; + },resize:function(jq,_5fe){ + return jq.each(function(){ + _5d1(this,_5fe); + }); + },moveTo:function(jq,date){ + return jq.each(function(){ + if(!date){ + var now=new Date(); + $(this).calendar({year:now.getFullYear(),month:now.getMonth()+1,current:date}); + return; + } + var opts=$(this).calendar("options"); + if(opts.validator.call(this,date)){ + var _5ff=opts.current; + $(this).calendar({year:date.getFullYear(),month:date.getMonth()+1,current:date}); + if(!_5ff||_5ff.getTime()!=date.getTime()){ + opts.onChange.call(this,opts.current,_5ff); + } + } + }); + }}; + $.fn.calendar.parseOptions=function(_600){ + var t=$(_600); + return $.extend({},$.parser.parseOptions(_600,["weekNumberHeader",{firstDay:"number",fit:"boolean",border:"boolean",showWeek:"boolean"}])); + }; + $.fn.calendar.defaults={width:180,height:180,fit:false,border:true,showWeek:false,firstDay:0,weeks:["S","M","T","W","T","F","S"],months:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],year:new Date().getFullYear(),month:new Date().getMonth()+1,current:(function(){ + var d=new Date(); + return new Date(d.getFullYear(),d.getMonth(),d.getDate()); + })(),weekNumberHeader:"",getWeekNumber:function(date){ + var _601=new Date(date.getTime()); + _601.setDate(_601.getDate()+4-(_601.getDay()||7)); + var time=_601.getTime(); + _601.setMonth(0); + _601.setDate(1); + return Math.floor(Math.round((time-_601)/86400000)/7)+1; + },formatter:function(date){ + return date.getDate(); + },styler:function(date){ + return ""; + },validator:function(date){ + return true; + },onSelect:function(date){ + },onChange:function(_602,_603){ + },onNavigate:function(year,_604){ + }}; +})(jQuery); +(function($){ + function _605(_606){ + var _607=$.data(_606,"spinner"); + var opts=_607.options; + var _608=$.extend(true,[],opts.icons); + if(opts.spinAlign=="left"||opts.spinAlign=="right"){ + opts.spinArrow=true; + opts.iconAlign=opts.spinAlign; + var _609={iconCls:"spinner-arrow",handler:function(e){ + var spin=$(e.target).closest(".spinner-arrow-up,.spinner-arrow-down"); + _613(e.data.target,spin.hasClass("spinner-arrow-down")); + }}; + if(opts.spinAlign=="left"){ + _608.unshift(_609); + }else{ + _608.push(_609); + } + }else{ + opts.spinArrow=false; + if(opts.spinAlign=="vertical"){ + if(opts.buttonAlign!="top"){ + opts.buttonAlign="bottom"; + } + opts.clsLeft="textbox-button-bottom"; + opts.clsRight="textbox-button-top"; + }else{ + opts.clsLeft="textbox-button-left"; + opts.clsRight="textbox-button-right"; + } + } + $(_606).addClass("spinner-f").textbox($.extend({},opts,{icons:_608,doSize:false,onResize:function(_60a,_60b){ + if(!opts.spinArrow){ + var span=$(this).next(); + var btn=span.find(".textbox-button:not(.spinner-button)"); + if(btn.length){ + var _60c=btn.outerWidth(); + var _60d=btn.outerHeight(); + var _60e=span.find(".spinner-button."+opts.clsLeft); + var _60f=span.find(".spinner-button."+opts.clsRight); + if(opts.buttonAlign=="right"){ + _60f.css("marginRight",_60c+"px"); + }else{ + if(opts.buttonAlign=="left"){ + _60e.css("marginLeft",_60c+"px"); + }else{ + if(opts.buttonAlign=="top"){ + _60f.css("marginTop",_60d+"px"); + }else{ + _60e.css("marginBottom",_60d+"px"); + } + } + } + } + } + opts.onResize.call(this,_60a,_60b); + }})); + $(_606).attr("spinnerName",$(_606).attr("textboxName")); + _607.spinner=$(_606).next(); + _607.spinner.addClass("spinner"); + if(opts.spinArrow){ + var _610=_607.spinner.find(".spinner-arrow"); + _610.append(""); + _610.append(""); + }else{ + var _611=$("").addClass(opts.clsLeft).appendTo(_607.spinner); + var _612=$("").addClass(opts.clsRight).appendTo(_607.spinner); + _611.linkbutton({iconCls:opts.reversed?"spinner-button-up":"spinner-button-down",onClick:function(){ + _613(_606,!opts.reversed); + }}); + _612.linkbutton({iconCls:opts.reversed?"spinner-button-down":"spinner-button-up",onClick:function(){ + _613(_606,opts.reversed); + }}); + if(opts.disabled){ + $(_606).spinner("disable"); + } + if(opts.readonly){ + $(_606).spinner("readonly"); + } + } + $(_606).spinner("resize"); + }; + function _613(_614,down){ + var opts=$(_614).spinner("options"); + opts.spin.call(_614,down); + opts[down?"onSpinDown":"onSpinUp"].call(_614); + $(_614).spinner("validate"); + }; + $.fn.spinner=function(_615,_616){ + if(typeof _615=="string"){ + var _617=$.fn.spinner.methods[_615]; + if(_617){ + return _617(this,_616); + }else{ + return this.textbox(_615,_616); + } + } + _615=_615||{}; + return this.each(function(){ + var _618=$.data(this,"spinner"); + if(_618){ + $.extend(_618.options,_615); + }else{ + _618=$.data(this,"spinner",{options:$.extend({},$.fn.spinner.defaults,$.fn.spinner.parseOptions(this),_615)}); + } + _605(this); + }); + }; + $.fn.spinner.methods={options:function(jq){ + var opts=jq.textbox("options"); + return $.extend($.data(jq[0],"spinner").options,{width:opts.width,value:opts.value,originalValue:opts.originalValue,disabled:opts.disabled,readonly:opts.readonly}); + }}; + $.fn.spinner.parseOptions=function(_619){ + return $.extend({},$.fn.textbox.parseOptions(_619),$.parser.parseOptions(_619,["min","max","spinAlign",{increment:"number",reversed:"boolean"}])); + }; + $.fn.spinner.defaults=$.extend({},$.fn.textbox.defaults,{min:null,max:null,increment:1,spinAlign:"right",reversed:false,spin:function(down){ + },onSpinUp:function(){ + },onSpinDown:function(){ + }}); +})(jQuery); +(function($){ + function _61a(_61b){ + $(_61b).addClass("numberspinner-f"); + var opts=$.data(_61b,"numberspinner").options; + $(_61b).numberbox($.extend({},opts,{doSize:false})).spinner(opts); + $(_61b).numberbox("setValue",opts.value); + }; + function _61c(_61d,down){ + var opts=$.data(_61d,"numberspinner").options; + var v=parseFloat($(_61d).numberbox("getValue")||opts.value)||0; + if(down){ + v-=opts.increment; + }else{ + v+=opts.increment; + } + $(_61d).numberbox("setValue",v); + }; + $.fn.numberspinner=function(_61e,_61f){ + if(typeof _61e=="string"){ + var _620=$.fn.numberspinner.methods[_61e]; + if(_620){ + return _620(this,_61f); + }else{ + return this.numberbox(_61e,_61f); + } + } + _61e=_61e||{}; + return this.each(function(){ + var _621=$.data(this,"numberspinner"); + if(_621){ + $.extend(_621.options,_61e); + }else{ + $.data(this,"numberspinner",{options:$.extend({},$.fn.numberspinner.defaults,$.fn.numberspinner.parseOptions(this),_61e)}); + } + _61a(this); + }); + }; + $.fn.numberspinner.methods={options:function(jq){ + var opts=jq.numberbox("options"); + return $.extend($.data(jq[0],"numberspinner").options,{width:opts.width,value:opts.value,originalValue:opts.originalValue,disabled:opts.disabled,readonly:opts.readonly}); + }}; + $.fn.numberspinner.parseOptions=function(_622){ + return $.extend({},$.fn.spinner.parseOptions(_622),$.fn.numberbox.parseOptions(_622),{}); + }; + $.fn.numberspinner.defaults=$.extend({},$.fn.spinner.defaults,$.fn.numberbox.defaults,{spin:function(down){ + _61c(this,down); + }}); +})(jQuery); +(function($){ + function _623(_624){ + var opts=$.data(_624,"timespinner").options; + $(_624).addClass("timespinner-f").spinner(opts); + var _625=opts.formatter.call(_624,opts.parser.call(_624,opts.value)); + $(_624).timespinner("initValue",_625); + }; + function _626(e){ + var _627=e.data.target; + var opts=$.data(_627,"timespinner").options; + var _628=$(_627).timespinner("getSelectionStart"); + for(var i=0;i=_629[0]&&_628<=_629[1]){ + _62a(_627,i); + return; + } + } + }; + function _62a(_62b,_62c){ + var opts=$.data(_62b,"timespinner").options; + if(_62c!=undefined){ + opts.highlight=_62c; + } + var _62d=opts.selections[opts.highlight]; + if(_62d){ + var tb=$(_62b).timespinner("textbox"); + $(_62b).timespinner("setSelectionRange",{start:_62d[0],end:_62d[1]}); + tb.focus(); + } + }; + function _62e(_62f,_630){ + var opts=$.data(_62f,"timespinner").options; + var _630=opts.parser.call(_62f,_630); + var text=opts.formatter.call(_62f,_630); + $(_62f).spinner("setValue",text); + }; + function _631(_632,down){ + var opts=$.data(_632,"timespinner").options; + var s=$(_632).timespinner("getValue"); + var _633=opts.selections[opts.highlight]; + var s1=s.substring(0,_633[0]); + var s2=s.substring(_633[0],_633[1]); + var s3=s.substring(_633[1]); + var v=s1+((parseInt(s2,10)||0)+opts.increment*(down?-1:1))+s3; + $(_632).timespinner("setValue",v); + _62a(_632); + }; + $.fn.timespinner=function(_634,_635){ + if(typeof _634=="string"){ + var _636=$.fn.timespinner.methods[_634]; + if(_636){ + return _636(this,_635); + }else{ + return this.spinner(_634,_635); + } + } + _634=_634||{}; + return this.each(function(){ + var _637=$.data(this,"timespinner"); + if(_637){ + $.extend(_637.options,_634); + }else{ + $.data(this,"timespinner",{options:$.extend({},$.fn.timespinner.defaults,$.fn.timespinner.parseOptions(this),_634)}); + } + _623(this); + }); + }; + $.fn.timespinner.methods={options:function(jq){ + var opts=jq.data("spinner")?jq.spinner("options"):{}; + return $.extend($.data(jq[0],"timespinner").options,{width:opts.width,value:opts.value,originalValue:opts.originalValue,disabled:opts.disabled,readonly:opts.readonly}); + },setValue:function(jq,_638){ + return jq.each(function(){ + _62e(this,_638); + }); + },getHours:function(jq){ + var opts=$.data(jq[0],"timespinner").options; + var vv=jq.timespinner("getValue").split(opts.separator); + return parseInt(vv[0],10); + },getMinutes:function(jq){ + var opts=$.data(jq[0],"timespinner").options; + var vv=jq.timespinner("getValue").split(opts.separator); + return parseInt(vv[1],10); + },getSeconds:function(jq){ + var opts=$.data(jq[0],"timespinner").options; + var vv=jq.timespinner("getValue").split(opts.separator); + return parseInt(vv[2],10)||0; + }}; + $.fn.timespinner.parseOptions=function(_639){ + return $.extend({},$.fn.spinner.parseOptions(_639),$.parser.parseOptions(_639,["separator",{showSeconds:"boolean",highlight:"number"}])); + }; + $.fn.timespinner.defaults=$.extend({},$.fn.spinner.defaults,{inputEvents:$.extend({},$.fn.spinner.defaults.inputEvents,{click:function(e){ + _626.call(this,e); + },blur:function(e){ + var t=$(e.data.target); + t.timespinner("setValue",t.timespinner("getText")); + },keydown:function(e){ + if(e.keyCode==13){ + var t=$(e.data.target); + t.timespinner("setValue",t.timespinner("getText")); + } + }}),formatter:function(date){ + if(!date){ + return ""; + } + var opts=$(this).timespinner("options"); + var tt=[_63a(date.getHours()),_63a(date.getMinutes())]; + if(opts.showSeconds){ + tt.push(_63a(date.getSeconds())); + } + return tt.join(opts.separator); + function _63a(_63b){ + return (_63b<10?"0":"")+_63b; + }; + },parser:function(s){ + var opts=$(this).timespinner("options"); + var date=_63c(s); + if(date){ + var min=_63c(opts.min); + var max=_63c(opts.max); + if(min&&min>date){ + date=min; + } + if(max&&max"]; + for(var i=0;i<_651.length;i++){ + _650.cache[_651[i][0]]={width:_651[i][1]}; + } + var _652=0; + for(var s in _650.cache){ + var item=_650.cache[s]; + item.index=_652++; + ss.push(s+"{width:"+item.width+"}"); + } + ss.push(""); + $(ss.join("\n")).appendTo(cc); + cc.children("style[easyui]:not(:last)").remove(); + },getRule:function(_653){ + var _654=cc.children("style[easyui]:last")[0]; + var _655=_654.styleSheet?_654.styleSheet:(_654.sheet||document.styleSheets[document.styleSheets.length-1]); + var _656=_655.cssRules||_655.rules; + return _656[_653]; + },set:function(_657,_658){ + var item=_650.cache[_657]; + if(item){ + item.width=_658; + var rule=this.getRule(item.index); + if(rule){ + rule.style["width"]=_658; + } + } + },remove:function(_659){ + var tmp=[]; + for(var s in _650.cache){ + if(s.indexOf(_659)==-1){ + tmp.push([s,_650.cache[s].width]); + } + } + _650.cache={}; + this.add(tmp); + },dirty:function(_65a){ + if(_65a){ + _650.dirty.push(_65a); + } + },clean:function(){ + for(var i=0;i<_650.dirty.length;i++){ + this.remove(_650.dirty[i]); + } + _650.dirty=[]; + }}; + }; + function _65b(_65c,_65d){ + var _65e=$.data(_65c,"datagrid"); + var opts=_65e.options; + var _65f=_65e.panel; + if(_65d){ + $.extend(opts,_65d); + } + if(opts.fit==true){ + var p=_65f.panel("panel").parent(); + opts.width=p.width(); + opts.height=p.height(); + } + _65f.panel("resize",opts); + }; + function _660(_661){ + var _662=$.data(_661,"datagrid"); + var opts=_662.options; + var dc=_662.dc; + var wrap=_662.panel; + var _663=wrap.width(); + var _664=wrap.height(); + var view=dc.view; + var _665=dc.view1; + var _666=dc.view2; + var _667=_665.children("div.datagrid-header"); + var _668=_666.children("div.datagrid-header"); + var _669=_667.find("table"); + var _66a=_668.find("table"); + view.width(_663); + var _66b=_667.children("div.datagrid-header-inner").show(); + _665.width(_66b.find("table").width()); + if(!opts.showHeader){ + _66b.hide(); + } + _666.width(_663-_665._outerWidth()); + _665.children()._outerWidth(_665.width()); + _666.children()._outerWidth(_666.width()); + var all=_667.add(_668).add(_669).add(_66a); + all.css("height",""); + var hh=Math.max(_669.height(),_66a.height()); + all._outerHeight(hh); + view.children(".datagrid-empty").css("top",hh+"px"); + dc.body1.add(dc.body2).children("table.datagrid-btable-frozen").css({position:"absolute",top:dc.header2._outerHeight()}); + var _66c=dc.body2.children("table.datagrid-btable-frozen")._outerHeight(); + var _66d=_66c+_668._outerHeight()+_666.children(".datagrid-footer")._outerHeight(); + wrap.children(":not(.datagrid-view,.datagrid-mask,.datagrid-mask-msg)").each(function(){ + _66d+=$(this)._outerHeight(); + }); + var _66e=wrap.outerHeight()-wrap.height(); + var _66f=wrap._size("minHeight")||""; + var _670=wrap._size("maxHeight")||""; + _665.add(_666).children("div.datagrid-body").css({marginTop:_66c,height:(isNaN(parseInt(opts.height))?"":(_664-_66d)),minHeight:(_66f?_66f-_66e-_66d:""),maxHeight:(_670?_670-_66e-_66d:"")}); + view.height(_666.height()); + }; + function _671(_672,_673,_674){ + var rows=$.data(_672,"datagrid").data.rows; + var opts=$.data(_672,"datagrid").options; + var dc=$.data(_672,"datagrid").dc; + if(!dc.body1.is(":empty")&&(!opts.nowrap||opts.autoRowHeight||_674)){ + if(_673!=undefined){ + var tr1=opts.finder.getTr(_672,_673,"body",1); + var tr2=opts.finder.getTr(_672,_673,"body",2); + _675(tr1,tr2); + }else{ + var tr1=opts.finder.getTr(_672,0,"allbody",1); + var tr2=opts.finder.getTr(_672,0,"allbody",2); + _675(tr1,tr2); + if(opts.showFooter){ + var tr1=opts.finder.getTr(_672,0,"allfooter",1); + var tr2=opts.finder.getTr(_672,0,"allfooter",2); + _675(tr1,tr2); + } + } + } + _660(_672); + if(opts.height=="auto"){ + var _676=dc.body1.parent(); + var _677=dc.body2; + var _678=_679(_677); + var _67a=_678.height; + if(_678.width>_677.width()){ + _67a+=18; + } + _67a-=parseInt(_677.css("marginTop"))||0; + _676.height(_67a); + _677.height(_67a); + dc.view.height(dc.view2.height()); + } + dc.body2.triggerHandler("scroll"); + function _675(trs1,trs2){ + for(var i=0;i"); + } + _682(true); + _682(false); + _660(_67f); + function _682(_683){ + var _684=_683?1:2; + var tr=opts.finder.getTr(_67f,_680,"body",_684); + (_683?dc.body1:dc.body2).children("table.datagrid-btable-frozen").append(tr); + }; + }; + function _685(_686,_687){ + function _688(){ + var _689=[]; + var _68a=[]; + $(_686).children("thead").each(function(){ + var opt=$.parser.parseOptions(this,[{frozen:"boolean"}]); + $(this).find("tr").each(function(){ + var cols=[]; + $(this).find("th").each(function(){ + var th=$(this); + var col=$.extend({},$.parser.parseOptions(this,["id","field","align","halign","order","width",{sortable:"boolean",checkbox:"boolean",resizable:"boolean",fixed:"boolean"},{rowspan:"number",colspan:"number"}]),{title:(th.html()||undefined),hidden:(th.attr("hidden")?true:undefined),formatter:(th.attr("formatter")?eval(th.attr("formatter")):undefined),styler:(th.attr("styler")?eval(th.attr("styler")):undefined),sorter:(th.attr("sorter")?eval(th.attr("sorter")):undefined)}); + if(col.width&&String(col.width).indexOf("%")==-1){ + col.width=parseInt(col.width); + } + if(th.attr("editor")){ + var s=$.trim(th.attr("editor")); + if(s.substr(0,1)=="{"){ + col.editor=eval("("+s+")"); + }else{ + col.editor=s; + } + } + cols.push(col); + }); + opt.frozen?_689.push(cols):_68a.push(cols); + }); + }); + return [_689,_68a]; + }; + var _68b=$("
        "+"
        "+"
        "+"
        "+"
        "+"
        "+"
        "+"
        "+"
        "+"
        "+""+"
        "+"
        "+"
        "+"
        "+"
        "+"
        "+"
        "+"
        "+""+"
        "+"
        "+"
        "+"
        ").insertAfter(_686); + _68b.panel({doSize:false,cls:"datagrid"}); + $(_686).addClass("datagrid-f").hide().appendTo(_68b.children("div.datagrid-view")); + var cc=_688(); + var view=_68b.children("div.datagrid-view"); + var _68c=view.children("div.datagrid-view1"); + var _68d=view.children("div.datagrid-view2"); + return {panel:_68b,frozenColumns:cc[0],columns:cc[1],dc:{view:view,view1:_68c,view2:_68d,header1:_68c.children("div.datagrid-header").children("div.datagrid-header-inner"),header2:_68d.children("div.datagrid-header").children("div.datagrid-header-inner"),body1:_68c.children("div.datagrid-body").children("div.datagrid-body-inner"),body2:_68d.children("div.datagrid-body"),footer1:_68c.children("div.datagrid-footer").children("div.datagrid-footer-inner"),footer2:_68d.children("div.datagrid-footer").children("div.datagrid-footer-inner")}}; + }; + function _68e(_68f){ + var _690=$.data(_68f,"datagrid"); + var opts=_690.options; + var dc=_690.dc; + var _691=_690.panel; + _690.ss=$(_68f).datagrid("createStyleSheet"); + _691.panel($.extend({},opts,{id:null,doSize:false,onResize:function(_692,_693){ + if($.data(_68f,"datagrid")){ + _660(_68f); + $(_68f).datagrid("fitColumns"); + opts.onResize.call(_691,_692,_693); + } + },onExpand:function(){ + if($.data(_68f,"datagrid")){ + $(_68f).datagrid("fixRowHeight").datagrid("fitColumns"); + opts.onExpand.call(_691); + } + }})); + _690.rowIdPrefix="datagrid-row-r"+(++_646); + _690.cellClassPrefix="datagrid-cell-c"+_646; + _694(dc.header1,opts.frozenColumns,true); + _694(dc.header2,opts.columns,false); + _695(); + dc.header1.add(dc.header2).css("display",opts.showHeader?"block":"none"); + dc.footer1.add(dc.footer2).css("display",opts.showFooter?"block":"none"); + if(opts.toolbar){ + if($.isArray(opts.toolbar)){ + $("div.datagrid-toolbar",_691).remove(); + var tb=$("
        ").prependTo(_691); + var tr=tb.find("tr"); + for(var i=0;i
        ").appendTo(tr); + }else{ + var td=$("").appendTo(tr); + var tool=$("").appendTo(td); + tool[0].onclick=eval(btn.handler||function(){ + }); + tool.linkbutton($.extend({},btn,{plain:true})); + } + } + }else{ + $(opts.toolbar).addClass("datagrid-toolbar").prependTo(_691); + $(opts.toolbar).show(); + } + }else{ + $("div.datagrid-toolbar",_691).remove(); + } + $("div.datagrid-pager",_691).remove(); + if(opts.pagination){ + var _696=$("
        "); + if(opts.pagePosition=="bottom"){ + _696.appendTo(_691); + }else{ + if(opts.pagePosition=="top"){ + _696.addClass("datagrid-pager-top").prependTo(_691); + }else{ + var ptop=$("
        ").prependTo(_691); + _696.appendTo(_691); + _696=_696.add(ptop); + } + } + _696.pagination({total:0,pageNumber:opts.pageNumber,pageSize:opts.pageSize,pageList:opts.pageList,onSelectPage:function(_697,_698){ + opts.pageNumber=_697||1; + opts.pageSize=_698; + _696.pagination("refresh",{pageNumber:_697,pageSize:_698}); + _6e0(_68f); + }}); + opts.pageSize=_696.pagination("options").pageSize; + } + function _694(_699,_69a,_69b){ + if(!_69a){ + return; + } + $(_699).show(); + $(_699).empty(); + var tmp=$("
        ").appendTo("body"); + tmp._outerWidth(99); + var _69c=100-parseInt(tmp[0].style.width); + tmp.remove(); + var _69d=[]; + var _69e=[]; + var _69f=[]; + if(opts.sortName){ + _69d=opts.sortName.split(","); + _69e=opts.sortOrder.split(","); + } + var t=$("
        ").appendTo(_699); + for(var i=0;i<_69a.length;i++){ + var tr=$("").appendTo($("tbody",t)); + var cols=_69a[i]; + for(var j=0;j").appendTo(tr); + if(col.checkbox){ + td.attr("field",col.field); + $("
        ").html("").appendTo(td); + }else{ + if(col.field){ + td.attr("field",col.field); + td.append("
        "); + td.find("span:first").html(col.title); + var cell=td.find("div.datagrid-cell"); + var pos=_647(_69d,col.field); + if(pos>=0){ + cell.addClass("datagrid-sort-"+_69e[pos]); + } + if(col.sortable){ + cell.addClass("datagrid-sort"); + } + if(col.resizable==false){ + cell.attr("resizable","false"); + } + if(col.width){ + var _6a0=$.parser.parseValue("width",col.width,dc.view,opts.scrollbarSize+(opts.rownumbers?opts.rownumberWidth:0)); + col.deltaWidth=_69c; + col.boxWidth=_6a0-_69c; + }else{ + col.auto=true; + } + cell.css("text-align",(col.halign||col.align||"")); + col.cellClass=_690.cellClassPrefix+"-"+col.field.replace(/[\.|\s]/g,"-"); + cell.addClass(col.cellClass); + }else{ + $("
        ").html(col.title).appendTo(td); + } + } + if(col.hidden){ + td.hide(); + _69f.push(col.field); + } + } + } + if(_69b&&opts.rownumbers){ + var td=$("
        "); + if($("tr",t).length==0){ + td.wrap("").parent().appendTo($("tbody",t)); + }else{ + td.prependTo($("tr:first",t)); + } + } + for(var i=0;i<_69f.length;i++){ + _6e2(_68f,_69f[i],-1); + } + }; + function _695(){ + var _6a1=[[".datagrid-header-rownumber",(opts.rownumberWidth-1)+"px"],[".datagrid-cell-rownumber",(opts.rownumberWidth-1)+"px"]]; + var _6a2=_6a3(_68f,true).concat(_6a3(_68f)); + for(var i=0;i<_6a2.length;i++){ + var col=_6a4(_68f,_6a2[i]); + if(col&&!col.checkbox){ + _6a1.push(["."+col.cellClass,col.boxWidth?col.boxWidth+"px":"auto"]); + } + } + _690.ss.add(_6a1); + _690.ss.dirty(_690.cellSelectorPrefix); + _690.cellSelectorPrefix="."+_690.cellClassPrefix; + }; + }; + function _6a5(_6a6){ + var _6a7=$.data(_6a6,"datagrid"); + var _6a8=_6a7.panel; + var opts=_6a7.options; + var dc=_6a7.dc; + var _6a9=dc.header1.add(dc.header2); + _6a9.unbind(".datagrid"); + for(var _6aa in opts.headerEvents){ + _6a9.bind(_6aa+".datagrid",opts.headerEvents[_6aa]); + } + var _6ab=_6a9.find("div.datagrid-cell"); + var _6ac=opts.resizeHandle=="right"?"e":(opts.resizeHandle=="left"?"w":"e,w"); + _6ab.each(function(){ + $(this).resizable({handles:_6ac,edge:opts.resizeEdge,disabled:($(this).attr("resizable")?$(this).attr("resizable")=="false":false),minWidth:25,onStartResize:function(e){ + _6a7.resizing=true; + _6a9.css("cursor",$("body").css("cursor")); + if(!_6a7.proxy){ + _6a7.proxy=$("
        ").appendTo(dc.view); + } + if(e.data.dir=="e"){ + e.data.deltaEdge=$(this)._outerWidth()-(e.pageX-$(this).offset().left); + }else{ + e.data.deltaEdge=$(this).offset().left-e.pageX-1; + } + _6a7.proxy.css({left:e.pageX-$(_6a8).offset().left-1+e.data.deltaEdge,display:"none"}); + setTimeout(function(){ + if(_6a7.proxy){ + _6a7.proxy.show(); + } + },500); + },onResize:function(e){ + _6a7.proxy.css({left:e.pageX-$(_6a8).offset().left-1+e.data.deltaEdge,display:"block"}); + return false; + },onStopResize:function(e){ + _6a9.css("cursor",""); + $(this).css("height",""); + var _6ad=$(this).parent().attr("field"); + var col=_6a4(_6a6,_6ad); + col.width=$(this)._outerWidth()+1; + col.boxWidth=col.width-col.deltaWidth; + col.auto=undefined; + $(this).css("width",""); + $(_6a6).datagrid("fixColumnSize",_6ad); + _6a7.proxy.remove(); + _6a7.proxy=null; + if($(this).parents("div:first.datagrid-header").parent().hasClass("datagrid-view1")){ + _660(_6a6); + } + $(_6a6).datagrid("fitColumns"); + opts.onResizeColumn.call(_6a6,_6ad,col.width); + setTimeout(function(){ + _6a7.resizing=false; + },0); + }}); + }); + var bb=dc.body1.add(dc.body2); + bb.unbind(); + for(var _6aa in opts.rowEvents){ + bb.bind(_6aa,opts.rowEvents[_6aa]); + } + dc.body1.bind("mousewheel DOMMouseScroll",function(e){ + e.preventDefault(); + var e1=e.originalEvent||window.event; + var _6ae=e1.wheelDelta||e1.detail*(-1); + if("deltaY" in e1){ + _6ae=e1.deltaY*-1; + } + var dg=$(e.target).closest("div.datagrid-view").children(".datagrid-f"); + var dc=dg.data("datagrid").dc; + dc.body2.scrollTop(dc.body2.scrollTop()-_6ae); + }); + dc.body2.bind("scroll",function(){ + var b1=dc.view1.children("div.datagrid-body"); + b1.scrollTop($(this).scrollTop()); + var c1=dc.body1.children(":first"); + var c2=dc.body2.children(":first"); + if(c1.length&&c2.length){ + var top1=c1.offset().top; + var top2=c2.offset().top; + if(top1!=top2){ + b1.scrollTop(b1.scrollTop()+top1-top2); + } + } + dc.view2.children("div.datagrid-header,div.datagrid-footer")._scrollLeft($(this)._scrollLeft()); + dc.body2.children("table.datagrid-btable-frozen").css("left",-$(this)._scrollLeft()); + }); + }; + function _6af(_6b0){ + return function(e){ + var td=$(e.target).closest("td[field]"); + if(td.length){ + var _6b1=_6b2(td); + if(!$(_6b1).data("datagrid").resizing&&_6b0){ + td.addClass("datagrid-header-over"); + }else{ + td.removeClass("datagrid-header-over"); + } + } + }; + }; + function _6b3(e){ + var _6b4=_6b2(e.target); + var opts=$(_6b4).datagrid("options"); + var ck=$(e.target).closest("input[type=checkbox]"); + if(ck.length){ + if(opts.singleSelect&&opts.selectOnCheck){ + return false; + } + if(ck.is(":checked")){ + _6b5(_6b4); + }else{ + _6b6(_6b4); + } + e.stopPropagation(); + }else{ + var cell=$(e.target).closest(".datagrid-cell"); + if(cell.length){ + var p1=cell.offset().left+5; + var p2=cell.offset().left+cell._outerWidth()-5; + if(e.pageXp1){ + _6b7(_6b4,cell.parent().attr("field")); + } + } + } + }; + function _6b8(e){ + var _6b9=_6b2(e.target); + var opts=$(_6b9).datagrid("options"); + var cell=$(e.target).closest(".datagrid-cell"); + if(cell.length){ + var p1=cell.offset().left+5; + var p2=cell.offset().left+cell._outerWidth()-5; + var cond=opts.resizeHandle=="right"?(e.pageX>p2):(opts.resizeHandle=="left"?(e.pageXp2)); + if(cond){ + var _6ba=cell.parent().attr("field"); + var col=_6a4(_6b9,_6ba); + if(col.resizable==false){ + return; + } + $(_6b9).datagrid("autoSizeColumn",_6ba); + col.auto=false; + } + } + }; + function _6bb(e){ + var _6bc=_6b2(e.target); + var opts=$(_6bc).datagrid("options"); + var td=$(e.target).closest("td[field]"); + opts.onHeaderContextMenu.call(_6bc,e,td.attr("field")); + }; + function _6bd(_6be){ + return function(e){ + var tr=_6bf(e.target); + if(!tr){ + return; + } + var _6c0=_6b2(tr); + if($.data(_6c0,"datagrid").resizing){ + return; + } + var _6c1=_6c2(tr); + if(_6be){ + _6c3(_6c0,_6c1); + }else{ + var opts=$.data(_6c0,"datagrid").options; + opts.finder.getTr(_6c0,_6c1).removeClass("datagrid-row-over"); + } + }; + }; + function _6c4(e){ + var tr=_6bf(e.target); + if(!tr){ + return; + } + var _6c5=_6b2(tr); + var opts=$.data(_6c5,"datagrid").options; + var _6c6=_6c2(tr); + var tt=$(e.target); + if(tt.parent().hasClass("datagrid-cell-check")){ + if(opts.singleSelect&&opts.selectOnCheck){ + tt._propAttr("checked",!tt.is(":checked")); + _6c7(_6c5,_6c6); + }else{ + if(tt.is(":checked")){ + tt._propAttr("checked",false); + _6c7(_6c5,_6c6); + }else{ + tt._propAttr("checked",true); + _6c8(_6c5,_6c6); + } + } + }else{ + var row=opts.finder.getRow(_6c5,_6c6); + var td=tt.closest("td[field]",tr); + if(td.length){ + var _6c9=td.attr("field"); + opts.onClickCell.call(_6c5,_6c6,_6c9,row[_6c9]); + } + if(opts.singleSelect==true){ + _6ca(_6c5,_6c6); + }else{ + if(opts.ctrlSelect){ + if(e.metaKey||e.ctrlKey){ + if(tr.hasClass("datagrid-row-selected")){ + _6cb(_6c5,_6c6); + }else{ + _6ca(_6c5,_6c6); + } + }else{ + if(e.shiftKey){ + $(_6c5).datagrid("clearSelections"); + var _6cc=Math.min(opts.lastSelectedIndex||0,_6c6); + var _6cd=Math.max(opts.lastSelectedIndex||0,_6c6); + for(var i=_6cc;i<=_6cd;i++){ + _6ca(_6c5,i); + } + }else{ + $(_6c5).datagrid("clearSelections"); + _6ca(_6c5,_6c6); + opts.lastSelectedIndex=_6c6; + } + } + }else{ + if(tr.hasClass("datagrid-row-selected")){ + _6cb(_6c5,_6c6); + }else{ + _6ca(_6c5,_6c6); + } + } + } + opts.onClickRow.apply(_6c5,_64a(_6c5,[_6c6,row])); + } + }; + function _6ce(e){ + var tr=_6bf(e.target); + if(!tr){ + return; + } + var _6cf=_6b2(tr); + var opts=$.data(_6cf,"datagrid").options; + var _6d0=_6c2(tr); + var row=opts.finder.getRow(_6cf,_6d0); + var td=$(e.target).closest("td[field]",tr); + if(td.length){ + var _6d1=td.attr("field"); + opts.onDblClickCell.call(_6cf,_6d0,_6d1,row[_6d1]); + } + opts.onDblClickRow.apply(_6cf,_64a(_6cf,[_6d0,row])); + }; + function _6d2(e){ + var tr=_6bf(e.target); + if(tr){ + var _6d3=_6b2(tr); + var opts=$.data(_6d3,"datagrid").options; + var _6d4=_6c2(tr); + var row=opts.finder.getRow(_6d3,_6d4); + opts.onRowContextMenu.call(_6d3,e,_6d4,row); + }else{ + var body=_6bf(e.target,".datagrid-body"); + if(body){ + var _6d3=_6b2(body); + var opts=$.data(_6d3,"datagrid").options; + opts.onRowContextMenu.call(_6d3,e,-1,null); + } + } + }; + function _6b2(t){ + return $(t).closest("div.datagrid-view").children(".datagrid-f")[0]; + }; + function _6bf(t,_6d5){ + var tr=$(t).closest(_6d5||"tr.datagrid-row"); + if(tr.length&&tr.parent().length){ + return tr; + }else{ + return undefined; + } + }; + function _6c2(tr){ + if(tr.attr("datagrid-row-index")){ + return parseInt(tr.attr("datagrid-row-index")); + }else{ + return tr.attr("node-id"); + } + }; + function _6b7(_6d6,_6d7){ + var _6d8=$.data(_6d6,"datagrid"); + var opts=_6d8.options; + _6d7=_6d7||{}; + var _6d9={sortName:opts.sortName,sortOrder:opts.sortOrder}; + if(typeof _6d7=="object"){ + $.extend(_6d9,_6d7); + } + var _6da=[]; + var _6db=[]; + if(_6d9.sortName){ + _6da=_6d9.sortName.split(","); + _6db=_6d9.sortOrder.split(","); + } + if(typeof _6d7=="string"){ + var _6dc=_6d7; + var col=_6a4(_6d6,_6dc); + if(!col.sortable||_6d8.resizing){ + return; + } + var _6dd=col.order||"asc"; + var pos=_647(_6da,_6dc); + if(pos>=0){ + var _6de=_6db[pos]=="asc"?"desc":"asc"; + if(opts.multiSort&&_6de==_6dd){ + _6da.splice(pos,1); + _6db.splice(pos,1); + }else{ + _6db[pos]=_6de; + } + }else{ + if(opts.multiSort){ + _6da.push(_6dc); + _6db.push(_6dd); + }else{ + _6da=[_6dc]; + _6db=[_6dd]; + } + } + _6d9.sortName=_6da.join(","); + _6d9.sortOrder=_6db.join(","); + } + if(opts.onBeforeSortColumn.call(_6d6,_6d9.sortName,_6d9.sortOrder)==false){ + return; + } + $.extend(opts,_6d9); + var dc=_6d8.dc; + var _6df=dc.header1.add(dc.header2); + _6df.find("div.datagrid-cell").removeClass("datagrid-sort-asc datagrid-sort-desc"); + for(var i=0;i<_6da.length;i++){ + var col=_6a4(_6d6,_6da[i]); + _6df.find("div."+col.cellClass).addClass("datagrid-sort-"+_6db[i]); + } + if(opts.remoteSort){ + _6e0(_6d6); + }else{ + _6e1(_6d6,$(_6d6).datagrid("getData")); + } + opts.onSortColumn.call(_6d6,opts.sortName,opts.sortOrder); + }; + function _6e2(_6e3,_6e4,_6e5){ + _6e6(true); + _6e6(false); + function _6e6(_6e7){ + var aa=_6e8(_6e3,_6e7); + if(aa.length){ + var _6e9=aa[aa.length-1]; + var _6ea=_647(_6e9,_6e4); + if(_6ea>=0){ + for(var _6eb=0;_6eb=_6f0.find("table").width()){ + dc.body2.css("overflow-x","hidden"); + } + function _6f3(){ + if(!opts.fitColumns){ + return; + } + if(!_6ef.leftWidth){ + _6ef.leftWidth=0; + } + var _6f4=0; + var cc=[]; + var _6f5=_6a3(_6ee,false); + for(var i=0;i<_6f5.length;i++){ + var col=_6a4(_6ee,_6f5[i]); + if(_6f6(col)){ + _6f4+=col.width; + cc.push({field:col.field,col:col,addingWidth:0}); + } + } + if(!_6f4){ + return; + } + cc[cc.length-1].addingWidth-=_6ef.leftWidth; + var _6f7=_6f0.children("div.datagrid-header-inner").show(); + var _6f8=_6f0.width()-_6f0.find("table").width()-opts.scrollbarSize+_6ef.leftWidth; + var rate=_6f8/_6f4; + if(!opts.showHeader){ + _6f7.hide(); + } + for(var i=0;i0){ + c.col.boxWidth+=c.addingWidth; + c.col.width+=c.addingWidth; + } + } + _6ef.leftWidth=_6f8; + $(_6ee).datagrid("fixColumnSize"); + }; + function _6f2(){ + var _6fa=false; + var _6fb=_6a3(_6ee,true).concat(_6a3(_6ee,false)); + $.map(_6fb,function(_6fc){ + var col=_6a4(_6ee,_6fc); + if(String(col.width||"").indexOf("%")>=0){ + var _6fd=$.parser.parseValue("width",col.width,dc.view,opts.scrollbarSize+(opts.rownumbers?opts.rownumberWidth:0))-col.deltaWidth; + if(_6fd>0){ + col.boxWidth=_6fd; + _6fa=true; + } + } + }); + if(_6fa){ + $(_6ee).datagrid("fixColumnSize"); + } + }; + function _6f1(fit){ + var _6fe=dc.header1.add(dc.header2).find(".datagrid-cell-group"); + if(_6fe.length){ + _6fe.each(function(){ + $(this)._outerWidth(fit?$(this).parent().width():10); + }); + if(fit){ + _660(_6ee); + } + } + }; + function _6f6(col){ + if(String(col.width||"").indexOf("%")>=0){ + return false; + } + if(!col.hidden&&!col.checkbox&&!col.auto&&!col.fixed){ + return true; + } + }; + }; + function _6ff(_700,_701){ + var _702=$.data(_700,"datagrid"); + var opts=_702.options; + var dc=_702.dc; + var tmp=$("
        ").appendTo("body"); + if(_701){ + _65b(_701); + $(_700).datagrid("fitColumns"); + }else{ + var _703=false; + var _704=_6a3(_700,true).concat(_6a3(_700,false)); + for(var i=0;i<_704.length;i++){ + var _701=_704[i]; + var col=_6a4(_700,_701); + if(col.auto){ + _65b(_701); + _703=true; + } + } + if(_703){ + $(_700).datagrid("fitColumns"); + } + } + tmp.remove(); + function _65b(_705){ + var _706=dc.view.find("div.datagrid-header td[field=\""+_705+"\"] div.datagrid-cell"); + _706.css("width",""); + var col=$(_700).datagrid("getColumnOption",_705); + col.width=undefined; + col.boxWidth=undefined; + col.auto=true; + $(_700).datagrid("fixColumnSize",_705); + var _707=Math.max(_708("header"),_708("allbody"),_708("allfooter"))+1; + _706._outerWidth(_707-1); + col.width=_707; + col.boxWidth=parseInt(_706[0].style.width); + col.deltaWidth=_707-col.boxWidth; + _706.css("width",""); + $(_700).datagrid("fixColumnSize",_705); + opts.onResizeColumn.call(_700,_705,col.width); + function _708(type){ + var _709=0; + if(type=="header"){ + _709=_70a(_706); + }else{ + opts.finder.getTr(_700,0,type).find("td[field=\""+_705+"\"] div.datagrid-cell").each(function(){ + var w=_70a($(this)); + if(_7091){ + var col=_6a4(_713,td.attr("field")); + var _715=col.boxWidth+col.deltaWidth-1; + for(var i=1;i<_714;i++){ + td=td.next(); + col=_6a4(_713,td.attr("field")); + _715+=col.boxWidth+col.deltaWidth; + } + $(this).children("div.datagrid-cell")._outerWidth(_715); + } + }); + }; + function _711(_716){ + var dc=$.data(_716,"datagrid").dc; + dc.view.find("div.datagrid-editable").each(function(){ + var cell=$(this); + var _717=cell.parent().attr("field"); + var col=$(_716).datagrid("getColumnOption",_717); + cell._outerWidth(col.boxWidth+col.deltaWidth-1); + var ed=$.data(this,"datagrid.editor"); + if(ed.actions.resize){ + ed.actions.resize(ed.target,cell.width()); + } + }); + }; + function _6a4(_718,_719){ + function find(_71a){ + if(_71a){ + for(var i=0;i<_71a.length;i++){ + var cc=_71a[i]; + for(var j=0;j=0){ + var _723=col.field||col.id||""; + for(var c=0;c<(col.colspan||1);c++){ + for(var r=0;r<(col.rowspan||1);r++){ + aa[_720+r][_721]=_723; + } + _721++; + } + } + }); + } + return aa; + function _71f(){ + var _724=0; + $.map(_71d[0]||[],function(col){ + _724+=col.colspan||1; + }); + return _724; + }; + function _722(a){ + for(var i=0;ib?1:-1); + }; + r=_72b(r1[sn],r2[sn])*(so=="asc"?1:-1); + if(r!=0){ + return r; + } + } + return r; + }); + } + if(opts.view.onBeforeRender){ + opts.view.onBeforeRender.call(opts.view,_727,data.rows); + } + opts.view.render.call(opts.view,_727,dc.body2,false); + opts.view.render.call(opts.view,_727,dc.body1,true); + if(opts.showFooter){ + opts.view.renderFooter.call(opts.view,_727,dc.footer2,false); + opts.view.renderFooter.call(opts.view,_727,dc.footer1,true); + } + if(opts.view.onAfterRender){ + opts.view.onAfterRender.call(opts.view,_727); + } + _728.ss.clean(); + var _72c=$(_727).datagrid("getPager"); + if(_72c.length){ + var _72d=_72c.pagination("options"); + if(_72d.total!=data.total){ + _72c.pagination("refresh",{pageNumber:opts.pageNumber,total:data.total}); + if(opts.pageNumber!=_72d.pageNumber&&_72d.pageNumber>0){ + opts.pageNumber=_72d.pageNumber; + _6e0(_727); + } + } + } + _671(_727); + dc.body2.triggerHandler("scroll"); + $(_727).datagrid("setSelectionState"); + $(_727).datagrid("autoSizeColumn"); + opts.onLoadSuccess.call(_727,data); + }; + function _72e(_72f){ + var _730=$.data(_72f,"datagrid"); + var opts=_730.options; + var dc=_730.dc; + dc.header1.add(dc.header2).find("input[type=checkbox]")._propAttr("checked",false); + if(opts.idField){ + var _731=$.data(_72f,"treegrid")?true:false; + var _732=opts.onSelect; + var _733=opts.onCheck; + opts.onSelect=opts.onCheck=function(){ + }; + var rows=opts.finder.getRows(_72f); + for(var i=0;i_744.height()-_745){ + _744.scrollTop(_744.scrollTop()+top+tr._outerHeight()-_744.height()+_745); + } + } + } + }; + function _6c3(_747,_748){ + var _749=$.data(_747,"datagrid"); + var opts=_749.options; + opts.finder.getTr(_747,_749.highlightIndex).removeClass("datagrid-row-over"); + opts.finder.getTr(_747,_748).addClass("datagrid-row-over"); + _749.highlightIndex=_748; + }; + function _6ca(_74a,_74b,_74c,_74d){ + var _74e=$.data(_74a,"datagrid"); + var opts=_74e.options; + var row=opts.finder.getRow(_74a,_74b); + if(!row){ + return; + } + if(opts.onBeforeSelect.apply(_74a,_64a(_74a,[_74b,row]))==false){ + return; + } + if(opts.singleSelect){ + _74f(_74a,true); + _74e.selectedRows=[]; + } + if(!_74c&&opts.checkOnSelect){ + _6c7(_74a,_74b,true); + } + if(opts.idField){ + _649(_74e.selectedRows,opts.idField,row); + } + opts.finder.getTr(_74a,_74b).addClass("datagrid-row-selected"); + opts.onSelect.apply(_74a,_64a(_74a,[_74b,row])); + if(!_74d&&opts.scrollOnSelect){ + _73f(_74a,_74b); + } + }; + function _6cb(_750,_751,_752){ + var _753=$.data(_750,"datagrid"); + var dc=_753.dc; + var opts=_753.options; + var row=opts.finder.getRow(_750,_751); + if(!row){ + return; + } + if(opts.onBeforeUnselect.apply(_750,_64a(_750,[_751,row]))==false){ + return; + } + if(!_752&&opts.checkOnSelect){ + _6c8(_750,_751,true); + } + opts.finder.getTr(_750,_751).removeClass("datagrid-row-selected"); + if(opts.idField){ + _648(_753.selectedRows,opts.idField,row[opts.idField]); + } + opts.onUnselect.apply(_750,_64a(_750,[_751,row])); + }; + function _754(_755,_756){ + var _757=$.data(_755,"datagrid"); + var opts=_757.options; + var rows=opts.finder.getRows(_755); + var _758=$.data(_755,"datagrid").selectedRows; + if(!_756&&opts.checkOnSelect){ + _6b5(_755,true); + } + opts.finder.getTr(_755,"","allbody").addClass("datagrid-row-selected"); + if(opts.idField){ + for(var _759=0;_759"); + cell.children("table").bind("click dblclick contextmenu",function(e){ + e.stopPropagation(); + }); + $.data(cell[0],"datagrid.editor",{actions:_78e,target:_78e.init(cell.find("td"),$.extend({height:opts.editorHeight},_78d)),field:_78b,type:_78c,oldHtml:_78f}); + } + } + }); + _671(_789,_78a,true); + }; + function _780(_791,_792){ + var opts=$.data(_791,"datagrid").options; + var tr=opts.finder.getTr(_791,_792); + tr.children("td").each(function(){ + var cell=$(this).find("div.datagrid-editable"); + if(cell.length){ + var ed=$.data(cell[0],"datagrid.editor"); + if(ed.actions.destroy){ + ed.actions.destroy(ed.target); + } + cell.html(ed.oldHtml); + $.removeData(cell[0],"datagrid.editor"); + cell.removeClass("datagrid-editable"); + cell.css("width",""); + } + }); + }; + function _773(_793,_794){ + var tr=$.data(_793,"datagrid").options.finder.getTr(_793,_794); + if(!tr.hasClass("datagrid-row-editing")){ + return true; + } + var vbox=tr.find(".validatebox-text"); + vbox.validatebox("validate"); + vbox.trigger("mouseleave"); + var _795=tr.find(".validatebox-invalid"); + return _795.length==0; + }; + function _796(_797,_798){ + var _799=$.data(_797,"datagrid").insertedRows; + var _79a=$.data(_797,"datagrid").deletedRows; + var _79b=$.data(_797,"datagrid").updatedRows; + if(!_798){ + var rows=[]; + rows=rows.concat(_799); + rows=rows.concat(_79a); + rows=rows.concat(_79b); + return rows; + }else{ + if(_798=="inserted"){ + return _799; + }else{ + if(_798=="deleted"){ + return _79a; + }else{ + if(_798=="updated"){ + return _79b; + } + } + } + } + return []; + }; + function _79c(_79d,_79e){ + var _79f=$.data(_79d,"datagrid"); + var opts=_79f.options; + var data=_79f.data; + var _7a0=_79f.insertedRows; + var _7a1=_79f.deletedRows; + $(_79d).datagrid("cancelEdit",_79e); + var row=opts.finder.getRow(_79d,_79e); + if(_647(_7a0,row)>=0){ + _648(_7a0,row); + }else{ + _7a1.push(row); + } + _648(_79f.selectedRows,opts.idField,row[opts.idField]); + _648(_79f.checkedRows,opts.idField,row[opts.idField]); + opts.view.deleteRow.call(opts.view,_79d,_79e); + if(opts.height=="auto"){ + _671(_79d); + } + $(_79d).datagrid("getPager").pagination("refresh",{total:data.total}); + }; + function _7a2(_7a3,_7a4){ + var data=$.data(_7a3,"datagrid").data; + var view=$.data(_7a3,"datagrid").options.view; + var _7a5=$.data(_7a3,"datagrid").insertedRows; + view.insertRow.call(view,_7a3,_7a4.index,_7a4.row); + _7a5.push(_7a4.row); + $(_7a3).datagrid("getPager").pagination("refresh",{total:data.total}); + }; + function _7a6(_7a7,row){ + var data=$.data(_7a7,"datagrid").data; + var view=$.data(_7a7,"datagrid").options.view; + var _7a8=$.data(_7a7,"datagrid").insertedRows; + view.insertRow.call(view,_7a7,null,row); + _7a8.push(row); + $(_7a7).datagrid("getPager").pagination("refresh",{total:data.total}); + }; + function _7a9(_7aa,_7ab){ + var _7ac=$.data(_7aa,"datagrid"); + var opts=_7ac.options; + var row=opts.finder.getRow(_7aa,_7ab.index); + var _7ad=false; + _7ab.row=_7ab.row||{}; + for(var _7ae in _7ab.row){ + if(row[_7ae]!==_7ab.row[_7ae]){ + _7ad=true; + break; + } + } + if(_7ad){ + if(_647(_7ac.insertedRows,row)==-1){ + if(_647(_7ac.updatedRows,row)==-1){ + _7ac.updatedRows.push(row); + } + } + opts.view.updateRow.call(opts.view,_7aa,_7ab.index,_7ab.row); + } + }; + function _7af(_7b0){ + var _7b1=$.data(_7b0,"datagrid"); + var data=_7b1.data; + var rows=data.rows; + var _7b2=[]; + for(var i=0;i=0){ + (_7bf=="s"?_6ca:_6c7)(_7b6,_7c0,true); + } + } + }; + for(var i=0;i0){ + $(this).datagrid("loadData",data); + }else{ + $(this).datagrid("autoSizeColumn"); + } + } + _6e0(this); + }); + }; + function _7d0(_7d1){ + var _7d2={}; + $.map(_7d1,function(name){ + _7d2[name]=_7d3(name); + }); + return _7d2; + function _7d3(name){ + function isA(_7d4){ + return $.data($(_7d4)[0],name)!=undefined; + }; + return {init:function(_7d5,_7d6){ + var _7d7=$("").appendTo(_7d5); + if(_7d7[name]&&name!="text"){ + return _7d7[name](_7d6); + }else{ + return _7d7; + } + },destroy:function(_7d8){ + if(isA(_7d8,name)){ + $(_7d8)[name]("destroy"); + } + },getValue:function(_7d9){ + if(isA(_7d9,name)){ + var opts=$(_7d9)[name]("options"); + if(opts.multiple){ + return $(_7d9)[name]("getValues").join(opts.separator); + }else{ + return $(_7d9)[name]("getValue"); + } + }else{ + return $(_7d9).val(); + } + },setValue:function(_7da,_7db){ + if(isA(_7da,name)){ + var opts=$(_7da)[name]("options"); + if(opts.multiple){ + if(_7db){ + $(_7da)[name]("setValues",_7db.split(opts.separator)); + }else{ + $(_7da)[name]("clear"); + } + }else{ + $(_7da)[name]("setValue",_7db); + } + }else{ + $(_7da).val(_7db); + } + },resize:function(_7dc,_7dd){ + if(isA(_7dc,name)){ + $(_7dc)[name]("resize",_7dd); + }else{ + $(_7dc)._size({width:_7dd,height:$.fn.datagrid.defaults.editorHeight}); + } + }}; + }; + }; + var _7de=$.extend({},_7d0(["text","textbox","passwordbox","filebox","numberbox","numberspinner","combobox","combotree","combogrid","combotreegrid","datebox","datetimebox","timespinner","datetimespinner"]),{textarea:{init:function(_7df,_7e0){ + var _7e1=$("").appendTo(_7df); + _7e1.css("vertical-align","middle")._outerHeight(_7e0.height); + return _7e1; + },getValue:function(_7e2){ + return $(_7e2).val(); + },setValue:function(_7e3,_7e4){ + $(_7e3).val(_7e4); + },resize:function(_7e5,_7e6){ + $(_7e5)._outerWidth(_7e6); + }},checkbox:{init:function(_7e7,_7e8){ + var _7e9=$("").appendTo(_7e7); + _7e9.val(_7e8.on); + _7e9.attr("offval",_7e8.off); + return _7e9; + },getValue:function(_7ea){ + if($(_7ea).is(":checked")){ + return $(_7ea).val(); + }else{ + return $(_7ea).attr("offval"); + } + },setValue:function(_7eb,_7ec){ + var _7ed=false; + if($(_7eb).val()==_7ec){ + _7ed=true; + } + $(_7eb)._propAttr("checked",_7ed); + }},validatebox:{init:function(_7ee,_7ef){ + var _7f0=$("").appendTo(_7ee); + _7f0.validatebox(_7ef); + return _7f0; + },destroy:function(_7f1){ + $(_7f1).validatebox("destroy"); + },getValue:function(_7f2){ + return $(_7f2).val(); + },setValue:function(_7f3,_7f4){ + $(_7f3).val(_7f4); + },resize:function(_7f5,_7f6){ + $(_7f5)._outerWidth(_7f6)._outerHeight($.fn.datagrid.defaults.editorHeight); + }}}); + $.fn.datagrid.methods={options:function(jq){ + var _7f7=$.data(jq[0],"datagrid").options; + var _7f8=$.data(jq[0],"datagrid").panel.panel("options"); + var opts=$.extend(_7f7,{width:_7f8.width,height:_7f8.height,closed:_7f8.closed,collapsed:_7f8.collapsed,minimized:_7f8.minimized,maximized:_7f8.maximized}); + return opts; + },setSelectionState:function(jq){ + return jq.each(function(){ + _72e(this); + }); + },createStyleSheet:function(jq){ + return _64c(jq[0]); + },getPanel:function(jq){ + return $.data(jq[0],"datagrid").panel; + },getPager:function(jq){ + return $.data(jq[0],"datagrid").panel.children("div.datagrid-pager"); + },getColumnFields:function(jq,_7f9){ + return _6a3(jq[0],_7f9); + },getColumnOption:function(jq,_7fa){ + return _6a4(jq[0],_7fa); + },resize:function(jq,_7fb){ + return jq.each(function(){ + _65b(this,_7fb); + }); + },load:function(jq,_7fc){ + return jq.each(function(){ + var opts=$(this).datagrid("options"); + if(typeof _7fc=="string"){ + opts.url=_7fc; + _7fc=null; + } + opts.pageNumber=1; + var _7fd=$(this).datagrid("getPager"); + _7fd.pagination("refresh",{pageNumber:1}); + _6e0(this,_7fc); + }); + },reload:function(jq,_7fe){ + return jq.each(function(){ + var opts=$(this).datagrid("options"); + if(typeof _7fe=="string"){ + opts.url=_7fe; + _7fe=null; + } + _6e0(this,_7fe); + }); + },reloadFooter:function(jq,_7ff){ + return jq.each(function(){ + var opts=$.data(this,"datagrid").options; + var dc=$.data(this,"datagrid").dc; + if(_7ff){ + $.data(this,"datagrid").footer=_7ff; + } + if(opts.showFooter){ + opts.view.renderFooter.call(opts.view,this,dc.footer2,false); + opts.view.renderFooter.call(opts.view,this,dc.footer1,true); + if(opts.view.onAfterRender){ + opts.view.onAfterRender.call(opts.view,this); + } + $(this).datagrid("fixRowHeight"); + } + }); + },loading:function(jq){ + return jq.each(function(){ + var opts=$.data(this,"datagrid").options; + $(this).datagrid("getPager").pagination("loading"); + if(opts.loadMsg){ + var _800=$(this).datagrid("getPanel"); + if(!_800.children("div.datagrid-mask").length){ + $("
        ").appendTo(_800); + var msg=$("
        ").html(opts.loadMsg).appendTo(_800); + msg._outerHeight(40); + msg.css({marginLeft:(-msg.outerWidth()/2),lineHeight:(msg.height()+"px")}); + } + } + }); + },loaded:function(jq){ + return jq.each(function(){ + $(this).datagrid("getPager").pagination("loaded"); + var _801=$(this).datagrid("getPanel"); + _801.children("div.datagrid-mask-msg").remove(); + _801.children("div.datagrid-mask").remove(); + }); + },fitColumns:function(jq){ + return jq.each(function(){ + _6ed(this); + }); + },fixColumnSize:function(jq,_802){ + return jq.each(function(){ + _70b(this,_802); + }); + },fixRowHeight:function(jq,_803){ + return jq.each(function(){ + _671(this,_803); + }); + },freezeRow:function(jq,_804){ + return jq.each(function(){ + _67e(this,_804); + }); + },autoSizeColumn:function(jq,_805){ + return jq.each(function(){ + _6ff(this,_805); + }); + },loadData:function(jq,data){ + return jq.each(function(){ + _6e1(this,data); + _7af(this); + }); + },getData:function(jq){ + return $.data(jq[0],"datagrid").data; + },getRows:function(jq){ + return $.data(jq[0],"datagrid").data.rows; + },getFooterRows:function(jq){ + return $.data(jq[0],"datagrid").footer; + },getRowIndex:function(jq,id){ + return _736(jq[0],id); + },getChecked:function(jq){ + return _73c(jq[0]); + },getSelected:function(jq){ + var rows=_739(jq[0]); + return rows.length>0?rows[0]:null; + },getSelections:function(jq){ + return _739(jq[0]); + },clearSelections:function(jq){ + return jq.each(function(){ + var _806=$.data(this,"datagrid"); + var _807=_806.selectedRows; + var _808=_806.checkedRows; + _807.splice(0,_807.length); + _74f(this); + if(_806.options.checkOnSelect){ + _808.splice(0,_808.length); + } + }); + },clearChecked:function(jq){ + return jq.each(function(){ + var _809=$.data(this,"datagrid"); + var _80a=_809.selectedRows; + var _80b=_809.checkedRows; + _80b.splice(0,_80b.length); + _6b6(this); + if(_809.options.selectOnCheck){ + _80a.splice(0,_80a.length); + } + }); + },scrollTo:function(jq,_80c){ + return jq.each(function(){ + _73f(this,_80c); + }); + },highlightRow:function(jq,_80d){ + return jq.each(function(){ + _6c3(this,_80d); + _73f(this,_80d); + }); + },selectAll:function(jq){ + return jq.each(function(){ + _754(this); + }); + },unselectAll:function(jq){ + return jq.each(function(){ + _74f(this); + }); + },selectRow:function(jq,_80e){ + return jq.each(function(){ + _6ca(this,_80e); + }); + },selectRecord:function(jq,id){ + return jq.each(function(){ + var opts=$.data(this,"datagrid").options; + if(opts.idField){ + var _80f=_736(this,id); + if(_80f>=0){ + $(this).datagrid("selectRow",_80f); + } + } + }); + },unselectRow:function(jq,_810){ + return jq.each(function(){ + _6cb(this,_810); + }); + },checkRow:function(jq,_811){ + return jq.each(function(){ + _6c7(this,_811); + }); + },uncheckRow:function(jq,_812){ + return jq.each(function(){ + _6c8(this,_812); + }); + },checkAll:function(jq){ + return jq.each(function(){ + _6b5(this); + }); + },uncheckAll:function(jq){ + return jq.each(function(){ + _6b6(this); + }); + },beginEdit:function(jq,_813){ + return jq.each(function(){ + _76e(this,_813); + }); + },endEdit:function(jq,_814){ + return jq.each(function(){ + _774(this,_814,false); + }); + },cancelEdit:function(jq,_815){ + return jq.each(function(){ + _774(this,_815,true); + }); + },getEditors:function(jq,_816){ + return _781(jq[0],_816); + },getEditor:function(jq,_817){ + return _785(jq[0],_817); + },refreshRow:function(jq,_818){ + return jq.each(function(){ + var opts=$.data(this,"datagrid").options; + opts.view.refreshRow.call(opts.view,this,_818); + }); + },validateRow:function(jq,_819){ + return _773(jq[0],_819); + },updateRow:function(jq,_81a){ + return jq.each(function(){ + _7a9(this,_81a); + }); + },appendRow:function(jq,row){ + return jq.each(function(){ + _7a6(this,row); + }); + },insertRow:function(jq,_81b){ + return jq.each(function(){ + _7a2(this,_81b); + }); + },deleteRow:function(jq,_81c){ + return jq.each(function(){ + _79c(this,_81c); + }); + },getChanges:function(jq,_81d){ + return _796(jq[0],_81d); + },acceptChanges:function(jq){ + return jq.each(function(){ + _7b3(this); + }); + },rejectChanges:function(jq){ + return jq.each(function(){ + _7b5(this); + }); + },mergeCells:function(jq,_81e){ + return jq.each(function(){ + _7c7(this,_81e); + }); + },showColumn:function(jq,_81f){ + return jq.each(function(){ + var col=$(this).datagrid("getColumnOption",_81f); + if(col.hidden){ + col.hidden=false; + $(this).datagrid("getPanel").find("td[field=\""+_81f+"\"]").show(); + _6e2(this,_81f,1); + $(this).datagrid("fitColumns"); + } + }); + },hideColumn:function(jq,_820){ + return jq.each(function(){ + var col=$(this).datagrid("getColumnOption",_820); + if(!col.hidden){ + col.hidden=true; + $(this).datagrid("getPanel").find("td[field=\""+_820+"\"]").hide(); + _6e2(this,_820,-1); + $(this).datagrid("fitColumns"); + } + }); + },sort:function(jq,_821){ + return jq.each(function(){ + _6b7(this,_821); + }); + },gotoPage:function(jq,_822){ + return jq.each(function(){ + var _823=this; + var page,cb; + if(typeof _822=="object"){ + page=_822.page; + cb=_822.callback; + }else{ + page=_822; + } + $(_823).datagrid("options").pageNumber=page; + $(_823).datagrid("getPager").pagination("refresh",{pageNumber:page}); + _6e0(_823,null,function(){ + if(cb){ + cb.call(_823,page); + } + }); + }); + }}; + $.fn.datagrid.parseOptions=function(_824){ + var t=$(_824); + return $.extend({},$.fn.panel.parseOptions(_824),$.parser.parseOptions(_824,["url","toolbar","idField","sortName","sortOrder","pagePosition","resizeHandle",{sharedStyleSheet:"boolean",fitColumns:"boolean",autoRowHeight:"boolean",striped:"boolean",nowrap:"boolean"},{rownumbers:"boolean",singleSelect:"boolean",ctrlSelect:"boolean",checkOnSelect:"boolean",selectOnCheck:"boolean"},{pagination:"boolean",pageSize:"number",pageNumber:"number"},{multiSort:"boolean",remoteSort:"boolean",showHeader:"boolean",showFooter:"boolean"},{scrollbarSize:"number",scrollOnSelect:"boolean"}]),{pageList:(t.attr("pageList")?eval(t.attr("pageList")):undefined),loadMsg:(t.attr("loadMsg")!=undefined?t.attr("loadMsg"):undefined),rowStyler:(t.attr("rowStyler")?eval(t.attr("rowStyler")):undefined)}); + }; + $.fn.datagrid.parseData=function(_825){ + var t=$(_825); + var data={total:0,rows:[]}; + var _826=t.datagrid("getColumnFields",true).concat(t.datagrid("getColumnFields",false)); + t.find("tbody tr").each(function(){ + data.total++; + var row={}; + $.extend(row,$.parser.parseOptions(this,["iconCls","state"])); + for(var i=0;i<_826.length;i++){ + row[_826[i]]=$(this).find("td:eq("+i+")").html(); + } + data.rows.push(row); + }); + return data; + }; + var _827={render:function(_828,_829,_82a){ + var rows=$(_828).datagrid("getRows"); + $(_829).empty().html(this.renderTable(_828,0,rows,_82a)); + },renderFooter:function(_82b,_82c,_82d){ + var opts=$.data(_82b,"datagrid").options; + var rows=$.data(_82b,"datagrid").footer||[]; + var _82e=$(_82b).datagrid("getColumnFields",_82d); + var _82f=[""]; + for(var i=0;i"); + _82f.push(this.renderRow.call(this,_82b,_82e,_82d,i,rows[i])); + _82f.push(""); + } + _82f.push("
        "); + $(_82c).html(_82f.join("")); + },renderTable:function(_830,_831,rows,_832){ + var _833=$.data(_830,"datagrid"); + var opts=_833.options; + if(_832){ + if(!(opts.rownumbers||(opts.frozenColumns&&opts.frozenColumns.length))){ + return ""; + } + } + var _834=$(_830).datagrid("getColumnFields",_832); + var _835=[""]; + for(var i=0;i"); + _835.push(this.renderRow.call(this,_830,_834,_832,_831,row)); + _835.push(""); + _831++; + } + _835.push("
        "); + return _835.join(""); + },renderRow:function(_838,_839,_83a,_83b,_83c){ + var opts=$.data(_838,"datagrid").options; + var cc=[]; + if(_83a&&opts.rownumbers){ + var _83d=_83b+1; + if(opts.pagination){ + _83d+=(opts.pageNumber-1)*opts.pageSize; + } + cc.push("
        "+_83d+"
        "); + } + for(var i=0;i<_839.length;i++){ + var _83e=_839[i]; + var col=$(_838).datagrid("getColumnOption",_83e); + if(col){ + var _83f=_83c[_83e]; + var css=col.styler?(col.styler.call(_838,_83f,_83c,_83b)||""):""; + var cs=this.getStyleValue(css); + var cls=cs.c?"class=\""+cs.c+"\"":""; + var _840=col.hidden?"style=\"display:none;"+cs.s+"\"":(cs.s?"style=\""+cs.s+"\"":""); + cc.push(""); + var _840=""; + if(!col.checkbox){ + if(col.align){ + _840+="text-align:"+col.align+";"; + } + if(!opts.nowrap){ + _840+="white-space:normal;height:auto;"; + }else{ + if(opts.autoRowHeight){ + _840+="height:auto;"; + } + } + } + cc.push("
        "); + if(col.checkbox){ + cc.push(""); + }else{ + if(col.formatter){ + cc.push(col.formatter(_83f,_83c,_83b)); + }else{ + cc.push(_83f); + } + } + cc.push("
        "); + cc.push(""); + } + } + return cc.join(""); + },getStyleValue:function(css){ + var _841=""; + var _842=""; + if(typeof css=="string"){ + _842=css; + }else{ + if(css){ + _841=css["class"]||""; + _842=css["style"]||""; + } + } + return {c:_841,s:_842}; + },refreshRow:function(_843,_844){ + this.updateRow.call(this,_843,_844,{}); + },updateRow:function(_845,_846,row){ + var opts=$.data(_845,"datagrid").options; + var _847=opts.finder.getRow(_845,_846); + $.extend(_847,row); + var cs=_848.call(this,_846); + var _849=cs.s; + var cls="datagrid-row "+(_846%2&&opts.striped?"datagrid-row-alt ":" ")+cs.c; + function _848(_84a){ + var css=opts.rowStyler?opts.rowStyler.call(_845,_84a,_847):""; + return this.getStyleValue(css); + }; + function _84b(_84c){ + var tr=opts.finder.getTr(_845,_846,"body",(_84c?1:2)); + if(!tr.length){ + return; + } + var _84d=$(_845).datagrid("getColumnFields",_84c); + var _84e=tr.find("div.datagrid-cell-check input[type=checkbox]").is(":checked"); + tr.html(this.renderRow.call(this,_845,_84d,_84c,_846,_847)); + var _84f=(tr.hasClass("datagrid-row-checked")?" datagrid-row-checked":"")+(tr.hasClass("datagrid-row-selected")?" datagrid-row-selected":""); + tr.attr("style",_849).attr("class",cls+_84f); + if(_84e){ + tr.find("div.datagrid-cell-check input[type=checkbox]")._propAttr("checked",true); + } + }; + _84b.call(this,true); + _84b.call(this,false); + $(_845).datagrid("fixRowHeight",_846); + },insertRow:function(_850,_851,row){ + var _852=$.data(_850,"datagrid"); + var opts=_852.options; + var dc=_852.dc; + var data=_852.data; + if(_851==undefined||_851==null){ + _851=data.rows.length; + } + if(_851>data.rows.length){ + _851=data.rows.length; + } + function _853(_854){ + var _855=_854?1:2; + for(var i=data.rows.length-1;i>=_851;i--){ + var tr=opts.finder.getTr(_850,i,"body",_855); + tr.attr("datagrid-row-index",i+1); + tr.attr("id",_852.rowIdPrefix+"-"+_855+"-"+(i+1)); + if(_854&&opts.rownumbers){ + var _856=i+2; + if(opts.pagination){ + _856+=(opts.pageNumber-1)*opts.pageSize; + } + tr.find("div.datagrid-cell-rownumber").html(_856); + } + if(opts.striped){ + tr.removeClass("datagrid-row-alt").addClass((i+1)%2?"datagrid-row-alt":""); + } + } + }; + function _857(_858){ + var _859=_858?1:2; + var _85a=$(_850).datagrid("getColumnFields",_858); + var _85b=_852.rowIdPrefix+"-"+_859+"-"+_851; + var tr=""; + if(_851>=data.rows.length){ + if(data.rows.length){ + opts.finder.getTr(_850,"","last",_859).after(tr); + }else{ + var cc=_858?dc.body1:dc.body2; + cc.html(""+tr+"
        "); + } + }else{ + opts.finder.getTr(_850,_851+1,"body",_859).before(tr); + } + }; + _853.call(this,true); + _853.call(this,false); + _857.call(this,true); + _857.call(this,false); + data.total+=1; + data.rows.splice(_851,0,row); + this.setEmptyMsg(_850); + this.refreshRow.call(this,_850,_851); + },deleteRow:function(_85c,_85d){ + var _85e=$.data(_85c,"datagrid"); + var opts=_85e.options; + var data=_85e.data; + function _85f(_860){ + var _861=_860?1:2; + for(var i=_85d+1;i
        ").appendTo(_868.dc.view); + d.html(opts.emptyMsg).css("top",h+"px"); + } + } + },renderEmptyRow:function(_86a){ + var cols=$.map($(_86a).datagrid("getColumnFields"),function(_86b){ + return $(_86a).datagrid("getColumnOption",_86b); + }); + $.map(cols,function(col){ + col.formatter1=col.formatter; + col.styler1=col.styler; + col.formatter=col.styler=undefined; + }); + var _86c=$.data(_86a,"datagrid").dc.body2; + _86c.html(this.renderTable(_86a,0,[{}],false)); + _86c.find("tbody *").css({height:1,borderColor:"transparent",background:"transparent"}); + var tr=_86c.find(".datagrid-row"); + tr.removeClass("datagrid-row").removeAttr("datagrid-row-index"); + tr.find(".datagrid-cell,.datagrid-cell-check").empty(); + $.map(cols,function(col){ + col.formatter=col.formatter1; + col.styler=col.styler1; + col.formatter1=col.styler1=undefined; + }); + }}; + $.fn.datagrid.defaults=$.extend({},$.fn.panel.defaults,{sharedStyleSheet:false,frozenColumns:undefined,columns:undefined,fitColumns:false,resizeHandle:"right",resizeEdge:5,autoRowHeight:true,toolbar:null,striped:false,method:"post",nowrap:true,idField:null,url:null,data:null,loadMsg:"Processing, please wait ...",emptyMsg:"",rownumbers:false,singleSelect:false,ctrlSelect:false,selectOnCheck:true,checkOnSelect:true,pagination:false,pagePosition:"bottom",pageNumber:1,pageSize:10,pageList:[10,20,30,40,50],queryParams:{},sortName:null,sortOrder:"asc",multiSort:false,remoteSort:true,showHeader:true,showFooter:false,scrollOnSelect:true,scrollbarSize:18,rownumberWidth:30,editorHeight:24,headerEvents:{mouseover:_6af(true),mouseout:_6af(false),click:_6b3,dblclick:_6b8,contextmenu:_6bb},rowEvents:{mouseover:_6bd(true),mouseout:_6bd(false),click:_6c4,dblclick:_6ce,contextmenu:_6d2},rowStyler:function(_86d,_86e){ + },loader:function(_86f,_870,_871){ + var opts=$(this).datagrid("options"); + if(!opts.url){ + return false; + } + $.ajax({type:opts.method,url:opts.url,data:_86f,dataType:"json",success:function(data){ + _870(data); + },error:function(){ + _871.apply(this,arguments); + }}); + },loadFilter:function(data){ + return data; + },editors:_7de,finder:{getTr:function(_872,_873,type,_874){ + type=type||"body"; + _874=_874||0; + var _875=$.data(_872,"datagrid"); + var dc=_875.dc; + var opts=_875.options; + if(_874==0){ + var tr1=opts.finder.getTr(_872,_873,type,1); + var tr2=opts.finder.getTr(_872,_873,type,2); + return tr1.add(tr2); + }else{ + if(type=="body"){ + var tr=$("#"+_875.rowIdPrefix+"-"+_874+"-"+_873); + if(!tr.length){ + tr=(_874==1?dc.body1:dc.body2).find(">table>tbody>tr[datagrid-row-index="+_873+"]"); + } + return tr; + }else{ + if(type=="footer"){ + return (_874==1?dc.footer1:dc.footer2).find(">table>tbody>tr[datagrid-row-index="+_873+"]"); + }else{ + if(type=="selected"){ + return (_874==1?dc.body1:dc.body2).find(">table>tbody>tr.datagrid-row-selected"); + }else{ + if(type=="highlight"){ + return (_874==1?dc.body1:dc.body2).find(">table>tbody>tr.datagrid-row-over"); + }else{ + if(type=="checked"){ + return (_874==1?dc.body1:dc.body2).find(">table>tbody>tr.datagrid-row-checked"); + }else{ + if(type=="editing"){ + return (_874==1?dc.body1:dc.body2).find(">table>tbody>tr.datagrid-row-editing"); + }else{ + if(type=="last"){ + return (_874==1?dc.body1:dc.body2).find(">table>tbody>tr[datagrid-row-index]:last"); + }else{ + if(type=="allbody"){ + return (_874==1?dc.body1:dc.body2).find(">table>tbody>tr[datagrid-row-index]"); + }else{ + if(type=="allfooter"){ + return (_874==1?dc.footer1:dc.footer2).find(">table>tbody>tr[datagrid-row-index]"); + } + } + } + } + } + } + } + } + } + } + },getRow:function(_876,p){ + var _877=(typeof p=="object")?p.attr("datagrid-row-index"):p; + return $.data(_876,"datagrid").data.rows[parseInt(_877)]; + },getRows:function(_878){ + return $(_878).datagrid("getRows"); + }},view:_827,onBeforeLoad:function(_879){ + },onLoadSuccess:function(){ + },onLoadError:function(){ + },onClickRow:function(_87a,_87b){ + },onDblClickRow:function(_87c,_87d){ + },onClickCell:function(_87e,_87f,_880){ + },onDblClickCell:function(_881,_882,_883){ + },onBeforeSortColumn:function(sort,_884){ + },onSortColumn:function(sort,_885){ + },onResizeColumn:function(_886,_887){ + },onBeforeSelect:function(_888,_889){ + },onSelect:function(_88a,_88b){ + },onBeforeUnselect:function(_88c,_88d){ + },onUnselect:function(_88e,_88f){ + },onSelectAll:function(rows){ + },onUnselectAll:function(rows){ + },onBeforeCheck:function(_890,_891){ + },onCheck:function(_892,_893){ + },onBeforeUncheck:function(_894,_895){ + },onUncheck:function(_896,_897){ + },onCheckAll:function(rows){ + },onUncheckAll:function(rows){ + },onBeforeEdit:function(_898,_899){ + },onBeginEdit:function(_89a,_89b){ + },onEndEdit:function(_89c,_89d,_89e){ + },onAfterEdit:function(_89f,_8a0,_8a1){ + },onCancelEdit:function(_8a2,_8a3){ + },onHeaderContextMenu:function(e,_8a4){ + },onRowContextMenu:function(e,_8a5,_8a6){ + }}); +})(jQuery); +(function($){ + var _8a7; + $(document).unbind(".propertygrid").bind("mousedown.propertygrid",function(e){ + var p=$(e.target).closest("div.datagrid-view,div.combo-panel"); + if(p.length){ + return; + } + _8a8(_8a7); + _8a7=undefined; + }); + function _8a9(_8aa){ + var _8ab=$.data(_8aa,"propertygrid"); + var opts=$.data(_8aa,"propertygrid").options; + $(_8aa).datagrid($.extend({},opts,{cls:"propertygrid",view:(opts.showGroup?opts.groupView:opts.view),onBeforeEdit:function(_8ac,row){ + if(opts.onBeforeEdit.call(_8aa,_8ac,row)==false){ + return false; + } + var dg=$(this); + var row=dg.datagrid("getRows")[_8ac]; + var col=dg.datagrid("getColumnOption","value"); + col.editor=row.editor; + },onClickCell:function(_8ad,_8ae,_8af){ + if(_8a7!=this){ + _8a8(_8a7); + _8a7=this; + } + if(opts.editIndex!=_8ad){ + _8a8(_8a7); + $(this).datagrid("beginEdit",_8ad); + var ed=$(this).datagrid("getEditor",{index:_8ad,field:_8ae}); + if(!ed){ + ed=$(this).datagrid("getEditor",{index:_8ad,field:"value"}); + } + if(ed){ + var t=$(ed.target); + var _8b0=t.data("textbox")?t.textbox("textbox"):t; + _8b0.focus(); + opts.editIndex=_8ad; + } + } + opts.onClickCell.call(_8aa,_8ad,_8ae,_8af); + },loadFilter:function(data){ + _8a8(this); + return opts.loadFilter.call(this,data); + }})); + }; + function _8a8(_8b1){ + var t=$(_8b1); + if(!t.length){ + return; + } + var opts=$.data(_8b1,"propertygrid").options; + opts.finder.getTr(_8b1,null,"editing").each(function(){ + var _8b2=parseInt($(this).attr("datagrid-row-index")); + if(t.datagrid("validateRow",_8b2)){ + t.datagrid("endEdit",_8b2); + }else{ + t.datagrid("cancelEdit",_8b2); + } + }); + opts.editIndex=undefined; + }; + $.fn.propertygrid=function(_8b3,_8b4){ + if(typeof _8b3=="string"){ + var _8b5=$.fn.propertygrid.methods[_8b3]; + if(_8b5){ + return _8b5(this,_8b4); + }else{ + return this.datagrid(_8b3,_8b4); + } + } + _8b3=_8b3||{}; + return this.each(function(){ + var _8b6=$.data(this,"propertygrid"); + if(_8b6){ + $.extend(_8b6.options,_8b3); + }else{ + var opts=$.extend({},$.fn.propertygrid.defaults,$.fn.propertygrid.parseOptions(this),_8b3); + opts.frozenColumns=$.extend(true,[],opts.frozenColumns); + opts.columns=$.extend(true,[],opts.columns); + $.data(this,"propertygrid",{options:opts}); + } + _8a9(this); + }); + }; + $.fn.propertygrid.methods={options:function(jq){ + return $.data(jq[0],"propertygrid").options; + }}; + $.fn.propertygrid.parseOptions=function(_8b7){ + return $.extend({},$.fn.datagrid.parseOptions(_8b7),$.parser.parseOptions(_8b7,[{showGroup:"boolean"}])); + }; + var _8b8=$.extend({},$.fn.datagrid.defaults.view,{render:function(_8b9,_8ba,_8bb){ + var _8bc=[]; + var _8bd=this.groups; + for(var i=0;i<_8bd.length;i++){ + _8bc.push(this.renderGroup.call(this,_8b9,i,_8bd[i],_8bb)); + } + $(_8ba).html(_8bc.join("")); + },renderGroup:function(_8be,_8bf,_8c0,_8c1){ + var _8c2=$.data(_8be,"datagrid"); + var opts=_8c2.options; + var _8c3=$(_8be).datagrid("getColumnFields",_8c1); + var _8c4=[]; + _8c4.push("
        "); + if((_8c1&&(opts.rownumbers||opts.frozenColumns.length))||(!_8c1&&!(opts.rownumbers||opts.frozenColumns.length))){ + _8c4.push(""); + _8c4.push(" "); + _8c4.push(""); + } + if(!_8c1){ + _8c4.push(""); + _8c4.push(opts.groupFormatter.call(_8be,_8c0.value,_8c0.rows)); + _8c4.push(""); + } + _8c4.push("
        "); + _8c4.push(""); + var _8c5=_8c0.startIndex; + for(var j=0;j<_8c0.rows.length;j++){ + var css=opts.rowStyler?opts.rowStyler.call(_8be,_8c5,_8c0.rows[j]):""; + var _8c6=""; + var _8c7=""; + if(typeof css=="string"){ + _8c7=css; + }else{ + if(css){ + _8c6=css["class"]||""; + _8c7=css["style"]||""; + } + } + var cls="class=\"datagrid-row "+(_8c5%2&&opts.striped?"datagrid-row-alt ":" ")+_8c6+"\""; + var _8c8=_8c7?"style=\""+_8c7+"\"":""; + var _8c9=_8c2.rowIdPrefix+"-"+(_8c1?1:2)+"-"+_8c5; + _8c4.push(""); + _8c4.push(this.renderRow.call(this,_8be,_8c3,_8c1,_8c5,_8c0.rows[j])); + _8c4.push(""); + _8c5++; + } + _8c4.push("
        "); + return _8c4.join(""); + },bindEvents:function(_8ca){ + var _8cb=$.data(_8ca,"datagrid"); + var dc=_8cb.dc; + var body=dc.body1.add(dc.body2); + var _8cc=($.data(body[0],"events")||$._data(body[0],"events")).click[0].handler; + body.unbind("click").bind("click",function(e){ + var tt=$(e.target); + var _8cd=tt.closest("span.datagrid-row-expander"); + if(_8cd.length){ + var _8ce=_8cd.closest("div.datagrid-group").attr("group-index"); + if(_8cd.hasClass("datagrid-row-collapse")){ + $(_8ca).datagrid("collapseGroup",_8ce); + }else{ + $(_8ca).datagrid("expandGroup",_8ce); + } + }else{ + _8cc(e); + } + e.stopPropagation(); + }); + },onBeforeRender:function(_8cf,rows){ + var _8d0=$.data(_8cf,"datagrid"); + var opts=_8d0.options; + _8d1(); + var _8d2=[]; + for(var i=0;i"+".datagrid-group{height:"+opts.groupHeight+"px;overflow:hidden;font-weight:bold;border-bottom:1px solid #ccc;}"+".datagrid-group-title,.datagrid-group-expander{display:inline-block;vertical-align:bottom;height:100%;line-height:"+opts.groupHeight+"px;padding:0 4px;}"+".datagrid-group-expander{width:"+opts.expanderWidth+"px;text-align:center;padding:0}"+".datagrid-row-expander{margin:"+Math.floor((opts.groupHeight-16)/2)+"px 0;display:inline-block;width:16px;height:16px;cursor:pointer}"+""); + } + }; + }}); + $.extend($.fn.datagrid.methods,{groups:function(jq){ + return jq.datagrid("options").view.groups; + },expandGroup:function(jq,_8d9){ + return jq.each(function(){ + var view=$.data(this,"datagrid").dc.view; + var _8da=view.find(_8d9!=undefined?"div.datagrid-group[group-index=\""+_8d9+"\"]":"div.datagrid-group"); + var _8db=_8da.find("span.datagrid-row-expander"); + if(_8db.hasClass("datagrid-row-expand")){ + _8db.removeClass("datagrid-row-expand").addClass("datagrid-row-collapse"); + _8da.next("table").show(); + } + $(this).datagrid("fixRowHeight"); + }); + },collapseGroup:function(jq,_8dc){ + return jq.each(function(){ + var view=$.data(this,"datagrid").dc.view; + var _8dd=view.find(_8dc!=undefined?"div.datagrid-group[group-index=\""+_8dc+"\"]":"div.datagrid-group"); + var _8de=_8dd.find("span.datagrid-row-expander"); + if(_8de.hasClass("datagrid-row-collapse")){ + _8de.removeClass("datagrid-row-collapse").addClass("datagrid-row-expand"); + _8dd.next("table").hide(); + } + $(this).datagrid("fixRowHeight"); + }); + }}); + $.extend(_8b8,{refreshGroupTitle:function(_8df,_8e0){ + var _8e1=$.data(_8df,"datagrid"); + var opts=_8e1.options; + var dc=_8e1.dc; + var _8e2=this.groups[_8e0]; + var span=dc.body2.children("div.datagrid-group[group-index="+_8e0+"]").find("span.datagrid-group-title"); + span.html(opts.groupFormatter.call(_8df,_8e2.value,_8e2.rows)); + },insertRow:function(_8e3,_8e4,row){ + var _8e5=$.data(_8e3,"datagrid"); + var opts=_8e5.options; + var dc=_8e5.dc; + var _8e6=null; + var _8e7; + if(!_8e5.data.rows.length){ + $(_8e3).datagrid("loadData",[row]); + return; + } + for(var i=0;i_8e6.startIndex+_8e6.rows.length){ + _8e4=_8e6.startIndex+_8e6.rows.length; + } + } + $.fn.datagrid.defaults.view.insertRow.call(this,_8e3,_8e4,row); + if(_8e4>=_8e6.startIndex+_8e6.rows.length){ + _8e8(_8e4,true); + _8e8(_8e4,false); + } + _8e6.rows.splice(_8e4-_8e6.startIndex,0,row); + }else{ + _8e6={value:row[opts.groupField],rows:[row],startIndex:_8e5.data.rows.length}; + _8e7=this.groups.length; + dc.body1.append(this.renderGroup.call(this,_8e3,_8e7,_8e6,true)); + dc.body2.append(this.renderGroup.call(this,_8e3,_8e7,_8e6,false)); + this.groups.push(_8e6); + _8e5.data.rows.push(row); + } + this.refreshGroupTitle(_8e3,_8e7); + function _8e8(_8e9,_8ea){ + var _8eb=_8ea?1:2; + var _8ec=opts.finder.getTr(_8e3,_8e9-1,"body",_8eb); + var tr=opts.finder.getTr(_8e3,_8e9,"body",_8eb); + tr.insertAfter(_8ec); + }; + },updateRow:function(_8ed,_8ee,row){ + var opts=$.data(_8ed,"datagrid").options; + $.fn.datagrid.defaults.view.updateRow.call(this,_8ed,_8ee,row); + var tb=opts.finder.getTr(_8ed,_8ee,"body",2).closest("table.datagrid-btable"); + var _8ef=parseInt(tb.prev().attr("group-index")); + this.refreshGroupTitle(_8ed,_8ef); + },deleteRow:function(_8f0,_8f1){ + var _8f2=$.data(_8f0,"datagrid"); + var opts=_8f2.options; + var dc=_8f2.dc; + var body=dc.body1.add(dc.body2); + var tb=opts.finder.getTr(_8f0,_8f1,"body",2).closest("table.datagrid-btable"); + var _8f3=parseInt(tb.prev().attr("group-index")); + $.fn.datagrid.defaults.view.deleteRow.call(this,_8f0,_8f1); + var _8f4=this.groups[_8f3]; + if(_8f4.rows.length>1){ + _8f4.rows.splice(_8f1-_8f4.startIndex,1); + this.refreshGroupTitle(_8f0,_8f3); + }else{ + body.children("div.datagrid-group[group-index="+_8f3+"]").remove(); + for(var i=_8f3+1;i").insertBefore(tr.find(".tree-title")); + } + if(row.checkState=="checked"){ + _918(_92c,_92d,true,true); + }else{ + if(row.checkState=="unchecked"){ + _918(_92c,_92d,false,true); + }else{ + var flag=_92a(row); + if(flag===0){ + _918(_92c,_92d,false,true); + }else{ + if(flag===1){ + _918(_92c,_92d,true,true); + } + } + } + } + }else{ + ck.remove(); + row.checkState=undefined; + row.checked=undefined; + _921(_92c,row); + } + }; + function _92e(_92f,_930){ + var opts=$.data(_92f,"treegrid").options; + var tr1=opts.finder.getTr(_92f,_930,"body",1); + var tr2=opts.finder.getTr(_92f,_930,"body",2); + var _931=$(_92f).datagrid("getColumnFields",true).length+(opts.rownumbers?1:0); + var _932=$(_92f).datagrid("getColumnFields",false).length; + _933(tr1,_931); + _933(tr2,_932); + function _933(tr,_934){ + $(""+""+"
        "+""+"").insertAfter(tr); + }; + }; + function _935(_936,_937,data,_938,_939){ + var _93a=$.data(_936,"treegrid"); + var opts=_93a.options; + var dc=_93a.dc; + data=opts.loadFilter.call(_936,data,_937); + var node=find(_936,_937); + if(node){ + var _93b=opts.finder.getTr(_936,_937,"body",1); + var _93c=opts.finder.getTr(_936,_937,"body",2); + var cc1=_93b.next("tr.treegrid-tr-tree").children("td").children("div"); + var cc2=_93c.next("tr.treegrid-tr-tree").children("td").children("div"); + if(!_938){ + node.children=[]; + } + }else{ + var cc1=dc.body1; + var cc2=dc.body2; + if(!_938){ + _93a.data=[]; + } + } + if(!_938){ + cc1.empty(); + cc2.empty(); + } + if(opts.view.onBeforeRender){ + opts.view.onBeforeRender.call(opts.view,_936,_937,data); + } + opts.view.render.call(opts.view,_936,cc1,true); + opts.view.render.call(opts.view,_936,cc2,false); + if(opts.showFooter){ + opts.view.renderFooter.call(opts.view,_936,dc.footer1,true); + opts.view.renderFooter.call(opts.view,_936,dc.footer2,false); + } + if(opts.view.onAfterRender){ + opts.view.onAfterRender.call(opts.view,_936); + } + if(!_937&&opts.pagination){ + var _93d=$.data(_936,"treegrid").total; + var _93e=$(_936).datagrid("getPager"); + if(_93e.pagination("options").total!=_93d){ + _93e.pagination({total:_93d}); + } + } + _907(_936); + _90f(_936); + $(_936).treegrid("showLines"); + $(_936).treegrid("setSelectionState"); + $(_936).treegrid("autoSizeColumn"); + if(!_939){ + opts.onLoadSuccess.call(_936,node,data); + } + }; + function _906(_93f,_940,_941,_942,_943){ + var opts=$.data(_93f,"treegrid").options; + var body=$(_93f).datagrid("getPanel").find("div.datagrid-body"); + if(_940==undefined&&opts.queryParams){ + opts.queryParams.id=undefined; + } + if(_941){ + opts.queryParams=_941; + } + var _944=$.extend({},opts.queryParams); + if(opts.pagination){ + $.extend(_944,{page:opts.pageNumber,rows:opts.pageSize}); + } + if(opts.sortName){ + $.extend(_944,{sort:opts.sortName,order:opts.sortOrder}); + } + var row=find(_93f,_940); + if(opts.onBeforeLoad.call(_93f,row,_944)==false){ + return; + } + var _945=body.find("tr[node-id=\""+_940+"\"] span.tree-folder"); + _945.addClass("tree-loading"); + $(_93f).treegrid("loading"); + var _946=opts.loader.call(_93f,_944,function(data){ + _945.removeClass("tree-loading"); + $(_93f).treegrid("loaded"); + _935(_93f,_940,data,_942); + if(_943){ + _943(); + } + },function(){ + _945.removeClass("tree-loading"); + $(_93f).treegrid("loaded"); + opts.onLoadError.apply(_93f,arguments); + if(_943){ + _943(); + } + }); + if(_946==false){ + _945.removeClass("tree-loading"); + $(_93f).treegrid("loaded"); + } + }; + function _947(_948){ + var _949=_94a(_948); + return _949.length?_949[0]:null; + }; + function _94a(_94b){ + return $.data(_94b,"treegrid").data; + }; + function _929(_94c,_94d){ + var row=find(_94c,_94d); + if(row._parentId){ + return find(_94c,row._parentId); + }else{ + return null; + } + }; + function _90b(_94e,_94f){ + var data=$.data(_94e,"treegrid").data; + if(_94f){ + var _950=find(_94e,_94f); + data=_950?(_950.children||[]):[]; + } + var _951=[]; + $.easyui.forEach(data,true,function(node){ + _951.push(node); + }); + return _951; + }; + function _952(_953,_954){ + var opts=$.data(_953,"treegrid").options; + var tr=opts.finder.getTr(_953,_954); + var node=tr.children("td[field=\""+opts.treeField+"\"]"); + return node.find("span.tree-indent,span.tree-hit").length; + }; + function find(_955,_956){ + var _957=$.data(_955,"treegrid"); + var opts=_957.options; + var _958=null; + $.easyui.forEach(_957.data,true,function(node){ + if(node[opts.idField]==_956){ + _958=node; + return false; + } + }); + return _958; + }; + function _959(_95a,_95b){ + var opts=$.data(_95a,"treegrid").options; + var row=find(_95a,_95b); + var tr=opts.finder.getTr(_95a,_95b); + var hit=tr.find("span.tree-hit"); + if(hit.length==0){ + return; + } + if(hit.hasClass("tree-collapsed")){ + return; + } + if(opts.onBeforeCollapse.call(_95a,row)==false){ + return; + } + hit.removeClass("tree-expanded tree-expanded-hover").addClass("tree-collapsed"); + hit.next().removeClass("tree-folder-open"); + row.state="closed"; + tr=tr.next("tr.treegrid-tr-tree"); + var cc=tr.children("td").children("div"); + if(opts.animate){ + cc.slideUp("normal",function(){ + $(_95a).treegrid("autoSizeColumn"); + _907(_95a,_95b); + opts.onCollapse.call(_95a,row); + }); + }else{ + cc.hide(); + $(_95a).treegrid("autoSizeColumn"); + _907(_95a,_95b); + opts.onCollapse.call(_95a,row); + } + }; + function _95c(_95d,_95e){ + var opts=$.data(_95d,"treegrid").options; + var tr=opts.finder.getTr(_95d,_95e); + var hit=tr.find("span.tree-hit"); + var row=find(_95d,_95e); + if(hit.length==0){ + return; + } + if(hit.hasClass("tree-expanded")){ + return; + } + if(opts.onBeforeExpand.call(_95d,row)==false){ + return; + } + hit.removeClass("tree-collapsed tree-collapsed-hover").addClass("tree-expanded"); + hit.next().addClass("tree-folder-open"); + var _95f=tr.next("tr.treegrid-tr-tree"); + if(_95f.length){ + var cc=_95f.children("td").children("div"); + _960(cc); + }else{ + _92e(_95d,row[opts.idField]); + var _95f=tr.next("tr.treegrid-tr-tree"); + var cc=_95f.children("td").children("div"); + cc.hide(); + var _961=$.extend({},opts.queryParams||{}); + _961.id=row[opts.idField]; + _906(_95d,row[opts.idField],_961,true,function(){ + if(cc.is(":empty")){ + _95f.remove(); + }else{ + _960(cc); + } + }); + } + function _960(cc){ + row.state="open"; + if(opts.animate){ + cc.slideDown("normal",function(){ + $(_95d).treegrid("autoSizeColumn"); + _907(_95d,_95e); + opts.onExpand.call(_95d,row); + }); + }else{ + cc.show(); + $(_95d).treegrid("autoSizeColumn"); + _907(_95d,_95e); + opts.onExpand.call(_95d,row); + } + }; + }; + function _917(_962,_963){ + var opts=$.data(_962,"treegrid").options; + var tr=opts.finder.getTr(_962,_963); + var hit=tr.find("span.tree-hit"); + if(hit.hasClass("tree-expanded")){ + _959(_962,_963); + }else{ + _95c(_962,_963); + } + }; + function _964(_965,_966){ + var opts=$.data(_965,"treegrid").options; + var _967=_90b(_965,_966); + if(_966){ + _967.unshift(find(_965,_966)); + } + for(var i=0;i<_967.length;i++){ + _959(_965,_967[i][opts.idField]); + } + }; + function _968(_969,_96a){ + var opts=$.data(_969,"treegrid").options; + var _96b=_90b(_969,_96a); + if(_96a){ + _96b.unshift(find(_969,_96a)); + } + for(var i=0;i<_96b.length;i++){ + _95c(_969,_96b[i][opts.idField]); + } + }; + function _96c(_96d,_96e){ + var opts=$.data(_96d,"treegrid").options; + var ids=[]; + var p=_929(_96d,_96e); + while(p){ + var id=p[opts.idField]; + ids.unshift(id); + p=_929(_96d,id); + } + for(var i=0;i").insertBefore(_973); + if(hit.prev().length){ + hit.prev().remove(); + } + } + } + _935(_970,_971.parent,_971.data,_972.data.length>0,true); + }; + function _974(_975,_976){ + var ref=_976.before||_976.after; + var opts=$.data(_975,"treegrid").options; + var _977=_929(_975,ref); + _96f(_975,{parent:(_977?_977[opts.idField]:null),data:[_976.data]}); + var _978=_977?_977.children:$(_975).treegrid("getRoots"); + for(var i=0;i<_978.length;i++){ + if(_978[i][opts.idField]==ref){ + var _979=_978[_978.length-1]; + _978.splice(_976.before?i:(i+1),0,_979); + _978.splice(_978.length-1,1); + break; + } + } + _97a(true); + _97a(false); + _90f(_975); + $(_975).treegrid("showLines"); + function _97a(_97b){ + var _97c=_97b?1:2; + var tr=opts.finder.getTr(_975,_976.data[opts.idField],"body",_97c); + var _97d=tr.closest("table.datagrid-btable"); + tr=tr.parent().children(); + var dest=opts.finder.getTr(_975,ref,"body",_97c); + if(_976.before){ + tr.insertBefore(dest); + }else{ + var sub=dest.next("tr.treegrid-tr-tree"); + tr.insertAfter(sub.length?sub:dest); + } + _97d.remove(); + }; + }; + function _97e(_97f,_980){ + var _981=$.data(_97f,"treegrid"); + var opts=_981.options; + var prow=_929(_97f,_980); + $(_97f).datagrid("deleteRow",_980); + $.easyui.removeArrayItem(_981.checkedRows,opts.idField,_980); + _90f(_97f); + if(prow){ + _92b(_97f,prow[opts.idField]); + } + _981.total-=1; + $(_97f).datagrid("getPager").pagination("refresh",{total:_981.total}); + $(_97f).treegrid("showLines"); + }; + function _982(_983){ + var t=$(_983); + var opts=t.treegrid("options"); + if(opts.lines){ + t.treegrid("getPanel").addClass("tree-lines"); + }else{ + t.treegrid("getPanel").removeClass("tree-lines"); + return; + } + t.treegrid("getPanel").find("span.tree-indent").removeClass("tree-line tree-join tree-joinbottom"); + t.treegrid("getPanel").find("div.datagrid-cell").removeClass("tree-node-last tree-root-first tree-root-one"); + var _984=t.treegrid("getRoots"); + if(_984.length>1){ + _985(_984[0]).addClass("tree-root-first"); + }else{ + if(_984.length==1){ + _985(_984[0]).addClass("tree-root-one"); + } + } + _986(_984); + _987(_984); + function _986(_988){ + $.map(_988,function(node){ + if(node.children&&node.children.length){ + _986(node.children); + }else{ + var cell=_985(node); + cell.find(".tree-icon").prev().addClass("tree-join"); + } + }); + if(_988.length){ + var cell=_985(_988[_988.length-1]); + cell.addClass("tree-node-last"); + cell.find(".tree-join").removeClass("tree-join").addClass("tree-joinbottom"); + } + }; + function _987(_989){ + $.map(_989,function(node){ + if(node.children&&node.children.length){ + _987(node.children); + } + }); + for(var i=0;i<_989.length-1;i++){ + var node=_989[i]; + var _98a=t.treegrid("getLevel",node[opts.idField]); + var tr=opts.finder.getTr(_983,node[opts.idField]); + var cc=tr.next().find("tr.datagrid-row td[field=\""+opts.treeField+"\"] div.datagrid-cell"); + cc.find("span:eq("+(_98a-1)+")").addClass("tree-line"); + } + }; + function _985(node){ + var tr=opts.finder.getTr(_983,node[opts.idField]); + var cell=tr.find("td[field=\""+opts.treeField+"\"] div.datagrid-cell"); + return cell; + }; + }; + $.fn.treegrid=function(_98b,_98c){ + if(typeof _98b=="string"){ + var _98d=$.fn.treegrid.methods[_98b]; + if(_98d){ + return _98d(this,_98c); + }else{ + return this.datagrid(_98b,_98c); + } + } + _98b=_98b||{}; + return this.each(function(){ + var _98e=$.data(this,"treegrid"); + if(_98e){ + $.extend(_98e.options,_98b); + }else{ + _98e=$.data(this,"treegrid",{options:$.extend({},$.fn.treegrid.defaults,$.fn.treegrid.parseOptions(this),_98b),data:[],checkedRows:[],tmpIds:[]}); + } + _8f6(this); + if(_98e.options.data){ + $(this).treegrid("loadData",_98e.options.data); + } + _906(this); + }); + }; + $.fn.treegrid.methods={options:function(jq){ + return $.data(jq[0],"treegrid").options; + },resize:function(jq,_98f){ + return jq.each(function(){ + $(this).datagrid("resize",_98f); + }); + },fixRowHeight:function(jq,_990){ + return jq.each(function(){ + _907(this,_990); + }); + },loadData:function(jq,data){ + return jq.each(function(){ + _935(this,data.parent,data); + }); + },load:function(jq,_991){ + return jq.each(function(){ + $(this).treegrid("options").pageNumber=1; + $(this).treegrid("getPager").pagination({pageNumber:1}); + $(this).treegrid("reload",_991); + }); + },reload:function(jq,id){ + return jq.each(function(){ + var opts=$(this).treegrid("options"); + var _992={}; + if(typeof id=="object"){ + _992=id; + }else{ + _992=$.extend({},opts.queryParams); + _992.id=id; + } + if(_992.id){ + var node=$(this).treegrid("find",_992.id); + if(node.children){ + node.children.splice(0,node.children.length); + } + opts.queryParams=_992; + var tr=opts.finder.getTr(this,_992.id); + tr.next("tr.treegrid-tr-tree").remove(); + tr.find("span.tree-hit").removeClass("tree-expanded tree-expanded-hover").addClass("tree-collapsed"); + _95c(this,_992.id); + }else{ + _906(this,null,_992); + } + }); + },reloadFooter:function(jq,_993){ + return jq.each(function(){ + var opts=$.data(this,"treegrid").options; + var dc=$.data(this,"datagrid").dc; + if(_993){ + $.data(this,"treegrid").footer=_993; + } + if(opts.showFooter){ + opts.view.renderFooter.call(opts.view,this,dc.footer1,true); + opts.view.renderFooter.call(opts.view,this,dc.footer2,false); + if(opts.view.onAfterRender){ + opts.view.onAfterRender.call(opts.view,this); + } + $(this).treegrid("fixRowHeight"); + } + }); + },getData:function(jq){ + return $.data(jq[0],"treegrid").data; + },getFooterRows:function(jq){ + return $.data(jq[0],"treegrid").footer; + },getRoot:function(jq){ + return _947(jq[0]); + },getRoots:function(jq){ + return _94a(jq[0]); + },getParent:function(jq,id){ + return _929(jq[0],id); + },getChildren:function(jq,id){ + return _90b(jq[0],id); + },getLevel:function(jq,id){ + return _952(jq[0],id); + },find:function(jq,id){ + return find(jq[0],id); + },isLeaf:function(jq,id){ + var opts=$.data(jq[0],"treegrid").options; + var tr=opts.finder.getTr(jq[0],id); + var hit=tr.find("span.tree-hit"); + return hit.length==0; + },select:function(jq,id){ + return jq.each(function(){ + $(this).datagrid("selectRow",id); + }); + },unselect:function(jq,id){ + return jq.each(function(){ + $(this).datagrid("unselectRow",id); + }); + },collapse:function(jq,id){ + return jq.each(function(){ + _959(this,id); + }); + },expand:function(jq,id){ + return jq.each(function(){ + _95c(this,id); + }); + },toggle:function(jq,id){ + return jq.each(function(){ + _917(this,id); + }); + },collapseAll:function(jq,id){ + return jq.each(function(){ + _964(this,id); + }); + },expandAll:function(jq,id){ + return jq.each(function(){ + _968(this,id); + }); + },expandTo:function(jq,id){ + return jq.each(function(){ + _96c(this,id); + }); + },append:function(jq,_994){ + return jq.each(function(){ + _96f(this,_994); + }); + },insert:function(jq,_995){ + return jq.each(function(){ + _974(this,_995); + }); + },remove:function(jq,id){ + return jq.each(function(){ + _97e(this,id); + }); + },pop:function(jq,id){ + var row=jq.treegrid("find",id); + jq.treegrid("remove",id); + return row; + },refresh:function(jq,id){ + return jq.each(function(){ + var opts=$.data(this,"treegrid").options; + opts.view.refreshRow.call(opts.view,this,id); + }); + },update:function(jq,_996){ + return jq.each(function(){ + var opts=$.data(this,"treegrid").options; + var row=_996.row; + opts.view.updateRow.call(opts.view,this,_996.id,row); + if(row.checked!=undefined){ + row=find(this,_996.id); + $.extend(row,{checkState:row.checked?"checked":(row.checked===false?"unchecked":undefined)}); + _92b(this,_996.id); + } + }); + },beginEdit:function(jq,id){ + return jq.each(function(){ + $(this).datagrid("beginEdit",id); + $(this).treegrid("fixRowHeight",id); + }); + },endEdit:function(jq,id){ + return jq.each(function(){ + $(this).datagrid("endEdit",id); + }); + },cancelEdit:function(jq,id){ + return jq.each(function(){ + $(this).datagrid("cancelEdit",id); + }); + },showLines:function(jq){ + return jq.each(function(){ + _982(this); + }); + },setSelectionState:function(jq){ + return jq.each(function(){ + $(this).datagrid("setSelectionState"); + var _997=$(this).data("treegrid"); + for(var i=0;i<_997.tmpIds.length;i++){ + _918(this,_997.tmpIds[i],true,true); + } + _997.tmpIds=[]; + }); + },getCheckedNodes:function(jq,_998){ + _998=_998||"checked"; + var rows=[]; + $.easyui.forEach(jq.data("treegrid").checkedRows,false,function(row){ + if(row.checkState==_998){ + rows.push(row); + } + }); + return rows; + },checkNode:function(jq,id){ + return jq.each(function(){ + _918(this,id,true); + }); + },uncheckNode:function(jq,id){ + return jq.each(function(){ + _918(this,id,false); + }); + },clearChecked:function(jq){ + return jq.each(function(){ + var _999=this; + var opts=$(_999).treegrid("options"); + $(_999).datagrid("clearChecked"); + $.map($(_999).treegrid("getCheckedNodes"),function(row){ + _918(_999,row[opts.idField],false,true); + }); + }); + }}; + $.fn.treegrid.parseOptions=function(_99a){ + return $.extend({},$.fn.datagrid.parseOptions(_99a),$.parser.parseOptions(_99a,["treeField",{checkbox:"boolean",cascadeCheck:"boolean",onlyLeafCheck:"boolean"},{animate:"boolean"}])); + }; + var _99b=$.extend({},$.fn.datagrid.defaults.view,{render:function(_99c,_99d,_99e){ + var opts=$.data(_99c,"treegrid").options; + var _99f=$(_99c).datagrid("getColumnFields",_99e); + var _9a0=$.data(_99c,"datagrid").rowIdPrefix; + if(_99e){ + if(!(opts.rownumbers||(opts.frozenColumns&&opts.frozenColumns.length))){ + return; + } + } + var view=this; + if(this.treeNodes&&this.treeNodes.length){ + var _9a1=_9a2.call(this,_99e,this.treeLevel,this.treeNodes); + $(_99d).append(_9a1.join("")); + } + function _9a2(_9a3,_9a4,_9a5){ + var _9a6=$(_99c).treegrid("getParent",_9a5[0][opts.idField]); + var _9a7=(_9a6?_9a6.children.length:$(_99c).treegrid("getRoots").length)-_9a5.length; + var _9a8=[""]; + for(var i=0;i<_9a5.length;i++){ + var row=_9a5[i]; + if(row.state!="open"&&row.state!="closed"){ + row.state="open"; + } + var css=opts.rowStyler?opts.rowStyler.call(_99c,row):""; + var cs=this.getStyleValue(css); + var cls="class=\"datagrid-row "+(_9a7++%2&&opts.striped?"datagrid-row-alt ":" ")+cs.c+"\""; + var _9a9=cs.s?"style=\""+cs.s+"\"":""; + var _9aa=_9a0+"-"+(_9a3?1:2)+"-"+row[opts.idField]; + _9a8.push(""); + _9a8=_9a8.concat(view.renderRow.call(view,_99c,_99f,_9a3,_9a4,row)); + _9a8.push(""); + if(row.children&&row.children.length){ + var tt=_9a2.call(this,_9a3,_9a4+1,row.children); + var v=row.state=="closed"?"none":"block"; + _9a8.push(""); + } + } + _9a8.push("
        "); + _9a8=_9a8.concat(tt); + _9a8.push("
        "); + return _9a8; + }; + },renderFooter:function(_9ab,_9ac,_9ad){ + var opts=$.data(_9ab,"treegrid").options; + var rows=$.data(_9ab,"treegrid").footer||[]; + var _9ae=$(_9ab).datagrid("getColumnFields",_9ad); + var _9af=[""]; + for(var i=0;i"); + _9af.push(this.renderRow.call(this,_9ab,_9ae,_9ad,0,row)); + _9af.push(""); + } + _9af.push("
        "); + $(_9ac).html(_9af.join("")); + },renderRow:function(_9b0,_9b1,_9b2,_9b3,row){ + var _9b4=$.data(_9b0,"treegrid"); + var opts=_9b4.options; + var cc=[]; + if(_9b2&&opts.rownumbers){ + cc.push("
        0
        "); + } + for(var i=0;i<_9b1.length;i++){ + var _9b5=_9b1[i]; + var col=$(_9b0).datagrid("getColumnOption",_9b5); + if(col){ + var css=col.styler?(col.styler(row[_9b5],row)||""):""; + var cs=this.getStyleValue(css); + var cls=cs.c?"class=\""+cs.c+"\"":""; + var _9b6=col.hidden?"style=\"display:none;"+cs.s+"\"":(cs.s?"style=\""+cs.s+"\"":""); + cc.push(""); + var _9b6=""; + if(!col.checkbox){ + if(col.align){ + _9b6+="text-align:"+col.align+";"; + } + if(!opts.nowrap){ + _9b6+="white-space:normal;height:auto;"; + }else{ + if(opts.autoRowHeight){ + _9b6+="height:auto;"; + } + } + } + cc.push("
        "); + if(col.checkbox){ + if(row.checked){ + cc.push(""); + }else{ + var val=null; + if(col.formatter){ + val=col.formatter(row[_9b5],row); + }else{ + val=row[_9b5]; + } + if(_9b5==opts.treeField){ + for(var j=0;j<_9b3;j++){ + cc.push(""); + } + if(row.state=="closed"){ + cc.push(""); + cc.push(""); + }else{ + if(row.children&&row.children.length){ + cc.push(""); + cc.push(""); + }else{ + cc.push(""); + cc.push(""); + } + } + if(this.hasCheckbox(_9b0,row)){ + var flag=0; + var crow=$.easyui.getArrayItem(_9b4.checkedRows,opts.idField,row[opts.idField]); + if(crow){ + flag=crow.checkState=="checked"?1:2; + row.checkState=crow.checkState; + row.checked=crow.checked; + $.easyui.addArrayItem(_9b4.checkedRows,opts.idField,row); + }else{ + var prow=$.easyui.getArrayItem(_9b4.checkedRows,opts.idField,row._parentId); + if(prow&&prow.checkState=="checked"&&opts.cascadeCheck){ + flag=1; + row.checked=true; + $.easyui.addArrayItem(_9b4.checkedRows,opts.idField,row); + }else{ + if(row.checked){ + $.easyui.addArrayItem(_9b4.tmpIds,row[opts.idField]); + } + } + row.checkState=flag?"checked":"unchecked"; + } + cc.push(""); + }else{ + row.checkState=undefined; + row.checked=undefined; + } + cc.push(""+val+""); + }else{ + cc.push(val); + } + } + cc.push("
        "); + cc.push(""); + } + } + return cc.join(""); + },hasCheckbox:function(_9b7,row){ + var opts=$.data(_9b7,"treegrid").options; + if(opts.checkbox){ + if($.isFunction(opts.checkbox)){ + if(opts.checkbox.call(_9b7,row)){ + return true; + }else{ + return false; + } + }else{ + if(opts.onlyLeafCheck){ + if(row.state=="open"&&!(row.children&&row.children.length)){ + return true; + } + }else{ + return true; + } + } + } + return false; + },refreshRow:function(_9b8,id){ + this.updateRow.call(this,_9b8,id,{}); + },updateRow:function(_9b9,id,row){ + var opts=$.data(_9b9,"treegrid").options; + var _9ba=$(_9b9).treegrid("find",id); + $.extend(_9ba,row); + var _9bb=$(_9b9).treegrid("getLevel",id)-1; + var _9bc=opts.rowStyler?opts.rowStyler.call(_9b9,_9ba):""; + var _9bd=$.data(_9b9,"datagrid").rowIdPrefix; + var _9be=_9ba[opts.idField]; + function _9bf(_9c0){ + var _9c1=$(_9b9).treegrid("getColumnFields",_9c0); + var tr=opts.finder.getTr(_9b9,id,"body",(_9c0?1:2)); + var _9c2=tr.find("div.datagrid-cell-rownumber").html(); + var _9c3=tr.find("div.datagrid-cell-check input[type=checkbox]").is(":checked"); + tr.html(this.renderRow(_9b9,_9c1,_9c0,_9bb,_9ba)); + tr.attr("style",_9bc||""); + tr.find("div.datagrid-cell-rownumber").html(_9c2); + if(_9c3){ + tr.find("div.datagrid-cell-check input[type=checkbox]")._propAttr("checked",true); + } + if(_9be!=id){ + tr.attr("id",_9bd+"-"+(_9c0?1:2)+"-"+_9be); + tr.attr("node-id",_9be); + } + }; + _9bf.call(this,true); + _9bf.call(this,false); + $(_9b9).treegrid("fixRowHeight",id); + },deleteRow:function(_9c4,id){ + var opts=$.data(_9c4,"treegrid").options; + var tr=opts.finder.getTr(_9c4,id); + tr.next("tr.treegrid-tr-tree").remove(); + tr.remove(); + var _9c5=del(id); + if(_9c5){ + if(_9c5.children.length==0){ + tr=opts.finder.getTr(_9c4,_9c5[opts.idField]); + tr.next("tr.treegrid-tr-tree").remove(); + var cell=tr.children("td[field=\""+opts.treeField+"\"]").children("div.datagrid-cell"); + cell.find(".tree-icon").removeClass("tree-folder").addClass("tree-file"); + cell.find(".tree-hit").remove(); + $("").prependTo(cell); + } + } + this.setEmptyMsg(_9c4); + function del(id){ + var cc; + var _9c6=$(_9c4).treegrid("getParent",id); + if(_9c6){ + cc=_9c6.children; + }else{ + cc=$(_9c4).treegrid("getData"); + } + for(var i=0;ib?1:-1); + }; + r=_9d1(r1[sn],r2[sn])*(so=="asc"?1:-1); + if(r!=0){ + return r; + } + } + return r; + }); + for(var i=0;i"); + if(!_9f4){ + _9f7.push(""); + _9f7.push(opts.groupFormatter.call(_9f1,_9f3.value,_9f3.rows)); + _9f7.push(""); + } + _9f7.push("
        "); + _9f7.push(this.renderTable(_9f1,_9f3.startIndex,_9f3.rows,_9f4)); + return _9f7.join(""); + },groupRows:function(_9f8,rows){ + var _9f9=$.data(_9f8,"datagrid"); + var opts=_9f9.options; + var _9fa=[]; + for(var i=0;idiv.combo-p>div.combo-panel:visible").panel("close"); + }); + }); + function _a0a(_a0b){ + var _a0c=$.data(_a0b,"combo"); + var opts=_a0c.options; + if(!_a0c.panel){ + _a0c.panel=$("
        ").appendTo("body"); + _a0c.panel.panel({minWidth:opts.panelMinWidth,maxWidth:opts.panelMaxWidth,minHeight:opts.panelMinHeight,maxHeight:opts.panelMaxHeight,doSize:false,closed:true,cls:"combo-p",style:{position:"absolute",zIndex:10},onOpen:function(){ + var _a0d=$(this).panel("options").comboTarget; + var _a0e=$.data(_a0d,"combo"); + if(_a0e){ + _a0e.options.onShowPanel.call(_a0d); + } + },onBeforeClose:function(){ + _a09($(this).parent()); + },onClose:function(){ + var _a0f=$(this).panel("options").comboTarget; + var _a10=$(_a0f).data("combo"); + if(_a10){ + _a10.options.onHidePanel.call(_a0f); + } + }}); + } + var _a11=$.extend(true,[],opts.icons); + if(opts.hasDownArrow){ + _a11.push({iconCls:"combo-arrow",handler:function(e){ + _a15(e.data.target); + }}); + } + $(_a0b).addClass("combo-f").textbox($.extend({},opts,{icons:_a11,onChange:function(){ + }})); + $(_a0b).attr("comboName",$(_a0b).attr("textboxName")); + _a0c.combo=$(_a0b).next(); + _a0c.combo.addClass("combo"); + }; + function _a12(_a13){ + var _a14=$.data(_a13,"combo"); + var opts=_a14.options; + var p=_a14.panel; + if(p.is(":visible")){ + p.panel("close"); + } + if(!opts.cloned){ + p.panel("destroy"); + } + $(_a13).textbox("destroy"); + }; + function _a15(_a16){ + var _a17=$.data(_a16,"combo").panel; + if(_a17.is(":visible")){ + var _a18=_a17.combo("combo"); + _a19(_a18); + if(_a18!=_a16){ + $(_a16).combo("showPanel"); + } + }else{ + var p=$(_a16).closest("div.combo-p").children(".combo-panel"); + $("div.combo-panel:visible").not(_a17).not(p).panel("close"); + $(_a16).combo("showPanel"); + } + $(_a16).combo("textbox").focus(); + }; + function _a09(_a1a){ + $(_a1a).find(".combo-f").each(function(){ + var p=$(this).combo("panel"); + if(p.is(":visible")){ + p.panel("close"); + } + }); + }; + function _a1b(e){ + var _a1c=e.data.target; + var _a1d=$.data(_a1c,"combo"); + var opts=_a1d.options; + if(!opts.editable){ + _a15(_a1c); + }else{ + var p=$(_a1c).closest("div.combo-p").children(".combo-panel"); + $("div.combo-panel:visible").not(p).each(function(){ + var _a1e=$(this).combo("combo"); + if(_a1e!=_a1c){ + _a19(_a1e); + } + }); + } + }; + function _a1f(e){ + var _a20=e.data.target; + var t=$(_a20); + var _a21=t.data("combo"); + var opts=t.combo("options"); + _a21.panel.panel("options").comboTarget=_a20; + switch(e.keyCode){ + case 38: + opts.keyHandler.up.call(_a20,e); + break; + case 40: + opts.keyHandler.down.call(_a20,e); + break; + case 37: + opts.keyHandler.left.call(_a20,e); + break; + case 39: + opts.keyHandler.right.call(_a20,e); + break; + case 13: + e.preventDefault(); + opts.keyHandler.enter.call(_a20,e); + return false; + case 9: + case 27: + _a19(_a20); + break; + default: + if(opts.editable){ + if(_a21.timer){ + clearTimeout(_a21.timer); + } + _a21.timer=setTimeout(function(){ + var q=t.combo("getText"); + if(_a21.previousText!=q){ + _a21.previousText=q; + t.combo("showPanel"); + opts.keyHandler.query.call(_a20,q,e); + t.combo("validate"); + } + },opts.delay); + } + } + }; + function _a22(_a23){ + var _a24=$.data(_a23,"combo"); + var _a25=_a24.combo; + var _a26=_a24.panel; + var opts=$(_a23).combo("options"); + var _a27=_a26.panel("options"); + _a27.comboTarget=_a23; + if(_a27.closed){ + _a26.panel("panel").show().css({zIndex:($.fn.menu?$.fn.menu.defaults.zIndex++:($.fn.window?$.fn.window.defaults.zIndex++:99)),left:-999999}); + _a26.panel("resize",{width:(opts.panelWidth?opts.panelWidth:_a25._outerWidth()),height:opts.panelHeight}); + _a26.panel("panel").hide(); + _a26.panel("open"); + } + (function(){ + if(_a27.comboTarget==_a23&&_a26.is(":visible")){ + _a26.panel("move",{left:_a28(),top:_a29()}); + setTimeout(arguments.callee,200); + } + })(); + function _a28(){ + var left=_a25.offset().left; + if(opts.panelAlign=="right"){ + left+=_a25._outerWidth()-_a26._outerWidth(); + } + if(left+_a26._outerWidth()>$(window)._outerWidth()+$(document).scrollLeft()){ + left=$(window)._outerWidth()+$(document).scrollLeft()-_a26._outerWidth(); + } + if(left<0){ + left=0; + } + return left; + }; + function _a29(){ + var top=_a25.offset().top+_a25._outerHeight(); + if(top+_a26._outerHeight()>$(window)._outerHeight()+$(document).scrollTop()){ + top=_a25.offset().top-_a26._outerHeight(); + } + if(top<$(document).scrollTop()){ + top=_a25.offset().top+_a25._outerHeight(); + } + return top; + }; + }; + function _a19(_a2a){ + var _a2b=$.data(_a2a,"combo").panel; + _a2b.panel("close"); + }; + function _a2c(_a2d,text){ + var _a2e=$.data(_a2d,"combo"); + var _a2f=$(_a2d).textbox("getText"); + if(_a2f!=text){ + $(_a2d).textbox("setText",text); + } + _a2e.previousText=text; + }; + function _a30(_a31){ + var _a32=$.data(_a31,"combo"); + var opts=_a32.options; + var _a33=$(_a31).next(); + var _a34=[]; + _a33.find(".textbox-value").each(function(){ + _a34.push($(this).val()); + }); + if(opts.multivalue){ + return _a34; + }else{ + return _a34.length?_a34[0].split(opts.separator):_a34; + } + }; + function _a35(_a36,_a37){ + var _a38=$.data(_a36,"combo"); + var _a39=_a38.combo; + var opts=$(_a36).combo("options"); + if(!$.isArray(_a37)){ + _a37=_a37.split(opts.separator); + } + var _a3a=_a30(_a36); + _a39.find(".textbox-value").remove(); + if(_a37.length){ + if(opts.multivalue){ + for(var i=0;i<_a37.length;i++){ + _a3b(_a37[i]); + } + }else{ + _a3b(_a37.join(opts.separator)); + } + } + function _a3b(_a3c){ + var name=$(_a36).attr("textboxName")||""; + var _a3d=$("").appendTo(_a39); + _a3d.attr("name",name); + if(opts.disabled){ + _a3d.attr("disabled","disabled"); + } + _a3d.val(_a3c); + }; + var _a3e=(function(){ + if(_a3a.length!=_a37.length){ + return true; + } + for(var i=0;i<_a37.length;i++){ + if(_a37[i]!=_a3a[i]){ + return true; + } + } + return false; + })(); + if(_a3e){ + $(_a36).val(_a37.join(opts.separator)); + if(opts.multiple){ + opts.onChange.call(_a36,_a37,_a3a); + }else{ + opts.onChange.call(_a36,_a37[0],_a3a[0]); + } + $(_a36).closest("form").trigger("_change",[_a36]); + } + }; + function _a3f(_a40){ + var _a41=_a30(_a40); + return _a41[0]; + }; + function _a42(_a43,_a44){ + _a35(_a43,[_a44]); + }; + function _a45(_a46){ + var opts=$.data(_a46,"combo").options; + var _a47=opts.onChange; + opts.onChange=function(){ + }; + if(opts.multiple){ + _a35(_a46,opts.value?opts.value:[]); + }else{ + _a42(_a46,opts.value); + } + opts.onChange=_a47; + }; + $.fn.combo=function(_a48,_a49){ + if(typeof _a48=="string"){ + var _a4a=$.fn.combo.methods[_a48]; + if(_a4a){ + return _a4a(this,_a49); + }else{ + return this.textbox(_a48,_a49); + } + } + _a48=_a48||{}; + return this.each(function(){ + var _a4b=$.data(this,"combo"); + if(_a4b){ + $.extend(_a4b.options,_a48); + if(_a48.value!=undefined){ + _a4b.options.originalValue=_a48.value; + } + }else{ + _a4b=$.data(this,"combo",{options:$.extend({},$.fn.combo.defaults,$.fn.combo.parseOptions(this),_a48),previousText:""}); + if(_a4b.options.multiple&&_a4b.options.value==""){ + _a4b.options.originalValue=[]; + }else{ + _a4b.options.originalValue=_a4b.options.value; + } + } + _a0a(this); + _a45(this); + }); + }; + $.fn.combo.methods={options:function(jq){ + var opts=jq.textbox("options"); + return $.extend($.data(jq[0],"combo").options,{width:opts.width,height:opts.height,disabled:opts.disabled,readonly:opts.readonly}); + },cloneFrom:function(jq,from){ + return jq.each(function(){ + $(this).textbox("cloneFrom",from); + $.data(this,"combo",{options:$.extend(true,{cloned:true},$(from).combo("options")),combo:$(this).next(),panel:$(from).combo("panel")}); + $(this).addClass("combo-f").attr("comboName",$(this).attr("textboxName")); + }); + },combo:function(jq){ + return jq.closest(".combo-panel").panel("options").comboTarget; + },panel:function(jq){ + return $.data(jq[0],"combo").panel; + },destroy:function(jq){ + return jq.each(function(){ + _a12(this); + }); + },showPanel:function(jq){ + return jq.each(function(){ + _a22(this); + }); + },hidePanel:function(jq){ + return jq.each(function(){ + _a19(this); + }); + },clear:function(jq){ + return jq.each(function(){ + $(this).textbox("setText",""); + var opts=$.data(this,"combo").options; + if(opts.multiple){ + $(this).combo("setValues",[]); + }else{ + $(this).combo("setValue",""); + } + }); + },reset:function(jq){ + return jq.each(function(){ + var opts=$.data(this,"combo").options; + if(opts.multiple){ + $(this).combo("setValues",opts.originalValue); + }else{ + $(this).combo("setValue",opts.originalValue); + } + }); + },setText:function(jq,text){ + return jq.each(function(){ + _a2c(this,text); + }); + },getValues:function(jq){ + return _a30(jq[0]); + },setValues:function(jq,_a4c){ + return jq.each(function(){ + _a35(this,_a4c); + }); + },getValue:function(jq){ + return _a3f(jq[0]); + },setValue:function(jq,_a4d){ + return jq.each(function(){ + _a42(this,_a4d); + }); + }}; + $.fn.combo.parseOptions=function(_a4e){ + var t=$(_a4e); + return $.extend({},$.fn.textbox.parseOptions(_a4e),$.parser.parseOptions(_a4e,["separator","panelAlign",{panelWidth:"number",hasDownArrow:"boolean",delay:"number",reversed:"boolean",multivalue:"boolean",selectOnNavigation:"boolean"},{panelMinWidth:"number",panelMaxWidth:"number",panelMinHeight:"number",panelMaxHeight:"number"}]),{panelHeight:(t.attr("panelHeight")=="auto"?"auto":parseInt(t.attr("panelHeight"))||undefined),multiple:(t.attr("multiple")?true:undefined)}); + }; + $.fn.combo.defaults=$.extend({},$.fn.textbox.defaults,{inputEvents:{click:_a1b,keyup:_a1f,paste:_a1f,drop:_a1f},panelWidth:null,panelHeight:200,panelMinWidth:null,panelMaxWidth:null,panelMinHeight:null,panelMaxHeight:null,panelAlign:"left",reversed:false,multiple:false,multivalue:true,selectOnNavigation:true,separator:",",hasDownArrow:true,delay:200,keyHandler:{up:function(e){ + },down:function(e){ + },left:function(e){ + },right:function(e){ + },enter:function(e){ + },query:function(q,e){ + }},onShowPanel:function(){ + },onHidePanel:function(){ + },onChange:function(_a4f,_a50){ + }}); +})(jQuery); +(function($){ + function _a51(_a52,_a53){ + var _a54=$.data(_a52,"combobox"); + return $.easyui.indexOfArray(_a54.data,_a54.options.valueField,_a53); + }; + function _a55(_a56,_a57){ + var opts=$.data(_a56,"combobox").options; + var _a58=$(_a56).combo("panel"); + var item=opts.finder.getEl(_a56,_a57); + if(item.length){ + if(item.position().top<=0){ + var h=_a58.scrollTop()+item.position().top; + _a58.scrollTop(h); + }else{ + if(item.position().top+item.outerHeight()>_a58.height()){ + var h=_a58.scrollTop()+item.position().top+item.outerHeight()-_a58.height(); + _a58.scrollTop(h); + } + } + } + _a58.triggerHandler("scroll"); + }; + function nav(_a59,dir){ + var opts=$.data(_a59,"combobox").options; + var _a5a=$(_a59).combobox("panel"); + var item=_a5a.children("div.combobox-item-hover"); + if(!item.length){ + item=_a5a.children("div.combobox-item-selected"); + } + item.removeClass("combobox-item-hover"); + var _a5b="div.combobox-item:visible:not(.combobox-item-disabled):first"; + var _a5c="div.combobox-item:visible:not(.combobox-item-disabled):last"; + if(!item.length){ + item=_a5a.children(dir=="next"?_a5b:_a5c); + }else{ + if(dir=="next"){ + item=item.nextAll(_a5b); + if(!item.length){ + item=_a5a.children(_a5b); + } + }else{ + item=item.prevAll(_a5b); + if(!item.length){ + item=_a5a.children(_a5c); + } + } + } + if(item.length){ + item.addClass("combobox-item-hover"); + var row=opts.finder.getRow(_a59,item); + if(row){ + $(_a59).combobox("scrollTo",row[opts.valueField]); + if(opts.selectOnNavigation){ + _a5d(_a59,row[opts.valueField]); + } + } + } + }; + function _a5d(_a5e,_a5f,_a60){ + var opts=$.data(_a5e,"combobox").options; + var _a61=$(_a5e).combo("getValues"); + if($.inArray(_a5f+"",_a61)==-1){ + if(opts.multiple){ + _a61.push(_a5f); + }else{ + _a61=[_a5f]; + } + _a62(_a5e,_a61,_a60); + } + }; + function _a63(_a64,_a65){ + var opts=$.data(_a64,"combobox").options; + var _a66=$(_a64).combo("getValues"); + var _a67=$.inArray(_a65+"",_a66); + if(_a67>=0){ + _a66.splice(_a67,1); + _a62(_a64,_a66); + } + }; + function _a62(_a68,_a69,_a6a){ + var opts=$.data(_a68,"combobox").options; + var _a6b=$(_a68).combo("panel"); + if(!$.isArray(_a69)){ + _a69=_a69.split(opts.separator); + } + if(!opts.multiple){ + _a69=_a69.length?[_a69[0]]:[""]; + } + var _a6c=$(_a68).combo("getValues"); + if(_a6b.is(":visible")){ + _a6b.find(".combobox-item-selected").each(function(){ + var row=opts.finder.getRow(_a68,$(this)); + if(row){ + if($.easyui.indexOfArray(_a6c,row[opts.valueField])==-1){ + $(this).removeClass("combobox-item-selected"); + } + } + }); + } + $.map(_a6c,function(v){ + if($.easyui.indexOfArray(_a69,v)==-1){ + var el=opts.finder.getEl(_a68,v); + if(el.hasClass("combobox-item-selected")){ + el.removeClass("combobox-item-selected"); + opts.onUnselect.call(_a68,opts.finder.getRow(_a68,v)); + } + } + }); + var _a6d=null; + var vv=[],ss=[]; + for(var i=0;i<_a69.length;i++){ + var v=_a69[i]; + var s=v; + var row=opts.finder.getRow(_a68,v); + if(row){ + s=row[opts.textField]; + _a6d=row; + var el=opts.finder.getEl(_a68,v); + if(!el.hasClass("combobox-item-selected")){ + el.addClass("combobox-item-selected"); + opts.onSelect.call(_a68,row); + } + } + vv.push(v); + ss.push(s); + } + if(!_a6a){ + $(_a68).combo("setText",ss.join(opts.separator)); + } + if(opts.showItemIcon){ + var tb=$(_a68).combobox("textbox"); + tb.removeClass("textbox-bgicon "+opts.textboxIconCls); + if(_a6d&&_a6d.iconCls){ + tb.addClass("textbox-bgicon "+_a6d.iconCls); + opts.textboxIconCls=_a6d.iconCls; + } + } + $(_a68).combo("setValues",vv); + _a6b.triggerHandler("scroll"); + }; + function _a6e(_a6f,data,_a70){ + var _a71=$.data(_a6f,"combobox"); + var opts=_a71.options; + _a71.data=opts.loadFilter.call(_a6f,data); + opts.view.render.call(opts.view,_a6f,$(_a6f).combo("panel"),_a71.data); + var vv=$(_a6f).combobox("getValues"); + $.easyui.forEach(_a71.data,false,function(row){ + if(row["selected"]){ + $.easyui.addArrayItem(vv,row[opts.valueField]+""); + } + }); + if(opts.multiple){ + _a62(_a6f,vv,_a70); + }else{ + _a62(_a6f,vv.length?[vv[vv.length-1]]:[],_a70); + } + opts.onLoadSuccess.call(_a6f,data); + }; + function _a72(_a73,url,_a74,_a75){ + var opts=$.data(_a73,"combobox").options; + if(url){ + opts.url=url; + } + _a74=$.extend({},opts.queryParams,_a74||{}); + if(opts.onBeforeLoad.call(_a73,_a74)==false){ + return; + } + opts.loader.call(_a73,_a74,function(data){ + _a6e(_a73,data,_a75); + },function(){ + opts.onLoadError.apply(this,arguments); + }); + }; + function _a76(_a77,q){ + var _a78=$.data(_a77,"combobox"); + var opts=_a78.options; + var _a79=$(); + var qq=opts.multiple?q.split(opts.separator):[q]; + if(opts.mode=="remote"){ + _a7a(qq); + _a72(_a77,null,{q:q},true); + }else{ + var _a7b=$(_a77).combo("panel"); + _a7b.find(".combobox-item-hover").removeClass("combobox-item-hover"); + _a7b.find(".combobox-item,.combobox-group").hide(); + var data=_a78.data; + var vv=[]; + $.map(qq,function(q){ + q=$.trim(q); + var _a7c=q; + var _a7d=undefined; + _a79=$(); + for(var i=0;i=0){ + vv.push(v); + } + }); + t.combobox("setValues",vv); + if(!opts.multiple){ + t.combobox("hidePanel"); + } + }; + function _a82(_a83){ + var _a84=$.data(_a83,"combobox"); + var opts=_a84.options; + $(_a83).addClass("combobox-f"); + $(_a83).combo($.extend({},opts,{onShowPanel:function(){ + $(this).combo("panel").find("div.combobox-item:hidden,div.combobox-group:hidden").show(); + _a62(this,$(this).combobox("getValues"),true); + $(this).combobox("scrollTo",$(this).combobox("getValue")); + opts.onShowPanel.call(this); + }})); + var p=$(_a83).combo("panel"); + p.unbind(".combobox"); + for(var _a85 in opts.panelEvents){ + p.bind(_a85+".combobox",{target:_a83},opts.panelEvents[_a85]); + } + }; + function _a86(e){ + $(this).children("div.combobox-item-hover").removeClass("combobox-item-hover"); + var item=$(e.target).closest("div.combobox-item"); + if(!item.hasClass("combobox-item-disabled")){ + item.addClass("combobox-item-hover"); + } + e.stopPropagation(); + }; + function _a87(e){ + $(e.target).closest("div.combobox-item").removeClass("combobox-item-hover"); + e.stopPropagation(); + }; + function _a88(e){ + var _a89=$(this).panel("options").comboTarget; + if(!_a89){ + return; + } + var opts=$(_a89).combobox("options"); + var item=$(e.target).closest("div.combobox-item"); + if(!item.length||item.hasClass("combobox-item-disabled")){ + return; + } + var row=opts.finder.getRow(_a89,item); + if(!row){ + return; + } + if(opts.blurTimer){ + clearTimeout(opts.blurTimer); + opts.blurTimer=null; + } + opts.onClick.call(_a89,row); + var _a8a=row[opts.valueField]; + if(opts.multiple){ + if(item.hasClass("combobox-item-selected")){ + _a63(_a89,_a8a); + }else{ + _a5d(_a89,_a8a); + } + }else{ + $(_a89).combobox("setValue",_a8a).combobox("hidePanel"); + } + e.stopPropagation(); + }; + function _a8b(e){ + var _a8c=$(this).panel("options").comboTarget; + if(!_a8c){ + return; + } + var opts=$(_a8c).combobox("options"); + if(opts.groupPosition=="sticky"){ + var _a8d=$(this).children(".combobox-stick"); + if(!_a8d.length){ + _a8d=$("
        ").appendTo(this); + } + _a8d.hide(); + var _a8e=$(_a8c).data("combobox"); + $(this).children(".combobox-group:visible").each(function(){ + var g=$(this); + var _a8f=opts.finder.getGroup(_a8c,g); + var _a90=_a8e.data[_a8f.startIndex+_a8f.count-1]; + var last=opts.finder.getEl(_a8c,_a90[opts.valueField]); + if(g.position().top<0&&last.position().top>0){ + _a8d.show().html(g.html()); + return false; + } + }); + } + }; + $.fn.combobox=function(_a91,_a92){ + if(typeof _a91=="string"){ + var _a93=$.fn.combobox.methods[_a91]; + if(_a93){ + return _a93(this,_a92); + }else{ + return this.combo(_a91,_a92); + } + } + _a91=_a91||{}; + return this.each(function(){ + var _a94=$.data(this,"combobox"); + if(_a94){ + $.extend(_a94.options,_a91); + }else{ + _a94=$.data(this,"combobox",{options:$.extend({},$.fn.combobox.defaults,$.fn.combobox.parseOptions(this),_a91),data:[]}); + } + _a82(this); + if(_a94.options.data){ + _a6e(this,_a94.options.data); + }else{ + var data=$.fn.combobox.parseData(this); + if(data.length){ + _a6e(this,data); + } + } + _a72(this); + }); + }; + $.fn.combobox.methods={options:function(jq){ + var _a95=jq.combo("options"); + return $.extend($.data(jq[0],"combobox").options,{width:_a95.width,height:_a95.height,originalValue:_a95.originalValue,disabled:_a95.disabled,readonly:_a95.readonly}); + },cloneFrom:function(jq,from){ + return jq.each(function(){ + $(this).combo("cloneFrom",from); + $.data(this,"combobox",$(from).data("combobox")); + $(this).addClass("combobox-f").attr("comboboxName",$(this).attr("textboxName")); + }); + },getData:function(jq){ + return $.data(jq[0],"combobox").data; + },setValues:function(jq,_a96){ + return jq.each(function(){ + _a62(this,_a96); + }); + },setValue:function(jq,_a97){ + return jq.each(function(){ + _a62(this,$.isArray(_a97)?_a97:[_a97]); + }); + },clear:function(jq){ + return jq.each(function(){ + _a62(this,[]); + }); + },reset:function(jq){ + return jq.each(function(){ + var opts=$(this).combobox("options"); + if(opts.multiple){ + $(this).combobox("setValues",opts.originalValue); + }else{ + $(this).combobox("setValue",opts.originalValue); + } + }); + },loadData:function(jq,data){ + return jq.each(function(){ + _a6e(this,data); + }); + },reload:function(jq,url){ + return jq.each(function(){ + if(typeof url=="string"){ + _a72(this,url); + }else{ + if(url){ + var opts=$(this).combobox("options"); + opts.queryParams=url; + } + _a72(this); + } + }); + },select:function(jq,_a98){ + return jq.each(function(){ + _a5d(this,_a98); + }); + },unselect:function(jq,_a99){ + return jq.each(function(){ + _a63(this,_a99); + }); + },scrollTo:function(jq,_a9a){ + return jq.each(function(){ + _a55(this,_a9a); + }); + }}; + $.fn.combobox.parseOptions=function(_a9b){ + var t=$(_a9b); + return $.extend({},$.fn.combo.parseOptions(_a9b),$.parser.parseOptions(_a9b,["valueField","textField","groupField","groupPosition","mode","method","url",{showItemIcon:"boolean",limitToList:"boolean"}])); + }; + $.fn.combobox.parseData=function(_a9c){ + var data=[]; + var opts=$(_a9c).combobox("options"); + $(_a9c).children().each(function(){ + if(this.tagName.toLowerCase()=="optgroup"){ + var _a9d=$(this).attr("label"); + $(this).children().each(function(){ + _a9e(this,_a9d); + }); + }else{ + _a9e(this); + } + }); + return data; + function _a9e(el,_a9f){ + var t=$(el); + var row={}; + row[opts.valueField]=t.attr("value")!=undefined?t.attr("value"):t.text(); + row[opts.textField]=t.text(); + row["iconCls"]=$.parser.parseOptions(el,["iconCls"]).iconCls; + row["selected"]=t.is(":selected"); + row["disabled"]=t.is(":disabled"); + if(_a9f){ + opts.groupField=opts.groupField||"group"; + row[opts.groupField]=_a9f; + } + data.push(row); + }; + }; + var _aa0=0; + var _aa1={render:function(_aa2,_aa3,data){ + var _aa4=$.data(_aa2,"combobox"); + var opts=_aa4.options; + _aa0++; + _aa4.itemIdPrefix="_easyui_combobox_i"+_aa0; + _aa4.groupIdPrefix="_easyui_combobox_g"+_aa0; + _aa4.groups=[]; + var dd=[]; + var _aa5=undefined; + for(var i=0;i"); + dd.push(opts.groupFormatter?opts.groupFormatter.call(_aa2,g):g); + dd.push("
        "); + }else{ + _aa4.groups[_aa4.groups.length-1].count++; + } + }else{ + _aa5=undefined; + } + var cls="combobox-item"+(row.disabled?" combobox-item-disabled":"")+(g?" combobox-gitem":""); + dd.push("
        "); + if(opts.showItemIcon&&row.iconCls){ + dd.push(""); + } + dd.push(opts.formatter?opts.formatter.call(_aa2,row):s); + dd.push("
        "); + } + $(_aa3).html(dd.join("")); + }}; + $.fn.combobox.defaults=$.extend({},$.fn.combo.defaults,{valueField:"value",textField:"text",groupPosition:"static",groupField:null,groupFormatter:function(_aa6){ + return _aa6; + },mode:"local",method:"post",url:null,data:null,queryParams:{},showItemIcon:false,limitToList:false,view:_aa1,keyHandler:{up:function(e){ + nav(this,"prev"); + e.preventDefault(); + },down:function(e){ + nav(this,"next"); + e.preventDefault(); + },left:function(e){ + },right:function(e){ + },enter:function(e){ + _a7e(this); + },query:function(q,e){ + _a76(this,q); + }},inputEvents:$.extend({},$.fn.combo.defaults.inputEvents,{blur:function(e){ + var _aa7=e.data.target; + var opts=$(_aa7).combobox("options"); + if(opts.reversed||opts.limitToList){ + if(opts.blurTimer){ + clearTimeout(opts.blurTimer); + } + opts.blurTimer=setTimeout(function(){ + var _aa8=$(_aa7).parent().length; + if(_aa8){ + if(opts.reversed){ + $(_aa7).combobox("setValues",$(_aa7).combobox("getValues")); + }else{ + if(opts.limitToList){ + var vv=[]; + $.map($(_aa7).combobox("getValues"),function(v){ + var _aa9=$.easyui.indexOfArray($(_aa7).combobox("getData"),opts.valueField,v); + if(_aa9>=0){ + vv.push(v); + } + }); + $(_aa7).combobox("setValues",vv); + } + } + opts.blurTimer=null; + } + },50); + } + }}),panelEvents:{mouseover:_a86,mouseout:_a87,click:_a88,scroll:_a8b},filter:function(q,row){ + var opts=$(this).combobox("options"); + return row[opts.textField].toLowerCase().indexOf(q.toLowerCase())>=0; + },formatter:function(row){ + var opts=$(this).combobox("options"); + return row[opts.textField]; + },loader:function(_aaa,_aab,_aac){ + var opts=$(this).combobox("options"); + if(!opts.url){ + return false; + } + $.ajax({type:opts.method,url:opts.url,data:_aaa,dataType:"json",success:function(data){ + _aab(data); + },error:function(){ + _aac.apply(this,arguments); + }}); + },loadFilter:function(data){ + return data; + },finder:{getEl:function(_aad,_aae){ + var _aaf=_a51(_aad,_aae); + var id=$.data(_aad,"combobox").itemIdPrefix+"_"+_aaf; + return $("#"+id); + },getGroupEl:function(_ab0,_ab1){ + var _ab2=$.data(_ab0,"combobox"); + var _ab3=$.easyui.indexOfArray(_ab2.groups,"value",_ab1); + var id=_ab2.groupIdPrefix+"_"+_ab3; + return $("#"+id); + },getGroup:function(_ab4,p){ + var _ab5=$.data(_ab4,"combobox"); + var _ab6=p.attr("id").substr(_ab5.groupIdPrefix.length+1); + return _ab5.groups[parseInt(_ab6)]; + },getRow:function(_ab7,p){ + var _ab8=$.data(_ab7,"combobox"); + var _ab9=(p instanceof $)?p.attr("id").substr(_ab8.itemIdPrefix.length+1):_a51(_ab7,p); + return _ab8.data[parseInt(_ab9)]; + }},onBeforeLoad:function(_aba){ + },onLoadSuccess:function(data){ + },onLoadError:function(){ + },onSelect:function(_abb){ + },onUnselect:function(_abc){ + },onClick:function(_abd){ + }}); +})(jQuery); +(function($){ + function _abe(_abf){ + var _ac0=$.data(_abf,"combotree"); + var opts=_ac0.options; + var tree=_ac0.tree; + $(_abf).addClass("combotree-f"); + $(_abf).combo($.extend({},opts,{onShowPanel:function(){ + if(opts.editable){ + tree.tree("doFilter",""); + } + opts.onShowPanel.call(this); + }})); + var _ac1=$(_abf).combo("panel"); + if(!tree){ + tree=$("
          ").appendTo(_ac1); + _ac0.tree=tree; + } + tree.tree($.extend({},opts,{checkbox:opts.multiple,onLoadSuccess:function(node,data){ + var _ac2=$(_abf).combotree("getValues"); + if(opts.multiple){ + $.map(tree.tree("getChecked"),function(node){ + $.easyui.addArrayItem(_ac2,node.id); + }); + } + _ac7(_abf,_ac2,_ac0.remainText); + opts.onLoadSuccess.call(this,node,data); + },onClick:function(node){ + if(opts.multiple){ + $(this).tree(node.checked?"uncheck":"check",node.target); + }else{ + $(_abf).combo("hidePanel"); + } + _ac0.remainText=false; + _ac4(_abf); + opts.onClick.call(this,node); + },onCheck:function(node,_ac3){ + _ac0.remainText=false; + _ac4(_abf); + opts.onCheck.call(this,node,_ac3); + }})); + }; + function _ac4(_ac5){ + var _ac6=$.data(_ac5,"combotree"); + var opts=_ac6.options; + var tree=_ac6.tree; + var vv=[]; + if(opts.multiple){ + vv=$.map(tree.tree("getChecked"),function(node){ + return node.id; + }); + }else{ + var node=tree.tree("getSelected"); + if(node){ + vv.push(node.id); + } + } + vv=vv.concat(opts.unselectedValues); + _ac7(_ac5,vv,_ac6.remainText); + }; + function _ac7(_ac8,_ac9,_aca){ + var _acb=$.data(_ac8,"combotree"); + var opts=_acb.options; + var tree=_acb.tree; + var _acc=tree.tree("options"); + var _acd=_acc.onBeforeCheck; + var _ace=_acc.onCheck; + var _acf=_acc.onSelect; + _acc.onBeforeCheck=_acc.onCheck=_acc.onSelect=function(){ + }; + if(!$.isArray(_ac9)){ + _ac9=_ac9.split(opts.separator); + } + if(!opts.multiple){ + _ac9=_ac9.length?[_ac9[0]]:[""]; + } + var vv=$.map(_ac9,function(_ad0){ + return String(_ad0); + }); + tree.find("div.tree-node-selected").removeClass("tree-node-selected"); + $.map(tree.tree("getChecked"),function(node){ + if($.inArray(String(node.id),vv)==-1){ + tree.tree("uncheck",node.target); + } + }); + var ss=[]; + opts.unselectedValues=[]; + $.map(vv,function(v){ + var node=tree.tree("find",v); + if(node){ + tree.tree("check",node.target).tree("select",node.target); + ss.push(_ad1(node)); + }else{ + ss.push(_ad2(v,opts.mappingRows)||v); + opts.unselectedValues.push(v); + } + }); + if(opts.multiple){ + $.map(tree.tree("getChecked"),function(node){ + var id=String(node.id); + if($.inArray(id,vv)==-1){ + vv.push(id); + ss.push(_ad1(node)); + } + }); + } + _acc.onBeforeCheck=_acd; + _acc.onCheck=_ace; + _acc.onSelect=_acf; + if(!_aca){ + var s=ss.join(opts.separator); + if($(_ac8).combo("getText")!=s){ + $(_ac8).combo("setText",s); + } + } + $(_ac8).combo("setValues",vv); + function _ad2(_ad3,a){ + var item=$.easyui.getArrayItem(a,"id",_ad3); + return item?_ad1(item):undefined; + }; + function _ad1(node){ + return node[opts.textField||""]||node.text; + }; + }; + function _ad4(_ad5,q){ + var _ad6=$.data(_ad5,"combotree"); + var opts=_ad6.options; + var tree=_ad6.tree; + _ad6.remainText=true; + tree.tree("doFilter",opts.multiple?q.split(opts.separator):q); + }; + function _ad7(_ad8){ + var _ad9=$.data(_ad8,"combotree"); + _ad9.remainText=false; + $(_ad8).combotree("setValues",$(_ad8).combotree("getValues")); + $(_ad8).combotree("hidePanel"); + }; + $.fn.combotree=function(_ada,_adb){ + if(typeof _ada=="string"){ + var _adc=$.fn.combotree.methods[_ada]; + if(_adc){ + return _adc(this,_adb); + }else{ + return this.combo(_ada,_adb); + } + } + _ada=_ada||{}; + return this.each(function(){ + var _add=$.data(this,"combotree"); + if(_add){ + $.extend(_add.options,_ada); + }else{ + $.data(this,"combotree",{options:$.extend({},$.fn.combotree.defaults,$.fn.combotree.parseOptions(this),_ada)}); + } + _abe(this); + }); + }; + $.fn.combotree.methods={options:function(jq){ + var _ade=jq.combo("options"); + return $.extend($.data(jq[0],"combotree").options,{width:_ade.width,height:_ade.height,originalValue:_ade.originalValue,disabled:_ade.disabled,readonly:_ade.readonly}); + },clone:function(jq,_adf){ + var t=jq.combo("clone",_adf); + t.data("combotree",{options:$.extend(true,{},jq.combotree("options")),tree:jq.combotree("tree")}); + return t; + },tree:function(jq){ + return $.data(jq[0],"combotree").tree; + },loadData:function(jq,data){ + return jq.each(function(){ + var opts=$.data(this,"combotree").options; + opts.data=data; + var tree=$.data(this,"combotree").tree; + tree.tree("loadData",data); + }); + },reload:function(jq,url){ + return jq.each(function(){ + var opts=$.data(this,"combotree").options; + var tree=$.data(this,"combotree").tree; + if(url){ + opts.url=url; + } + tree.tree({url:opts.url}); + }); + },setValues:function(jq,_ae0){ + return jq.each(function(){ + var opts=$(this).combotree("options"); + if($.isArray(_ae0)){ + _ae0=$.map(_ae0,function(_ae1){ + if(_ae1&&typeof _ae1=="object"){ + $.easyui.addArrayItem(opts.mappingRows,"id",_ae1); + return _ae1.id; + }else{ + return _ae1; + } + }); + } + _ac7(this,_ae0); + }); + },setValue:function(jq,_ae2){ + return jq.each(function(){ + $(this).combotree("setValues",$.isArray(_ae2)?_ae2:[_ae2]); + }); + },clear:function(jq){ + return jq.each(function(){ + $(this).combotree("setValues",[]); + }); + },reset:function(jq){ + return jq.each(function(){ + var opts=$(this).combotree("options"); + if(opts.multiple){ + $(this).combotree("setValues",opts.originalValue); + }else{ + $(this).combotree("setValue",opts.originalValue); + } + }); + }}; + $.fn.combotree.parseOptions=function(_ae3){ + return $.extend({},$.fn.combo.parseOptions(_ae3),$.fn.tree.parseOptions(_ae3)); + }; + $.fn.combotree.defaults=$.extend({},$.fn.combo.defaults,$.fn.tree.defaults,{editable:false,textField:null,unselectedValues:[],mappingRows:[],keyHandler:{up:function(e){ + },down:function(e){ + },left:function(e){ + },right:function(e){ + },enter:function(e){ + _ad7(this); + },query:function(q,e){ + _ad4(this,q); + }}}); +})(jQuery); +(function($){ + function _ae4(_ae5){ + var _ae6=$.data(_ae5,"combogrid"); + var opts=_ae6.options; + var grid=_ae6.grid; + $(_ae5).addClass("combogrid-f").combo($.extend({},opts,{onShowPanel:function(){ + _afb(this,$(this).combogrid("getValues"),true); + var p=$(this).combogrid("panel"); + var _ae7=p.outerHeight()-p.height(); + var _ae8=p._size("minHeight"); + var _ae9=p._size("maxHeight"); + var dg=$(this).combogrid("grid"); + dg.datagrid("resize",{width:"100%",height:(isNaN(parseInt(opts.panelHeight))?"auto":"100%"),minHeight:(_ae8?_ae8-_ae7:""),maxHeight:(_ae9?_ae9-_ae7:"")}); + var row=dg.datagrid("getSelected"); + if(row){ + dg.datagrid("scrollTo",dg.datagrid("getRowIndex",row)); + } + opts.onShowPanel.call(this); + }})); + var _aea=$(_ae5).combo("panel"); + if(!grid){ + grid=$("
          ").appendTo(_aea); + _ae6.grid=grid; + } + grid.datagrid($.extend({},opts,{border:false,singleSelect:(!opts.multiple),onLoadSuccess:_aeb,onClickRow:_aec,onSelect:_aed("onSelect"),onUnselect:_aed("onUnselect"),onSelectAll:_aed("onSelectAll"),onUnselectAll:_aed("onUnselectAll")})); + function _aee(dg){ + return $(dg).closest(".combo-panel").panel("options").comboTarget||_ae5; + }; + function _aeb(data){ + var _aef=_aee(this); + var _af0=$(_aef).data("combogrid"); + var opts=_af0.options; + var _af1=$(_aef).combo("getValues"); + _afb(_aef,_af1,_af0.remainText); + opts.onLoadSuccess.call(this,data); + }; + function _aec(_af2,row){ + var _af3=_aee(this); + var _af4=$(_af3).data("combogrid"); + var opts=_af4.options; + _af4.remainText=false; + _af5.call(this); + if(!opts.multiple){ + $(_af3).combo("hidePanel"); + } + opts.onClickRow.call(this,_af2,row); + }; + function _aed(_af6){ + return function(_af7,row){ + var _af8=_aee(this); + var opts=$(_af8).combogrid("options"); + if(_af6=="onUnselectAll"){ + if(opts.multiple){ + _af5.call(this); + } + }else{ + _af5.call(this); + } + opts[_af6].call(this,_af7,row); + }; + }; + function _af5(){ + var dg=$(this); + var _af9=_aee(dg); + var _afa=$(_af9).data("combogrid"); + var opts=_afa.options; + var vv=$.map(dg.datagrid("getSelections"),function(row){ + return row[opts.idField]; + }); + vv=vv.concat(opts.unselectedValues); + _afb(_af9,vv,_afa.remainText); + }; + }; + function nav(_afc,dir){ + var _afd=$.data(_afc,"combogrid"); + var opts=_afd.options; + var grid=_afd.grid; + var _afe=grid.datagrid("getRows").length; + if(!_afe){ + return; + } + var tr=opts.finder.getTr(grid[0],null,"highlight"); + if(!tr.length){ + tr=opts.finder.getTr(grid[0],null,"selected"); + } + var _aff; + if(!tr.length){ + _aff=(dir=="next"?0:_afe-1); + }else{ + var _aff=parseInt(tr.attr("datagrid-row-index")); + _aff+=(dir=="next"?1:-1); + if(_aff<0){ + _aff=_afe-1; + } + if(_aff>=_afe){ + _aff=0; + } + } + grid.datagrid("highlightRow",_aff); + if(opts.selectOnNavigation){ + _afd.remainText=false; + grid.datagrid("selectRow",_aff); + } + }; + function _afb(_b00,_b01,_b02){ + var _b03=$.data(_b00,"combogrid"); + var opts=_b03.options; + var grid=_b03.grid; + var _b04=$(_b00).combo("getValues"); + var _b05=$(_b00).combo("options"); + var _b06=_b05.onChange; + _b05.onChange=function(){ + }; + var _b07=grid.datagrid("options"); + var _b08=_b07.onSelect; + var _b09=_b07.onUnselectAll; + _b07.onSelect=_b07.onUnselectAll=function(){ + }; + if(!$.isArray(_b01)){ + _b01=_b01.split(opts.separator); + } + if(!opts.multiple){ + _b01=_b01.length?[_b01[0]]:[""]; + } + var vv=$.map(_b01,function(_b0a){ + return String(_b0a); + }); + vv=$.grep(vv,function(v,_b0b){ + return _b0b===$.inArray(v,vv); + }); + var _b0c=$.grep(grid.datagrid("getSelections"),function(row,_b0d){ + return $.inArray(String(row[opts.idField]),vv)>=0; + }); + grid.datagrid("clearSelections"); + grid.data("datagrid").selectedRows=_b0c; + var ss=[]; + opts.unselectedValues=[]; + $.map(vv,function(v){ + var _b0e=grid.datagrid("getRowIndex",v); + if(_b0e>=0){ + grid.datagrid("selectRow",_b0e); + }else{ + opts.unselectedValues.push(v); + } + ss.push(_b0f(v,grid.datagrid("getRows"))||_b0f(v,_b0c)||_b0f(v,opts.mappingRows)||v); + }); + $(_b00).combo("setValues",_b04); + _b05.onChange=_b06; + _b07.onSelect=_b08; + _b07.onUnselectAll=_b09; + if(!_b02){ + var s=ss.join(opts.separator); + if($(_b00).combo("getText")!=s){ + $(_b00).combo("setText",s); + } + } + $(_b00).combo("setValues",_b01); + function _b0f(_b10,a){ + var item=$.easyui.getArrayItem(a,opts.idField,_b10); + return item?item[opts.textField]:undefined; + }; + }; + function _b11(_b12,q){ + var _b13=$.data(_b12,"combogrid"); + var opts=_b13.options; + var grid=_b13.grid; + _b13.remainText=true; + var qq=opts.multiple?q.split(opts.separator):[q]; + qq=$.grep(qq,function(q){ + return $.trim(q)!=""; + }); + if(opts.mode=="remote"){ + _b14(qq); + grid.datagrid("load",$.extend({},opts.queryParams,{q:q})); + }else{ + grid.datagrid("highlightRow",-1); + var rows=grid.datagrid("getRows"); + var vv=[]; + $.map(qq,function(q){ + q=$.trim(q); + var _b15=q; + _b16(opts.mappingRows,q); + _b16(grid.datagrid("getSelections"),q); + var _b17=_b16(rows,q); + if(_b17>=0){ + if(opts.reversed){ + grid.datagrid("highlightRow",_b17); + } + }else{ + $.map(rows,function(row,i){ + if(opts.filter.call(_b12,q,row)){ + grid.datagrid("highlightRow",i); + } + }); + } + }); + _b14(vv); + } + function _b16(rows,q){ + for(var i=0;i=0){ + $.easyui.addArrayItem(vv,v); + } + }); + $(_b19).combogrid("setValues",vv); + if(!opts.multiple){ + $(_b19).combogrid("hidePanel"); + } + }; + $.fn.combogrid=function(_b1c,_b1d){ + if(typeof _b1c=="string"){ + var _b1e=$.fn.combogrid.methods[_b1c]; + if(_b1e){ + return _b1e(this,_b1d); + }else{ + return this.combo(_b1c,_b1d); + } + } + _b1c=_b1c||{}; + return this.each(function(){ + var _b1f=$.data(this,"combogrid"); + if(_b1f){ + $.extend(_b1f.options,_b1c); + }else{ + _b1f=$.data(this,"combogrid",{options:$.extend({},$.fn.combogrid.defaults,$.fn.combogrid.parseOptions(this),_b1c)}); + } + _ae4(this); + }); + }; + $.fn.combogrid.methods={options:function(jq){ + var _b20=jq.combo("options"); + return $.extend($.data(jq[0],"combogrid").options,{width:_b20.width,height:_b20.height,originalValue:_b20.originalValue,disabled:_b20.disabled,readonly:_b20.readonly}); + },cloneFrom:function(jq,from){ + return jq.each(function(){ + $(this).combo("cloneFrom",from); + $.data(this,"combogrid",{options:$.extend(true,{cloned:true},$(from).combogrid("options")),combo:$(this).next(),panel:$(from).combo("panel"),grid:$(from).combogrid("grid")}); + }); + },grid:function(jq){ + return $.data(jq[0],"combogrid").grid; + },setValues:function(jq,_b21){ + return jq.each(function(){ + var opts=$(this).combogrid("options"); + if($.isArray(_b21)){ + _b21=$.map(_b21,function(_b22){ + if(_b22&&typeof _b22=="object"){ + $.easyui.addArrayItem(opts.mappingRows,opts.idField,_b22); + return _b22[opts.idField]; + }else{ + return _b22; + } + }); + } + _afb(this,_b21); + }); + },setValue:function(jq,_b23){ + return jq.each(function(){ + $(this).combogrid("setValues",$.isArray(_b23)?_b23:[_b23]); + }); + },clear:function(jq){ + return jq.each(function(){ + $(this).combogrid("setValues",[]); + }); + },reset:function(jq){ + return jq.each(function(){ + var opts=$(this).combogrid("options"); + if(opts.multiple){ + $(this).combogrid("setValues",opts.originalValue); + }else{ + $(this).combogrid("setValue",opts.originalValue); + } + }); + }}; + $.fn.combogrid.parseOptions=function(_b24){ + var t=$(_b24); + return $.extend({},$.fn.combo.parseOptions(_b24),$.fn.datagrid.parseOptions(_b24),$.parser.parseOptions(_b24,["idField","textField","mode"])); + }; + $.fn.combogrid.defaults=$.extend({},$.fn.combo.defaults,$.fn.datagrid.defaults,{loadMsg:null,idField:null,textField:null,unselectedValues:[],mappingRows:[],mode:"local",keyHandler:{up:function(e){ + nav(this,"prev"); + e.preventDefault(); + },down:function(e){ + nav(this,"next"); + e.preventDefault(); + },left:function(e){ + },right:function(e){ + },enter:function(e){ + _b18(this); + },query:function(q,e){ + _b11(this,q); + }},inputEvents:$.extend({},$.fn.combo.defaults.inputEvents,{blur:function(e){ + var _b25=e.data.target; + var opts=$(_b25).combogrid("options"); + if(opts.reversed){ + $(_b25).combogrid("setValues",$(_b25).combogrid("getValues")); + } + }}),filter:function(q,row){ + var opts=$(this).combogrid("options"); + return (row[opts.textField]||"").toLowerCase().indexOf(q.toLowerCase())>=0; + }}); +})(jQuery); +(function($){ + function _b26(_b27){ + var _b28=$.data(_b27,"combotreegrid"); + var opts=_b28.options; + $(_b27).addClass("combotreegrid-f").combo($.extend({},opts,{onShowPanel:function(){ + var p=$(this).combotreegrid("panel"); + var _b29=p.outerHeight()-p.height(); + var _b2a=p._size("minHeight"); + var _b2b=p._size("maxHeight"); + var dg=$(this).combotreegrid("grid"); + dg.treegrid("resize",{width:"100%",height:(isNaN(parseInt(opts.panelHeight))?"auto":"100%"),minHeight:(_b2a?_b2a-_b29:""),maxHeight:(_b2b?_b2b-_b29:"")}); + var row=dg.treegrid("getSelected"); + if(row){ + dg.treegrid("scrollTo",row[opts.idField]); + } + opts.onShowPanel.call(this); + }})); + if(!_b28.grid){ + var _b2c=$(_b27).combo("panel"); + _b28.grid=$("
          ").appendTo(_b2c); + } + _b28.grid.treegrid($.extend({},opts,{border:false,checkbox:opts.multiple,onLoadSuccess:function(row,data){ + var _b2d=$(_b27).combotreegrid("getValues"); + if(opts.multiple){ + $.map($(this).treegrid("getCheckedNodes"),function(row){ + $.easyui.addArrayItem(_b2d,row[opts.idField]); + }); + } + _b32(_b27,_b2d); + opts.onLoadSuccess.call(this,row,data); + _b28.remainText=false; + },onClickRow:function(row){ + if(opts.multiple){ + $(this).treegrid(row.checked?"uncheckNode":"checkNode",row[opts.idField]); + $(this).treegrid("unselect",row[opts.idField]); + }else{ + $(_b27).combo("hidePanel"); + } + _b2f(_b27); + opts.onClickRow.call(this,row); + },onCheckNode:function(row,_b2e){ + _b2f(_b27); + opts.onCheckNode.call(this,row,_b2e); + }})); + }; + function _b2f(_b30){ + var _b31=$.data(_b30,"combotreegrid"); + var opts=_b31.options; + var grid=_b31.grid; + var vv=[]; + if(opts.multiple){ + vv=$.map(grid.treegrid("getCheckedNodes"),function(row){ + return row[opts.idField]; + }); + }else{ + var row=grid.treegrid("getSelected"); + if(row){ + vv.push(row[opts.idField]); + } + } + vv=vv.concat(opts.unselectedValues); + _b32(_b30,vv); + }; + function _b32(_b33,_b34){ + var _b35=$.data(_b33,"combotreegrid"); + var opts=_b35.options; + var grid=_b35.grid; + if(!$.isArray(_b34)){ + _b34=_b34.split(opts.separator); + } + if(!opts.multiple){ + _b34=_b34.length?[_b34[0]]:[""]; + } + var vv=$.map(_b34,function(_b36){ + return String(_b36); + }); + vv=$.grep(vv,function(v,_b37){ + return _b37===$.inArray(v,vv); + }); + var _b38=grid.treegrid("getSelected"); + if(_b38){ + grid.treegrid("unselect",_b38[opts.idField]); + } + $.map(grid.treegrid("getCheckedNodes"),function(row){ + if($.inArray(String(row[opts.idField]),vv)==-1){ + grid.treegrid("uncheckNode",row[opts.idField]); + } + }); + var ss=[]; + opts.unselectedValues=[]; + $.map(vv,function(v){ + var row=grid.treegrid("find",v); + if(row){ + if(opts.multiple){ + grid.treegrid("checkNode",v); + }else{ + grid.treegrid("select",v); + } + ss.push(_b39(row)); + }else{ + ss.push(_b3a(v,opts.mappingRows)||v); + opts.unselectedValues.push(v); + } + }); + if(opts.multiple){ + $.map(grid.treegrid("getCheckedNodes"),function(row){ + var id=String(row[opts.idField]); + if($.inArray(id,vv)==-1){ + vv.push(id); + ss.push(_b39(row)); + } + }); + } + if(!_b35.remainText){ + var s=ss.join(opts.separator); + if($(_b33).combo("getText")!=s){ + $(_b33).combo("setText",s); + } + } + $(_b33).combo("setValues",vv); + function _b3a(_b3b,a){ + var item=$.easyui.getArrayItem(a,opts.idField,_b3b); + return item?_b39(item):undefined; + }; + function _b39(row){ + return row[opts.textField||""]||row[opts.treeField]; + }; + }; + function _b3c(_b3d,q){ + var _b3e=$.data(_b3d,"combotreegrid"); + var opts=_b3e.options; + var grid=_b3e.grid; + _b3e.remainText=true; + grid.treegrid("clearSelections").treegrid("clearChecked").treegrid("highlightRow",-1); + if(opts.mode=="remote"){ + $(_b3d).combotreegrid("clear"); + grid.treegrid("load",$.extend({},opts.queryParams,{q:q})); + }else{ + if(q){ + var data=grid.treegrid("getData"); + var vv=[]; + var qq=opts.multiple?q.split(opts.separator):[q]; + $.map(qq,function(q){ + q=$.trim(q); + if(q){ + var v=undefined; + $.easyui.forEach(data,true,function(row){ + if(q.toLowerCase()==String(row[opts.treeField]).toLowerCase()){ + v=row[opts.idField]; + return false; + }else{ + if(opts.filter.call(_b3d,q,row)){ + grid.treegrid("expandTo",row[opts.idField]); + grid.treegrid("highlightRow",row[opts.idField]); + return false; + } + } + }); + if(v==undefined){ + $.easyui.forEach(opts.mappingRows,false,function(row){ + if(q.toLowerCase()==String(row[opts.treeField])){ + v=row[opts.idField]; + return false; + } + }); + } + if(v!=undefined){ + vv.push(v); + } + } + }); + _b32(_b3d,vv); + _b3e.remainText=false; + } + } + }; + function _b3f(_b40){ + _b2f(_b40); + }; + $.fn.combotreegrid=function(_b41,_b42){ + if(typeof _b41=="string"){ + var _b43=$.fn.combotreegrid.methods[_b41]; + if(_b43){ + return _b43(this,_b42); + }else{ + return this.combo(_b41,_b42); + } + } + _b41=_b41||{}; + return this.each(function(){ + var _b44=$.data(this,"combotreegrid"); + if(_b44){ + $.extend(_b44.options,_b41); + }else{ + _b44=$.data(this,"combotreegrid",{options:$.extend({},$.fn.combotreegrid.defaults,$.fn.combotreegrid.parseOptions(this),_b41)}); + } + _b26(this); + }); + }; + $.fn.combotreegrid.methods={options:function(jq){ + var _b45=jq.combo("options"); + return $.extend($.data(jq[0],"combotreegrid").options,{width:_b45.width,height:_b45.height,originalValue:_b45.originalValue,disabled:_b45.disabled,readonly:_b45.readonly}); + },grid:function(jq){ + return $.data(jq[0],"combotreegrid").grid; + },setValues:function(jq,_b46){ + return jq.each(function(){ + var opts=$(this).combotreegrid("options"); + if($.isArray(_b46)){ + _b46=$.map(_b46,function(_b47){ + if(_b47&&typeof _b47=="object"){ + $.easyui.addArrayItem(opts.mappingRows,opts.idField,_b47); + return _b47[opts.idField]; + }else{ + return _b47; + } + }); + } + _b32(this,_b46); + }); + },setValue:function(jq,_b48){ + return jq.each(function(){ + $(this).combotreegrid("setValues",$.isArray(_b48)?_b48:[_b48]); + }); + },clear:function(jq){ + return jq.each(function(){ + $(this).combotreegrid("setValues",[]); + }); + },reset:function(jq){ + return jq.each(function(){ + var opts=$(this).combotreegrid("options"); + if(opts.multiple){ + $(this).combotreegrid("setValues",opts.originalValue); + }else{ + $(this).combotreegrid("setValue",opts.originalValue); + } + }); + }}; + $.fn.combotreegrid.parseOptions=function(_b49){ + var t=$(_b49); + return $.extend({},$.fn.combo.parseOptions(_b49),$.fn.treegrid.parseOptions(_b49),$.parser.parseOptions(_b49,["mode",{limitToGrid:"boolean"}])); + }; + $.fn.combotreegrid.defaults=$.extend({},$.fn.combo.defaults,$.fn.treegrid.defaults,{editable:false,singleSelect:true,limitToGrid:false,unselectedValues:[],mappingRows:[],mode:"local",textField:null,keyHandler:{up:function(e){ + },down:function(e){ + },left:function(e){ + },right:function(e){ + },enter:function(e){ + _b3f(this); + },query:function(q,e){ + _b3c(this,q); + }},inputEvents:$.extend({},$.fn.combo.defaults.inputEvents,{blur:function(e){ + var _b4a=e.data.target; + var opts=$(_b4a).combotreegrid("options"); + if(opts.limitToGrid){ + _b3f(_b4a); + } + }}),filter:function(q,row){ + var opts=$(this).combotreegrid("options"); + return (row[opts.treeField]||"").toLowerCase().indexOf(q.toLowerCase())>=0; + }}); +})(jQuery); +(function($){ + function _b4b(_b4c){ + var _b4d=$.data(_b4c,"tagbox"); + var opts=_b4d.options; + $(_b4c).addClass("tagbox-f").combobox($.extend({},opts,{cls:"tagbox",reversed:true,onChange:function(_b4e,_b4f){ + _b50(); + $(this).combobox("hidePanel"); + opts.onChange.call(_b4c,_b4e,_b4f); + },onResizing:function(_b51,_b52){ + var _b53=$(this).combobox("textbox"); + var tb=$(this).data("textbox").textbox; + tb.css({height:"",paddingLeft:_b53.css("marginLeft"),paddingRight:_b53.css("marginRight")}); + _b53.css("margin",0); + tb._size({width:opts.width},$(this).parent()); + _b66(_b4c); + _b58(this); + opts.onResizing.call(_b4c,_b51,_b52); + },onLoadSuccess:function(data){ + _b50(); + opts.onLoadSuccess.call(_b4c,data); + }})); + _b50(); + _b66(_b4c); + function _b50(){ + $(_b4c).next().find(".tagbox-label").remove(); + var _b54=$(_b4c).tagbox("textbox"); + var ss=[]; + $.map($(_b4c).tagbox("getValues"),function(_b55,_b56){ + var row=opts.finder.getRow(_b4c,_b55); + var text=opts.tagFormatter.call(_b4c,_b55,row); + var cs={}; + var css=opts.tagStyler.call(_b4c,_b55,row)||""; + if(typeof css=="string"){ + cs={s:css}; + }else{ + cs={c:css["class"]||"",s:css["style"]||""}; + } + var _b57=$("").insertBefore(_b54).html(text); + _b57.attr("tagbox-index",_b56); + _b57.attr("style",cs.s).addClass(cs.c); + $("").appendTo(_b57); + }); + _b58(_b4c); + $(_b4c).combobox("setText",""); + }; + }; + function _b58(_b59,_b5a){ + var span=$(_b59).next(); + var _b5b=_b5a?$(_b5a):span.find(".tagbox-label"); + if(_b5b.length){ + var _b5c=$(_b59).tagbox("textbox"); + var _b5d=$(_b5b[0]); + var _b5e=_b5d.outerHeight(true)-_b5d.outerHeight(); + var _b5f=_b5c.outerHeight()-_b5e*2; + _b5b.css({height:_b5f+"px",lineHeight:_b5f+"px"}); + var _b60=span.find(".textbox-addon").css("height","100%"); + _b60.find(".textbox-icon").css("height","100%"); + span.find(".textbox-button").linkbutton("resize",{height:"100%"}); + } + }; + function _b61(_b62){ + var span=$(_b62).next(); + span.unbind(".tagbox").bind("click.tagbox",function(e){ + var opts=$(_b62).tagbox("options"); + if(opts.disabled||opts.readonly){ + return; + } + if($(e.target).hasClass("tagbox-remove")){ + var _b63=parseInt($(e.target).parent().attr("tagbox-index")); + var _b64=$(_b62).tagbox("getValues"); + if(opts.onBeforeRemoveTag.call(_b62,_b64[_b63])==false){ + return; + } + opts.onRemoveTag.call(_b62,_b64[_b63]); + _b64.splice(_b63,1); + $(_b62).tagbox("setValues",_b64); + }else{ + var _b65=$(e.target).closest(".tagbox-label"); + if(_b65.length){ + var _b63=parseInt(_b65.attr("tagbox-index")); + var _b64=$(_b62).tagbox("getValues"); + opts.onClickTag.call(_b62,_b64[_b63]); + } + } + $(this).find(".textbox-text").focus(); + }).bind("keyup.tagbox",function(e){ + _b66(_b62); + }).bind("mouseover.tagbox",function(e){ + if($(e.target).closest(".textbox-button,.textbox-addon,.tagbox-label").length){ + $(this).triggerHandler("mouseleave"); + }else{ + $(this).find(".textbox-text").triggerHandler("mouseenter"); + } + }).bind("mouseleave.tagbox",function(e){ + $(this).find(".textbox-text").triggerHandler("mouseleave"); + }); + }; + function _b66(_b67){ + var opts=$(_b67).tagbox("options"); + var _b68=$(_b67).tagbox("textbox"); + var span=$(_b67).next(); + var tmp=$("").appendTo("body"); + tmp.attr("style",_b68.attr("style")); + tmp.css({position:"absolute",top:-9999,left:-9999,width:"auto",fontFamily:_b68.css("fontFamily"),fontSize:_b68.css("fontSize"),fontWeight:_b68.css("fontWeight"),whiteSpace:"nowrap"}); + var _b69=_b6a(_b68.val()); + var _b6b=_b6a(opts.prompt||""); + tmp.remove(); + var _b6c=Math.min(Math.max(_b69,_b6b)+20,span.width()); + _b68._outerWidth(_b6c); + span.find(".textbox-button").linkbutton("resize",{height:"100%"}); + function _b6a(val){ + var s=val.replace(/&/g,"&").replace(/\s/g," ").replace(//g,">"); + tmp.html(s); + return tmp.outerWidth(); + }; + }; + function _b6d(_b6e){ + var t=$(_b6e); + var opts=t.tagbox("options"); + if(opts.limitToList){ + var _b6f=t.tagbox("panel"); + var item=_b6f.children("div.combobox-item-hover"); + if(item.length){ + item.removeClass("combobox-item-hover"); + var row=opts.finder.getRow(_b6e,item); + var _b70=row[opts.valueField]; + $(_b6e).tagbox(item.hasClass("combobox-item-selected")?"unselect":"select",_b70); + } + $(_b6e).tagbox("hidePanel"); + }else{ + var v=$.trim($(_b6e).tagbox("getText")); + if(v!==""){ + var _b71=$(_b6e).tagbox("getValues"); + _b71.push(v); + $(_b6e).tagbox("setValues",_b71); + } + } + }; + function _b72(_b73,_b74){ + $(_b73).combobox("setText",""); + _b66(_b73); + $(_b73).combobox("setValues",_b74); + $(_b73).combobox("setText",""); + $(_b73).tagbox("validate"); + }; + $.fn.tagbox=function(_b75,_b76){ + if(typeof _b75=="string"){ + var _b77=$.fn.tagbox.methods[_b75]; + if(_b77){ + return _b77(this,_b76); + }else{ + return this.combobox(_b75,_b76); + } + } + _b75=_b75||{}; + return this.each(function(){ + var _b78=$.data(this,"tagbox"); + if(_b78){ + $.extend(_b78.options,_b75); + }else{ + $.data(this,"tagbox",{options:$.extend({},$.fn.tagbox.defaults,$.fn.tagbox.parseOptions(this),_b75)}); + } + _b4b(this); + _b61(this); + }); + }; + $.fn.tagbox.methods={options:function(jq){ + var _b79=jq.combobox("options"); + return $.extend($.data(jq[0],"tagbox").options,{width:_b79.width,height:_b79.height,originalValue:_b79.originalValue,disabled:_b79.disabled,readonly:_b79.readonly}); + },setValues:function(jq,_b7a){ + return jq.each(function(){ + _b72(this,_b7a); + }); + },reset:function(jq){ + return jq.each(function(){ + $(this).combobox("reset").combobox("setText",""); + }); + }}; + $.fn.tagbox.parseOptions=function(_b7b){ + return $.extend({},$.fn.combobox.parseOptions(_b7b),$.parser.parseOptions(_b7b,[])); + }; + $.fn.tagbox.defaults=$.extend({},$.fn.combobox.defaults,{hasDownArrow:false,multiple:true,reversed:true,selectOnNavigation:false,tipOptions:$.extend({},$.fn.textbox.defaults.tipOptions,{showDelay:200}),val:function(_b7c){ + var vv=$(_b7c).parent().prev().tagbox("getValues"); + if($(_b7c).is(":focus")){ + vv.push($(_b7c).val()); + } + return vv.join(","); + },inputEvents:$.extend({},$.fn.combo.defaults.inputEvents,{blur:function(e){ + var _b7d=e.data.target; + var opts=$(_b7d).tagbox("options"); + if(opts.limitToList){ + _b6d(_b7d); + } + }}),keyHandler:$.extend({},$.fn.combobox.defaults.keyHandler,{enter:function(e){ + _b6d(this); + },query:function(q,e){ + var opts=$(this).tagbox("options"); + if(opts.limitToList){ + $.fn.combobox.defaults.keyHandler.query.call(this,q,e); + }else{ + $(this).combobox("hidePanel"); + } + }}),tagFormatter:function(_b7e,row){ + var opts=$(this).tagbox("options"); + return row?row[opts.textField]:_b7e; + },tagStyler:function(_b7f,row){ + return ""; + },onClickTag:function(_b80){ + },onBeforeRemoveTag:function(_b81){ + },onRemoveTag:function(_b82){ + }}); +})(jQuery); +(function($){ + function _b83(_b84){ + var _b85=$.data(_b84,"datebox"); + var opts=_b85.options; + $(_b84).addClass("datebox-f").combo($.extend({},opts,{onShowPanel:function(){ + _b86(this); + _b87(this); + _b88(this); + _b96(this,$(this).datebox("getText"),true); + opts.onShowPanel.call(this); + }})); + if(!_b85.calendar){ + var _b89=$(_b84).combo("panel").css("overflow","hidden"); + _b89.panel("options").onBeforeDestroy=function(){ + var c=$(this).find(".calendar-shared"); + if(c.length){ + c.insertBefore(c[0].pholder); + } + }; + var cc=$("
          ").prependTo(_b89); + if(opts.sharedCalendar){ + var c=$(opts.sharedCalendar); + if(!c[0].pholder){ + c[0].pholder=$("
          ").insertAfter(c); + } + c.addClass("calendar-shared").appendTo(cc); + if(!c.hasClass("calendar")){ + c.calendar(); + } + _b85.calendar=c; + }else{ + _b85.calendar=$("
          ").appendTo(cc).calendar(); + } + $.extend(_b85.calendar.calendar("options"),{fit:true,border:false,onSelect:function(date){ + var _b8a=this.target; + var opts=$(_b8a).datebox("options"); + _b96(_b8a,opts.formatter.call(_b8a,date)); + $(_b8a).combo("hidePanel"); + opts.onSelect.call(_b8a,date); + }}); + } + $(_b84).combo("textbox").parent().addClass("datebox"); + $(_b84).datebox("initValue",opts.value); + function _b86(_b8b){ + var opts=$(_b8b).datebox("options"); + var _b8c=$(_b8b).combo("panel"); + _b8c.unbind(".datebox").bind("click.datebox",function(e){ + if($(e.target).hasClass("datebox-button-a")){ + var _b8d=parseInt($(e.target).attr("datebox-button-index")); + opts.buttons[_b8d].handler.call(e.target,_b8b); + } + }); + }; + function _b87(_b8e){ + var _b8f=$(_b8e).combo("panel"); + if(_b8f.children("div.datebox-button").length){ + return; + } + var _b90=$("
          ").appendTo(_b8f); + var tr=_b90.find("tr"); + for(var i=0;i").appendTo(tr); + var btn=opts.buttons[i]; + var t=$("").html($.isFunction(btn.text)?btn.text(_b8e):btn.text).appendTo(td); + t.attr("datebox-button-index",i); + } + tr.find("td").css("width",(100/opts.buttons.length)+"%"); + }; + function _b88(_b91){ + var _b92=$(_b91).combo("panel"); + var cc=_b92.children("div.datebox-calendar-inner"); + _b92.children()._outerWidth(_b92.width()); + _b85.calendar.appendTo(cc); + _b85.calendar[0].target=_b91; + if(opts.panelHeight!="auto"){ + var _b93=_b92.height(); + _b92.children().not(cc).each(function(){ + _b93-=$(this).outerHeight(); + }); + cc._outerHeight(_b93); + } + _b85.calendar.calendar("resize"); + }; + }; + function _b94(_b95,q){ + _b96(_b95,q,true); + }; + function _b97(_b98){ + var _b99=$.data(_b98,"datebox"); + var opts=_b99.options; + var _b9a=_b99.calendar.calendar("options").current; + if(_b9a){ + _b96(_b98,opts.formatter.call(_b98,_b9a)); + $(_b98).combo("hidePanel"); + } + }; + function _b96(_b9b,_b9c,_b9d){ + var _b9e=$.data(_b9b,"datebox"); + var opts=_b9e.options; + var _b9f=_b9e.calendar; + _b9f.calendar("moveTo",opts.parser.call(_b9b,_b9c)); + if(_b9d){ + $(_b9b).combo("setValue",_b9c); + }else{ + if(_b9c){ + _b9c=opts.formatter.call(_b9b,_b9f.calendar("options").current); + } + $(_b9b).combo("setText",_b9c).combo("setValue",_b9c); + } + }; + $.fn.datebox=function(_ba0,_ba1){ + if(typeof _ba0=="string"){ + var _ba2=$.fn.datebox.methods[_ba0]; + if(_ba2){ + return _ba2(this,_ba1); + }else{ + return this.combo(_ba0,_ba1); + } + } + _ba0=_ba0||{}; + return this.each(function(){ + var _ba3=$.data(this,"datebox"); + if(_ba3){ + $.extend(_ba3.options,_ba0); + }else{ + $.data(this,"datebox",{options:$.extend({},$.fn.datebox.defaults,$.fn.datebox.parseOptions(this),_ba0)}); + } + _b83(this); + }); + }; + $.fn.datebox.methods={options:function(jq){ + var _ba4=jq.combo("options"); + return $.extend($.data(jq[0],"datebox").options,{width:_ba4.width,height:_ba4.height,originalValue:_ba4.originalValue,disabled:_ba4.disabled,readonly:_ba4.readonly}); + },cloneFrom:function(jq,from){ + return jq.each(function(){ + $(this).combo("cloneFrom",from); + $.data(this,"datebox",{options:$.extend(true,{},$(from).datebox("options")),calendar:$(from).datebox("calendar")}); + $(this).addClass("datebox-f"); + }); + },calendar:function(jq){ + return $.data(jq[0],"datebox").calendar; + },initValue:function(jq,_ba5){ + return jq.each(function(){ + var opts=$(this).datebox("options"); + var _ba6=opts.value; + if(_ba6){ + _ba6=opts.formatter.call(this,opts.parser.call(this,_ba6)); + } + $(this).combo("initValue",_ba6).combo("setText",_ba6); + }); + },setValue:function(jq,_ba7){ + return jq.each(function(){ + _b96(this,_ba7); + }); + },reset:function(jq){ + return jq.each(function(){ + var opts=$(this).datebox("options"); + $(this).datebox("setValue",opts.originalValue); + }); + }}; + $.fn.datebox.parseOptions=function(_ba8){ + return $.extend({},$.fn.combo.parseOptions(_ba8),$.parser.parseOptions(_ba8,["sharedCalendar"])); + }; + $.fn.datebox.defaults=$.extend({},$.fn.combo.defaults,{panelWidth:180,panelHeight:"auto",sharedCalendar:null,keyHandler:{up:function(e){ + },down:function(e){ + },left:function(e){ + },right:function(e){ + },enter:function(e){ + _b97(this); + },query:function(q,e){ + _b94(this,q); + }},currentText:"Today",closeText:"Close",okText:"Ok",buttons:[{text:function(_ba9){ + return $(_ba9).datebox("options").currentText; + },handler:function(_baa){ + var now=new Date(); + $(_baa).datebox("calendar").calendar({year:now.getFullYear(),month:now.getMonth()+1,current:new Date(now.getFullYear(),now.getMonth(),now.getDate())}); + _b97(_baa); + }},{text:function(_bab){ + return $(_bab).datebox("options").closeText; + },handler:function(_bac){ + $(this).closest("div.combo-panel").panel("close"); + }}],formatter:function(date){ + var y=date.getFullYear(); + var m=date.getMonth()+1; + var d=date.getDate(); + return (m<10?("0"+m):m)+"/"+(d<10?("0"+d):d)+"/"+y; + },parser:function(s){ + if(!s){ + return new Date(); + } + var ss=s.split("/"); + var m=parseInt(ss[0],10); + var d=parseInt(ss[1],10); + var y=parseInt(ss[2],10); + if(!isNaN(y)&&!isNaN(m)&&!isNaN(d)){ + return new Date(y,m-1,d); + }else{ + return new Date(); + } + },onSelect:function(date){ + }}); +})(jQuery); +(function($){ + function _bad(_bae){ + var _baf=$.data(_bae,"datetimebox"); + var opts=_baf.options; + $(_bae).datebox($.extend({},opts,{onShowPanel:function(){ + var _bb0=$(this).datetimebox("getValue"); + _bb6(this,_bb0,true); + opts.onShowPanel.call(this); + },formatter:$.fn.datebox.defaults.formatter,parser:$.fn.datebox.defaults.parser})); + $(_bae).removeClass("datebox-f").addClass("datetimebox-f"); + $(_bae).datebox("calendar").calendar({onSelect:function(date){ + opts.onSelect.call(this.target,date); + }}); + if(!_baf.spinner){ + var _bb1=$(_bae).datebox("panel"); + var p=$("
          ").insertAfter(_bb1.children("div.datebox-calendar-inner")); + _baf.spinner=p.children("input"); + } + _baf.spinner.timespinner({width:opts.spinnerWidth,showSeconds:opts.showSeconds,separator:opts.timeSeparator}); + $(_bae).datetimebox("initValue",opts.value); + }; + function _bb2(_bb3){ + var c=$(_bb3).datetimebox("calendar"); + var t=$(_bb3).datetimebox("spinner"); + var date=c.calendar("options").current; + return new Date(date.getFullYear(),date.getMonth(),date.getDate(),t.timespinner("getHours"),t.timespinner("getMinutes"),t.timespinner("getSeconds")); + }; + function _bb4(_bb5,q){ + _bb6(_bb5,q,true); + }; + function _bb7(_bb8){ + var opts=$.data(_bb8,"datetimebox").options; + var date=_bb2(_bb8); + _bb6(_bb8,opts.formatter.call(_bb8,date)); + $(_bb8).combo("hidePanel"); + }; + function _bb6(_bb9,_bba,_bbb){ + var opts=$.data(_bb9,"datetimebox").options; + $(_bb9).combo("setValue",_bba); + if(!_bbb){ + if(_bba){ + var date=opts.parser.call(_bb9,_bba); + $(_bb9).combo("setText",opts.formatter.call(_bb9,date)); + $(_bb9).combo("setValue",opts.formatter.call(_bb9,date)); + }else{ + $(_bb9).combo("setText",_bba); + } + } + var date=opts.parser.call(_bb9,_bba); + $(_bb9).datetimebox("calendar").calendar("moveTo",date); + $(_bb9).datetimebox("spinner").timespinner("setValue",_bbc(date)); + function _bbc(date){ + function _bbd(_bbe){ + return (_bbe<10?"0":"")+_bbe; + }; + var tt=[_bbd(date.getHours()),_bbd(date.getMinutes())]; + if(opts.showSeconds){ + tt.push(_bbd(date.getSeconds())); + } + return tt.join($(_bb9).datetimebox("spinner").timespinner("options").separator); + }; + }; + $.fn.datetimebox=function(_bbf,_bc0){ + if(typeof _bbf=="string"){ + var _bc1=$.fn.datetimebox.methods[_bbf]; + if(_bc1){ + return _bc1(this,_bc0); + }else{ + return this.datebox(_bbf,_bc0); + } + } + _bbf=_bbf||{}; + return this.each(function(){ + var _bc2=$.data(this,"datetimebox"); + if(_bc2){ + $.extend(_bc2.options,_bbf); + }else{ + $.data(this,"datetimebox",{options:$.extend({},$.fn.datetimebox.defaults,$.fn.datetimebox.parseOptions(this),_bbf)}); + } + _bad(this); + }); + }; + $.fn.datetimebox.methods={options:function(jq){ + var _bc3=jq.datebox("options"); + return $.extend($.data(jq[0],"datetimebox").options,{originalValue:_bc3.originalValue,disabled:_bc3.disabled,readonly:_bc3.readonly}); + },cloneFrom:function(jq,from){ + return jq.each(function(){ + $(this).datebox("cloneFrom",from); + $.data(this,"datetimebox",{options:$.extend(true,{},$(from).datetimebox("options")),spinner:$(from).datetimebox("spinner")}); + $(this).removeClass("datebox-f").addClass("datetimebox-f"); + }); + },spinner:function(jq){ + return $.data(jq[0],"datetimebox").spinner; + },initValue:function(jq,_bc4){ + return jq.each(function(){ + var opts=$(this).datetimebox("options"); + var _bc5=opts.value; + if(_bc5){ + _bc5=opts.formatter.call(this,opts.parser.call(this,_bc5)); + } + $(this).combo("initValue",_bc5).combo("setText",_bc5); + }); + },setValue:function(jq,_bc6){ + return jq.each(function(){ + _bb6(this,_bc6); + }); + },reset:function(jq){ + return jq.each(function(){ + var opts=$(this).datetimebox("options"); + $(this).datetimebox("setValue",opts.originalValue); + }); + }}; + $.fn.datetimebox.parseOptions=function(_bc7){ + var t=$(_bc7); + return $.extend({},$.fn.datebox.parseOptions(_bc7),$.parser.parseOptions(_bc7,["timeSeparator","spinnerWidth",{showSeconds:"boolean"}])); + }; + $.fn.datetimebox.defaults=$.extend({},$.fn.datebox.defaults,{spinnerWidth:"100%",showSeconds:true,timeSeparator:":",keyHandler:{up:function(e){ + },down:function(e){ + },left:function(e){ + },right:function(e){ + },enter:function(e){ + _bb7(this); + },query:function(q,e){ + _bb4(this,q); + }},buttons:[{text:function(_bc8){ + return $(_bc8).datetimebox("options").currentText; + },handler:function(_bc9){ + var opts=$(_bc9).datetimebox("options"); + _bb6(_bc9,opts.formatter.call(_bc9,new Date())); + $(_bc9).datetimebox("hidePanel"); + }},{text:function(_bca){ + return $(_bca).datetimebox("options").okText; + },handler:function(_bcb){ + _bb7(_bcb); + }},{text:function(_bcc){ + return $(_bcc).datetimebox("options").closeText; + },handler:function(_bcd){ + $(_bcd).datetimebox("hidePanel"); + }}],formatter:function(date){ + var h=date.getHours(); + var M=date.getMinutes(); + var s=date.getSeconds(); + function _bce(_bcf){ + return (_bcf<10?"0":"")+_bcf; + }; + var _bd0=$(this).datetimebox("spinner").timespinner("options").separator; + var r=$.fn.datebox.defaults.formatter(date)+" "+_bce(h)+_bd0+_bce(M); + if($(this).datetimebox("options").showSeconds){ + r+=_bd0+_bce(s); + } + return r; + },parser:function(s){ + if($.trim(s)==""){ + return new Date(); + } + var dt=s.split(" "); + var d=$.fn.datebox.defaults.parser(dt[0]); + if(dt.length<2){ + return d; + } + var _bd1=$(this).datetimebox("spinner").timespinner("options").separator; + var tt=dt[1].split(_bd1); + var hour=parseInt(tt[0],10)||0; + var _bd2=parseInt(tt[1],10)||0; + var _bd3=parseInt(tt[2],10)||0; + return new Date(d.getFullYear(),d.getMonth(),d.getDate(),hour,_bd2,_bd3); + }}); +})(jQuery); +(function($){ + function init(_bd4){ + var _bd5=$("
          "+"
          "+""+""+"
          "+"
          "+"
          "+"
          "+""+"
          ").insertAfter(_bd4); + var t=$(_bd4); + t.addClass("slider-f").hide(); + var name=t.attr("name"); + if(name){ + _bd5.find("input.slider-value").attr("name",name); + t.removeAttr("name").attr("sliderName",name); + } + _bd5.bind("_resize",function(e,_bd6){ + if($(this).hasClass("easyui-fluid")||_bd6){ + _bd7(_bd4); + } + return false; + }); + return _bd5; + }; + function _bd7(_bd8,_bd9){ + var _bda=$.data(_bd8,"slider"); + var opts=_bda.options; + var _bdb=_bda.slider; + if(_bd9){ + if(_bd9.width){ + opts.width=_bd9.width; + } + if(_bd9.height){ + opts.height=_bd9.height; + } + } + _bdb._size(opts); + if(opts.mode=="h"){ + _bdb.css("height",""); + _bdb.children("div").css("height",""); + }else{ + _bdb.css("width",""); + _bdb.children("div").css("width",""); + _bdb.children("div.slider-rule,div.slider-rulelabel,div.slider-inner")._outerHeight(_bdb._outerHeight()); + } + _bdc(_bd8); + }; + function _bdd(_bde){ + var _bdf=$.data(_bde,"slider"); + var opts=_bdf.options; + var _be0=_bdf.slider; + var aa=opts.mode=="h"?opts.rule:opts.rule.slice(0).reverse(); + if(opts.reversed){ + aa=aa.slice(0).reverse(); + } + _be1(aa); + function _be1(aa){ + var rule=_be0.find("div.slider-rule"); + var _be2=_be0.find("div.slider-rulelabel"); + rule.empty(); + _be2.empty(); + for(var i=0;i").appendTo(rule); + span.css((opts.mode=="h"?"left":"top"),_be3); + if(aa[i]!="|"){ + span=$("").appendTo(_be2); + span.html(aa[i]); + if(opts.mode=="h"){ + span.css({left:_be3,marginLeft:-Math.round(span.outerWidth()/2)}); + }else{ + span.css({top:_be3,marginTop:-Math.round(span.outerHeight()/2)}); + } + } + } + }; + }; + function _be4(_be5){ + var _be6=$.data(_be5,"slider"); + var opts=_be6.options; + var _be7=_be6.slider; + _be7.removeClass("slider-h slider-v slider-disabled"); + _be7.addClass(opts.mode=="h"?"slider-h":"slider-v"); + _be7.addClass(opts.disabled?"slider-disabled":""); + var _be8=_be7.find(".slider-inner"); + _be8.html(""+""); + if(opts.range){ + _be8.append(""+""); + } + _be7.find("a.slider-handle").draggable({axis:opts.mode,cursor:"pointer",disabled:opts.disabled,onDrag:function(e){ + var left=e.data.left; + var _be9=_be7.width(); + if(opts.mode!="h"){ + left=e.data.top; + _be9=_be7.height(); + } + if(left<0||left>_be9){ + return false; + }else{ + _bea(left,this); + return false; + } + },onStartDrag:function(){ + _be6.isDragging=true; + opts.onSlideStart.call(_be5,opts.value); + },onStopDrag:function(e){ + _bea(opts.mode=="h"?e.data.left:e.data.top,this); + opts.onSlideEnd.call(_be5,opts.value); + opts.onComplete.call(_be5,opts.value); + _be6.isDragging=false; + }}); + _be7.find("div.slider-inner").unbind(".slider").bind("mousedown.slider",function(e){ + if(_be6.isDragging||opts.disabled){ + return; + } + var pos=$(this).offset(); + _bea(opts.mode=="h"?(e.pageX-pos.left):(e.pageY-pos.top)); + opts.onComplete.call(_be5,opts.value); + }); + function _bea(pos,_beb){ + var _bec=_bed(_be5,pos); + var s=Math.abs(_bec%opts.step); + if(s0; + if(_bec<=v2&&_bee){ + v1=_bec; + }else{ + if(_bec>=v1&&(!_bee)){ + v2=_bec; + } + } + }else{ + if(_becv2){ + v2=_bec; + }else{ + _becopts.max){ + _bf6=opts.max; + } + var _bf7=$("").appendTo(_bf3); + _bf7.attr("name",name); + _bf7.val(_bf6); + _bf5.push(_bf6); + var _bf8=_bf3.find(".slider-handle:eq("+i+")"); + var tip=_bf8.next(); + var pos=_bf9(_bf0,_bf6); + if(opts.showTip){ + tip.show(); + tip.html(opts.tipFormatter.call(_bf0,_bf6)); + }else{ + tip.hide(); + } + if(opts.mode=="h"){ + var _bfa="left:"+pos+"px;"; + _bf8.attr("style",_bfa); + tip.attr("style",_bfa+"margin-left:"+(-Math.round(tip.outerWidth()/2))+"px"); + }else{ + var _bfa="top:"+pos+"px;"; + _bf8.attr("style",_bfa); + tip.attr("style",_bfa+"margin-left:"+(-Math.round(tip.outerWidth()))+"px"); + } + } + opts.value=opts.range?_bf5:_bf5[0]; + $(_bf0).val(opts.range?_bf5.join(opts.separator):_bf5[0]); + if(_bf4.join(",")!=_bf5.join(",")){ + opts.onChange.call(_bf0,opts.value,(opts.range?_bf4:_bf4[0])); + } + }; + function _bdc(_bfb){ + var opts=$.data(_bfb,"slider").options; + var fn=opts.onChange; + opts.onChange=function(){ + }; + _bef(_bfb,opts.value); + opts.onChange=fn; + }; + function _bf9(_bfc,_bfd){ + var _bfe=$.data(_bfc,"slider"); + var opts=_bfe.options; + var _bff=_bfe.slider; + var size=opts.mode=="h"?_bff.width():_bff.height(); + var pos=opts.converter.toPosition.call(_bfc,_bfd,size); + if(opts.mode=="v"){ + pos=_bff.height()-pos; + } + if(opts.reversed){ + pos=size-pos; + } + return pos.toFixed(0); + }; + function _bed(_c00,pos){ + var _c01=$.data(_c00,"slider"); + var opts=_c01.options; + var _c02=_c01.slider; + var size=opts.mode=="h"?_c02.width():_c02.height(); + var pos=opts.mode=="h"?(opts.reversed?(size-pos):pos):(opts.reversed?pos:(size-pos)); + var _c03=opts.converter.toValue.call(_c00,pos,size); + return _c03.toFixed(0); + }; + $.fn.slider=function(_c04,_c05){ + if(typeof _c04=="string"){ + return $.fn.slider.methods[_c04](this,_c05); + } + _c04=_c04||{}; + return this.each(function(){ + var _c06=$.data(this,"slider"); + if(_c06){ + $.extend(_c06.options,_c04); + }else{ + _c06=$.data(this,"slider",{options:$.extend({},$.fn.slider.defaults,$.fn.slider.parseOptions(this),_c04),slider:init(this)}); + $(this).removeAttr("disabled"); + } + var opts=_c06.options; + opts.min=parseFloat(opts.min); + opts.max=parseFloat(opts.max); + if(opts.range){ + if(!$.isArray(opts.value)){ + opts.value=$.map(String(opts.value).split(opts.separator),function(v){ + return parseFloat(v); + }); + } + if(opts.value.length<2){ + opts.value.push(opts.max); + } + }else{ + opts.value=parseFloat(opts.value); + } + opts.step=parseFloat(opts.step); + opts.originalValue=opts.value; + _be4(this); + _bdd(this); + _bd7(this); + }); + }; + $.fn.slider.methods={options:function(jq){ + return $.data(jq[0],"slider").options; + },destroy:function(jq){ + return jq.each(function(){ + $.data(this,"slider").slider.remove(); + $(this).remove(); + }); + },resize:function(jq,_c07){ + return jq.each(function(){ + _bd7(this,_c07); + }); + },getValue:function(jq){ + return jq.slider("options").value; + },getValues:function(jq){ + return jq.slider("options").value; + },setValue:function(jq,_c08){ + return jq.each(function(){ + _bef(this,[_c08]); + }); + },setValues:function(jq,_c09){ + return jq.each(function(){ + _bef(this,_c09); + }); + },clear:function(jq){ + return jq.each(function(){ + var opts=$(this).slider("options"); + _bef(this,opts.range?[opts.min,opts.max]:[opts.min]); + }); + },reset:function(jq){ + return jq.each(function(){ + var opts=$(this).slider("options"); + $(this).slider(opts.range?"setValues":"setValue",opts.originalValue); + }); + },enable:function(jq){ + return jq.each(function(){ + $.data(this,"slider").options.disabled=false; + _be4(this); + }); + },disable:function(jq){ + return jq.each(function(){ + $.data(this,"slider").options.disabled=true; + _be4(this); + }); + }}; + $.fn.slider.parseOptions=function(_c0a){ + var t=$(_c0a); + return $.extend({},$.parser.parseOptions(_c0a,["width","height","mode",{reversed:"boolean",showTip:"boolean",range:"boolean",min:"number",max:"number",step:"number"}]),{value:(t.val()||undefined),disabled:(t.attr("disabled")?true:undefined),rule:(t.attr("rule")?eval(t.attr("rule")):undefined)}); + }; + $.fn.slider.defaults={width:"auto",height:"auto",mode:"h",reversed:false,showTip:false,disabled:false,range:false,value:0,separator:",",min:0,max:100,step:1,rule:[],tipFormatter:function(_c0b){ + return _c0b; + },converter:{toPosition:function(_c0c,size){ + var opts=$(this).slider("options"); + return (_c0c-opts.min)/(opts.max-opts.min)*size; + },toValue:function(pos,size){ + var opts=$(this).slider("options"); + return opts.min+(opts.max-opts.min)*(pos/size); + }},onChange:function(_c0d,_c0e){ + },onSlideStart:function(_c0f){ + },onSlideEnd:function(_c10){ + },onComplete:function(_c11){ + }}; +})(jQuery); diff --git a/novel-front/src/main/resources/static/javascript/ycUtils.js b/novel-front/src/main/resources/static/javascript/ycUtils.js new file mode 100644 index 0000000..94a6954 --- /dev/null +++ b/novel-front/src/main/resources/static/javascript/ycUtils.js @@ -0,0 +1,58 @@ +var SCYC = { +} + +$.extend($.fn.validatebox.defaults.rules, { + checkBookName: { + validator: function (value, param) { + var url = "/aspx/book/booklist.aspx"; + var data = { bid: param, bname: value, act: "getbooknamerepeat" }; + var bool = false; + $.ajax({ + type: "post", + dataType: 'html', + async: false, + url: url, + data: data, + cache: false, + success: function (result) { + if (result == "1") { + $.fn.validatebox.defaults.rules.checkBookName.message = '该书名已存在,请重新输入'; + bool = false; + } else { + $.fn.validatebox.defaults.rules.checkBookName.message = ''; + bool = true; + } + } + }); + return bool; + message: ''; + } + }, + checkNiceName: { + validator: function (value, param) { + var url = "/author/checkPenName"; + var data = { penName: value}; + var bool = false; + $.ajax({ + type: "post", + dataType: 'json', + async: false, + url: url, + data: data, + cache: false, + success: function (result) { + if (result.data) { + $.fn.validatebox.defaults.rules.checkNiceName.message = '笔名已存在,请重新输入'; + bool = false; + } else { + $.fn.validatebox.defaults.rules.checkNiceName.message = ''; + bool = true; + } + } + }); + return bool; + message: ''; + } + } + +}); \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/.eslintignore b/novel-front/src/main/resources/static/wangEditor/.eslintignore new file mode 100644 index 0000000..c02d109 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/.eslintignore @@ -0,0 +1,2 @@ +src/js/util/ierange.js +src/js/util/poly-fill.js \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/.eslintrc.json b/novel-front/src/main/resources/static/wangEditor/.eslintrc.json new file mode 100644 index 0000000..0148b38 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/.eslintrc.json @@ -0,0 +1,38 @@ +{ + "env": { + "browser": true, + "commonjs": true, + "es6": true + }, + "globals": { + "ENV": true + }, + "extends": "eslint:recommended", + "parserOptions": { + "sourceType": "module" + }, + "rules": { + "no-console":0, + "indent": [ + "error", + 4 + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + "error", + "single", + { + "allowTemplateLiterals": true + } + ], + "semi": [ + "error", + "never" + ], + "no-unused-vars": 0, + "no-debugger": 0 + } +} \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/.gitattributes b/novel-front/src/main/resources/static/wangEditor/.gitattributes new file mode 100644 index 0000000..412eeda --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/.gitattributes @@ -0,0 +1,22 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp +*.sln merge=union +*.csproj merge=union +*.vbproj merge=union +*.fsproj merge=union +*.dbproj merge=union + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/novel-front/src/main/resources/static/wangEditor/.gitignore b/novel-front/src/main/resources/static/wangEditor/.gitignore new file mode 100644 index 0000000..481571c --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/.gitignore @@ -0,0 +1,51 @@ + +#忽略 +**/node_modules/* +node_modules/* +npm-debug.log +example/upload-files + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msm +*.msp + +# ========================= +# Operating System Files +# ========================= + +# OSX +# ========================= + +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear on external disk +.Spotlight-V100 +.Trashes + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk diff --git a/novel-front/src/main/resources/static/wangEditor/.npmignore b/novel-front/src/main/resources/static/wangEditor/.npmignore new file mode 100644 index 0000000..333dd25 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/.npmignore @@ -0,0 +1,5 @@ +node_modules/* +npm-debug.log +docs/* +src/* +example/* \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/ISSUE.md b/novel-front/src/main/resources/static/wangEditor/ISSUE.md new file mode 100644 index 0000000..796cbee --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/ISSUE.md @@ -0,0 +1,157 @@ +# 问题记录 + +## 版本修复 + +### v3.0.1 + +- [done] 如何设置自动增加高度(补充文档) +- [done] src/js/editor/Bar 改为 Progress,仅供上传图片使用 +- [done] Panel 在右上角增加一个“关闭”按钮 +- [done] 显示页面 table、quote、code 等样式,说明一下 +- [done] 增加自定义上传回调函数,用以自定义返回图片的格式 +- [done] 上传附带的参数,也加入到 form-data 中一份 +- [done] 编辑器默认情况下,菜单栏不能点击,必须focus了编辑器求之后才能点击 +- [done] 点击菜单弹出panel之后,再点击编辑器区域其他地方,panel不消失 +- [done] 自定义filename,v2版本就有 +- [done] ff 中的 bug +- [done] ff 中粘贴图片和文字出现问题 https://github.com/wangfupeng1988/wangEditor/issues/609 +- [done] 火狐浏览器下,创建表格,编辑表格内容时,会出现两个控制点(有人提供了解决方案) +- [done] 配置最多上传的文件个数 +- [done] 连续给两段内容 添加有/无序列表时,样式会出问题,且其他内容找不到了,并且编辑器不处于编辑状态。 +- [done] onchange +- [done] IE11下面一直报错。并且表格无法正常使用 + +### v3.0.2 + +- [done] 用 onchange 完善 vue react 的 demo +- [done] 插入图片之后,光标移动到图片的前面,然后回车,图片消失,并且不能撤销 +- [done] 修复上传图片 customInsert 无效的bug +- [done] 编辑区域 z-index 可配置 +- [done] 上传图片不应该把状态码限制在 200,而是 2xx +- [done] editor.txt.html() 之后,没有定位光标位置 + +### v3.0.3 + +- [done] 粘贴图片在低版本的谷歌浏览器中无法使用,提示验证图片未通过,undefined不是图片。 +- [done] 动态赋值内容,会自动换行,因为给自动加了`


          ` +- [done] 不选中任何内容,点击“加粗”报错:Failed to execute 'setEnd' on 'Range' +- [done] toolbar 小图标的 z-index 可配置 + +### v3.0.4 + +- [done] 允许使用者通过`replace`实现多语言 +- [done] `_alert()`,可自定义配置提示框 +- [done] 支持用户自定义上传图片的事件,如用户要上传到七牛云、阿里云 + +### v3.0.5 + +- [done] 图片上传中,insertLinkImg 方法中,去掉 img.onload 之后再插入的逻辑吧,这样会打乱多个图片的顺序 +- [done] `` 标签重叠问题,两行文字都是`h2`,然后将第一行选中设置为`h1`,结果是 `

          测试1

          测试2` +- [done] 补充 ng 集成的示例 https://github.com/wangfupeng1988/wangEditor/issues/859 +- [done] 菜单不能折叠的说明,加入到文档中 +- [done] 上传图片 before 函数中,增加一个判断,可以让用户终止图片的上传 + +### v3.0.6 + +- [done] src/fonts 中的字体文件名改一下,用 icomoon 容易发生冲突 +- [done] 将禁用编辑器的操作完善到文档中 https://www.kancloud.cn/wangfupeng/wangeditor3/368562 +- [done] 开放表格中的粘贴功能(之前因不明问题而封闭) +- [done] 代码块中,光标定位到最后位置时,连续两次回车要跳出代码块 + +### v3.0.7 + +- [done] 紧急修复上一个版本导致的菜单图标不显示的 bug + +### v3.0.8 + +- [done] 修复 backColor 和 foreColor 代码文件名混淆的问题 +- [done] 修改 IE 中 “引用” 的功能 +- [done] 增加粘贴过滤样式的可配置 +- [done] 修复 IE 粘贴文字的问题 + +### v3.0.9 + +- [done] config 中,上传图片的 token 注视掉 +- [done] 将一些常见 API 开放,写到文档中 https://www.kancloud.cn/wangfupeng/wangeditor3/404586 +- [done] IE 火狐 插入多行代码有问题 +- [done] 粘贴时,在`

          `中,不能只粘贴纯文本,还得要图片 +- [done] 粘贴内容中,过滤掉``注释 +- [done] **支持上传七牛云存储** + +### v3.0.10 + +- [done] 支持插入网络图片的回调函数 +- [done] 插入链接时候的格式校验 +- [done] 支持拖拽上传 + +### v3.0.11 + +- [done] 如何用 textarea 创建编辑器,完善到文档中,许多人提问 +- [done] 修复`editor.customConfig.customUploadImg`不触发的 bug +- [done] 修复有序列表和无序列表切换时 onchange 不触发的 bug + +### v3.0.12 + +- [done] 增加 onfocus 和 onblur (感谢 [hold-baby](https://github.com/hold-baby) 提交的 [PR](https://github.com/wangfupeng1988/wangEditor/pull/1076)) +- [done] 上传的自定义参数`editor.customConfig.uploadImgParams`是否拼接到 url 中,支持可配置 +- [done] onchange 触发的延迟时间,支持可配置 + +### v3.0.13 + +- [done] 修复图片 选中/取消选中 时,触发 onchange 的问题 +- [done] 修复只通过 length 判断 onchange 是否触发的问题 +- [done] 增加插入网络图片的校验函数 +- [done] 增加自定义处理粘贴文本的事件 +- [done] 修复选中一个图片时点击删除键会误删除其他内容的 bug +- [done] 修复 window chrome 中“复制图片”然后粘贴图片,会粘贴为两张的 bug +- [done] 修复无法撤销“引用”的问题 + +### v3.0.14 + +- [done] 可以配置前景色、背景色 +- [done] 回车时无法从`

          ....

          `中跳出 +- [done] 增加获取 JSON 格式内容的 API + +### v3.0.15 + +- [done] 表情兼容图片和 emoji ,都可自定义配置 + +### v3.0.16 + +- [done] 修复粘贴图片的 bug +- [done] 修复`pasteTextHandle`执行两次的问题 +- [done] 修复插入链接时,文字和链接为空时,`linkCheck`不执行的 bug +- [done] 粘贴 html 时,过滤掉其中的`data-xxx`属性 +- [done] 修复中文输入法输入过程中出发 onchange 的问题,感谢 [github.com/CongAn](https://github.com/CongAn) PR +- [done] `editor.txt.html`和`editor.txt.text`中,替换`​`字符为空字符串 +- [done] 精确图片大小计算,将`maxSize / 1000 / 1000`改为`maxSize / 1024 / 1024` +- [done] 修复 droplist 类型菜单(颜色、背景色等)点击不准确的问题 + +### v3.0.17 + +- [done] 合并 pr [菜单和编辑区域分离 onfocus onblur 失效bug](https://github.com/wangfupeng1988/wangEditor/pull/1174) ,感谢 [hold-baby](https://github.com/hold-baby) 提供 pr +- [done] 使用`document.execCommand("styleWithCSS", null, true)`,这样设置字体颜色就会用 css 而不是用`` + + +### 近期计划解决 + +- 撤销的兼容性问题(会误伤其他编辑器或者 input textarea 等),考虑用 onchange 记录 undo 和 redo 的内容(但是得考虑直接修改 dom 的情况,如 quote code img list table 菜单) + - 列表撤销会删除一行?https://github.com/wangfupeng1988/wangEditor/issues/1131 + - 页面中有 input 等输入标签时,undo redo 会误伤 https://github.com/wangfupeng1988/wangEditor/issues/1024 + - 两个编辑器 undo 的问题 https://github.com/wangfupeng1988/wangEditor/issues/1010 + - list undo redo 有问题。选中几行,先设置有序列表,再设置无序列表,然后撤销,就能复现问题 +- 粘贴文字的样式问题(可暂时配置 `pasteTextHandle` 自行处理) + - 先输入文字,再粘贴 excel 表格,样式丢失 https://github.com/wangfupeng1988/wangEditor/issues/1000 + - IE 11 直接输入文字会空一行在第二行出现内容 https://github.com/wangfupeng1988/wangEditor/issues/919 + - windows 下 word excel 的粘贴,存在垃圾数据 + +## 待排期 + +- 调研 safari、IE 和ff中粘贴图片 https://github.com/wangfupeng1988/wangEditor/issues/831 +- 图片调整大小,表格调整的方式,是否用 toolbar 的方式? +- 删除掉`./release`之后,执行`npm run release`会报错,原因是`fonts`文件没拷贝全,就要去替换`css`中的字体文件为`base64`格式,导致找不到文件。 +- 先点击'B'再输入内容这种形式,前期先支持 webkit 和 IE,火狐的支持后面再加上 +- 图片压缩 canvas https://github.com/think2011/localResizeIMG +- github 徽章 https://github.com/EyreFree/GitHubBadgeIntroduction +- 将代码在进行拆分,做到“每个程序只做一件事”,不要出现过长的代码文件。例如 `src/js/command/index.js` 和 `src/js/selection/index.js` + diff --git a/novel-front/src/main/resources/static/wangEditor/LICENSE b/novel-front/src/main/resources/static/wangEditor/LICENSE new file mode 100644 index 0000000..5239660 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2017 王福朋 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/novel-front/src/main/resources/static/wangEditor/README.md b/novel-front/src/main/resources/static/wangEditor/README.md new file mode 100644 index 0000000..0ab9445 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/README.md @@ -0,0 +1,70 @@ + +# wangEditor + +## 介绍 + +**wangEditor** —— 轻量级 web 富文本编辑器,配置方便,使用简单。支持 IE10+ 浏览器。 + +- 官网:[www.wangEditor.com](http://www.wangeditor.com/) +- 文档:[www.kancloud.cn/wangfupeng/wangeditor3/332599](http://www.kancloud.cn/wangfupeng/wangeditor3/332599) +- 源码:[github.com/wangfupeng1988/wangEditor](https://github.com/wangfupeng1988/wangEditor) (欢迎 star) + +![图片](http://images2015.cnblogs.com/blog/138012/201705/138012-20170530202905633-1840158981.png) + +*查看 v2 版本的代码和文档点击[这里](https://github.com/wangfupeng1988/wangEditor/tree/v2)* + + +## 下载 + +- 直接下载:[https://github.com/wangfupeng1988/wangEditor/releases](https://github.com/wangfupeng1988/wangEditor/releases) +- 使用`npm`下载:`npm install wangeditor` (注意 `wangeditor` 全部是**小写字母**) +- 使用`bower`下载:`bower install wangEditor` (前提保证电脑已安装了`bower`) +- 使用CDN:[//unpkg.com/wangeditor/release/wangEditor.min.js](https://unpkg.com/wangeditor/release/wangEditor.min.js) + + +## 使用 + +```javascript +var E = window.wangEditor +var editor = new E('#div1') +editor.create() +``` + + +## 运行 demo + +- 下载源码 `git clone git@github.com:wangfupeng1988/wangEditor.git` +- 安装或者升级最新版本 node(最低`v6.x.x`) +- 进入目录,安装依赖包 `cd wangEditor && npm i` +- 安装包完成之后,windows 用户运行`npm run win-example`,Mac 用户运行`npm run example` +- 打开浏览器访问[localhost:3000/index.html](http://localhost:3000/index.html) +- 用于 React、vue 或者 angular 可查阅[文档](http://www.kancloud.cn/wangfupeng/wangeditor3/332599)中[其他](https://www.kancloud.cn/wangfupeng/wangeditor3/335783)章节中的相关介绍 + +## 交流 + +### QQ 群 + +以下 QQ 群欢迎加入交流问题(可能有些群已经满员) + +- 164999061 +- 281268320 + +### 提问 + +注意,作者只受理以下几种提问方式,其他方式直接忽略 + +- 直接在 [github issues](https://github.com/wangfupeng1988/wangEditor/issues) 提交问题 +- 去[知乎](https://www.zhihu.com/)提问,并邀请[作者](https://www.zhihu.com/people/wang-fu-peng-54/activities)来回答 +- 去[segmentfault](https://segmentfault.com)提问,并邀请[作者](https://segmentfault.com/u/wangfupeng1988)来回答 + +每次升级版本修复的问题记录在[这里](./ISSUE.md) + +## 关于作者 + +- 关注作者的博客 - 《[深入理解javascript原型和闭包系列](http://www.cnblogs.com/wangfupeng1988/p/4001284.html)》《[深入理解javascript异步系列](https://github.com/wangfupeng1988/js-async-tutorial)》《[CSS知多少](http://www.cnblogs.com/wangfupeng1988/p/4325007.html)》 +- 学习作者的教程 - 《[前端JS基础面试题](http://coding.imooc.com/class/115.html)》《[React.js模拟大众点评webapp](http://coding.imooc.com/class/99.html)》《[zepto设计与源码分析](http://www.imooc.com/learn/745)》《[用grunt搭建自动化的web前端开发环境](http://study.163.com/course/courseMain.htm?courseId=1103003)》《[json2.js源码解读](http://study.163.com/course/courseMain.htm?courseId=691008)》 + +如果你感觉有收获,欢迎给我打赏 ———— 以激励我更多输出优质开源内容 + +![图片](https://camo.githubusercontent.com/e1558b631931e0a1606c769a61f48770cc0ccb56/687474703a2f2f696d61676573323031352e636e626c6f67732e636f6d2f626c6f672f3133383031322f3230313730322f3133383031322d32303137303232383131323233373739382d313530373139363634332e706e67) + diff --git a/novel-front/src/main/resources/static/wangEditor/bower.json b/novel-front/src/main/resources/static/wangEditor/bower.json new file mode 100644 index 0000000..0c4ed0d --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/bower.json @@ -0,0 +1,20 @@ +{ + "name": "wangEditor", + "description": "wangEditor - 基于javascript和css开发的 web 富文本编辑器, 轻量、简洁、易用、开源免费", + "main": "release/wangEditor.js", + "authors": [ + "wangfupeng " + ], + "license": "MIT", + "keywords": [ + "wangEditor", + "web 富文本编辑器" + ], + "homepage": "https://github.com/wangfupeng1988/wangEditor", + "moduleType": [ + "amd", + "cmd", + "node" + ], + "private": true +} diff --git a/novel-front/src/main/resources/static/wangEditor/docs/dev/README.md b/novel-front/src/main/resources/static/wangEditor/docs/dev/README.md new file mode 100644 index 0000000..473dbcb --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/dev/README.md @@ -0,0 +1,25 @@ +面向开发者的文档 + + +框架介绍 + +- 下载和运行 +- 目录结构介绍 +- `example`目录 +- `src`目录(`js`目录,`less`目录) +- `package.json` +- `gulpfile.js` + +如何提交 PR + + + +上线 + +- 修改`package.json`版本 +- 提交到github,并创建tag +- 提交到 npm +- 更新 .md 文档 +- 文档同步到 kancloud +- …… + diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/01-getstart/01-demo.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/01-getstart/01-demo.md new file mode 100644 index 0000000..b71612f --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/01-getstart/01-demo.md @@ -0,0 +1,41 @@ +# 简单的 demo + +## 下载 + +- 点击 [https://github.com/wangfupeng1988/wangEditor/releases](https://github.com/wangfupeng1988/wangEditor/releases) 下载最新版。进入`release`文件夹下找到`wangEditor.js`或者`wangEditor.min.js`即可 +- 使用CDN:[//unpkg.com/wangeditor/release/wangEditor.min.js](https://unpkg.com/wangeditor/release/wangEditor.min.js) +- 使用`bower`下载:`bower install wangEditor` (前提保证电脑已安装了`bower`) + +*PS:支持`npm`安装,请参见后面的章节* + +## 制作 demo + +编辑器效果如下。 + +![图片](https://camo.githubusercontent.com/f3d072718d8fcbbacf8cc80465a34cceffcf5b4a/687474703a2f2f696d61676573323031352e636e626c6f67732e636f6d2f626c6f672f3133383031322f3230313730352f3133383031322d32303137303533303230323930353633332d313834303135383938312e706e67) + +代码示例如下。**注意,以下代码中无需引用任何 CSS 文件!!!** + +```html + + + + + wangEditor demo + + +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          + + + + + + +``` diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/01-getstart/02-use-module.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/01-getstart/02-use-module.md new file mode 100644 index 0000000..0356a68 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/01-getstart/02-use-module.md @@ -0,0 +1,49 @@ +# 使用模块定义 + +wangEditor 除了直接使用` + + +``` + +## CommonJS + +可以使用`npm install wangeditor`安装(注意,这里`wangeditor`全是**小写字母**) + +```javascript +// 引用 +var E = require('wangeditor') // 使用 npm 安装 +var E = require('/wangEditor.min.js') // 使用下载的源码 + +// 创建编辑器 +var editor = new E('#editor') +editor.create() +``` diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/01-getstart/03-sperate.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/01-getstart/03-sperate.md new file mode 100644 index 0000000..0fcd276 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/01-getstart/03-sperate.md @@ -0,0 +1,48 @@ +# 菜单和编辑区域分离 + +如果你想要像 知乎专栏、简书、石墨、网易云笔记 这些编辑页面一样,将编辑区域和菜单分离,也可以实现。 + +这样,菜单和编辑器区域就是使用者可自己控制的元素,可自定义样式。例如:将菜单`fixed`、编辑器区域高度自动增加等 + +## 代码示例 + +```html + + + + + wangEditor 菜单和编辑器区域分离 + + + +
          +
          +
          中间隔离带
          +
          +

          请输入内容

          +
          + + + + + +``` + +## 显示效果 + +从上面代码可以看出,菜单和编辑区域其实就是两个单独的`
          `,位置、尺寸都可以随便定义。 + +![](http://images2015.cnblogs.com/blog/138012/201705/138012-20170531224756289-7442240.png) + diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/01-getstart/04-multi.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/01-getstart/04-multi.md new file mode 100644 index 0000000..aee3540 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/01-getstart/04-multi.md @@ -0,0 +1,50 @@ +# 同一个页面创建多个编辑器 + +wangEditor 支持一个页面创建多个编辑器 + +## 代码示例 + +```html + + + + + wangEditor 一个页面多个编辑器 + + + +
          +
          +
          中间隔离带
          +
          +

          第一个 demo(菜单和编辑器区域分开)

          +
          + +
          +

          第二个 demo(常规)

          +
          + + + + + + +``` + diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/02-content/01-set-content.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/02-content/01-set-content.md new file mode 100644 index 0000000..7631f6f --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/02-content/01-set-content.md @@ -0,0 +1,46 @@ +# 设置内容 + +以下方式中,如果条件允许,尽量使用第一种方式,效率最高。 + +## html 初始化内容 + +直接将内容写到要创建编辑器的`
          `标签中 + +```html +
          +

          初始化的内容

          +

          初始化的内容

          +
          + + + +``` + +## js 设置内容 + +创建编辑器之后,使用`editor.txt.html(...)`设置编辑器内容 + +```html +
          +
          + + + +``` + +## 追加内容 + +创建编辑器之后,可使用`editor.txt.append('

          追加的内容

          ')`继续追加内容。 + +## 清空内容 + +可使用`editor.txt.clear()`清空编辑器内容 diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/02-content/02-get-content.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/02-content/02-get-content.md new file mode 100644 index 0000000..e21c277 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/02-content/02-get-content.md @@ -0,0 +1,80 @@ +# 读取内容 + +可以`html`和`text`的方式读取编辑器的内容。 + +```html +
          +

          欢迎使用 wangEditor 编辑器

          +
          + + + + + +``` + +需要注意的是:**从编辑器中获取的 html 代码是不包含任何样式的纯 html**,如果显示的时候需要对其中的`` `` `
          `等标签进行自定义样式(这样既可实现多皮肤功能),下面提供了编辑器中使用的样式供参考 + +```css +/* table 样式 */ +table { + border-top: 1px solid #ccc; + border-left: 1px solid #ccc; +} +table td, +table th { + border-bottom: 1px solid #ccc; + border-right: 1px solid #ccc; + padding: 3px 5px; +} +table th { + border-bottom: 2px solid #ccc; + text-align: center; +} + +/* blockquote 样式 */ +blockquote { + display: block; + border-left: 8px solid #d0e5f2; + padding: 5px 10px; + margin: 10px 0; + line-height: 1.4; + font-size: 100%; + background-color: #f1f1f1; +} + +/* code 样式 */ +code { + display: inline-block; + *display: inline; + *zoom: 1; + background-color: #f1f1f1; + border-radius: 3px; + padding: 3px 5px; + margin: 0 3px; +} +pre code { + display: block; +} + +/* ul ol 样式 */ +ul, ol { + margin: 10px 0 10px 20px; +} +``` + diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/02-content/03-use-textarea.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/02-content/03-use-textarea.md new file mode 100644 index 0000000..1707e13 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/02-content/03-use-textarea.md @@ -0,0 +1,25 @@ +# 使用 textarea + +wangEditor 从`v3`版本开始不支持 textarea ,但是可以通过`onchange`来实现 textarea 中提交富文本内容。 + +```html +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          + + + + + +``` \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/02-content/04-get-json.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/02-content/04-get-json.md new file mode 100644 index 0000000..d623ac4 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/02-content/04-get-json.md @@ -0,0 +1,82 @@ +# 获取 JSON 格式的内容 + +可以通过`editor.txt.getJSON`获取 JSON 格式的编辑器的内容,`v3.0.14`开始支持,示例如下 + +```html +
          +

          欢迎使用 wangEditor 富文本编辑器

          + +
          + + + + +``` + + +----- + +如果编辑器区域的 html 内容是如下: + +```html +

          欢迎使用 wangEditor 富文本编辑器

          + +``` + +那么获取的 JSON 格式就如下: + +```json +[ + { + "tag": "p", + "attrs": [], + "children": [ + "欢迎使用 ", + { + "tag": "b", + "attrs": [], + "children": [ + "wangEditor" + ] + }, + " 富文本编辑器" + ] + }, + { + "tag": "img", + "attrs": [ + { + "name": "src", + "value": "https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo_top_ca79a146.png" + }, + { + "name": "style", + "value": "max-width:100%;" + } + ], + "children": [] + }, + { + "tag": "p", + "attrs": [], + "children": [ + { + "tag": "br", + "attrs": [], + "children": [] + } + ] + } +] +``` \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/01-menu.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/01-menu.md new file mode 100644 index 0000000..bce6ba7 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/01-menu.md @@ -0,0 +1,52 @@ +# 自定义菜单 + +编辑器创建之前,可使用`editor.customConfig.menus`定义显示哪些菜单和菜单的顺序。**注意:v3 版本的菜单不支持换行折叠了(因为换行之后菜单栏是在太难看),如果菜单栏宽度不够,建议精简菜单项。** + +## 代码示例 + +```html +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          + + + +``` + +## 默认菜单 + +编辑默认的菜单配置如下 + +```javascript +[ + 'head', // 标题 + 'bold', // 粗体 + 'italic', // 斜体 + 'underline', // 下划线 + 'strikeThrough', // 删除线 + 'foreColor', // 文字颜色 + 'backColor', // 背景颜色 + 'link', // 插入链接 + 'list', // 列表 + 'justify', // 对齐方式 + 'quote', // 引用 + 'emoticon', // 表情 + 'image', // 插入图片 + 'table', // 表格 + 'video', // 插入视频 + 'code', // 插入代码 + 'undo', // 撤销 + 'redo' // 重复 +] +``` diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/02-debug.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/02-debug.md new file mode 100644 index 0000000..e94d7a4 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/02-debug.md @@ -0,0 +1,21 @@ +# 定义 debug 模式 + +可通过`editor.customConfig.debug = true`配置`debug`模式,`debug`模式下,有 JS 错误会以`throw Error`方式提示出来。默认值为`false`,即不会抛出异常。 + +但是,在实际开发中不建议直接定义为`true`或者`false`,可通过 url 参数进行干预,示例如下: + +```html +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          + + + +``` + diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/03-onchange.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/03-onchange.md new file mode 100644 index 0000000..296091c --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/03-onchange.md @@ -0,0 +1,40 @@ +# 配置 onchange 函数 + +配置`onchange`函数之后,用户操作(鼠标点击、键盘打字等)导致的内容变化之后,会自动触发`onchange`函数执行。 + +但是,**用户自己使用 JS 修改了`div1`的`innerHTML`,不会自动触发`onchange`函数**,此时你可以通过执行`editor.change()`来手动触发`onchange`函数的执行。 + +```html +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          + +

          手动触发 onchange 函数执行

          + + + + +``` + +----- + +另外,如果需要修改 onchange 触发的延迟时间(onchange 会在用户无任何操作的 xxx 毫秒之后被触发),可通过如下配置 + +```js +// 自定义 onchange 触发的延迟时间,默认为 200 ms +editor.customConfig.onchangeTimeout = 1000 // 单位 ms +``` diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/04-z-index.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/04-z-index.md new file mode 100644 index 0000000..129bf1c --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/04-z-index.md @@ -0,0 +1,19 @@ +# 配置编辑区域的 z-index + +编辑区域的`z-index`默认为`10000`,可自定义修改,代码配置如下。需改之后,编辑区域和菜单的`z-index`会同时生效。 + +```html +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          + + + +``` + + diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/05-lang.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/05-lang.md new file mode 100644 index 0000000..01900fe --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/05-lang.md @@ -0,0 +1,30 @@ +# 多语言 + +可以通过`lang`配置项配置多语言,其实就是通过该配置项中的配置,将编辑器显示的文字,替换成你需要的文字。 + +```html +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          + + + +``` + +**注意,以上代码中的`链接文字`要写在`链接`前面,`上传图片`要写在`上传`前面,因为前者包含后者。如果不这样做,可能会出现替换不全的问题,切记切记!** diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/06-paste.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/06-paste.md new file mode 100644 index 0000000..a7126c8 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/06-paste.md @@ -0,0 +1,33 @@ +# 粘贴文本 + +**注意,以下配置暂时对 IE 无效。IE 暂时使用系统自带的粘贴功能,没有样式过滤!** + +## 关闭粘贴样式的过滤 + +当从其他网页复制文本内容粘贴到编辑器中,编辑器会默认过滤掉复制文本中自带的样式,目的是让粘贴后的文本变得更加简洁和轻量。用户可通过`editor.customConfig.pasteFilterStyle = false`手动关闭掉粘贴样式的过滤。 + +## 自定义处理粘贴的文本内容 + +使用者可通过`editor.customConfig.pasteTextHandle`对粘贴的文本内容进行自定义的过滤、处理等操作,然后返回处理之后的文本内容。编辑器最终会粘贴用户处理之后并且返回的的内容。 + +## 示例代码 + +```html +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          + + + +``` \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/07-linkImgCallback.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/07-linkImgCallback.md new file mode 100644 index 0000000..52169e8 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/07-linkImgCallback.md @@ -0,0 +1,12 @@ +# 插入网络图片的回调 + +插入网络图片时,可通过如下配置获取到图片的信息。`v3.0.10`开始支持。 + +```js +var E = window.wangEditor +var editor = new E('#div1') +editor.customConfig.linkImgCallback = function (url) { + console.log(url) // url 即插入图片的地址 +} +editor.create() +``` diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/08-linkCheck.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/08-linkCheck.md new file mode 100644 index 0000000..b581438 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/08-linkCheck.md @@ -0,0 +1,16 @@ +# 插入链接的校验 + +插入链接时,可通过如下配置对文字和链接进行校验。`v3.0.10`开始支持。 + +```js +var E = window.wangEditor +var editor = new E('#div1') +editor.customConfig.linkCheck = function (text, link) { + console.log(text) // 插入的文字 + console.log(link) // 插入的链接 + + return true // 返回 true 表示校验成功 + // return '验证失败' // 返回字符串,即校验失败的提示信息 +} +editor.create() +``` \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/09-onfocus.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/09-onfocus.md new file mode 100644 index 0000000..7caba6b --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/09-onfocus.md @@ -0,0 +1,19 @@ +# 配置 onfocus 函数 + +配置`onfocus`函数之后,用户点击富文本区域会触发`onfocus`函数执行。 + +```html +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          + + + +``` diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/10-onblur.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/10-onblur.md new file mode 100644 index 0000000..f7544bc --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/10-onblur.md @@ -0,0 +1,20 @@ +# 配置 onblur 函数 + +配置`onblur`函数之后,如果当前有手动获取焦点的富文本并且鼠标点击富文本以外的区域,则会触发`onblur`函数执行。 + +```html +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          + + + +``` diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/11-linkImgCheck.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/11-linkImgCheck.md new file mode 100644 index 0000000..efb3320 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/11-linkImgCheck.md @@ -0,0 +1,15 @@ +# 插入网络图片的校验 + +插入网络图片时,可对图片地址做自定义校验。`v3.0.13`开始支持。 + +```js +var E = window.wangEditor +var editor = new E('#div1') +editor.customConfig.linkImgCheck = function (src) { + console.log(src) // 图片的链接 + + return true // 返回 true 表示校验成功 + // return '验证失败' // 返回字符串,即校验失败的提示信息 +} +editor.create() +``` \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/12-colors.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/12-colors.md new file mode 100644 index 0000000..e86e57d --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/12-colors.md @@ -0,0 +1,29 @@ +# 配置字体颜色、背景色 + +编辑器的字体颜色和背景色,可以通过`editor.customConfig.colors`自定义配置 + +```html +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          + + + +``` \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/13-emot.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/13-emot.md new file mode 100644 index 0000000..5363834 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/13-emot.md @@ -0,0 +1,48 @@ +# 配置表情 + +`v3.0.15`开始支持配置表情,支持图片格式和 emoji ,可通过`editor.customConfig.emotions`配置。**注意看代码示例中的注释:** + +```html +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          + + + +``` + +温馨提示:需要表情图片可以去 https://api.weibo.com/2/emotions.json?source=1362404091 和 http://yuncode.net/code/c_524ba520e58ce30 逛一逛,或者自己搜索。 diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/01-show-tab.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/01-show-tab.md new file mode 100644 index 0000000..8261950 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/01-show-tab.md @@ -0,0 +1,52 @@ +# 隐藏/显示 tab + +## 显示“上传图片”tab + +默认情况下,编辑器不会显示“上传图片”的tab,因为你还没有配置上传图片的信息。 + +![](http://images2015.cnblogs.com/blog/138012/201706/138012-20170601204308039-691571074.png) + +参考一下示例显示“上传图片”tab + +```html +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          + + + +``` + +显示效果 + +![](http://images2015.cnblogs.com/blog/138012/201706/138012-20170601204504524-830243744.png) + +## 隐藏“网络图片”tab + +默认情况下,“网络图片”tab是一直存在的。如果不需要,可以参考一下示例来隐藏它。 + +```html +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          + + + +``` diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/02-base64.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/02-base64.md new file mode 100644 index 0000000..3a2d71a --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/02-base64.md @@ -0,0 +1,23 @@ +# 使用 base64 保存图片 + +如果需要使用 base64 编码直接将图片插入到内容中,可参考一下示例配置 + +```html +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          + + + +``` + +示例效果如下 + +![](http://images2015.cnblogs.com/blog/138012/201706/138012-20170601204759258-1412289899.png) + + diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/03-upload-config.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/03-upload-config.md new file mode 100644 index 0000000..6720ce6 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/03-upload-config.md @@ -0,0 +1,188 @@ +# 上传图片 & 配置 + +将图片上传到服务器上的配置方式 + +## 上传图片 + +参考如下代码 + +```html +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          + + + +``` + +其中`/upload`是上传图片的服务器端接口,接口返回的**数据格式**如下(**实际返回数据时,不要加任何注释!!!**) + +```json +{ + // errno 即错误代码,0 表示没有错误。 + // 如果有错误,errno != 0,可通过下文中的监听函数 fail 拿到该错误码进行自定义处理 + "errno": 0, + + // data 是一个数组,返回若干图片的线上地址 + "data": [ + "图片1地址", + "图片2地址", + "……" + ] +} +``` + +## 限制图片大小 + +默认限制图片大小是 5M + +```javascript +// 将图片大小限制为 3M +editor.customConfig.uploadImgMaxSize = 3 * 1024 * 1024 +``` + +## 限制一次最多能传几张图片 + +默认为 10000 张(即不限制),需要限制可自己配置 + +```javascript +// 限制一次最多上传 5 张图片 +editor.customConfig.uploadImgMaxLength = 5 +``` + +## 自定义上传参数 + +上传图片时可自定义传递一些参数,例如传递验证的`token`等。参数会被添加到`formdata`中。 + +```javascript +editor.customConfig.uploadImgParams = { + token: 'abcdef12345' // 属性值会自动进行 encode ,此处无需 encode +} +``` + +如果**还需要**将参数拼接到 url 中,可再加上如下配置 + +``` +editor.customConfig.uploadImgParamsWithUrl = true +``` + +## 自定义 fileName + +上传图片时,可自定义`filename`,即在使用`formdata.append(name, file)`添加图片文件时,自定义第一个参数。 + +```javascript +editor.customConfig.uploadFileName = 'yourFileName' +``` + +## 自定义 header + +上传图片时刻自定义设置 header + +```javascript +editor.customConfig.uploadImgHeaders = { + 'Accept': 'text/x-json' +} +``` + +## withCredentials(跨域传递 cookie) + +跨域上传中如果需要传递 cookie 需设置 withCredentials + +```javascript +editor.customConfig.withCredentials = true +``` + +## 自定义 timeout 时间 + +默认的 timeout 时间是 10 秒钟 + +```javascript +// 将 timeout 时间改为 3s +editor.customConfig.uploadImgTimeout = 3000 +``` + +## 监听函数 + +可使用监听函数在上传图片的不同阶段做相应处理 + +```javascript +editor.customConfig.uploadImgHooks = { + before: function (xhr, editor, files) { + // 图片上传之前触发 + // xhr 是 XMLHttpRequst 对象,editor 是编辑器对象,files 是选择的图片文件 + + // 如果返回的结果是 {prevent: true, msg: 'xxxx'} 则表示用户放弃上传 + // return { + // prevent: true, + // msg: '放弃上传' + // } + }, + success: function (xhr, editor, result) { + // 图片上传并返回结果,图片插入成功之后触发 + // xhr 是 XMLHttpRequst 对象,editor 是编辑器对象,result 是服务器端返回的结果 + }, + fail: function (xhr, editor, result) { + // 图片上传并返回结果,但图片插入错误时触发 + // xhr 是 XMLHttpRequst 对象,editor 是编辑器对象,result 是服务器端返回的结果 + }, + error: function (xhr, editor) { + // 图片上传出错时触发 + // xhr 是 XMLHttpRequst 对象,editor 是编辑器对象 + }, + timeout: function (xhr, editor) { + // 图片上传超时时触发 + // xhr 是 XMLHttpRequst 对象,editor 是编辑器对象 + }, + + // 如果服务器端返回的不是 {errno:0, data: [...]} 这种格式,可使用该配置 + // (但是,服务器端返回的必须是一个 JSON 格式字符串!!!否则会报错) + customInsert: function (insertImg, result, editor) { + // 图片上传并返回结果,自定义插入图片的事件(而不是编辑器自动插入图片!!!) + // insertImg 是插入图片的函数,editor 是编辑器对象,result 是服务器端返回的结果 + + // 举例:假如上传图片成功后,服务器端返回的是 {url:'....'} 这种格式,即可这样插入图片: + var url = result.url + insertImg(url) + + // result 必须是一个 JSON 格式字符串!!!否则报错 + } +} +``` + +## 自定义提示方法 + +上传图片的错误提示默认使用`alert`弹出,你也可以自定义用户体验更好的提示方式 + +```javascript +editor.customConfig.customAlert = function (info) { + // info 是需要提示的内容 + alert('自定义提示:' + info) +} +``` + +## 自定义上传图片事件 + +如果想完全自己控制图片上传的过程,可以使用如下代码 + +```javascript +editor.customConfig.customUploadImg = function (files, insert) { + // files 是 input 中选中的文件列表 + // insert 是获取图片 url 后,插入到编辑器的方法 + + // 上传代码返回结果之后,将图片插入到编辑器中 + insert(imgUrl) +} +``` diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/04-qiniu.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/04-qiniu.md new file mode 100644 index 0000000..e5c2ca4 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/04-qiniu.md @@ -0,0 +1,115 @@ +# 上传到七牛云存储 + +完整的 demo 请参见 https://github.com/wangfupeng1988/js-sdk ,可下载下来本地运行 demo + +> 注意:配置了上传七牛云存储之后,**无法再使用插入网络图片** + +核心代码如下: + +```js +var E = window.wangEditor +var editor = new E('#div1') +// 允许上传到七牛云存储 +editor.customConfig.qiniu = true +editor.create() + +// 初始化七牛上传 +uploadInit() + +// 初始化七牛上传的方法 +function uploadInit() { + // 获取相关 DOM 节点的 ID + var btnId = editor.imgMenuId; + var containerId = editor.toolbarElemId; + var textElemId = editor.textElemId; + + // 创建上传对象 + var uploader = Qiniu.uploader({ + runtimes: 'html5,flash,html4', //上传模式,依次退化 + browse_button: btnId, //上传选择的点选按钮,**必需** + uptoken_url: '/uptoken', + //Ajax请求upToken的Url,**强烈建议设置**(服务端提供) + // uptoken : '', + //若未指定uptoken_url,则必须指定 uptoken ,uptoken由其他程序生成 + // unique_names: true, + // 默认 false,key为文件名。若开启该选项,SDK会为每个文件自动生成key(文件名) + // save_key: true, + // 默认 false。若在服务端生成uptoken的上传策略中指定了 `sava_key`,则开启,SDK在前端将不对key进行任何处理 + domain: 'http://7xrjl5.com1.z0.glb.clouddn.com/', + //bucket 域名,下载资源时用到,**必需** + container: containerId, //上传区域DOM ID,默认是browser_button的父元素, + max_file_size: '100mb', //最大文件体积限制 + flash_swf_url: '../js/plupload/Moxie.swf', //引入flash,相对路径 + filters: { + mime_types: [ + //只允许上传图片文件 (注意,extensions中,逗号后面不要加空格) + { title: "图片文件", extensions: "jpg,gif,png,bmp" } + ] + }, + max_retries: 3, //上传失败最大重试次数 + dragdrop: true, //开启可拖曳上传 + drop_element: textElemId, //拖曳上传区域元素的ID,拖曳文件或文件夹后可触发上传 + chunk_size: '4mb', //分块上传时,每片的体积 + auto_start: true, //选择文件后自动上传,若关闭需要自己绑定事件触发上传 + init: { + 'FilesAdded': function(up, files) { + plupload.each(files, function(file) { + // 文件添加进队列后,处理相关的事情 + printLog('on FilesAdded'); + }); + }, + 'BeforeUpload': function(up, file) { + // 每个文件上传前,处理相关的事情 + printLog('on BeforeUpload'); + }, + 'UploadProgress': function(up, file) { + // 显示进度 + printLog('进度 ' + file.percent) + }, + 'FileUploaded': function(up, file, info) { + // 每个文件上传成功后,处理相关的事情 + // 其中 info 是文件上传成功后,服务端返回的json,形式如 + // { + // "hash": "Fh8xVqod2MQ1mocfI4S4KpRL6D98", + // "key": "gogopher.jpg" + // } + printLog(info); + // 参考http://developer.qiniu.com/docs/v6/api/overview/up/response/simple-response.html + + var domain = up.getOption('domain'); + var res = $.parseJSON(info); + var sourceLink = domain + res.key; //获取上传成功后的文件的Url + + printLog(sourceLink); + + // 插入图片到editor + editor.cmd.do('insertHtml', '') + }, + 'Error': function(up, err, errTip) { + //上传出错时,处理相关的事情 + printLog('on Error'); + }, + 'UploadComplete': function() { + //队列文件处理完毕后,处理相关的事情 + printLog('on UploadComplete'); + } + // Key 函数如果有需要自行配置,无特殊需要请注释 + //, + // 'Key': function(up, file) { + // // 若想在前端对每个文件的key进行个性化处理,可以配置该函数 + // // 该配置必须要在 unique_names: false , save_key: false 时才生效 + // var key = ""; + // // do something with key here + // return key + // } + } + // domain 为七牛空间(bucket)对应的域名,选择某个空间后,可通过"空间设置->基本设置->域名设置"查看获取 + // uploader 为一个plupload对象,继承了所有plupload的方法,参考http://plupload.com/docs + }); +} + +// 封装 console.log 函数 +function printLog(title, info) { + window.console && console.log(title, info); +} +``` \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/01-全屏-预览-查看源码.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/01-全屏-预览-查看源码.md new file mode 100644 index 0000000..27588c8 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/01-全屏-预览-查看源码.md @@ -0,0 +1,10 @@ +# 全屏 & 预览 & 查看源码 + +## 全屏 + +虽然 wangEditor 没有内置全屏功能,但是你可以通过简单的代码来搞定,作者已经做了一个demo来示范。通过运行 demo(文档一开始就介绍了)即可看到该示例页面,直接查看页面源代码即可。 + +## 预览 & 查看源码 + +如果需要预览和查看源码的功能,也需要跟全屏功能一样,自己定义按钮。点击按钮时通过`editor.txt.html()`获取编辑器内容,然后自定义实现预览和查看源码功能。 + diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/02-上传附件.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/02-上传附件.md new file mode 100644 index 0000000..1f3cc88 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/02-上传附件.md @@ -0,0 +1,24 @@ +# 关于上传附件 + +**有用户问到编辑器能否有上传附件的功能?我的建议是不要把附件做到内容中。** + +原因很简单,如果将附件上传之后再插入到富文本内容中,其实就是一个链接的形式。如下图: + +![](http://box.kancloud.cn/2016-02-19_56c718ec6f9bf.png) + +而用户在用编辑器编辑文本时,操作是非常随意多样的,他把这个链接删了,你服务器要想实时删除上传的附件文件,是难监控到的。 + +还有,用户如果要上传很多个附件,也是很难管理的,还是因为富文本的内容变化多样,用户可以随便在什么地方插入附件,而且形式和链接一样。 + +------- + +反过来,我们想一下平时用附件和编辑器最多的产品是什么——是邮箱。邮箱如何处理附件的,大家应该很清楚。它把文本内容和附件分开,这样附件就可以很轻松、明了的进行管理,绝对不会和编辑内容的链接产生混淆。 + +![](http://box.kancloud.cn/2016-02-19_56c718ec83f7e.png) + +你能看到的所有的邮箱产品,几乎都是这样设计的。 + +------- + +因此,在你提问编辑器能否上传附件这个问题的时候,可以想一下能否参照邮箱的实现来设计? + diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/03-markdown.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/03-markdown.md new file mode 100644 index 0000000..c723347 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/03-markdown.md @@ -0,0 +1,12 @@ +# 关于 markdown + +**好多使用者问到,wangEditor编辑器能否集成markdown?——答案是:富文本编辑器无法和markdown集成到一起。** + +----- + + +你可以参考 [简书](http://www.jianshu.com/) 的实现方式,简书中编辑器也无法实现富文本和`markdown`的自由切换。要么使用富文本编写文章,要么使用`markdown`编写文章,不能公用。 + +本质上,富文本编辑器和`markdown`编辑器是两回事儿。 + + diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/04-xss.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/04-xss.md new file mode 100644 index 0000000..286337f --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/04-xss.md @@ -0,0 +1,23 @@ +# 预防 XSS 攻击 + +> 术业有专攻 + +要想在前端预防 xss 攻击,还得依赖于其他工具,例如[xss.js](http://jsxss.com/zh/index.html)(如果打不开页面,就从百度搜一下) + +代码示例如下 + +```html + + + +``` + diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/05-react.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/05-react.md new file mode 100644 index 0000000..8dcc2d4 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/05-react.md @@ -0,0 +1,7 @@ +# 用于 React + +如果需要将 wangEditor 用于 React 中,可参见如下示例 + +- 下载源码 `git clone git@github.com:wangfupeng1988/wangEditor.git` +- 进入 React 示例目录 `cd wangEditor/example/demo/in-react/`,查看`src/App.js`即可 +- 也可以运行`npm install && npm start`查看在 React 中的效果(`http://localhost:3000/`) diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/06-vue.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/06-vue.md new file mode 100644 index 0000000..47e167a --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/06-vue.md @@ -0,0 +1,7 @@ +# 用于 Vue + +如果需要将 wangEditor 用于 Vue 中,可参见如下示例 + +- 下载源码 `git clone git@github.com:wangfupeng1988/wangEditor.git` +- 进入 vue 示例目录 `cd wangEditor/example/demo/in-vue/`,查看`src/components/Editor.vue`即可 +- 也可以运行`npm install && npm run dev`查看在 vue 中的效果(`http://localhost:8080/`) diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/07-ng.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/07-ng.md new file mode 100644 index 0000000..1d59afc --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/07-ng.md @@ -0,0 +1,3 @@ +# 用于 Angular + +感谢 [@fengnovo](https://github.com/fengnovo) 提供了一个 angular2 的兼容示例,可供参考 https://github.com/fengnovo/wangEditor/tree/master/example/demo/in-ng2 diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/08-api.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/08-api.md new file mode 100644 index 0000000..e8b4f6d --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/08-api.md @@ -0,0 +1,27 @@ +# 常用 API + +## 属性 + +- 获取编辑器的唯一标识 `editor.id` +- 获取编辑区域 DOM 节点 `editor.$textElem[0]` +- 获取菜单栏 DOM 节点 `editor.$toolbarElem[0]` +- 获取编辑器配置信息 `editor.config` +- 获取编辑区域 DOM 节点 ID `editor.textElemId` +- 获取菜单栏 DOM 节点 ID `editor.toolbarElemId` +- 获取菜单栏中“图片”菜单的 DOM 节点 ID `editor.imgMenuId` + +## 方法 + +### 选取操作 + +- 获取选中的文字 `editor.selection.getSelectionText()` +- 获取选取所在的 DOM 节点 `editor.selection.getSelectionContainerElem()[0]` + - 开始节点 `editor.selection.getSelectionStartElem()[0]` + - 结束节点 `editor.selection.getSelectionEndElem()[0]` +- 折叠选取 `editor.selection.collapseRange()` +- 更多可参见[源码中](https://github.com/wangfupeng1988/wangEditor/blob/master/src/js/selection/index.js)定义的方法 + +### 编辑内容操作 + +- 插入 HTML `editor.cmd.do('insertHTML', '

          ...

          ')` +- 可通过`editor.cmd.do(name, value)`来执行`document.execCommand(name, false, value)`的操作 \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/README.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/README.md new file mode 100644 index 0000000..4c801e6 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/README.md @@ -0,0 +1,3 @@ +同步[../../README.md](../../README.md)的内容 + +将所有文档跟新到 www.kancloud.cn/wangfupeng/wangeditor3/332599 中 diff --git a/novel-front/src/main/resources/static/wangEditor/example/README.md b/novel-front/src/main/resources/static/wangEditor/example/README.md new file mode 100644 index 0000000..6e17ca0 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/README.md @@ -0,0 +1 @@ +wangEditor demo diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/package.json b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/package.json new file mode 100644 index 0000000..054d5cd --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/package.json @@ -0,0 +1,19 @@ +{ + "name": "wangeditor-in-react", + "version": "0.1.0", + "private": true, + "dependencies": { + "react": "^15.5.4", + "react-dom": "^15.5.4", + "wangeditor": ">=3.0.0" + }, + "devDependencies": { + "react-scripts": "1.0.7" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test --env=jsdom", + "eject": "react-scripts eject" + } +} diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/public/favicon.ico b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/public/favicon.ico new file mode 100644 index 0000000..5c125de Binary files /dev/null and b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/public/favicon.ico differ diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/public/index.html b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/public/index.html new file mode 100644 index 0000000..7bee027 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/public/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + + React App + + + +
          + + + diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/public/manifest.json b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/public/manifest.json new file mode 100644 index 0000000..be607e4 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/public/manifest.json @@ -0,0 +1,15 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "192x192", + "type": "image/png" + } + ], + "start_url": "./index.html", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/App.css b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/App.css new file mode 100644 index 0000000..15adfdc --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/App.css @@ -0,0 +1,24 @@ +.App { + text-align: center; +} + +.App-logo { + animation: App-logo-spin infinite 20s linear; + height: 80px; +} + +.App-header { + background-color: #222; + height: 150px; + padding: 20px; + color: white; +} + +.App-intro { + font-size: large; +} + +@keyframes App-logo-spin { + from { transform: rotate(0deg); } + to { transform: rotate(360deg); } +} diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/App.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/App.js new file mode 100644 index 0000000..95b21fb --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/App.js @@ -0,0 +1,48 @@ +import React, { Component } from 'react'; +import logo from './logo.svg'; +import './App.css'; +import E from 'wangeditor' + +class App extends Component { + constructor(props, context) { + super(props, context); + this.state = { + editorContent: '' + } + } + render() { + return ( +
          +
          + logo +

          Welcome to React

          +
          +

          + To get started, edit src/App.js and save to reload. +

          + + {/* 将生成编辑器 */} +
          +
          + + +
          + ); + } + componentDidMount() { + const elem = this.refs.editorElem + const editor = new E(elem) + // 使用 onchange 函数监听内容的变化,并实时更新到 state 中 + editor.customConfig.onchange = html => { + this.setState({ + editorContent: html + }) + } + editor.create() + } + clickHandle() { + alert(this.state.editorContent) + } +} + +export default App; diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/App.test.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/App.test.js new file mode 100644 index 0000000..b84af98 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/App.test.js @@ -0,0 +1,8 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import App from './App'; + +it('renders without crashing', () => { + const div = document.createElement('div'); + ReactDOM.render(, div); +}); diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/index.css b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/index.css new file mode 100644 index 0000000..b4cc725 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/index.css @@ -0,0 +1,5 @@ +body { + margin: 0; + padding: 0; + font-family: sans-serif; +} diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/index.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/index.js new file mode 100644 index 0000000..53c7688 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/index.js @@ -0,0 +1,8 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import App from './App'; +import registerServiceWorker from './registerServiceWorker'; +import './index.css'; + +ReactDOM.render(, document.getElementById('root')); +registerServiceWorker(); diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/logo.svg b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/logo.svg new file mode 100644 index 0000000..6b60c10 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/logo.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/registerServiceWorker.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/registerServiceWorker.js new file mode 100644 index 0000000..9966897 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/registerServiceWorker.js @@ -0,0 +1,51 @@ +// In production, we register a service worker to serve assets from local cache. + +// This lets the app load faster on subsequent visits in production, and gives +// it offline capabilities. However, it also means that developers (and users) +// will only see deployed updates on the "N+1" visit to a page, since previously +// cached resources are updated in the background. + +// To learn more about the benefits of this model, read https://goo.gl/KwvDNy. +// This link also includes instructions on opting out of this behavior. + +export default function register() { + if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { + window.addEventListener('load', () => { + const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; + navigator.serviceWorker + .register(swUrl) + .then(registration => { + registration.onupdatefound = () => { + const installingWorker = registration.installing; + installingWorker.onstatechange = () => { + if (installingWorker.state === 'installed') { + if (navigator.serviceWorker.controller) { + // At this point, the old content will have been purged and + // the fresh content will have been added to the cache. + // It's the perfect time to display a "New content is + // available; please refresh." message in your web app. + console.log('New content is available; please refresh.'); + } else { + // At this point, everything has been precached. + // It's the perfect time to display a + // "Content is cached for offline use." message. + console.log('Content is cached for offline use.'); + } + } + }; + }; + }) + .catch(error => { + console.error('Error during service worker registration:', error); + }); + }); + } +} + +export function unregister() { + if ('serviceWorker' in navigator) { + navigator.serviceWorker.ready.then(registration => { + registration.unregister(); + }); + } +} diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/.babelrc b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/.babelrc new file mode 100644 index 0000000..13f0e47 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/.babelrc @@ -0,0 +1,14 @@ +{ + "presets": [ + ["env", { "modules": false }], + "stage-2" + ], + "plugins": ["transform-runtime"], + "comments": false, + "env": { + "test": { + "presets": ["env", "stage-2"], + "plugins": [ "istanbul" ] + } + } +} diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/.editorconfig b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/.editorconfig new file mode 100644 index 0000000..9d08a1a --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/.postcssrc.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/.postcssrc.js new file mode 100644 index 0000000..ea9a5ab --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/.postcssrc.js @@ -0,0 +1,8 @@ +// https://github.com/michael-ciniawsky/postcss-load-config + +module.exports = { + "plugins": { + // to edit target browsers: use "browserlist" field in package.json + "autoprefixer": {} + } +} diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/build.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/build.js new file mode 100644 index 0000000..6b8add1 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/build.js @@ -0,0 +1,35 @@ +require('./check-versions')() + +process.env.NODE_ENV = 'production' + +var ora = require('ora') +var rm = require('rimraf') +var path = require('path') +var chalk = require('chalk') +var webpack = require('webpack') +var config = require('../config') +var webpackConfig = require('./webpack.prod.conf') + +var spinner = ora('building for production...') +spinner.start() + +rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { + if (err) throw err + webpack(webpackConfig, function (err, stats) { + spinner.stop() + if (err) throw err + process.stdout.write(stats.toString({ + colors: true, + modules: false, + children: false, + chunks: false, + chunkModules: false + }) + '\n\n') + + console.log(chalk.cyan(' Build complete.\n')) + console.log(chalk.yellow( + ' Tip: built files are meant to be served over an HTTP server.\n' + + ' Opening index.html over file:// won\'t work.\n' + )) + }) +}) diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/check-versions.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/check-versions.js new file mode 100644 index 0000000..100f3a0 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/check-versions.js @@ -0,0 +1,48 @@ +var chalk = require('chalk') +var semver = require('semver') +var packageConfig = require('../package.json') +var shell = require('shelljs') +function exec (cmd) { + return require('child_process').execSync(cmd).toString().trim() +} + +var versionRequirements = [ + { + name: 'node', + currentVersion: semver.clean(process.version), + versionRequirement: packageConfig.engines.node + }, +] + +if (shell.which('npm')) { + versionRequirements.push({ + name: 'npm', + currentVersion: exec('npm --version'), + versionRequirement: packageConfig.engines.npm + }) +} + +module.exports = function () { + var warnings = [] + for (var i = 0; i < versionRequirements.length; i++) { + var mod = versionRequirements[i] + if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { + warnings.push(mod.name + ': ' + + chalk.red(mod.currentVersion) + ' should be ' + + chalk.green(mod.versionRequirement) + ) + } + } + + if (warnings.length) { + console.log('') + console.log(chalk.yellow('To use this template, you must update following to modules:')) + console.log() + for (var i = 0; i < warnings.length; i++) { + var warning = warnings[i] + console.log(' ' + warning) + } + console.log() + process.exit(1) + } +} diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/dev-client.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/dev-client.js new file mode 100644 index 0000000..18aa1e2 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/dev-client.js @@ -0,0 +1,9 @@ +/* eslint-disable */ +require('eventsource-polyfill') +var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true') + +hotClient.subscribe(function (event) { + if (event.action === 'reload') { + window.location.reload() + } +}) diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/dev-server.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/dev-server.js new file mode 100644 index 0000000..782dc6f --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/dev-server.js @@ -0,0 +1,89 @@ +require('./check-versions')() + +var config = require('../config') +if (!process.env.NODE_ENV) { + process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV) +} + +var opn = require('opn') +var path = require('path') +var express = require('express') +var webpack = require('webpack') +var proxyMiddleware = require('http-proxy-middleware') +var webpackConfig = require('./webpack.dev.conf') + +// default port where dev server listens for incoming traffic +var port = process.env.PORT || config.dev.port +// automatically open browser, if not set will be false +var autoOpenBrowser = !!config.dev.autoOpenBrowser +// Define HTTP proxies to your custom API backend +// https://github.com/chimurai/http-proxy-middleware +var proxyTable = config.dev.proxyTable + +var app = express() +var compiler = webpack(webpackConfig) + +var devMiddleware = require('webpack-dev-middleware')(compiler, { + publicPath: webpackConfig.output.publicPath, + quiet: true +}) + +var hotMiddleware = require('webpack-hot-middleware')(compiler, { + log: () => {} +}) +// force page reload when html-webpack-plugin template changes +compiler.plugin('compilation', function (compilation) { + compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) { + hotMiddleware.publish({ action: 'reload' }) + cb() + }) +}) + +// proxy api requests +Object.keys(proxyTable).forEach(function (context) { + var options = proxyTable[context] + if (typeof options === 'string') { + options = { target: options } + } + app.use(proxyMiddleware(options.filter || context, options)) +}) + +// handle fallback for HTML5 history API +app.use(require('connect-history-api-fallback')()) + +// serve webpack bundle output +app.use(devMiddleware) + +// enable hot-reload and state-preserving +// compilation error display +app.use(hotMiddleware) + +// serve pure static assets +var staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory) +app.use(staticPath, express.static('./static')) + +var uri = 'http://localhost:' + port + +var _resolve +var readyPromise = new Promise(resolve => { + _resolve = resolve +}) + +console.log('> Starting dev server...') +devMiddleware.waitUntilValid(() => { + console.log('> Listening at ' + uri + '\n') + // when env is testing, don't need open it + if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') { + opn(uri) + } + _resolve() +}) + +var server = app.listen(port) + +module.exports = { + ready: readyPromise, + close: () => { + server.close() + } +} diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/utils.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/utils.js new file mode 100644 index 0000000..b1d54b4 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/utils.js @@ -0,0 +1,71 @@ +var path = require('path') +var config = require('../config') +var ExtractTextPlugin = require('extract-text-webpack-plugin') + +exports.assetsPath = function (_path) { + var assetsSubDirectory = process.env.NODE_ENV === 'production' + ? config.build.assetsSubDirectory + : config.dev.assetsSubDirectory + return path.posix.join(assetsSubDirectory, _path) +} + +exports.cssLoaders = function (options) { + options = options || {} + + var cssLoader = { + loader: 'css-loader', + options: { + minimize: process.env.NODE_ENV === 'production', + sourceMap: options.sourceMap + } + } + + // generate loader string to be used with extract text plugin + function generateLoaders (loader, loaderOptions) { + var loaders = [cssLoader] + if (loader) { + loaders.push({ + loader: loader + '-loader', + options: Object.assign({}, loaderOptions, { + sourceMap: options.sourceMap + }) + }) + } + + // Extract CSS when that option is specified + // (which is the case during production build) + if (options.extract) { + return ExtractTextPlugin.extract({ + use: loaders, + fallback: 'vue-style-loader' + }) + } else { + return ['vue-style-loader'].concat(loaders) + } + } + + // https://vue-loader.vuejs.org/en/configurations/extract-css.html + return { + css: generateLoaders(), + postcss: generateLoaders(), + less: generateLoaders('less'), + sass: generateLoaders('sass', { indentedSyntax: true }), + scss: generateLoaders('sass'), + stylus: generateLoaders('stylus'), + styl: generateLoaders('stylus') + } +} + +// Generate loaders for standalone style files (outside of .vue) +exports.styleLoaders = function (options) { + var output = [] + var loaders = exports.cssLoaders(options) + for (var extension in loaders) { + var loader = loaders[extension] + output.push({ + test: new RegExp('\\.' + extension + '$'), + use: loader + }) + } + return output +} diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/vue-loader.conf.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/vue-loader.conf.js new file mode 100644 index 0000000..7aee79b --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/vue-loader.conf.js @@ -0,0 +1,12 @@ +var utils = require('./utils') +var config = require('../config') +var isProduction = process.env.NODE_ENV === 'production' + +module.exports = { + loaders: utils.cssLoaders({ + sourceMap: isProduction + ? config.build.productionSourceMap + : config.dev.cssSourceMap, + extract: isProduction + }) +} diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/webpack.base.conf.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/webpack.base.conf.js new file mode 100644 index 0000000..daa3589 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/webpack.base.conf.js @@ -0,0 +1,58 @@ +var path = require('path') +var utils = require('./utils') +var config = require('../config') +var vueLoaderConfig = require('./vue-loader.conf') + +function resolve (dir) { + return path.join(__dirname, '..', dir) +} + +module.exports = { + entry: { + app: './src/main.js' + }, + output: { + path: config.build.assetsRoot, + filename: '[name].js', + publicPath: process.env.NODE_ENV === 'production' + ? config.build.assetsPublicPath + : config.dev.assetsPublicPath + }, + resolve: { + extensions: ['.js', '.vue', '.json'], + alias: { + 'vue$': 'vue/dist/vue.esm.js', + '@': resolve('src') + } + }, + module: { + rules: [ + { + test: /\.vue$/, + loader: 'vue-loader', + options: vueLoaderConfig + }, + { + test: /\.js$/, + loader: 'babel-loader', + include: [resolve('src'), resolve('test')] + }, + { + test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, + loader: 'url-loader', + options: { + limit: 10000, + name: utils.assetsPath('img/[name].[hash:7].[ext]') + } + }, + { + test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, + loader: 'url-loader', + options: { + limit: 10000, + name: utils.assetsPath('fonts/[name].[hash:7].[ext]') + } + } + ] + } +} diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/webpack.dev.conf.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/webpack.dev.conf.js new file mode 100644 index 0000000..5470402 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/webpack.dev.conf.js @@ -0,0 +1,35 @@ +var utils = require('./utils') +var webpack = require('webpack') +var config = require('../config') +var merge = require('webpack-merge') +var baseWebpackConfig = require('./webpack.base.conf') +var HtmlWebpackPlugin = require('html-webpack-plugin') +var FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') + +// add hot-reload related code to entry chunks +Object.keys(baseWebpackConfig.entry).forEach(function (name) { + baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name]) +}) + +module.exports = merge(baseWebpackConfig, { + module: { + rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap }) + }, + // cheap-module-eval-source-map is faster for development + devtool: '#cheap-module-eval-source-map', + plugins: [ + new webpack.DefinePlugin({ + 'process.env': config.dev.env + }), + // https://github.com/glenjamin/webpack-hot-middleware#installation--usage + new webpack.HotModuleReplacementPlugin(), + new webpack.NoEmitOnErrorsPlugin(), + // https://github.com/ampedandwired/html-webpack-plugin + new HtmlWebpackPlugin({ + filename: 'index.html', + template: 'index.html', + inject: true + }), + new FriendlyErrorsPlugin() + ] +}) diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/webpack.prod.conf.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/webpack.prod.conf.js new file mode 100644 index 0000000..da44b65 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/webpack.prod.conf.js @@ -0,0 +1,120 @@ +var path = require('path') +var utils = require('./utils') +var webpack = require('webpack') +var config = require('../config') +var merge = require('webpack-merge') +var baseWebpackConfig = require('./webpack.base.conf') +var CopyWebpackPlugin = require('copy-webpack-plugin') +var HtmlWebpackPlugin = require('html-webpack-plugin') +var ExtractTextPlugin = require('extract-text-webpack-plugin') +var OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') + +var env = config.build.env + +var webpackConfig = merge(baseWebpackConfig, { + module: { + rules: utils.styleLoaders({ + sourceMap: config.build.productionSourceMap, + extract: true + }) + }, + devtool: config.build.productionSourceMap ? '#source-map' : false, + output: { + path: config.build.assetsRoot, + filename: utils.assetsPath('js/[name].[chunkhash].js'), + chunkFilename: utils.assetsPath('js/[id].[chunkhash].js') + }, + plugins: [ + // http://vuejs.github.io/vue-loader/en/workflow/production.html + new webpack.DefinePlugin({ + 'process.env': env + }), + new webpack.optimize.UglifyJsPlugin({ + compress: { + warnings: false + }, + sourceMap: true + }), + // extract css into its own file + new ExtractTextPlugin({ + filename: utils.assetsPath('css/[name].[contenthash].css') + }), + // Compress extracted CSS. We are using this plugin so that possible + // duplicated CSS from different components can be deduped. + new OptimizeCSSPlugin({ + cssProcessorOptions: { + safe: true + } + }), + // generate dist index.html with correct asset hash for caching. + // you can customize output by editing /index.html + // see https://github.com/ampedandwired/html-webpack-plugin + new HtmlWebpackPlugin({ + filename: config.build.index, + template: 'index.html', + inject: true, + minify: { + removeComments: true, + collapseWhitespace: true, + removeAttributeQuotes: true + // more options: + // https://github.com/kangax/html-minifier#options-quick-reference + }, + // necessary to consistently work with multiple chunks via CommonsChunkPlugin + chunksSortMode: 'dependency' + }), + // split vendor js into its own file + new webpack.optimize.CommonsChunkPlugin({ + name: 'vendor', + minChunks: function (module, count) { + // any required modules inside node_modules are extracted to vendor + return ( + module.resource && + /\.js$/.test(module.resource) && + module.resource.indexOf( + path.join(__dirname, '../node_modules') + ) === 0 + ) + } + }), + // extract webpack runtime and module manifest to its own file in order to + // prevent vendor hash from being updated whenever app bundle is updated + new webpack.optimize.CommonsChunkPlugin({ + name: 'manifest', + chunks: ['vendor'] + }), + // copy custom static assets + new CopyWebpackPlugin([ + { + from: path.resolve(__dirname, '../static'), + to: config.build.assetsSubDirectory, + ignore: ['.*'] + } + ]) + ] +}) + +if (config.build.productionGzip) { + var CompressionWebpackPlugin = require('compression-webpack-plugin') + + webpackConfig.plugins.push( + new CompressionWebpackPlugin({ + asset: '[path].gz[query]', + algorithm: 'gzip', + test: new RegExp( + '\\.(' + + config.build.productionGzipExtensions.join('|') + + ')$' + ), + threshold: 10240, + minRatio: 0.8 + }) + ) +} + +if (config.build.bundleAnalyzerReport) { + var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin + webpackConfig.plugins.push(new BundleAnalyzerPlugin()) +} + +module.exports = webpackConfig diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/config/dev.env.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/config/dev.env.js new file mode 100644 index 0000000..efead7c --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/config/dev.env.js @@ -0,0 +1,6 @@ +var merge = require('webpack-merge') +var prodEnv = require('./prod.env') + +module.exports = merge(prodEnv, { + NODE_ENV: '"development"' +}) diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/config/index.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/config/index.js new file mode 100644 index 0000000..196da1f --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/config/index.js @@ -0,0 +1,38 @@ +// see http://vuejs-templates.github.io/webpack for documentation. +var path = require('path') + +module.exports = { + build: { + env: require('./prod.env'), + index: path.resolve(__dirname, '../dist/index.html'), + assetsRoot: path.resolve(__dirname, '../dist'), + assetsSubDirectory: 'static', + assetsPublicPath: '/', + productionSourceMap: true, + // Gzip off by default as many popular static hosts such as + // Surge or Netlify already gzip all static assets for you. + // Before setting to `true`, make sure to: + // npm install --save-dev compression-webpack-plugin + productionGzip: false, + productionGzipExtensions: ['js', 'css'], + // Run the build command with an extra argument to + // View the bundle analyzer report after build finishes: + // `npm run build --report` + // Set to `true` or `false` to always turn it on or off + bundleAnalyzerReport: process.env.npm_config_report + }, + dev: { + env: require('./dev.env'), + port: 8080, + autoOpenBrowser: true, + assetsSubDirectory: 'static', + assetsPublicPath: '/', + proxyTable: {}, + // CSS Sourcemaps off by default because relative paths are "buggy" + // with this option, according to the CSS-Loader README + // (https://github.com/webpack/css-loader#sourcemaps) + // In our experience, they generally work as expected, + // just be aware of this issue when enabling this option. + cssSourceMap: false + } +} diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/config/prod.env.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/config/prod.env.js new file mode 100644 index 0000000..773d263 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/config/prod.env.js @@ -0,0 +1,3 @@ +module.exports = { + NODE_ENV: '"production"' +} diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/index.html b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/index.html new file mode 100644 index 0000000..47ae14a --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/index.html @@ -0,0 +1,11 @@ + + + + + wangeditor-in-vue + + +
          + + + diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/package.json b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/package.json new file mode 100644 index 0000000..80cf68f --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/package.json @@ -0,0 +1,60 @@ +{ + "name": "wangeditor-in-vue", + "version": "1.0.0", + "description": "A Vue.js project", + "author": "git ", + "private": true, + "scripts": { + "dev": "node build/dev-server.js", + "start": "node build/dev-server.js", + "build": "node build/build.js" + }, + "dependencies": { + "vue": "^2.3.3", + "wangeditor": ">=3.0.0" + }, + "devDependencies": { + "autoprefixer": "^6.7.2", + "babel-core": "^6.22.1", + "babel-loader": "^6.2.10", + "babel-plugin-transform-runtime": "^6.22.0", + "babel-preset-env": "^1.3.2", + "babel-preset-stage-2": "^6.22.0", + "babel-register": "^6.22.0", + "chalk": "^1.1.3", + "connect-history-api-fallback": "^1.3.0", + "copy-webpack-plugin": "^4.0.1", + "css-loader": "^0.28.0", + "eventsource-polyfill": "^0.9.6", + "express": "^4.14.1", + "extract-text-webpack-plugin": "^2.0.0", + "file-loader": "^0.11.1", + "friendly-errors-webpack-plugin": "^1.1.3", + "html-webpack-plugin": "^2.28.0", + "http-proxy-middleware": "^0.17.3", + "webpack-bundle-analyzer": "^2.2.1", + "semver": "^5.3.0", + "shelljs": "^0.7.6", + "opn": "^4.0.2", + "optimize-css-assets-webpack-plugin": "^1.3.0", + "ora": "^1.2.0", + "rimraf": "^2.6.0", + "url-loader": "^0.5.8", + "vue-loader": "^12.1.0", + "vue-style-loader": "^3.0.1", + "vue-template-compiler": "^2.3.3", + "webpack": "^2.6.1", + "webpack-dev-middleware": "^1.10.0", + "webpack-hot-middleware": "^2.18.0", + "webpack-merge": "^4.1.0" + }, + "engines": { + "node": ">= 4.0.0", + "npm": ">= 3.0.0" + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not ie <= 8" + ] +} diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/src/App.vue b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/src/App.vue new file mode 100644 index 0000000..27d15ff --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/src/App.vue @@ -0,0 +1,31 @@ + + + + + diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/src/assets/logo.png b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/src/assets/logo.png new file mode 100644 index 0000000..f3d2503 Binary files /dev/null and b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/src/assets/logo.png differ diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/src/components/Editor.vue b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/src/components/Editor.vue new file mode 100644 index 0000000..aee43c2 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/src/components/Editor.vue @@ -0,0 +1,34 @@ + + + + + diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/src/components/Hello.vue b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/src/components/Hello.vue new file mode 100644 index 0000000..2d80539 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/src/components/Hello.vue @@ -0,0 +1,53 @@ + + + + + + diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/src/main.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/src/main.js new file mode 100644 index 0000000..7b7fec7 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/src/main.js @@ -0,0 +1,13 @@ +// The Vue build version to load with the `import` command +// (runtime-only or standalone) has been set in webpack.base.conf with an alias. +import Vue from 'vue' +import App from './App' + +Vue.config.productionTip = false + +/* eslint-disable no-new */ +new Vue({ + el: '#app', + template: '', + components: { App } +}) diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/static/.gitkeep b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/static/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/test-amd-main.js b/novel-front/src/main/resources/static/wangEditor/example/demo/test-amd-main.js new file mode 100644 index 0000000..444b2da --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/test-amd-main.js @@ -0,0 +1,4 @@ +require(['/wangEditor.min.js'], function (E) { + var editor2 = new E('#div3') + editor2.create() +}) \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/test-amd.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-amd.html new file mode 100644 index 0000000..6a3d666 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/test-amd.html @@ -0,0 +1,15 @@ + + + + + wangEditor 使用 AMD 加载 + + +

          wangEditor 使用 AMD 加载

          +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          + + + + \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/test-css-reset.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-css-reset.html new file mode 100644 index 0000000..c01a10d --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/test-css-reset.html @@ -0,0 +1,66 @@ + + + + + wangEditor css reset + + + +

          wangEditor css reset

          +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          + + + + + \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/test-emot.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-emot.html new file mode 100644 index 0000000..02d8f7f --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/test-emot.html @@ -0,0 +1,84 @@ + + + + + wangEditor 配置表情 + + +

          wangEditor 配置表情

          +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          + + + + + \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/test-fullscreen.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-fullscreen.html new file mode 100644 index 0000000..cbbaa01 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/test-fullscreen.html @@ -0,0 +1,114 @@ + + + + + wangEditor 全屏 + + + +

          wangEditor 全屏

          + + +
          + +
          +
          +
          + +
          +
          + +
          +

          wangEditor 本身不包含“全屏”功能,不过可以很简单的开发出来

          +

          注意,全屏模式与max-height有冲突,尽量避免一起使用

          +
          +
          + + +
          + + + + + + \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/test-get-content.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-get-content.html new file mode 100644 index 0000000..012c81c --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/test-get-content.html @@ -0,0 +1,34 @@ + + + + + wangEditor 获取内容 + + +

          wangEditor 获取内容

          +
          +

          欢迎使用 wangEditor 富文本编辑器

          +

          欢迎使用 wangEditor 富文本编辑器

          +
          +
          + + +
          + + + + + \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/test-getJSON.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-getJSON.html new file mode 100644 index 0000000..68cd155 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/test-getJSON.html @@ -0,0 +1,30 @@ + + + + + wangEditor demo getJSON + + +

          获取 JSON

          +
          +

          欢迎使用 wangEditor 富文本编辑器

          + +
          + + + + + + \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/test-lang.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-lang.html new file mode 100644 index 0000000..6c77826 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/test-lang.html @@ -0,0 +1,31 @@ + + + + + wangEditor lang test + + +

          多语言测试

          +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          + + + + + \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/test-menus.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-menus.html new file mode 100644 index 0000000..4afd45f --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/test-menus.html @@ -0,0 +1,26 @@ + + + + + wangEditor 菜单配置 + + +

          wangEditor 自定义菜单配置

          +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          + + + + + \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/test-mult.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-mult.html new file mode 100644 index 0000000..bd6f7e1 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/test-mult.html @@ -0,0 +1,44 @@ + + + + + wangEditor 一个页面多个编辑器 + + + + +

          第一个 demo(菜单和编辑器区域分开)

          +
          +
          +
          中间隔离带
          +
          +

          请输入内容

          +
          + +

          第二个 demo(常规)

          +
          +

          请输入内容

          +
          + + + + + + \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/test-onblur.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-onblur.html new file mode 100644 index 0000000..a6644bf --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/test-onblur.html @@ -0,0 +1,23 @@ + + + + + wangEditor test onblur + + +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          + + + + + \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/test-onchange.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-onchange.html new file mode 100644 index 0000000..231de10 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/test-onchange.html @@ -0,0 +1,24 @@ + + + + + wangEditor test onchange + + +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          + + + + + \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/test-onfocus.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-onfocus.html new file mode 100644 index 0000000..7d95de0 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/test-onfocus.html @@ -0,0 +1,22 @@ + + + + + wangEditor test onfocus + + +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          + + + + + \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/test-paste.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-paste.html new file mode 100644 index 0000000..a3a7477 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/test-paste.html @@ -0,0 +1,25 @@ + + + + + wangEditor paste test + + +

          wangEditor paste test

          +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          + + + + + \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/test-set-content.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-set-content.html new file mode 100644 index 0000000..42eff3b --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/test-set-content.html @@ -0,0 +1,35 @@ + + + + + wangEditor 设置内容 + + +

          wangEditor 设置内容

          +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          +
          + + +
          + + + + + \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/test-sperate.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-sperate.html new file mode 100644 index 0000000..0d0b857 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/test-sperate.html @@ -0,0 +1,35 @@ + + + + + wangEditor 菜单和编辑器区域分离 + + + + +

          wangEditor 菜单和编辑器区域分离

          +
          +
          +
          中间隔离带
          +
          +

          请输入内容

          +
          + + + + + \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/test-textarea.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-textarea.html new file mode 100644 index 0000000..8e41119 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/test-textarea.html @@ -0,0 +1,33 @@ + + + + + wangEditor demo textarea + + +

          编辑器

          +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          + +
          + +

          textarea

          + + + + + + + \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/test-uploadimg.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-uploadimg.html new file mode 100644 index 0000000..97246ca --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/test-uploadimg.html @@ -0,0 +1,58 @@ + + + + + wangEditor 上传图片 + + +

          wangEditor 上传图片到服务器

          +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          + +

          wangEditor 以base64保存图片文件

          +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          + +

          wangEditor 自定义上传图片

          +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          + + + + + \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/example/favicon.ico b/novel-front/src/main/resources/static/wangEditor/example/favicon.ico new file mode 100644 index 0000000..6075775 Binary files /dev/null and b/novel-front/src/main/resources/static/wangEditor/example/favicon.ico differ diff --git a/novel-front/src/main/resources/static/wangEditor/example/icomoon/Read Me.txt b/novel-front/src/main/resources/static/wangEditor/example/icomoon/Read Me.txt new file mode 100644 index 0000000..8491652 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/icomoon/Read Me.txt @@ -0,0 +1,7 @@ +Open *demo.html* to see a list of all the glyphs in your font along with their codes/ligatures. + +To use the generated font in desktop programs, you can install the TTF font. In order to copy the character associated with each icon, refer to the text box at the bottom right corner of each glyph in demo.html. The character inside this text box may be invisible; but it can still be copied. See this guide for more info: https://icomoon.io/#docs/local-fonts + +You won't need any of the files located under the *demo-files* directory when including the generated font in your own projects. + +You can import *selection.json* back to the IcoMoon app using the *Import Icons* button (or via Main Menu → Manage Projects) to retrieve your icon selection. diff --git a/novel-front/src/main/resources/static/wangEditor/example/icomoon/demo-files/demo.css b/novel-front/src/main/resources/static/wangEditor/example/icomoon/demo-files/demo.css new file mode 100644 index 0000000..f9ab27c --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/icomoon/demo-files/demo.css @@ -0,0 +1,155 @@ +body { + padding: 0; + margin: 0; + font-family: sans-serif; + font-size: 1em; + line-height: 1.5; + color: #555; + background: #fff; +} +h1 { + font-size: 1.5em; + font-weight: normal; +} +small { + font-size: .66666667em; +} +a { + color: #e74c3c; + text-decoration: none; +} +a:hover, a:focus { + box-shadow: 0 1px #e74c3c; +} +.bshadow0, input { + box-shadow: inset 0 -2px #e7e7e7; +} +input:hover { + box-shadow: inset 0 -2px #ccc; +} +input, fieldset { + font-family: sans-serif; + font-size: 1em; + margin: 0; + padding: 0; + border: 0; +} +input { + color: inherit; + line-height: 1.5; + height: 1.5em; + padding: .25em 0; +} +input:focus { + outline: none; + box-shadow: inset 0 -2px #449fdb; +} +.glyph { + font-size: 16px; + width: 15em; + padding-bottom: 1em; + margin-right: 4em; + margin-bottom: 1em; + float: left; + overflow: hidden; +} +.liga { + width: 80%; + width: calc(100% - 2.5em); +} +.talign-right { + text-align: right; +} +.talign-center { + text-align: center; +} +.bgc1 { + background: #f1f1f1; +} +.fgc1 { + color: #999; +} +.fgc0 { + color: #000; +} +p { + margin-top: 1em; + margin-bottom: 1em; +} +.mvm { + margin-top: .75em; + margin-bottom: .75em; +} +.mtn { + margin-top: 0; +} +.mtl, .mal { + margin-top: 1.5em; +} +.mbl, .mal { + margin-bottom: 1.5em; +} +.mal, .mhl { + margin-left: 1.5em; + margin-right: 1.5em; +} +.mhmm { + margin-left: 1em; + margin-right: 1em; +} +.mls { + margin-left: .25em; +} +.ptl { + padding-top: 1.5em; +} +.pbs, .pvs { + padding-bottom: .25em; +} +.pvs, .pts { + padding-top: .25em; +} +.unit { + float: left; +} +.unitRight { + float: right; +} +.size1of2 { + width: 50%; +} +.size1of1 { + width: 100%; +} +.clearfix:before, .clearfix:after { + content: " "; + display: table; +} +.clearfix:after { + clear: both; +} +.hidden-true { + display: none; +} +.textbox0 { + width: 3em; + background: #f1f1f1; + padding: .25em .5em; + line-height: 1.5; + height: 1.5em; +} +#testDrive { + display: block; + padding-top: 24px; + line-height: 1.5; +} +.fs0 { + font-size: 16px; +} +.fs1 { + font-size: 16px; +} +.fs2 { + font-size: 16px; +} + diff --git a/novel-front/src/main/resources/static/wangEditor/example/icomoon/demo-files/demo.js b/novel-front/src/main/resources/static/wangEditor/example/icomoon/demo-files/demo.js new file mode 100644 index 0000000..6f45f1c --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/icomoon/demo-files/demo.js @@ -0,0 +1,30 @@ +if (!('boxShadow' in document.body.style)) { + document.body.setAttribute('class', 'noBoxShadow'); +} + +document.body.addEventListener("click", function(e) { + var target = e.target; + if (target.tagName === "INPUT" && + target.getAttribute('class').indexOf('liga') === -1) { + target.select(); + } +}); + +(function() { + var fontSize = document.getElementById('fontSize'), + testDrive = document.getElementById('testDrive'), + testText = document.getElementById('testText'); + function updateTest() { + testDrive.innerHTML = testText.value || String.fromCharCode(160); + if (window.icomoonLiga) { + window.icomoonLiga(testDrive); + } + } + function updateSize() { + testDrive.style.fontSize = fontSize.value + 'px'; + } + fontSize.addEventListener('change', updateSize, false); + testText.addEventListener('input', updateTest, false); + testText.addEventListener('change', updateTest, false); + updateSize(); +}()); diff --git a/novel-front/src/main/resources/static/wangEditor/example/icomoon/demo.html b/novel-front/src/main/resources/static/wangEditor/example/icomoon/demo.html new file mode 100644 index 0000000..a36d3ba --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/icomoon/demo.html @@ -0,0 +1,505 @@ + + + + + IcoMoon Demo + + + + + +
          +

          Font Name: icomoon (Glyphs: 27)

          +
          +
          +

          Grid Size: 14

          +
          +
          + + + + icon-close +
          +
          + + +
          +
          + liga: + +
          +
          +
          +
          + + + + icon-remove +
          +
          + + +
          +
          + liga: + +
          +
          +
          +
          + + + + icon-times +
          +
          + + +
          +
          + liga: + +
          +
          +
          +
          + + + + icon-trash-o +
          +
          + + +
          +
          + liga: + +
          +
          +
          +
          + + + + icon-terminal +
          +
          + + +
          +
          + liga: + +
          +
          +
          +
          + + + + icon-header +
          +
          + + +
          +
          + liga: + +
          +
          +
          +
          + + + + icon-paint-brush +
          +
          + + +
          +
          + liga: + +
          +
          +
          +
          +

          Grid Size: 16

          +
          +
          + + + + icon-pencil2 +
          +
          + + +
          +
          + liga: + +
          +
          +
          +
          + + + + icon-image +
          +
          + + +
          +
          + liga: + +
          +
          +
          +
          + + + + icon-play +
          +
          + + +
          +
          + liga: + +
          +
          +
          +
          + + + + icon-location +
          +
          + + +
          +
          + liga: + +
          +
          +
          +
          + + + + icon-undo +
          +
          + + +
          +
          + liga: + +
          +
          +
          +
          + + + + icon-redo +
          +
          + + +
          +
          + liga: + +
          +
          +
          +
          + + + + icon-quotes-left +
          +
          + + +
          +
          + liga: + +
          +
          +
          +
          + + + + icon-list-numbered +
          +
          + + +
          +
          + liga: + +
          +
          +
          +
          + + + + icon-list2 +
          +
          + + +
          +
          + liga: + +
          +
          +
          +
          + + + + icon-upload2 +
          +
          + + +
          +
          + liga: + +
          +
          +
          +
          + + + + icon-link +
          +
          + + +
          +
          + liga: + +
          +
          +
          +
          + + + + icon-happy +
          +
          + + +
          +
          + liga: + +
          +
          +
          +
          + + + + icon-cancel-circle +
          +
          + + +
          +
          + liga: + +
          +
          +
          +
          + + + + icon-bold +
          +
          + + +
          +
          + liga: + +
          +
          +
          +
          + + + + icon-underline +
          +
          + + +
          +
          + liga: + +
          +
          +
          +
          + + + + icon-italic +
          +
          + + +
          +
          + liga: + +
          +
          +
          +
          + + + + icon-strikethrough +
          +
          + + +
          +
          + liga: + +
          +
          +
          +
          + + + + icon-page-break +
          +
          + + +
          +
          + liga: + +
          +
          +
          +
          + + + + icon-table2 +
          +
          + + +
          +
          + liga: + +
          +
          +
          +
          + + + + icon-paragraph-left +
          +
          + + +
          +
          + liga: + +
          +
          +
          +
          + + + + icon-paragraph-center +
          +
          + + +
          +
          + liga: + +
          +
          +
          +
          + + + + icon-paragraph-right +
          +
          + + +
          +
          + liga: + +
          +
          +
          + + +
          +

          Font Test Drive

          + + +
            +
          +
          + +
          +

          Generated by IcoMoon

          +
          + + + + diff --git a/novel-front/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.eot b/novel-front/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.eot new file mode 100644 index 0000000..0d144fd Binary files /dev/null and b/novel-front/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.eot differ diff --git a/novel-front/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.svg b/novel-front/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.svg new file mode 100644 index 0000000..21be016 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.svg @@ -0,0 +1,37 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.ttf b/novel-front/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.ttf new file mode 100644 index 0000000..80be9ad Binary files /dev/null and b/novel-front/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.ttf differ diff --git a/novel-front/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.woff b/novel-front/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.woff new file mode 100644 index 0000000..fa64c4d Binary files /dev/null and b/novel-front/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.woff differ diff --git a/novel-front/src/main/resources/static/wangEditor/example/icomoon/selection.json b/novel-front/src/main/resources/static/wangEditor/example/icomoon/selection.json new file mode 100644 index 0000000..b4a875f --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/icomoon/selection.json @@ -0,0 +1,775 @@ +{ + "IcoMoonType": "selection", + "icons": [ + { + "icon": { + "paths": [ + "M741.714 755.429q0 22.857-16 38.857l-77.714 77.714q-16 16-38.857 16t-38.857-16l-168-168-168 168q-16 16-38.857 16t-38.857-16l-77.714-77.714q-16-16-16-38.857t16-38.857l168-168-168-168q-16-16-16-38.857t16-38.857l77.714-77.714q16-16 38.857-16t38.857 16l168 168 168-168q16-16 38.857-16t38.857 16l77.714 77.714q16 16 16 38.857t-16 38.857l-168 168 168 168q16 16 16 38.857z" + ], + "width": 804.5720062255859, + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "close", + "remove", + "times" + ], + "defaultCode": 61453, + "grid": 14 + }, + "attrs": [], + "properties": { + "name": "close, remove, times", + "id": 13, + "order": 60, + "prevSize": 16, + "code": 61453 + }, + "setIdx": 0, + "setId": 2, + "iconIdx": 13 + }, + { + "icon": { + "paths": [ + "M292.571 420.571v329.143q0 8-5.143 13.143t-13.143 5.143h-36.571q-8 0-13.143-5.143t-5.143-13.143v-329.143q0-8 5.143-13.143t13.143-5.143h36.571q8 0 13.143 5.143t5.143 13.143zM438.857 420.571v329.143q0 8-5.143 13.143t-13.143 5.143h-36.571q-8 0-13.143-5.143t-5.143-13.143v-329.143q0-8 5.143-13.143t13.143-5.143h36.571q8 0 13.143 5.143t5.143 13.143zM585.143 420.571v329.143q0 8-5.143 13.143t-13.143 5.143h-36.571q-8 0-13.143-5.143t-5.143-13.143v-329.143q0-8 5.143-13.143t13.143-5.143h36.571q8 0 13.143 5.143t5.143 13.143zM658.286 834.286v-541.714h-512v541.714q0 12.571 4 23.143t8.286 15.429 6 4.857h475.429q1.714 0 6-4.857t8.286-15.429 4-23.143zM274.286 219.429h256l-27.429-66.857q-4-5.143-9.714-6.286h-181.143q-5.714 1.143-9.714 6.286zM804.571 237.714v36.571q0 8-5.143 13.143t-13.143 5.143h-54.857v541.714q0 47.429-26.857 82t-64.571 34.571h-475.429q-37.714 0-64.571-33.429t-26.857-80.857v-544h-54.857q-8 0-13.143-5.143t-5.143-13.143v-36.571q0-8 5.143-13.143t13.143-5.143h176.571l40-95.429q8.571-21.143 30.857-36t45.143-14.857h182.857q22.857 0 45.143 14.857t30.857 36l40 95.429h176.571q8 0 13.143 5.143t5.143 13.143z" + ], + "width": 804.5710134506226, + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "trash-o" + ], + "defaultCode": 61460, + "grid": 14 + }, + "attrs": [], + "properties": { + "name": "trash-o", + "id": 19, + "order": 53, + "prevSize": 16, + "code": 61460 + }, + "setIdx": 0, + "setId": 2, + "iconIdx": 19 + }, + { + "icon": { + "paths": [ + "M334.286 561.714l-266.286 266.286q-5.714 5.714-13.143 5.714t-13.143-5.714l-28.571-28.571q-5.714-5.714-5.714-13.143t5.714-13.143l224.571-224.571-224.571-224.571q-5.714-5.714-5.714-13.143t5.714-13.143l28.571-28.571q5.714-5.714 13.143-5.714t13.143 5.714l266.286 266.286q5.714 5.714 5.714 13.143t-5.714 13.143zM950.857 822.857v36.571q0 8-5.143 13.143t-13.143 5.143h-548.571q-8 0-13.143-5.143t-5.143-13.143v-36.571q0-8 5.143-13.143t13.143-5.143h548.571q8 0 13.143 5.143t5.143 13.143z" + ], + "width": 958.2859897613525, + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "terminal" + ], + "defaultCode": 61728, + "grid": 14 + }, + "attrs": [], + "properties": { + "name": "terminal", + "id": 256, + "order": 55, + "prevSize": 16, + "code": 61728 + }, + "setIdx": 0, + "setId": 2, + "iconIdx": 256 + }, + { + "icon": { + "paths": [ + "M961.143 950.857q-25.143 0-75.714-2t-76.286-2q-25.143 0-75.429 2t-75.429 2q-13.714 0-21.143-11.714t-7.429-26q0-17.714 9.714-26.286t22.286-9.714 29.143-4 25.714-8.571q18.857-12 18.857-80l-0.571-223.429q0-12-0.571-17.714-7.429-2.286-28.571-2.286h-385.714q-21.714 0-29.143 2.286-0.571 5.714-0.571 17.714l-0.571 212q0 81.143 21.143 93.714 9.143 5.714 27.429 7.429t32.571 2 25.714 8.571 11.429 26q0 14.857-7.143 27.429t-20.857 12.571q-26.857 0-79.714-2t-79.143-2q-24.571 0-73.143 2t-72.571 2q-13.143 0-20.286-12t-7.143-25.714q0-17.143 8.857-25.714t20.571-10 27.143-4.286 24-8.571q18.857-13.143 18.857-81.714l-0.571-32.571v-464.571q0-1.714 0.286-14.857t0-20.857-0.857-22-2-24-3.714-20.857-6.286-18-9.143-10.286q-8.571-5.714-25.714-6.857t-30.286-1.143-23.429-8-10.286-25.714q0-14.857 6.857-27.429t20.571-12.571q26.286 0 79.143 2t79.143 2q24 0 72.286-2t72.286-2q14.286 0 21.429 12.571t7.143 27.429q0 17.143-9.714 24.857t-22 8.286-28.286 2.286-24.571 7.429q-20 12-20 91.429l0.571 182.857q0 12 0.571 18.286 7.429 1.714 22.286 1.714h399.429q14.286 0 21.714-1.714 0.571-6.286 0.571-18.286l0.571-182.857q0-79.429-20-91.429-10.286-6.286-33.429-7.143t-37.714-7.429-14.571-28.286q0-14.857 7.143-27.429t21.429-12.571q25.143 0 75.429 2t75.429 2q24.571 0 73.714-2t73.714-2q14.286 0 21.429 12.571t7.143 27.429q0 17.143-10 25.143t-22.857 8.286-29.429 1.714-25.143 7.143q-20 13.143-20 92l0.571 538.857q0 68 19.429 80 9.143 5.714 26.286 7.714t30.571 2.571 23.714 8.857 10.286 25.429q0 14.857-6.857 27.429t-20.571 12.571z" + ], + "width": 1024.001937866211, + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "header" + ], + "defaultCode": 61916, + "grid": 14 + }, + "attrs": [], + "properties": { + "name": "header", + "id": 433, + "order": 49, + "prevSize": 16, + "code": 61916 + }, + "setIdx": 0, + "setId": 2, + "iconIdx": 433 + }, + { + "icon": { + "paths": [ + "M922.857 0q40 0 70 26.571t30 66.571q0 36-25.714 86.286-189.714 359.429-265.714 429.714-55.429 52-124.571 52-72 0-123.714-52.857t-51.714-125.429q0-73.143 52.571-121.143l364.571-330.857q33.714-30.857 74.286-30.857zM403.429 590.857q22.286 43.429 60.857 74.286t86 43.429l0.571 40.571q2.286 121.714-74 198.286t-199.143 76.571q-70.286 0-124.571-26.571t-87.143-72.857-49.429-104.571-16.571-125.714q4 2.857 23.429 17.143t35.429 25.429 33.714 20.857 26.286 9.714q23.429 0 31.429-21.143 14.286-37.714 32.857-64.286t39.714-43.429 50.286-27.143 58.857-14.571 71.429-6z" + ], + "width": 1022.8569793701172, + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "paint-brush" + ], + "defaultCode": 61948, + "grid": 14 + }, + "attrs": [], + "properties": { + "name": "paint-brush", + "id": 463, + "order": 54, + "prevSize": 16, + "code": 61948 + }, + "setIdx": 0, + "setId": 2, + "iconIdx": 463 + }, + { + "icon": { + "paths": [ + "M384 640l128-64 448-448-64-64-448 448-64 128zM289.3 867.098c-31.632-66.728-65.666-100.762-132.396-132.394l99.096-272.792 128-77.912 384-384h-192l-384 384-192 640 640-192 384-384v-192l-384 384-77.912 128z" + ], + "tags": [ + "pencil", + "write", + "edit" + ], + "defaultCode": 59654, + "grid": 16, + "attrs": [] + }, + "attrs": [], + "properties": { + "ligatures": "pencil2, write2", + "name": "pencil2", + "order": 32, + "id": 7, + "prevSize": 16, + "code": 59654 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 6 + }, + { + "icon": { + "paths": [ + "M959.884 128c0.040 0.034 0.082 0.076 0.116 0.116v767.77c-0.034 0.040-0.076 0.082-0.116 0.116h-895.77c-0.040-0.034-0.082-0.076-0.114-0.116v-767.772c0.034-0.040 0.076-0.082 0.114-0.114h895.77zM960 64h-896c-35.2 0-64 28.8-64 64v768c0 35.2 28.8 64 64 64h896c35.2 0 64-28.8 64-64v-768c0-35.2-28.8-64-64-64v0z", + "M832 288c0 53.020-42.98 96-96 96s-96-42.98-96-96 42.98-96 96-96 96 42.98 96 96z", + "M896 832h-768v-128l224-384 256 320h64l224-192z" + ], + "tags": [ + "image", + "picture", + "photo", + "graphic" + ], + "defaultCode": 59661, + "grid": 16, + "attrs": [] + }, + "attrs": [], + "properties": { + "ligatures": "image, picture", + "name": "image", + "order": 44, + "id": 14, + "prevSize": 16, + "code": 59661 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 13 + }, + { + "icon": { + "paths": [ + "M981.188 160.108c-143.632-20.65-302.332-32.108-469.186-32.108-166.86 0-325.556 11.458-469.194 32.108-27.53 107.726-42.808 226.75-42.808 351.892 0 125.14 15.278 244.166 42.808 351.89 143.638 20.652 302.336 32.11 469.194 32.11 166.854 0 325.552-11.458 469.186-32.11 27.532-107.724 42.812-226.75 42.812-351.89 0-125.142-15.28-244.166-42.812-351.892zM384.002 704v-384l320 192-320 192z" + ], + "tags": [ + "play", + "video", + "movie" + ], + "defaultCode": 59666, + "grid": 16, + "attrs": [] + }, + "attrs": [], + "properties": { + "ligatures": "play, video", + "name": "play", + "order": 51, + "id": 19, + "prevSize": 16, + "code": 59666 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 18 + }, + { + "icon": { + "paths": [ + "M512 0c-176.732 0-320 143.268-320 320 0 320 320 704 320 704s320-384 320-704c0-176.732-143.27-320-320-320zM512 512c-106.040 0-192-85.96-192-192s85.96-192 192-192 192 85.96 192 192-85.96 192-192 192z" + ], + "tags": [ + "location", + "map-marker", + "pin" + ], + "defaultCode": 59719, + "grid": 16, + "attrs": [] + }, + "attrs": [], + "properties": { + "ligatures": "location, map-marker", + "name": "location", + "order": 48, + "id": 72, + "prevSize": 16, + "code": 59719 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 71 + }, + { + "icon": { + "paths": [ + "M512 64c-141.384 0-269.376 57.32-362.032 149.978l-149.968-149.978v384h384l-143.532-143.522c69.496-69.492 165.492-112.478 271.532-112.478 212.068 0 384 171.924 384 384 0 114.696-50.292 217.636-130.018 288l84.666 96c106.302-93.816 173.352-231.076 173.352-384 0-282.77-229.23-512-512-512z" + ], + "tags": [ + "undo", + "ccw", + "arrow" + ], + "defaultCode": 59749, + "grid": 16, + "attrs": [] + }, + "attrs": [], + "properties": { + "ligatures": "undo, ccw", + "name": "undo", + "order": 35, + "id": 102, + "prevSize": 16, + "code": 59749 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 101 + }, + { + "icon": { + "paths": [ + "M0 576c0 152.924 67.048 290.184 173.35 384l84.666-96c-79.726-70.364-130.016-173.304-130.016-288 0-212.076 171.93-384 384-384 106.042 0 202.038 42.986 271.53 112.478l-143.53 143.522h384v-384l-149.97 149.978c-92.654-92.658-220.644-149.978-362.030-149.978-282.77 0-512 229.23-512 512z" + ], + "tags": [ + "redo", + "cw", + "arrow" + ], + "defaultCode": 59750, + "grid": 16, + "attrs": [] + }, + "attrs": [], + "properties": { + "ligatures": "redo, cw", + "name": "redo", + "order": 36, + "id": 103, + "prevSize": 16, + "code": 59750 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 102 + }, + { + "icon": { + "paths": [ + "M225 448c123.712 0 224 100.29 224 224 0 123.712-100.288 224-224 224s-224-100.288-224-224l-1-32c0-247.424 200.576-448 448-448v128c-85.474 0-165.834 33.286-226.274 93.726-11.634 11.636-22.252 24.016-31.83 37.020 11.438-1.8 23.16-2.746 35.104-2.746zM801 448c123.71 0 224 100.29 224 224 0 123.712-100.29 224-224 224s-224-100.288-224-224l-1-32c0-247.424 200.576-448 448-448v128c-85.474 0-165.834 33.286-226.274 93.726-11.636 11.636-22.254 24.016-31.832 37.020 11.44-1.8 23.16-2.746 35.106-2.746z" + ], + "tags": [ + "quotes-left", + "ldquo" + ], + "defaultCode": 59767, + "grid": 16, + "attrs": [] + }, + "attrs": [], + "properties": { + "ligatures": "quotes-left, ldquo", + "name": "quotes-left", + "order": 34, + "id": 120, + "prevSize": 16, + "code": 59767 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 119 + }, + { + "icon": { + "paths": [ + "M384 832h640v128h-640zM384 448h640v128h-640zM384 64h640v128h-640zM192 0v256h-64v-192h-64v-64zM128 526v50h128v64h-192v-146l128-60v-50h-128v-64h192v146zM256 704v320h-192v-64h128v-64h-128v-64h128v-64h-128v-64z" + ], + "tags": [ + "list-numbered", + "options" + ], + "defaultCode": 59833, + "grid": 16, + "attrs": [] + }, + "attrs": [], + "properties": { + "ligatures": "list-numbered, options", + "name": "list-numbered", + "order": 37, + "id": 186, + "prevSize": 16, + "code": 59833 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 185 + }, + { + "icon": { + "paths": [ + "M384 64h640v128h-640v-128zM384 448h640v128h-640v-128zM384 832h640v128h-640v-128zM0 128c0-70.692 57.308-128 128-128s128 57.308 128 128c0 70.692-57.308 128-128 128s-128-57.308-128-128zM0 512c0-70.692 57.308-128 128-128s128 57.308 128 128c0 70.692-57.308 128-128 128s-128-57.308-128-128zM0 896c0-70.692 57.308-128 128-128s128 57.308 128 128c0 70.692-57.308 128-128 128s-128-57.308-128-128z" + ], + "tags": [ + "list", + "todo", + "bullet", + "menu", + "options" + ], + "defaultCode": 59835, + "grid": 16, + "attrs": [] + }, + "attrs": [], + "properties": { + "ligatures": "list2, todo2", + "name": "list2", + "order": 38, + "id": 188, + "prevSize": 16, + "code": 59835 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 187 + }, + { + "icon": { + "paths": [ + "M0 896h1024v64h-1024zM1024 768v64h-1024v-64l128-256h256v128h256v-128h256zM224 320l288-288 288 288h-224v256h-128v-256z" + ], + "tags": [ + "upload", + "load", + "open" + ], + "defaultCode": 59846, + "grid": 16, + "attrs": [] + }, + "attrs": [], + "properties": { + "ligatures": "upload2, load2", + "name": "upload2", + "order": 52, + "id": 199, + "prevSize": 16, + "code": 59846 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 198 + }, + { + "icon": { + "paths": [ + "M440.236 635.766c-13.31 0-26.616-5.076-36.77-15.23-95.134-95.136-95.134-249.934 0-345.070l192-192c46.088-46.086 107.36-71.466 172.534-71.466s126.448 25.38 172.536 71.464c95.132 95.136 95.132 249.934 0 345.070l-87.766 87.766c-20.308 20.308-53.23 20.308-73.54 0-20.306-20.306-20.306-53.232 0-73.54l87.766-87.766c54.584-54.586 54.584-143.404 0-197.99-26.442-26.442-61.6-41.004-98.996-41.004s-72.552 14.562-98.996 41.006l-192 191.998c-54.586 54.586-54.586 143.406 0 197.992 20.308 20.306 20.306 53.232 0 73.54-10.15 10.152-23.462 15.23-36.768 15.23z", + "M256 1012c-65.176 0-126.45-25.38-172.534-71.464-95.134-95.136-95.134-249.934 0-345.070l87.764-87.764c20.308-20.306 53.234-20.306 73.54 0 20.308 20.306 20.308 53.232 0 73.54l-87.764 87.764c-54.586 54.586-54.586 143.406 0 197.992 26.44 26.44 61.598 41.002 98.994 41.002s72.552-14.562 98.998-41.006l192-191.998c54.584-54.586 54.584-143.406 0-197.992-20.308-20.308-20.306-53.232 0-73.54 20.306-20.306 53.232-20.306 73.54 0.002 95.132 95.134 95.132 249.932 0.002 345.068l-192.002 192c-46.090 46.088-107.364 71.466-172.538 71.466z" + ], + "tags": [ + "link", + "chain", + "url", + "uri", + "anchor" + ], + "defaultCode": 59851, + "grid": 16, + "attrs": [] + }, + "attrs": [], + "properties": { + "ligatures": "link, chain", + "name": "link", + "order": 42, + "id": 204, + "prevSize": 16, + "code": 59851 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 203 + }, + { + "icon": { + "paths": [ + "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM512 598.76c115.95 0 226.23-30.806 320-84.92-14.574 178.438-153.128 318.16-320 318.16-166.868 0-305.422-139.872-320-318.304 93.77 54.112 204.050 85.064 320 85.064zM256 352c0-53.019 28.654-96 64-96s64 42.981 64 96c0 53.019-28.654 96-64 96s-64-42.981-64-96zM640 352c0-53.019 28.654-96 64-96s64 42.981 64 96c0 53.019-28.654 96-64 96s-64-42.981-64-96z" + ], + "tags": [ + "happy", + "emoticon", + "smiley", + "face" + ], + "defaultCode": 59871, + "grid": 16, + "attrs": [] + }, + "attrs": [], + "properties": { + "ligatures": "happy, emoticon", + "name": "happy", + "order": 31, + "id": 224, + "prevSize": 16, + "code": 59871 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 223 + }, + { + "icon": { + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 928c-229.75 0-416-186.25-416-416s186.25-416 416-416 416 186.25 416 416-186.25 416-416 416z", + "M672 256l-160 160-160-160-96 96 160 160-160 160 96 96 160-160 160 160 96-96-160-160 160-160z" + ], + "tags": [ + "cancel-circle", + "close", + "remove", + "delete" + ], + "defaultCode": 59917, + "grid": 16, + "attrs": [] + }, + "attrs": [], + "properties": { + "ligatures": "cancel-circle, close", + "name": "cancel-circle", + "order": 59, + "id": 270, + "prevSize": 16, + "code": 59917 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 269 + }, + { + "icon": { + "paths": [ + "M707.88 484.652c37.498-44.542 60.12-102.008 60.12-164.652 0-141.16-114.842-256-256-256h-320v896h384c141.158 0 256-114.842 256-256 0-92.956-49.798-174.496-124.12-219.348zM384 192h101.5c55.968 0 101.5 57.42 101.5 128s-45.532 128-101.5 128h-101.5v-256zM543 832h-159v-256h159c58.45 0 106 57.42 106 128s-47.55 128-106 128z" + ], + "tags": [ + "bold", + "wysiwyg" + ], + "defaultCode": 60002, + "grid": 16, + "attrs": [] + }, + "attrs": [], + "properties": { + "ligatures": "bold, wysiwyg4", + "name": "bold", + "order": 27, + "id": 355, + "prevSize": 16, + "code": 60002 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 354 + }, + { + "icon": { + "paths": [ + "M704 64h128v416c0 159.058-143.268 288-320 288-176.73 0-320-128.942-320-288v-416h128v416c0 40.166 18.238 78.704 51.354 108.506 36.896 33.204 86.846 51.494 140.646 51.494s103.75-18.29 140.646-51.494c33.116-29.802 51.354-68.34 51.354-108.506v-416zM192 832h640v128h-640z" + ], + "tags": [ + "underline", + "wysiwyg" + ], + "defaultCode": 60003, + "grid": 16, + "attrs": [] + }, + "attrs": [], + "properties": { + "ligatures": "underline, wysiwyg5", + "name": "underline", + "order": 28, + "id": 356, + "prevSize": 16, + "code": 60003 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 355 + }, + { + "icon": { + "paths": [ + "M896 64v64h-128l-320 768h128v64h-448v-64h128l320-768h-128v-64z" + ], + "tags": [ + "italic", + "wysiwyg" + ], + "defaultCode": 60004, + "grid": 16, + "attrs": [] + }, + "attrs": [], + "properties": { + "ligatures": "italic, wysiwyg6", + "name": "italic", + "order": 29, + "id": 357, + "prevSize": 16, + "code": 60004 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 356 + }, + { + "icon": { + "paths": [ + "M1024 512v64h-234.506c27.504 38.51 42.506 82.692 42.506 128 0 70.878-36.66 139.026-100.58 186.964-59.358 44.518-137.284 69.036-219.42 69.036-82.138 0-160.062-24.518-219.42-69.036-63.92-47.938-100.58-116.086-100.58-186.964h128c0 69.382 87.926 128 192 128s192-58.618 192-128c0-69.382-87.926-128-192-128h-512v-64h299.518c-2.338-1.654-4.656-3.324-6.938-5.036-63.92-47.94-100.58-116.086-100.58-186.964s36.66-139.024 100.58-186.964c59.358-44.518 137.282-69.036 219.42-69.036 82.136 0 160.062 24.518 219.42 69.036 63.92 47.94 100.58 116.086 100.58 186.964h-128c0-69.382-87.926-128-192-128s-192 58.618-192 128c0 69.382 87.926 128 192 128 78.978 0 154.054 22.678 212.482 64h299.518z" + ], + "tags": [ + "strikethrough", + "wysiwyg" + ], + "defaultCode": 60005, + "grid": 16, + "attrs": [] + }, + "attrs": [], + "properties": { + "ligatures": "strikethrough, wysiwyg7", + "name": "strikethrough", + "order": 30, + "id": 358, + "prevSize": 16, + "code": 60005 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 357 + }, + { + "icon": { + "paths": [ + "M0 512h128v64h-128zM192 512h192v64h-192zM448 512h128v64h-128zM640 512h192v64h-192zM896 512h128v64h-128zM880 0l16 448h-768l16-448h32l16 384h640l16-384zM144 1024l-16-384h768l-16 384h-32l-16-320h-640l-16 320z" + ], + "tags": [ + "page-break", + "wysiwyg" + ], + "defaultCode": 60008, + "grid": 16, + "attrs": [] + }, + "attrs": [], + "properties": { + "ligatures": "page-break, wysiwyg10", + "name": "page-break", + "order": 57, + "id": 361, + "prevSize": 16, + "code": 60008 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 360 + }, + { + "icon": { + "paths": [ + "M0 64v896h1024v-896h-1024zM384 640v-192h256v192h-256zM640 704v192h-256v-192h256zM640 192v192h-256v-192h256zM320 192v192h-256v-192h256zM64 448h256v192h-256v-192zM704 448h256v192h-256v-192zM704 384v-192h256v192h-256zM64 704h256v192h-256v-192zM704 896v-192h256v192h-256z" + ], + "tags": [ + "table", + "wysiwyg" + ], + "defaultCode": 60017, + "grid": 16, + "attrs": [] + }, + "attrs": [], + "properties": { + "ligatures": "table2, wysiwyg19", + "name": "table2", + "order": 43, + "id": 370, + "prevSize": 16, + "code": 60017 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 369 + }, + { + "icon": { + "paths": [ + "M0 64h1024v128h-1024zM0 256h640v128h-640zM0 640h640v128h-640zM0 448h1024v128h-1024zM0 832h1024v128h-1024z" + ], + "tags": [ + "paragraph-left", + "wysiwyg", + "align-left", + "left" + ], + "defaultCode": 60023, + "grid": 16, + "attrs": [] + }, + "attrs": [], + "properties": { + "ligatures": "paragraph-left, wysiwyg25", + "name": "paragraph-left", + "order": 39, + "id": 376, + "prevSize": 16, + "code": 60023 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 375 + }, + { + "icon": { + "paths": [ + "M0 64h1024v128h-1024zM192 256h640v128h-640zM192 640h640v128h-640zM0 448h1024v128h-1024zM0 832h1024v128h-1024z" + ], + "tags": [ + "paragraph-center", + "wysiwyg", + "align-center", + "center" + ], + "defaultCode": 60024, + "grid": 16, + "attrs": [] + }, + "attrs": [], + "properties": { + "ligatures": "paragraph-center, wysiwyg26", + "name": "paragraph-center", + "order": 40, + "id": 377, + "prevSize": 16, + "code": 60024 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 376 + }, + { + "icon": { + "paths": [ + "M0 64h1024v128h-1024zM384 256h640v128h-640zM384 640h640v128h-640zM0 448h1024v128h-1024zM0 832h1024v128h-1024z" + ], + "tags": [ + "paragraph-right", + "wysiwyg", + "align-right", + "right" + ], + "defaultCode": 60025, + "grid": 16, + "attrs": [] + }, + "attrs": [], + "properties": { + "ligatures": "paragraph-right, wysiwyg27", + "name": "paragraph-right", + "order": 41, + "id": 378, + "prevSize": 16, + "code": 60025 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 377 + } + ], + "height": 1024, + "metadata": { + "name": "icomoon" + }, + "preferences": { + "showGlyphs": true, + "showQuickUse": true, + "showQuickUse2": true, + "showSVGs": true, + "fontPref": { + "prefix": "icon-", + "metadata": { + "fontFamily": "icomoon" + }, + "metrics": { + "emSize": 1024, + "baseline": 6.25, + "whitespace": 50 + }, + "embed": false + }, + "imagePref": { + "prefix": "icon-", + "png": true, + "useClassSelector": true, + "color": 0, + "bgColor": 16777215, + "classSelector": ".icon" + }, + "historySize": 100, + "showCodes": true, + "gridSize": 16 + } +} \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/example/icomoon/style.css b/novel-front/src/main/resources/static/wangEditor/example/icomoon/style.css new file mode 100644 index 0000000..e8caa25 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/icomoon/style.css @@ -0,0 +1,113 @@ +@font-face { + font-family: 'icomoon'; + src: url('fonts/icomoon.eot?b1ngen'); + src: url('fonts/icomoon.eot?b1ngen#iefix') format('embedded-opentype'), + url('fonts/icomoon.ttf?b1ngen') format('truetype'), + url('fonts/icomoon.woff?b1ngen') format('woff'), + url('fonts/icomoon.svg?b1ngen#icomoon') format('svg'); + font-weight: normal; + font-style: normal; +} + +[class^="icon-"], [class*=" icon-"] { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: 'icomoon' !important; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-close:before { + content: "\f00d"; +} +.icon-remove:before { + content: "\f00d"; +} +.icon-times:before { + content: "\f00d"; +} +.icon-trash-o:before { + content: "\f014"; +} +.icon-terminal:before { + content: "\f120"; +} +.icon-header:before { + content: "\f1dc"; +} +.icon-paint-brush:before { + content: "\f1fc"; +} +.icon-pencil2:before { + content: "\e906"; +} +.icon-image:before { + content: "\e90d"; +} +.icon-play:before { + content: "\e912"; +} +.icon-location:before { + content: "\e947"; +} +.icon-undo:before { + content: "\e965"; +} +.icon-redo:before { + content: "\e966"; +} +.icon-quotes-left:before { + content: "\e977"; +} +.icon-list-numbered:before { + content: "\e9b9"; +} +.icon-list2:before { + content: "\e9bb"; +} +.icon-upload2:before { + content: "\e9c6"; +} +.icon-link:before { + content: "\e9cb"; +} +.icon-happy:before { + content: "\e9df"; +} +.icon-cancel-circle:before { + content: "\ea0d"; +} +.icon-bold:before { + content: "\ea62"; +} +.icon-underline:before { + content: "\ea63"; +} +.icon-italic:before { + content: "\ea64"; +} +.icon-strikethrough:before { + content: "\ea65"; +} +.icon-page-break:before { + content: "\ea68"; +} +.icon-table2:before { + content: "\ea71"; +} +.icon-paragraph-left:before { + content: "\ea77"; +} +.icon-paragraph-center:before { + content: "\ea78"; +} +.icon-paragraph-right:before { + content: "\ea79"; +} diff --git a/novel-front/src/main/resources/static/wangEditor/example/index.html b/novel-front/src/main/resources/static/wangEditor/example/index.html new file mode 100644 index 0000000..6f55c8b --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/index.html @@ -0,0 +1,62 @@ + + + + + wangEditor demo list + + + +
          +

          可访问 wangEditor 官网 了解更多内容

          +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          + +

          wangEditor demo list(demo页面直接查看网页源代码即可)

          + + +

          其他链接

          +
          + +
          + +

          向我捐赠

          + +
          + + + + + + \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/example/pay.png b/novel-front/src/main/resources/static/wangEditor/example/pay.png new file mode 100644 index 0000000..98efb8d Binary files /dev/null and b/novel-front/src/main/resources/static/wangEditor/example/pay.png differ diff --git a/novel-front/src/main/resources/static/wangEditor/example/server/index.js b/novel-front/src/main/resources/static/wangEditor/example/server/index.js new file mode 100644 index 0000000..28d8a60 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/server/index.js @@ -0,0 +1,88 @@ +const fs = require('fs') +const path = require('path') +const formidable = require('formidable') +const util = require('./util.js') + +const koa = require('koa') +const app = koa() + +// 捕获错误 +const onerror = require('koa-onerror') +onerror(app) + +// post body 解析 +const bodyParser = require('koa-bodyparser') +app.use(bodyParser()) + +// 静态文件服务,针对 html js css fonts 文件 +const staticCache = require('koa-static-cache') +function setStaticCache() { + const exampleDir = path.join(__dirname, '..', '..', 'example') + const releaseDir = path.join(__dirname, '..', '..', 'release') + app.use(staticCache(exampleDir)) + app.use(staticCache(releaseDir)) +} +setStaticCache() + +// 配置路由 +const router = require('koa-router')() + +// 保存上传的文件 +function saveFiles(req) { + return new Promise((resolve, reject) => { + const imgLinks = [] + const form = new formidable.IncomingForm() + form.parse(req, function (err, fields, files) { + if (err) { + reject('formidable, form.parse err', err.stack) + } + // 存储图片的文件夹 + const storePath = path.resolve(__dirname, '..', 'upload-files') + if (!fs.existsSync(storePath)) { + fs.mkdirSync(storePath) + } + + // 遍历所有上传来的图片 + util.objForEach(files, (name, file) => { + // 图片临时位置 + const tempFilePath = file.path + // 图片名称和路径 + const fileName = file.name + const fullFileName = path.join(storePath, fileName) + // 将临时文件保存为正式文件 + fs.renameSync(tempFilePath, fullFileName) + // 存储链接 + imgLinks.push('/upload-files/' + fileName) + }) + + // 重新设置静态文件缓存 + setStaticCache() + + // 返回结果 + resolve({ + errno: 0, + data: imgLinks + }) + }) + }) +} + +// 上传图片 +router.post('/upload-img', function* () { + const ctx = this + const req = ctx.req + const res = ctx.res + + // 获取数据 + const data = yield saveFiles(req) + + // 返回结果 + this.body = JSON.stringify(data) +}) +app.use(router.routes()).use(router.allowedMethods()); + +// 启动服务 +app.listen(3000) +console.log('listening on port %s', 3000) + +module.exports = app \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/example/server/util.js b/novel-front/src/main/resources/static/wangEditor/example/server/util.js new file mode 100644 index 0000000..62477f2 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/server/util.js @@ -0,0 +1,14 @@ +module.exports = { + // 遍历对象 + objForEach: function (obj, fn) { + let key, result + for (key in obj) { + if (obj.hasOwnProperty(key)) { + result = fn.call(obj, key, obj[key]) + if (result === false) { + break + } + } + } + } +} \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/gulpfile.js b/novel-front/src/main/resources/static/wangEditor/gulpfile.js new file mode 100644 index 0000000..171e7e5 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/gulpfile.js @@ -0,0 +1,122 @@ +const path = require('path') +const fs = require('fs') +const gulp = require('gulp') +const rollup = require('rollup') +const uglify = require('gulp-uglify') +const sourcemaps = require('gulp-sourcemaps') +const rename = require('gulp-rename') +const less = require('gulp-less') +const concat = require('gulp-concat') +const cssmin = require('gulp-cssmin') +const eslint = require('rollup-plugin-eslint') +const postcss = require('gulp-postcss') +const autoprefixer = require('autoprefixer') +const cssgrace = require('cssgrace') +const resolve = require('rollup-plugin-node-resolve') +const babel = require('rollup-plugin-babel') +const gulpReplace = require('gulp-replace') + +// 拷贝 fonts 文件 +gulp.task('copy-fonts', () => { + gulp.src('./src/fonts/*') + .pipe(gulp.dest('./release/fonts')) +}) + +// 处理 css +gulp.task('css', () => { + gulp.src('./src/less/**/*.less') + .pipe(less()) + // 产出的未压缩的文件名 + .pipe(concat('wangEditor.css')) + // 配置 postcss + .pipe(postcss([ + autoprefixer, + cssgrace + ])) + // 将 css 引用的字体文件转换为 base64 格式 + .pipe(gulpReplace( /'fonts\/w-e-icon\..+?'/gm, function (fontFile) { + // fontFile 例如 'fonts/w-e-icon.eot?paxlku' + fontFile = fontFile.slice(0, -1).slice(1) + fontFile = fontFile.split('?')[0] + var ext = fontFile.split('.')[1] + // 读取文件内容,转换为 base64 格式 + var filePath = path.resolve(__dirname, 'release', fontFile) + var content = fs.readFileSync(filePath) + var base64 = content.toString('base64') + // 返回 + return 'data:application/x-font-' + ext + ';charset=utf-8;base64,' + base64 + })) + // 产出文件的位置 + .pipe(gulp.dest('./release')) + // 产出的压缩后的文件名 + .pipe(rename('wangEditor.min.css')) + .pipe(cssmin()) + .pipe(gulp.dest('./release')) +}) + +// 处理 JS +gulp.task('script', () => { + // rollup 打包 js 模块 + return rollup.rollup({ + // 入口文件 + entry: './src/js/index.js', + plugins: [ + // 对原始文件启动 eslint 检查,配置参见 ./.eslintrc.json + eslint(), + resolve(), + babel({ + exclude: 'node_modules/**' // only transpile our source code + }) + ] + }).then(bundle => { + bundle.write({ + // 产出文件使用 umd 规范(即兼容 amd cjs 和 iife) + format: 'umd', + // iife 规范下的全局变量名称 + moduleName: 'wangEditor', + // 产出的未压缩的文件名 + dest: './release/wangEditor.js' + }).then(() => { + // 待 rollup 打包 js 完毕之后,再进行如下的处理: + gulp.src('./release/wangEditor.js') + // inline css + .pipe(gulpReplace(/__INLINE_CSS__/gm, function () { + // 读取 css 文件内容 + var filePath = path.resolve(__dirname, 'release', 'wangEditor.css') + var content = fs.readFileSync(filePath).toString('utf-8') + // 替换 \n \ ' 三个字符 + content = content.replace(/\n/g, '').replace(/\\/g, '\\\\').replace(/'/g, '\\\'') + return content + })) + .pipe(gulp.dest('./release')) + .pipe(sourcemaps.init()) + // 压缩 + .pipe(uglify()) + // 产出的压缩的文件名 + .pipe(rename('wangEditor.min.js')) + // 生成 sourcemap + .pipe(sourcemaps.write('')) + .pipe(gulp.dest('./release')) + }) + }) +}) + + +// 默认任务配置 +gulp.task('default', () => { + gulp.run('copy-fonts', 'css', 'script') + + // 监听 js 原始文件的变化 + gulp.watch('./src/js/**/*.js', () => { + gulp.run('script') + }) + // 监听 css 原始文件的变化 + gulp.watch('./src/less/**/*.less', () => { + gulp.run('css', 'script') + }) + // 监听 icon.less 的变化,变化时重新拷贝 fonts 文件 + gulp.watch('./src/less/icon.less', () => { + gulp.run('copy-fonts') + }) +}) + diff --git a/novel-front/src/main/resources/static/wangEditor/package.json b/novel-front/src/main/resources/static/wangEditor/package.json new file mode 100644 index 0000000..b42d94d --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/package.json @@ -0,0 +1,60 @@ +{ + "name": "wangeditor", + "title": "wangEditor", + "version": "3.0.17", + "description": "wangEditor - 基于javascript和css开发的 web 富文本编辑器, 轻量、简洁、易用、开源免费", + "homepage": "http://wangeditor.github.io/", + "author": { + "name": "wangfupeng1988", + "url": "https://github.com/wangfupeng1988" + }, + "keywords": [ + "wangEditor", + "web 富文本编辑器" + ], + "main": "release/wangEditor.js", + "maintainers": [ + { + "name": "wangfupeng1988", + "web": "http://www.cnblogs.com/wangfupeng1988/default.html?OnlyTitle=1", + "mail": "wangfupeng1988@163.com" + } + ], + "repositories": [ + { + "type": "git", + "url": "https://github.com/wangfupeng1988/wangEditor" + } + ], + "scripts": { + "release": "gulp", + "win-example": "node ./example/server/index.js", + "example": "/bin/rm -rf ./example/upload-files && mkdir ./example/upload-files && npm run win-example" + }, + "devDependencies": { + "autoprefixer": "^6.7.7", + "babel-plugin-external-helpers": "^6.22.0", + "babel-preset-latest": "^6.24.0", + "cssgrace": "^3.0.0", + "formidable": "^1.1.1", + "gulp": "^3.9.1", + "gulp-concat": "^2.6.1", + "gulp-cssmin": "^0.1.7", + "gulp-less": "^3.3.0", + "gulp-postcss": "^6.4.0", + "gulp-rename": "^1.2.2", + "gulp-replace": "^0.5.4", + "gulp-sourcemaps": "^2.5.0", + "gulp-uglify": "^2.1.2", + "koa": "^1.2.4", + "koa-bodyparser": "^2.3.0", + "koa-onerror": "^3.1.0", + "koa-router": "^5.4.0", + "koa-static-cache": "^4.0.0", + "rollup": "^0.41.6", + "rollup-plugin-babel": "^2.7.1", + "rollup-plugin-eslint": "^3.0.0", + "rollup-plugin-node-resolve": "^3.0.0" + }, + "dependencies": {} +} diff --git a/novel-front/src/main/resources/static/wangEditor/release/fonts/w-e-icon.woff b/novel-front/src/main/resources/static/wangEditor/release/fonts/w-e-icon.woff new file mode 100644 index 0000000..fa64c4d Binary files /dev/null and b/novel-front/src/main/resources/static/wangEditor/release/fonts/w-e-icon.woff differ diff --git a/novel-front/src/main/resources/static/wangEditor/release/wangEditor.css b/novel-front/src/main/resources/static/wangEditor/release/wangEditor.css new file mode 100644 index 0000000..78a4c41 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/release/wangEditor.css @@ -0,0 +1,405 @@ +.w-e-toolbar, +.w-e-text-container, +.w-e-menu-panel { + padding: 0; + margin: 0; + box-sizing: border-box; +} +.w-e-toolbar *, +.w-e-text-container *, +.w-e-menu-panel * { + padding: 0; + margin: 0; + box-sizing: border-box; +} +.w-e-clear-fix:after { + content: ""; + display: table; + clear: both; +} + +.w-e-toolbar .w-e-droplist { + position: absolute; + left: 0; + top: 0; + background-color: #fff; + border: 1px solid #f1f1f1; + border-right-color: #ccc; + border-bottom-color: #ccc; +} +.w-e-toolbar .w-e-droplist .w-e-dp-title { + text-align: center; + color: #999; + line-height: 2; + border-bottom: 1px solid #f1f1f1; + font-size: 13px; +} +.w-e-toolbar .w-e-droplist ul.w-e-list { + list-style: none; + line-height: 1; +} +.w-e-toolbar .w-e-droplist ul.w-e-list li.w-e-item { + color: #333; + padding: 5px 0; +} +.w-e-toolbar .w-e-droplist ul.w-e-list li.w-e-item:hover { + background-color: #f1f1f1; +} +.w-e-toolbar .w-e-droplist ul.w-e-block { + list-style: none; + text-align: left; + padding: 5px; +} +.w-e-toolbar .w-e-droplist ul.w-e-block li.w-e-item { + display: inline-block; + *display: inline; + *zoom: 1; + padding: 3px 5px; +} +.w-e-toolbar .w-e-droplist ul.w-e-block li.w-e-item:hover { + background-color: #f1f1f1; +} + +@font-face { + font-family: 'w-e-icon'; + src: url(data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAABXAAAsAAAAAFXQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgDxIPAmNtYXAAAAFoAAAA9AAAAPRAxxN6Z2FzcAAAAlwAAAAIAAAACAAAABBnbHlmAAACZAAAEHwAABB8kRGt5WhlYWQAABLgAAAANgAAADYN4rlyaGhlYQAAExgAAAAkAAAAJAfEA99obXR4AAATPAAAAHwAAAB8cAcDvGxvY2EAABO4AAAAQAAAAEAx8jYEbWF4cAAAE/gAAAAgAAAAIAAqALZuYW1lAAAUGAAAAYYAAAGGmUoJ+3Bvc3QAABWgAAAAIAAAACAAAwAAAAMD3AGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA8fwDwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEANgAAAAyACAABAASAAEAIOkG6Q3pEulH6Wbpd+m56bvpxunL6d/qDepl6mjqcep58A3wFPEg8dzx/P/9//8AAAAAACDpBukN6RLpR+ll6Xfpuem76cbpy+nf6g3qYupo6nHqd/AN8BTxIPHc8fz//f//AAH/4xb+FvgW9BbAFqMWkxZSFlEWRxZDFjAWAxWvFa0VpRWgEA0QBw78DkEOIgADAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAPAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAIAAP/ABAADwAAEABMAAAE3AScBAy4BJxM3ASMBAyUBNQEHAYCAAcBA/kCfFzsyY4ABgMD+gMACgAGA/oBOAUBAAcBA/kD+nTI7FwERTgGA/oD9gMABgMD+gIAABAAAAAAEAAOAABAAIQAtADQAAAE4ATEROAExITgBMRE4ATEhNSEiBhURFBYzITI2NRE0JiMHFAYjIiY1NDYzMhYTITUTATM3A8D8gAOA/IAaJiYaA4AaJiYagDgoKDg4KCg4QP0A4AEAQOADQP0AAwBAJhr9ABomJhoDABom4Cg4OCgoODj9uIABgP7AwAAAAgAAAEAEAANAACgALAAAAS4DIyIOAgcOAxUUHgIXHgMzMj4CNz4DNTQuAicBEQ0BA9U2cXZ5Pz95dnE2Cw8LBgYLDws2cXZ5Pz95dnE2Cw8LBgYLDwv9qwFA/sADIAgMCAQECAwIKVRZWy8vW1lUKQgMCAQECAwIKVRZWy8vW1lUKf3gAYDAwAAAAAACAMD/wANAA8AAEwAfAAABIg4CFRQeAjEwPgI1NC4CAyImNTQ2MzIWFRQGAgBCdVcyZHhkZHhkMld1QlBwcFBQcHADwDJXdUJ4+syCgsz6eEJ1VzL+AHBQUHBwUFBwAAABAAAAAAQAA4AAIQAAASIOAgcnESEnPgEzMh4CFRQOAgcXPgM1NC4CIwIANWRcUiOWAYCQNYtQUItpPBIiMB5VKEAtGFCLu2oDgBUnNyOW/oCQNDw8aYtQK1FJQRpgI1ZibDlqu4tQAAEAAAAABAADgAAgAAATFB4CFzcuAzU0PgIzMhYXByERBy4DIyIOAgAYLUAoVR4wIhI8aYtQUIs1kAGAliNSXGQ1aruLUAGAOWxiViNgGkFJUStQi2k8PDSQAYCWIzcnFVCLuwACAAAAQAQBAwAAHgA9AAATMh4CFRQOAiMiLgI1JzQ+AjMVIgYHDgEHPgEhMh4CFRQOAiMiLgI1JzQ+AjMVIgYHDgEHPgHhLlI9IyM9Ui4uUj0jAUZ6o11AdS0JEAcIEgJJLlI9IyM9Ui4uUj0jAUZ6o11AdS0JEAcIEgIAIz1SLi5SPSMjPVIuIF2jekaAMC4IEwoCASM9Ui4uUj0jIz1SLiBdo3pGgDAuCBMKAgEAAAYAQP/ABAADwAADAAcACwARAB0AKQAAJSEVIREhFSERIRUhJxEjNSM1ExUzFSM1NzUjNTMVFREjNTM1IzUzNSM1AYACgP2AAoD9gAKA/YDAQEBAgMCAgMDAgICAgICAAgCAAgCAwP8AwED98jJAkjwyQJLu/sBAQEBAQAAGAAD/wAQAA8AAAwAHAAsAFwAjAC8AAAEhFSERIRUhESEVIQE0NjMyFhUUBiMiJhE0NjMyFhUUBiMiJhE0NjMyFhUUBiMiJgGAAoD9gAKA/YACgP2A/oBLNTVLSzU1S0s1NUtLNTVLSzU1S0s1NUsDgID/AID/AIADQDVLSzU1S0v+tTVLSzU1S0v+tTVLSzU1S0sAAwAAAAAEAAOgAAMADQAUAAA3IRUhJRUhNRMhFSE1ISUJASMRIxEABAD8AAQA/ACAAQABAAEA/WABIAEg4IBAQMBAQAEAgIDAASD+4P8AAQAAAAAAAgBT/8wDrQO0AC8AXAAAASImJy4BNDY/AT4BMzIWFx4BFAYPAQYiJyY0PwE2NCcuASMiBg8BBhQXFhQHDgEjAyImJy4BNDY/ATYyFxYUDwEGFBceATMyNj8BNjQnJjQ3NjIXHgEUBg8BDgEjAbgKEwgjJCQjwCNZMTFZIyMkJCNYDywPDw9YKSkUMxwcMxTAKSkPDwgTCrgxWSMjJCQjWA8sDw8PWCkpFDMcHDMUwCkpDw8PKxAjJCQjwCNZMQFECAckWl5aJMAiJSUiJFpeWiRXEBAPKw9YKXQpFBUVFMApdCkPKxAHCP6IJSIkWl5aJFcQEA8rD1gpdCkUFRUUwCl0KQ8rEA8PJFpeWiTAIiUAAAAABQAA/8AEAAPAABMAJwA7AEcAUwAABTI+AjU0LgIjIg4CFRQeAhMyHgIVFA4CIyIuAjU0PgITMj4CNw4DIyIuAiceAyc0NjMyFhUUBiMiJiU0NjMyFhUUBiMiJgIAaruLUFCLu2pqu4tQUIu7alaYcUFBcZhWVphxQUFxmFYrVVFMIwU3Vm8/P29WNwUjTFFV1SUbGyUlGxslAYAlGxslJRsbJUBQi7tqaruLUFCLu2pqu4tQA6BBcZhWVphxQUFxmFZWmHFB/gkMFSAUQ3RWMTFWdEMUIBUM9yg4OCgoODgoKDg4KCg4OAAAAAADAAD/wAQAA8AAEwAnADMAAAEiDgIVFB4CMzI+AjU0LgIDIi4CNTQ+AjMyHgIVFA4CEwcnBxcHFzcXNyc3AgBqu4tQUIu7amq7i1BQi7tqVphxQUFxmFZWmHFBQXGYSqCgYKCgYKCgYKCgA8BQi7tqaruLUFCLu2pqu4tQ/GBBcZhWVphxQUFxmFZWmHFBAqCgoGCgoGCgoGCgoAADAMAAAANAA4AAEgAbACQAAAE+ATU0LgIjIREhMj4CNTQmATMyFhUUBisBEyMRMzIWFRQGAsQcIChGXTX+wAGANV1GKET+hGUqPDwpZp+fnyw+PgHbIlQvNV1GKPyAKEZdNUZ0AUZLNTVL/oABAEs1NUsAAAIAwAAAA0ADgAAbAB8AAAEzERQOAiMiLgI1ETMRFBYXHgEzMjY3PgE1ASEVIQLAgDJXdUJCdVcygBsYHEkoKEkcGBv+AAKA/YADgP5gPGlOLS1OaTwBoP5gHjgXGBsbGBc4Hv6ggAAAAQCAAAADgAOAAAsAAAEVIwEzFSE1MwEjNQOAgP7AgP5AgAFAgAOAQP0AQEADAEAAAQAAAAAEAAOAAD0AAAEVIx4BFRQGBw4BIyImJy4BNTMUFjMyNjU0JiMhNSEuAScuATU0Njc+ATMyFhceARUjNCYjIgYVFBYzMhYXBADrFRY1MCxxPj5xLDA1gHJOTnJyTv4AASwCBAEwNTUwLHE+PnEsMDWAck5OcnJOO24rAcBAHUEiNWIkISQkISRiNTRMTDQ0TEABAwEkYjU1YiQhJCQhJGI1NExMNDRMIR8AAAAHAAD/wAQAA8AAAwAHAAsADwATABsAIwAAEzMVIzczFSMlMxUjNzMVIyUzFSMDEyETMxMhEwEDIQMjAyEDAICAwMDAAQCAgMDAwAEAgIAQEP0AECAQAoAQ/UAQAwAQIBD9gBABwEBAQEBAQEBAQAJA/kABwP6AAYD8AAGA/oABQP7AAAAKAAAAAAQAA4AAAwAHAAsADwATABcAGwAfACMAJwAAExEhEQE1IRUdASE1ARUhNSMVITURIRUhJSEVIRE1IRUBIRUhITUhFQAEAP2AAQD/AAEA/wBA/wABAP8AAoABAP8AAQD8gAEA/wACgAEAA4D8gAOA/cDAwEDAwAIAwMDAwP8AwMDAAQDAwP7AwMDAAAAFAAAAAAQAA4AAAwAHAAsADwATAAATIRUhFSEVIREhFSERIRUhESEVIQAEAPwAAoD9gAKA/YAEAPwABAD8AAOAgECA/wCAAUCA/wCAAAAAAAUAAAAABAADgAADAAcACwAPABMAABMhFSEXIRUhESEVIQMhFSERIRUhAAQA/ADAAoD9gAKA/YDABAD8AAQA/AADgIBAgP8AgAFAgP8AgAAABQAAAAAEAAOAAAMABwALAA8AEwAAEyEVIQUhFSERIRUhASEVIREhFSEABAD8AAGAAoD9gAKA/YD+gAQA/AAEAPwAA4CAQID/AIABQID/AIAAAAAAAQA/AD8C5gLmACwAACUUDwEGIyIvAQcGIyIvASY1ND8BJyY1ND8BNjMyHwE3NjMyHwEWFRQPARcWFQLmEE4QFxcQqKgQFxYQThAQqKgQEE4QFhcQqKgQFxcQThAQqKgQwxYQThAQqKgQEE4QFhcQqKgQFxcQThAQqKgQEE4QFxcQqKgQFwAAAAYAAAAAAyUDbgAUACgAPABNAFUAggAAAREUBwYrASInJjURNDc2OwEyFxYVMxEUBwYrASInJjURNDc2OwEyFxYXERQHBisBIicmNRE0NzY7ATIXFhMRIREUFxYXFjMhMjc2NzY1ASEnJicjBgcFFRQHBisBERQHBiMhIicmNREjIicmPQE0NzY7ATc2NzY7ATIXFh8BMzIXFhUBJQYFCCQIBQYGBQgkCAUGkgUFCCUIBQUFBQglCAUFkgUFCCUIBQUFBQglCAUFSf4ABAQFBAIB2wIEBAQE/oABABsEBrUGBAH3BgUINxobJv4lJhsbNwgFBQUFCLEoCBcWF7cXFhYJKLAIBQYCEv63CAUFBQUIAUkIBQYGBQj+twgFBQUFCAFJCAUGBgUI/rcIBQUFBQgBSQgFBgYF/lsCHf3jDQsKBQUFBQoLDQJmQwUCAgVVJAgGBf3jMCIjISIvAiAFBggkCAUFYBUPDw8PFWAFBQgAAgAHAEkDtwKvABoALgAACQEGIyIvASY1ND8BJyY1ND8BNjMyFwEWFRQHARUUBwYjISInJj0BNDc2MyEyFxYBTv72BgcIBR0GBuHhBgYdBQgHBgEKBgYCaQUFCP3bCAUFBQUIAiUIBQUBhf72BgYcBggHBuDhBgcHBh0FBf71BQgHBv77JQgFBQUFCCUIBQUFBQAAAAEAIwAAA90DbgCzAAAlIicmIyIHBiMiJyY1NDc2NzY3Njc2PQE0JyYjISIHBh0BFBcWFxYzFhcWFRQHBiMiJyYjIgcGIyInJjU0NzY3Njc2NzY9ARE0NTQ1NCc0JyYnJicmJyYnJiMiJyY1NDc2MzIXFjMyNzYzMhcWFRQHBiMGBwYHBh0BFBcWMyEyNzY9ATQnJicmJyY1NDc2MzIXFjMyNzYzMhcWFRQHBgciBwYHBhURFBcWFxYXMhcWFRQHBiMDwRkzMhoZMjMZDQgHCQoNDBEQChIBBxX+fhYHARUJEhMODgwLBwcOGzU1GhgxMRgNBwcJCQsMEA8JEgECAQIDBAQFCBIRDQ0KCwcHDho1NRoYMDEYDgcHCQoMDRAQCBQBBw8BkA4HARQKFxcPDgcHDhkzMhkZMTEZDgcHCgoNDRARCBQUCRERDg0KCwcHDgACAgICDAsPEQkJAQEDAwUMROAMBQMDBQzUUQ0GAQIBCAgSDwwNAgICAgwMDhEICQECAwMFDUUhAdACDQ0ICA4OCgoLCwcHAwYBAQgIEg8MDQICAgINDA8RCAgBAgEGDFC2DAcBAQcMtlAMBgEBBgcWDwwNAgICAg0MDxEICAEBAgYNT/3mRAwGAgIBCQgRDwwNAAACAAD/twP/A7cAEwA5AAABMhcWFRQHAgcGIyInJjU0NwE2MwEWFxYfARYHBiMiJyYnJicmNRYXFhcWFxYzMjc2NzY3Njc2NzY3A5soHh4avkw3RUg0NDUBbSEp/fgXJicvAQJMTHtHNjYhIRARBBMUEBASEQkXCA8SExUVHR0eHikDtxsaKCQz/plGNDU0SUkwAUsf/bErHx8NKHpNTBobLi86OkQDDw4LCwoKFiUbGhERCgsEBAIAAQAAAAAAANox8glfDzz1AAsEAAAAAADVYbp/AAAAANVhun8AAP+3BAEDwAAAAAgAAgAAAAAAAAABAAADwP/AAAAEAAAA//8EAQABAAAAAAAAAAAAAAAAAAAAHwQAAAAAAAAAAAAAAAIAAAAEAAAABAAAAAQAAAAEAADABAAAAAQAAAAEAAAABAAAQAQAAAAEAAAABAAAUwQAAAAEAAAABAAAwAQAAMAEAACABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAyUAPwMlAAADvgAHBAAAIwP/AAAAAAAAAAoAFAAeAEwAlADaAQoBPgFwAcgCBgJQAnoDBAN6A8gEAgQ2BE4EpgToBTAFWAWABaoF7gamBvAH4gg+AAEAAAAfALQACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAHAAAAAQAAAAAAAgAHAGAAAQAAAAAAAwAHADYAAQAAAAAABAAHAHUAAQAAAAAABQALABUAAQAAAAAABgAHAEsAAQAAAAAACgAaAIoAAwABBAkAAQAOAAcAAwABBAkAAgAOAGcAAwABBAkAAwAOAD0AAwABBAkABAAOAHwAAwABBAkABQAWACAAAwABBAkABgAOAFIAAwABBAkACgA0AKRpY29tb29uAGkAYwBvAG0AbwBvAG5WZXJzaW9uIDEuMABWAGUAcgBzAGkAbwBuACAAMQAuADBpY29tb29uAGkAYwBvAG0AbwBvAG5pY29tb29uAGkAYwBvAG0AbwBvAG5SZWd1bGFyAFIAZQBnAHUAbABhAHJpY29tb29uAGkAYwBvAG0AbwBvAG5Gb250IGdlbmVyYXRlZCBieSBJY29Nb29uLgBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('truetype'); + font-weight: normal; + font-style: normal; +} +[class^="w-e-icon-"], +[class*=" w-e-icon-"] { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: 'w-e-icon' !important; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.w-e-icon-close:before { + content: "\f00d"; +} +.w-e-icon-upload2:before { + content: "\e9c6"; +} +.w-e-icon-trash-o:before { + content: "\f014"; +} +.w-e-icon-header:before { + content: "\f1dc"; +} +.w-e-icon-pencil2:before { + content: "\e906"; +} +.w-e-icon-paint-brush:before { + content: "\f1fc"; +} +.w-e-icon-image:before { + content: "\e90d"; +} +.w-e-icon-play:before { + content: "\e912"; +} +.w-e-icon-location:before { + content: "\e947"; +} +.w-e-icon-undo:before { + content: "\e965"; +} +.w-e-icon-redo:before { + content: "\e966"; +} +.w-e-icon-quotes-left:before { + content: "\e977"; +} +.w-e-icon-list-numbered:before { + content: "\e9b9"; +} +.w-e-icon-list2:before { + content: "\e9bb"; +} +.w-e-icon-link:before { + content: "\e9cb"; +} +.w-e-icon-happy:before { + content: "\e9df"; +} +.w-e-icon-bold:before { + content: "\ea62"; +} +.w-e-icon-underline:before { + content: "\ea63"; +} +.w-e-icon-italic:before { + content: "\ea64"; +} +.w-e-icon-strikethrough:before { + content: "\ea65"; +} +.w-e-icon-table2:before { + content: "\ea71"; +} +.w-e-icon-paragraph-left:before { + content: "\ea77"; +} +.w-e-icon-paragraph-center:before { + content: "\ea78"; +} +.w-e-icon-paragraph-right:before { + content: "\ea79"; +} +.w-e-icon-terminal:before { + content: "\f120"; +} +.w-e-icon-page-break:before { + content: "\ea68"; +} +.w-e-icon-cancel-circle:before { + content: "\ea0d"; +} + +.w-e-toolbar { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + padding: 0 5px; + /* flex-wrap: wrap; */ + /* 单个菜单 */ +} +.w-e-toolbar .w-e-menu { + position: relative; + text-align: center; + padding: 5px 10px; + cursor: pointer; +} +.w-e-toolbar .w-e-menu i { + color: #999; +} +.w-e-toolbar .w-e-menu:hover i { + color: #333; +} +.w-e-toolbar .w-e-active i { + color: #1e88e5; +} +.w-e-toolbar .w-e-active:hover i { + color: #1e88e5; +} + +.w-e-text-container .w-e-panel-container { + position: absolute; + top: 0; + left: 50%; + border: 1px solid #ccc; + border-top: 0; + box-shadow: 1px 1px 2px #ccc; + color: #333; + background-color: #fff; + /* 为 emotion panel 定制的样式 */ + /* 上传图片的 panel 定制样式 */ +} +.w-e-text-container .w-e-panel-container .w-e-panel-close { + position: absolute; + right: 0; + top: 0; + padding: 5px; + margin: 2px 5px 0 0; + cursor: pointer; + color: #999; +} +.w-e-text-container .w-e-panel-container .w-e-panel-close:hover { + color: #333; +} +.w-e-text-container .w-e-panel-container .w-e-panel-tab-title { + list-style: none; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + font-size: 14px; + margin: 2px 10px 0 10px; + border-bottom: 1px solid #f1f1f1; +} +.w-e-text-container .w-e-panel-container .w-e-panel-tab-title .w-e-item { + padding: 3px 5px; + color: #999; + cursor: pointer; + margin: 0 3px; + position: relative; + top: 1px; +} +.w-e-text-container .w-e-panel-container .w-e-panel-tab-title .w-e-active { + color: #333; + border-bottom: 1px solid #333; + cursor: default; + font-weight: 700; +} +.w-e-text-container .w-e-panel-container .w-e-panel-tab-content { + padding: 10px 15px 10px 15px; + font-size: 16px; + /* 输入框的样式 */ + /* 按钮的样式 */ +} +.w-e-text-container .w-e-panel-container .w-e-panel-tab-content input:focus, +.w-e-text-container .w-e-panel-container .w-e-panel-tab-content textarea:focus, +.w-e-text-container .w-e-panel-container .w-e-panel-tab-content button:focus { + outline: none; +} +.w-e-text-container .w-e-panel-container .w-e-panel-tab-content textarea { + width: 100%; + border: 1px solid #ccc; + padding: 5px; +} +.w-e-text-container .w-e-panel-container .w-e-panel-tab-content textarea:focus { + border-color: #1e88e5; +} +.w-e-text-container .w-e-panel-container .w-e-panel-tab-content input[type=text] { + border: none; + border-bottom: 1px solid #ccc; + font-size: 14px; + height: 20px; + color: #333; + text-align: left; +} +.w-e-text-container .w-e-panel-container .w-e-panel-tab-content input[type=text].small { + width: 30px; + text-align: center; +} +.w-e-text-container .w-e-panel-container .w-e-panel-tab-content input[type=text].block { + display: block; + width: 100%; + margin: 10px 0; +} +.w-e-text-container .w-e-panel-container .w-e-panel-tab-content input[type=text]:focus { + border-bottom: 2px solid #1e88e5; +} +.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button { + font-size: 14px; + color: #1e88e5; + border: none; + padding: 5px 10px; + background-color: #fff; + cursor: pointer; + border-radius: 3px; +} +.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.left { + float: left; + margin-right: 10px; +} +.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.right { + float: right; + margin-left: 10px; +} +.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.gray { + color: #999; +} +.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.red { + color: #c24f4a; +} +.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button:hover { + background-color: #f1f1f1; +} +.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container:after { + content: ""; + display: table; + clear: both; +} +.w-e-text-container .w-e-panel-container .w-e-emoticon-container .w-e-item { + cursor: pointer; + font-size: 18px; + padding: 0 3px; + display: inline-block; + *display: inline; + *zoom: 1; +} +.w-e-text-container .w-e-panel-container .w-e-up-img-container { + text-align: center; +} +.w-e-text-container .w-e-panel-container .w-e-up-img-container .w-e-up-btn { + display: inline-block; + *display: inline; + *zoom: 1; + color: #999; + cursor: pointer; + font-size: 60px; + line-height: 1; +} +.w-e-text-container .w-e-panel-container .w-e-up-img-container .w-e-up-btn:hover { + color: #333; +} + +.w-e-text-container { + position: relative; +} +.w-e-text-container .w-e-progress { + position: absolute; + background-color: #1e88e5; + bottom: 0; + left: 0; + height: 1px; +} +.w-e-text { + padding: 0 10px; + overflow-y: scroll; +} +.w-e-text p, +.w-e-text h1, +.w-e-text h2, +.w-e-text h3, +.w-e-text h4, +.w-e-text h5, +.w-e-text table, +.w-e-text pre { + margin: 10px 0; + line-height: 1.5; +} +.w-e-text ul, +.w-e-text ol { + margin: 10px 0 10px 20px; +} +.w-e-text blockquote { + display: block; + border-left: 8px solid #d0e5f2; + padding: 5px 10px; + margin: 10px 0; + line-height: 1.4; + font-size: 100%; + background-color: #f1f1f1; +} +.w-e-text code { + display: inline-block; + *display: inline; + *zoom: 1; + background-color: #f1f1f1; + border-radius: 3px; + padding: 3px 5px; + margin: 0 3px; +} +.w-e-text pre code { + display: block; +} +.w-e-text table { + border-top: 1px solid #ccc; + border-left: 1px solid #ccc; +} +.w-e-text table td, +.w-e-text table th { + border-bottom: 1px solid #ccc; + border-right: 1px solid #ccc; + padding: 3px 5px; +} +.w-e-text table th { + border-bottom: 2px solid #ccc; + text-align: center; +} +.w-e-text:focus { + outline: none; +} +.w-e-text img { + cursor: pointer; +} +.w-e-text img:hover { + box-shadow: 0 0 5px #333; +} diff --git a/novel-front/src/main/resources/static/wangEditor/release/wangEditor.js b/novel-front/src/main/resources/static/wangEditor/release/wangEditor.js new file mode 100644 index 0000000..ea701f1 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/release/wangEditor.js @@ -0,0 +1,4679 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.wangEditor = factory()); +}(this, (function () { 'use strict'; + +/* + poly-fill +*/ + +var polyfill = function () { + + // Object.assign + if (typeof Object.assign != 'function') { + Object.assign = function (target, varArgs) { + // .length of function is 2 + if (target == null) { + // TypeError if undefined or null + throw new TypeError('Cannot convert undefined or null to object'); + } + + var to = Object(target); + + for (var index = 1; index < arguments.length; index++) { + var nextSource = arguments[index]; + + if (nextSource != null) { + // Skip over if undefined or null + for (var nextKey in nextSource) { + // Avoid bugs when hasOwnProperty is shadowed + if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { + to[nextKey] = nextSource[nextKey]; + } + } + } + } + return to; + }; + } + + // IE 中兼容 Element.prototype.matches + if (!Element.prototype.matches) { + Element.prototype.matches = Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector || function (s) { + var matches = (this.document || this.ownerDocument).querySelectorAll(s), + i = matches.length; + while (--i >= 0 && matches.item(i) !== this) {} + return i > -1; + }; + } +}; + +/* + DOM 操作 API +*/ + +// 根据 html 代码片段创建 dom 对象 +function createElemByHTML(html) { + var div = void 0; + div = document.createElement('div'); + div.innerHTML = html; + return div.children; +} + +// 是否是 DOM List +function isDOMList(selector) { + if (!selector) { + return false; + } + if (selector instanceof HTMLCollection || selector instanceof NodeList) { + return true; + } + return false; +} + +// 封装 document.querySelectorAll +function querySelectorAll(selector) { + var result = document.querySelectorAll(selector); + if (isDOMList(result)) { + return result; + } else { + return [result]; + } +} + +// 记录所有的事件绑定 +var eventList = []; + +// 创建构造函数 +function DomElement(selector) { + if (!selector) { + return; + } + + // selector 本来就是 DomElement 对象,直接返回 + if (selector instanceof DomElement) { + return selector; + } + + this.selector = selector; + var nodeType = selector.nodeType; + + // 根据 selector 得出的结果(如 DOM,DOM List) + var selectorResult = []; + if (nodeType === 9) { + // document 节点 + selectorResult = [selector]; + } else if (nodeType === 1) { + // 单个 DOM 节点 + selectorResult = [selector]; + } else if (isDOMList(selector) || selector instanceof Array) { + // DOM List 或者数组 + selectorResult = selector; + } else if (typeof selector === 'string') { + // 字符串 + selector = selector.replace('/\n/mg', '').trim(); + if (selector.indexOf('<') === 0) { + // 如
          + selectorResult = createElemByHTML(selector); + } else { + // 如 #id .class + selectorResult = querySelectorAll(selector); + } + } + + var length = selectorResult.length; + if (!length) { + // 空数组 + return this; + } + + // 加入 DOM 节点 + var i = void 0; + for (i = 0; i < length; i++) { + this[i] = selectorResult[i]; + } + this.length = length; +} + +// 修改原型 +DomElement.prototype = { + constructor: DomElement, + + // 类数组,forEach + forEach: function forEach(fn) { + var i = void 0; + for (i = 0; i < this.length; i++) { + var elem = this[i]; + var result = fn.call(elem, elem, i); + if (result === false) { + break; + } + } + return this; + }, + + // clone + clone: function clone(deep) { + var cloneList = []; + this.forEach(function (elem) { + cloneList.push(elem.cloneNode(!!deep)); + }); + return $(cloneList); + }, + + // 获取第几个元素 + get: function get(index) { + var length = this.length; + if (index >= length) { + index = index % length; + } + return $(this[index]); + }, + + // 第一个 + first: function first() { + return this.get(0); + }, + + // 最后一个 + last: function last() { + var length = this.length; + return this.get(length - 1); + }, + + // 绑定事件 + on: function on(type, selector, fn) { + // selector 不为空,证明绑定事件要加代理 + if (!fn) { + fn = selector; + selector = null; + } + + // type 是否有多个 + var types = []; + types = type.split(/\s+/); + + return this.forEach(function (elem) { + types.forEach(function (type) { + if (!type) { + return; + } + + // 记录下,方便后面解绑 + eventList.push({ + elem: elem, + type: type, + fn: fn + }); + + if (!selector) { + // 无代理 + elem.addEventListener(type, fn); + return; + } + + // 有代理 + elem.addEventListener(type, function (e) { + var target = e.target; + if (target.matches(selector)) { + fn.call(target, e); + } + }); + }); + }); + }, + + // 取消事件绑定 + off: function off(type, fn) { + return this.forEach(function (elem) { + elem.removeEventListener(type, fn); + }); + }, + + // 获取/设置 属性 + attr: function attr(key, val) { + if (val == null) { + // 获取值 + return this[0].getAttribute(key); + } else { + // 设置值 + return this.forEach(function (elem) { + elem.setAttribute(key, val); + }); + } + }, + + // 添加 class + addClass: function addClass(className) { + if (!className) { + return this; + } + return this.forEach(function (elem) { + var arr = void 0; + if (elem.className) { + // 解析当前 className 转换为数组 + arr = elem.className.split(/\s/); + arr = arr.filter(function (item) { + return !!item.trim(); + }); + // 添加 class + if (arr.indexOf(className) < 0) { + arr.push(className); + } + // 修改 elem.class + elem.className = arr.join(' '); + } else { + elem.className = className; + } + }); + }, + + // 删除 class + removeClass: function removeClass(className) { + if (!className) { + return this; + } + return this.forEach(function (elem) { + var arr = void 0; + if (elem.className) { + // 解析当前 className 转换为数组 + arr = elem.className.split(/\s/); + arr = arr.filter(function (item) { + item = item.trim(); + // 删除 class + if (!item || item === className) { + return false; + } + return true; + }); + // 修改 elem.class + elem.className = arr.join(' '); + } + }); + }, + + // 修改 css + css: function css(key, val) { + var currentStyle = key + ':' + val + ';'; + return this.forEach(function (elem) { + var style = (elem.getAttribute('style') || '').trim(); + var styleArr = void 0, + resultArr = []; + if (style) { + // 将 style 按照 ; 拆分为数组 + styleArr = style.split(';'); + styleArr.forEach(function (item) { + // 对每项样式,按照 : 拆分为 key 和 value + var arr = item.split(':').map(function (i) { + return i.trim(); + }); + if (arr.length === 2) { + resultArr.push(arr[0] + ':' + arr[1]); + } + }); + // 替换或者新增 + resultArr = resultArr.map(function (item) { + if (item.indexOf(key) === 0) { + return currentStyle; + } else { + return item; + } + }); + if (resultArr.indexOf(currentStyle) < 0) { + resultArr.push(currentStyle); + } + // 结果 + elem.setAttribute('style', resultArr.join('; ')); + } else { + // style 无值 + elem.setAttribute('style', currentStyle); + } + }); + }, + + // 显示 + show: function show() { + return this.css('display', 'block'); + }, + + // 隐藏 + hide: function hide() { + return this.css('display', 'none'); + }, + + // 获取子节点 + children: function children() { + var elem = this[0]; + if (!elem) { + return null; + } + + return $(elem.children); + }, + + // 获取子节点(包括文本节点) + childNodes: function childNodes() { + var elem = this[0]; + if (!elem) { + return null; + } + + return $(elem.childNodes); + }, + + // 增加子节点 + append: function append($children) { + return this.forEach(function (elem) { + $children.forEach(function (child) { + elem.appendChild(child); + }); + }); + }, + + // 移除当前节点 + remove: function remove() { + return this.forEach(function (elem) { + if (elem.remove) { + elem.remove(); + } else { + var parent = elem.parentElement; + parent && parent.removeChild(elem); + } + }); + }, + + // 是否包含某个子节点 + isContain: function isContain($child) { + var elem = this[0]; + var child = $child[0]; + return elem.contains(child); + }, + + // 尺寸数据 + getSizeData: function getSizeData() { + var elem = this[0]; + return elem.getBoundingClientRect(); // 可得到 bottom height left right top width 的数据 + }, + + // 封装 nodeName + getNodeName: function getNodeName() { + var elem = this[0]; + return elem.nodeName; + }, + + // 从当前元素查找 + find: function find(selector) { + var elem = this[0]; + return $(elem.querySelectorAll(selector)); + }, + + // 获取当前元素的 text + text: function text(val) { + if (!val) { + // 获取 text + var elem = this[0]; + return elem.innerHTML.replace(/<.*?>/g, function () { + return ''; + }); + } else { + // 设置 text + return this.forEach(function (elem) { + elem.innerHTML = val; + }); + } + }, + + // 获取 html + html: function html(value) { + var elem = this[0]; + if (value == null) { + return elem.innerHTML; + } else { + elem.innerHTML = value; + return this; + } + }, + + // 获取 value + val: function val() { + var elem = this[0]; + return elem.value.trim(); + }, + + // focus + focus: function focus() { + return this.forEach(function (elem) { + elem.focus(); + }); + }, + + // parent + parent: function parent() { + var elem = this[0]; + return $(elem.parentElement); + }, + + // parentUntil 找到符合 selector 的父节点 + parentUntil: function parentUntil(selector, _currentElem) { + var results = document.querySelectorAll(selector); + var length = results.length; + if (!length) { + // 传入的 selector 无效 + return null; + } + + var elem = _currentElem || this[0]; + if (elem.nodeName === 'BODY') { + return null; + } + + var parent = elem.parentElement; + var i = void 0; + for (i = 0; i < length; i++) { + if (parent === results[i]) { + // 找到,并返回 + return $(parent); + } + } + + // 继续查找 + return this.parentUntil(selector, parent); + }, + + // 判断两个 elem 是否相等 + equal: function equal($elem) { + if ($elem.nodeType === 1) { + return this[0] === $elem; + } else { + return this[0] === $elem[0]; + } + }, + + // 将该元素插入到某个元素前面 + insertBefore: function insertBefore(selector) { + var $referenceNode = $(selector); + var referenceNode = $referenceNode[0]; + if (!referenceNode) { + return this; + } + return this.forEach(function (elem) { + var parent = referenceNode.parentNode; + parent.insertBefore(elem, referenceNode); + }); + }, + + // 将该元素插入到某个元素后面 + insertAfter: function insertAfter(selector) { + var $referenceNode = $(selector); + var referenceNode = $referenceNode[0]; + if (!referenceNode) { + return this; + } + return this.forEach(function (elem) { + var parent = referenceNode.parentNode; + if (parent.lastChild === referenceNode) { + // 最后一个元素 + parent.appendChild(elem); + } else { + // 不是最后一个元素 + parent.insertBefore(elem, referenceNode.nextSibling); + } + }); + } +}; + +// new 一个对象 +function $(selector) { + return new DomElement(selector); +} + +// 解绑所有事件,用于销毁编辑器 +$.offAll = function () { + eventList.forEach(function (item) { + var elem = item.elem; + var type = item.type; + var fn = item.fn; + // 解绑 + elem.removeEventListener(type, fn); + }); +}; + +/* + 配置信息 +*/ + +var config = { + + // 默认菜单配置 + menus: ['head', 'bold', 'italic', 'underline', 'strikeThrough', 'foreColor', 'backColor', 'link', 'list', 'justify', 'quote', 'emoticon', 'image', 'table', 'video', 'code', 'undo', 'redo'], + + colors: ['#000000', '#eeece0', '#1c487f', '#4d80bf', '#c24f4a', '#8baa4a', '#7b5ba1', '#46acc8', '#f9963b', '#ffffff'], + + // // 语言配置 + // lang: { + // '设置标题': 'title', + // '正文': 'p', + // '链接文字': 'link text', + // '链接': 'link', + // '插入': 'insert', + // '创建': 'init' + // }, + + // 表情 + emotions: [{ + // tab 的标题 + title: '默认', + // type -> 'emoji' / 'image' + type: 'image', + // content -> 数组 + content: [{ + alt: '[坏笑]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/50/pcmoren_huaixiao_org.png' + }, { + alt: '[舔屏]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/pcmoren_tian_org.png' + }, { + alt: '[污]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3c/pcmoren_wu_org.png' + }, { + alt: '[允悲]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2c/moren_yunbei_org.png' + }, { + alt: '[笑而不语]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3a/moren_xiaoerbuyu_org.png' + }, { + alt: '[费解]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3c/moren_feijie_org.png' + }, { + alt: '[憧憬]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/37/moren_chongjing_org.png' + }, { + alt: '[并不简单]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fc/moren_bbjdnew_org.png' + }, { + alt: '[微笑]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5c/huanglianwx_org.gif' + }, { + alt: '[酷]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8a/pcmoren_cool2017_org.png' + }, { + alt: '[嘻嘻]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/tootha_org.gif' + }, { + alt: '[哈哈]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6a/laugh.gif' + }, { + alt: '[可爱]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/14/tza_org.gif' + }, { + alt: '[可怜]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/af/kl_org.gif' + }, { + alt: '[挖鼻]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/wabi_org.gif' + }, { + alt: '[吃惊]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f4/cj_org.gif' + }, { + alt: '[害羞]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6e/shamea_org.gif' + }, { + alt: '[挤眼]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c3/zy_org.gif' + }, { + alt: '[闭嘴]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/29/bz_org.gif' + }, { + alt: '[鄙视]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/71/bs2_org.gif' + }, { + alt: '[爱你]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6d/lovea_org.gif' + }, { + alt: '[泪]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9d/sada_org.gif' + }, { + alt: '[偷笑]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/19/heia_org.gif' + }, { + alt: '[亲亲]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8f/qq_org.gif' + }, { + alt: '[生病]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b6/sb_org.gif' + }, { + alt: '[太开心]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/58/mb_org.gif' + }, { + alt: '[白眼]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d9/landeln_org.gif' + }, { + alt: '[右哼哼]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/98/yhh_org.gif' + }, { + alt: '[左哼哼]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6d/zhh_org.gif' + }, { + alt: '[嘘]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a6/x_org.gif' + }, { + alt: '[衰]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/af/cry.gif' + }] + }, { + // tab 的标题 + title: '新浪', + // type -> 'emoji' / 'image' + type: 'image', + // content -> 数组 + content: [{ + src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/7a/shenshou_thumb.gif', + alt: '[草泥马]' + }, { + src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/60/horse2_thumb.gif', + alt: '[神马]' + }, { + src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/bc/fuyun_thumb.gif', + alt: '[浮云]' + }, { + src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/c9/geili_thumb.gif', + alt: '[给力]' + }, { + src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/f2/wg_thumb.gif', + alt: '[围观]' + }, { + src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/70/vw_thumb.gif', + alt: '[威武]' + }, { + src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/6e/panda_thumb.gif', + alt: '[熊猫]' + }, { + src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/81/rabbit_thumb.gif', + alt: '[兔子]' + }, { + src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/bc/otm_thumb.gif', + alt: '[奥特曼]' + }, { + src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/15/j_thumb.gif', + alt: '[囧]' + }, { + src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/89/hufen_thumb.gif', + alt: '[互粉]' + }, { + src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/c4/liwu_thumb.gif', + alt: '[礼物]' + }] + }, { + // tab 的标题 + title: 'emoji', + // type -> 'emoji' / 'image' + type: 'emoji', + // content -> 数组 + content: '😀 😃 😄 😁 😆 😅 😂 😊 😇 🙂 🙃 😉 😌 😍 😘 😗 😙 😚 😋 😜 😝 😛 🤑 🤗 🤓 😎 😏 😒 😞 😔 😟 😕 🙁 😣 😖 😫 😩 😤 😠 😡 😶 😐 😑 😯 😦 😧 😮 😲 😵 😳 😱 😨 😰 😢 😥 😭 😓 😪 😴 🙄 🤔 😬 🤐'.split(/\s/) + }], + + // 编辑区域的 z-index + zIndex: 10000, + + // 是否开启 debug 模式(debug 模式下错误会 throw error 形式抛出) + debug: false, + + // 插入链接时候的格式校验 + linkCheck: function linkCheck(text, link) { + // text 是插入的文字 + // link 是插入的链接 + return true; // 返回 true 即表示成功 + // return '校验失败' // 返回字符串即表示失败的提示信息 + }, + + // 插入网络图片的校验 + linkImgCheck: function linkImgCheck(src) { + // src 即图片的地址 + return true; // 返回 true 即表示成功 + // return '校验失败' // 返回字符串即表示失败的提示信息 + }, + + // 粘贴过滤样式,默认开启 + pasteFilterStyle: true, + + // 对粘贴的文字进行自定义处理,返回处理后的结果。编辑器会将处理后的结果粘贴到编辑区域中。 + // IE 暂时不支持 + pasteTextHandle: function pasteTextHandle(content) { + // content 即粘贴过来的内容(html 或 纯文本),可进行自定义处理然后返回 + return content; + }, + + // onchange 事件 + // onchange: function (html) { + // // html 即变化之后的内容 + // console.log(html) + // }, + + // 是否显示添加网络图片的 tab + showLinkImg: true, + + // 插入网络图片的回调 + linkImgCallback: function linkImgCallback(url) { + // console.log(url) // url 即插入图片的地址 + }, + + // 默认上传图片 max size: 5M + uploadImgMaxSize: 5 * 1024 * 1024, + + // 配置一次最多上传几个图片 + // uploadImgMaxLength: 5, + + // 上传图片,是否显示 base64 格式 + uploadImgShowBase64: false, + + // 上传图片,server 地址(如果有值,则 base64 格式的配置则失效) + // uploadImgServer: '/upload', + + // 自定义配置 filename + uploadFileName: '', + + // 上传图片的自定义参数 + uploadImgParams: { + // token: 'abcdef12345' + }, + + // 上传图片的自定义header + uploadImgHeaders: { + // 'Accept': 'text/x-json' + }, + + // 配置 XHR withCredentials + withCredentials: false, + + // 自定义上传图片超时时间 ms + uploadImgTimeout: 10000, + + // 上传图片 hook + uploadImgHooks: { + // customInsert: function (insertLinkImg, result, editor) { + // console.log('customInsert') + // // 图片上传并返回结果,自定义插入图片的事件,而不是编辑器自动插入图片 + // const data = result.data1 || [] + // data.forEach(link => { + // insertLinkImg(link) + // }) + // }, + before: function before(xhr, editor, files) { + // 图片上传之前触发 + + // 如果返回的结果是 {prevent: true, msg: 'xxxx'} 则表示用户放弃上传 + // return { + // prevent: true, + // msg: '放弃上传' + // } + }, + success: function success(xhr, editor, result) { + // 图片上传并返回结果,图片插入成功之后触发 + }, + fail: function fail(xhr, editor, result) { + // 图片上传并返回结果,但图片插入错误时触发 + }, + error: function error(xhr, editor) { + // 图片上传出错时触发 + }, + timeout: function timeout(xhr, editor) { + // 图片上传超时时触发 + } + }, + + // 是否上传七牛云,默认为 false + qiniu: false + +}; + +/* + 工具 +*/ + +// 和 UA 相关的属性 +var UA = { + _ua: navigator.userAgent, + + // 是否 webkit + isWebkit: function isWebkit() { + var reg = /webkit/i; + return reg.test(this._ua); + }, + + // 是否 IE + isIE: function isIE() { + return 'ActiveXObject' in window; + } +}; + +// 遍历对象 +function objForEach(obj, fn) { + var key = void 0, + result = void 0; + for (key in obj) { + if (obj.hasOwnProperty(key)) { + result = fn.call(obj, key, obj[key]); + if (result === false) { + break; + } + } + } +} + +// 遍历类数组 +function arrForEach(fakeArr, fn) { + var i = void 0, + item = void 0, + result = void 0; + var length = fakeArr.length || 0; + for (i = 0; i < length; i++) { + item = fakeArr[i]; + result = fn.call(fakeArr, item, i); + if (result === false) { + break; + } + } +} + +// 获取随机数 +function getRandom(prefix) { + return prefix + Math.random().toString().slice(2); +} + +// 替换 html 特殊字符 +function replaceHtmlSymbol(html) { + if (html == null) { + return ''; + } + return html.replace(//gm, '>').replace(/"/gm, '"'); +} + +// 返回百分比的格式 + + +// 判断是不是 function +function isFunction(fn) { + return typeof fn === 'function'; +} + +/* + bold-menu +*/ +// 构造函数 +function Bold(editor) { + this.editor = editor; + this.$elem = $('
          \n \n
          '); + this.type = 'click'; + + // 当前是否 active 状态 + this._active = false; +} + +// 原型 +Bold.prototype = { + constructor: Bold, + + // 点击事件 + onClick: function onClick(e) { + // 点击菜单将触发这里 + + var editor = this.editor; + var isSeleEmpty = editor.selection.isSelectionEmpty(); + + if (isSeleEmpty) { + // 选区是空的,插入并选中一个“空白” + editor.selection.createEmptyRange(); + } + + // 执行 bold 命令 + editor.cmd.do('bold'); + + if (isSeleEmpty) { + // 需要将选取折叠起来 + editor.selection.collapseRange(); + editor.selection.restoreSelection(); + } + }, + + // 试图改变 active 状态 + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + if (editor.cmd.queryCommandState('bold')) { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); + } + } +}; + +/* + 替换多语言 + */ + +var replaceLang = function (editor, str) { + var langArgs = editor.config.langArgs || []; + var result = str; + + langArgs.forEach(function (item) { + var reg = item.reg; + var val = item.val; + + if (reg.test(result)) { + result = result.replace(reg, function () { + return val; + }); + } + }); + + return result; +}; + +/* + droplist +*/ +var _emptyFn = function _emptyFn() {}; + +// 构造函数 +function DropList(menu, opt) { + var _this = this; + + // droplist 所依附的菜单 + var editor = menu.editor; + this.menu = menu; + this.opt = opt; + // 容器 + var $container = $('
          '); + + // 标题 + var $title = opt.$title; + var titleHtml = void 0; + if ($title) { + // 替换多语言 + titleHtml = $title.html(); + titleHtml = replaceLang(editor, titleHtml); + $title.html(titleHtml); + + $title.addClass('w-e-dp-title'); + $container.append($title); + } + + var list = opt.list || []; + var type = opt.type || 'list'; // 'list' 列表形式(如“标题”菜单) / 'inline-block' 块状形式(如“颜色”菜单) + var onClick = opt.onClick || _emptyFn; + + // 加入 DOM 并绑定事件 + var $list = $('
            '); + $container.append($list); + list.forEach(function (item) { + var $elem = item.$elem; + + // 替换多语言 + var elemHtml = $elem.html(); + elemHtml = replaceLang(editor, elemHtml); + $elem.html(elemHtml); + + var value = item.value; + var $li = $('
          • '); + if ($elem) { + $li.append($elem); + $list.append($li); + $li.on('click', function (e) { + onClick(value); + + // 隐藏 + _this.hideTimeoutId = setTimeout(function () { + _this.hide(); + }, 0); + }); + } + }); + + // 绑定隐藏事件 + $container.on('mouseleave', function (e) { + _this.hideTimeoutId = setTimeout(function () { + _this.hide(); + }, 0); + }); + + // 记录属性 + this.$container = $container; + + // 基本属性 + this._rendered = false; + this._show = false; +} + +// 原型 +DropList.prototype = { + constructor: DropList, + + // 显示(插入DOM) + show: function show() { + if (this.hideTimeoutId) { + // 清除之前的定时隐藏 + clearTimeout(this.hideTimeoutId); + } + + var menu = this.menu; + var $menuELem = menu.$elem; + var $container = this.$container; + if (this._show) { + return; + } + if (this._rendered) { + // 显示 + $container.show(); + } else { + // 加入 DOM 之前先定位位置 + var menuHeight = $menuELem.getSizeData().height || 0; + var width = this.opt.width || 100; // 默认为 100 + $container.css('margin-top', menuHeight + 'px').css('width', width + 'px'); + + // 加入到 DOM + $menuELem.append($container); + this._rendered = true; + } + + // 修改属性 + this._show = true; + }, + + // 隐藏(移除DOM) + hide: function hide() { + if (this.showTimeoutId) { + // 清除之前的定时显示 + clearTimeout(this.showTimeoutId); + } + + var $container = this.$container; + if (!this._show) { + return; + } + // 隐藏并需改属性 + $container.hide(); + this._show = false; + } +}; + +/* + menu - header +*/ +// 构造函数 +function Head(editor) { + var _this = this; + + this.editor = editor; + this.$elem = $('
            '); + this.type = 'droplist'; + + // 当前是否 active 状态 + this._active = false; + + // 初始化 droplist + this.droplist = new DropList(this, { + width: 100, + $title: $('

            设置标题

            '), + type: 'list', // droplist 以列表形式展示 + list: [{ $elem: $('

            H1

            '), value: '

            ' }, { $elem: $('

            H2

            '), value: '

            ' }, { $elem: $('

            H3

            '), value: '

            ' }, { $elem: $('

            H4

            '), value: '

            ' }, { $elem: $('

            H5
            '), value: '
            ' }, { $elem: $('

            正文

            '), value: '

            ' }], + onClick: function onClick(value) { + // 注意 this 是指向当前的 Head 对象 + _this._command(value); + } + }); +} + +// 原型 +Head.prototype = { + constructor: Head, + + // 执行命令 + _command: function _command(value) { + var editor = this.editor; + + var $selectionElem = editor.selection.getSelectionContainerElem(); + if (editor.$textElem.equal($selectionElem)) { + // 不能选中多行来设置标题,否则会出现问题 + // 例如选中的是

            xxx

            yyy

            来设置标题,设置之后会成为

            xxx
            yyy

            不符合预期 + return; + } + + editor.cmd.do('formatBlock', value); + }, + + // 试图改变 active 状态 + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + var reg = /^h/i; + var cmdValue = editor.cmd.queryCommandValue('formatBlock'); + if (reg.test(cmdValue)) { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); + } + } +}; + +/* + panel +*/ + +var emptyFn = function emptyFn() {}; + +// 记录已经显示 panel 的菜单 +var _isCreatedPanelMenus = []; + +// 构造函数 +function Panel(menu, opt) { + this.menu = menu; + this.opt = opt; +} + +// 原型 +Panel.prototype = { + constructor: Panel, + + // 显示(插入DOM) + show: function show() { + var _this = this; + + var menu = this.menu; + if (_isCreatedPanelMenus.indexOf(menu) >= 0) { + // 该菜单已经创建了 panel 不能再创建 + return; + } + + var editor = menu.editor; + var $body = $('body'); + var $textContainerElem = editor.$textContainerElem; + var opt = this.opt; + + // panel 的容器 + var $container = $('
            '); + var width = opt.width || 300; // 默认 300px + $container.css('width', width + 'px').css('margin-left', (0 - width) / 2 + 'px'); + + // 添加关闭按钮 + var $closeBtn = $(''); + $container.append($closeBtn); + $closeBtn.on('click', function () { + _this.hide(); + }); + + // 准备 tabs 容器 + var $tabTitleContainer = $('
              '); + var $tabContentContainer = $('
              '); + $container.append($tabTitleContainer).append($tabContentContainer); + + // 设置高度 + var height = opt.height; + if (height) { + $tabContentContainer.css('height', height + 'px').css('overflow-y', 'auto'); + } + + // tabs + var tabs = opt.tabs || []; + var tabTitleArr = []; + var tabContentArr = []; + tabs.forEach(function (tab, tabIndex) { + if (!tab) { + return; + } + var title = tab.title || ''; + var tpl = tab.tpl || ''; + + // 替换多语言 + title = replaceLang(editor, title); + tpl = replaceLang(editor, tpl); + + // 添加到 DOM + var $title = $('
            • ' + title + '
            • '); + $tabTitleContainer.append($title); + var $content = $(tpl); + $tabContentContainer.append($content); + + // 记录到内存 + $title._index = tabIndex; + tabTitleArr.push($title); + tabContentArr.push($content); + + // 设置 active 项 + if (tabIndex === 0) { + $title._active = true; + $title.addClass('w-e-active'); + } else { + $content.hide(); + } + + // 绑定 tab 的事件 + $title.on('click', function (e) { + if ($title._active) { + return; + } + // 隐藏所有的 tab + tabTitleArr.forEach(function ($title) { + $title._active = false; + $title.removeClass('w-e-active'); + }); + tabContentArr.forEach(function ($content) { + $content.hide(); + }); + + // 显示当前的 tab + $title._active = true; + $title.addClass('w-e-active'); + $content.show(); + }); + }); + + // 绑定关闭事件 + $container.on('click', function (e) { + // 点击时阻止冒泡 + e.stopPropagation(); + }); + $body.on('click', function (e) { + _this.hide(); + }); + + // 添加到 DOM + $textContainerElem.append($container); + + // 绑定 opt 的事件,只有添加到 DOM 之后才能绑定成功 + tabs.forEach(function (tab, index) { + if (!tab) { + return; + } + var events = tab.events || []; + events.forEach(function (event) { + var selector = event.selector; + var type = event.type; + var fn = event.fn || emptyFn; + var $content = tabContentArr[index]; + $content.find(selector).on(type, function (e) { + e.stopPropagation(); + var needToHide = fn(e); + // 执行完事件之后,是否要关闭 panel + if (needToHide) { + _this.hide(); + } + }); + }); + }); + + // focus 第一个 elem + var $inputs = $container.find('input[type=text],textarea'); + if ($inputs.length) { + $inputs.get(0).focus(); + } + + // 添加到属性 + this.$container = $container; + + // 隐藏其他 panel + this._hideOtherPanels(); + // 记录该 menu 已经创建了 panel + _isCreatedPanelMenus.push(menu); + }, + + // 隐藏(移除DOM) + hide: function hide() { + var menu = this.menu; + var $container = this.$container; + if ($container) { + $container.remove(); + } + + // 将该 menu 记录中移除 + _isCreatedPanelMenus = _isCreatedPanelMenus.filter(function (item) { + if (item === menu) { + return false; + } else { + return true; + } + }); + }, + + // 一个 panel 展示时,隐藏其他 panel + _hideOtherPanels: function _hideOtherPanels() { + if (!_isCreatedPanelMenus.length) { + return; + } + _isCreatedPanelMenus.forEach(function (menu) { + var panel = menu.panel || {}; + if (panel.hide) { + panel.hide(); + } + }); + } +}; + +/* + menu - link +*/ +// 构造函数 +function Link(editor) { + this.editor = editor; + this.$elem = $('
              '); + this.type = 'panel'; + + // 当前是否 active 状态 + this._active = false; +} + +// 原型 +Link.prototype = { + constructor: Link, + + // 点击事件 + onClick: function onClick(e) { + var editor = this.editor; + var $linkelem = void 0; + + if (this._active) { + // 当前选区在链接里面 + $linkelem = editor.selection.getSelectionContainerElem(); + if (!$linkelem) { + return; + } + // 将该元素都包含在选取之内,以便后面整体替换 + editor.selection.createRangeByElem($linkelem); + editor.selection.restoreSelection(); + // 显示 panel + this._createPanel($linkelem.text(), $linkelem.attr('href')); + } else { + // 当前选区不在链接里面 + if (editor.selection.isSelectionEmpty()) { + // 选区是空的,未选中内容 + this._createPanel('', ''); + } else { + // 选中内容了 + this._createPanel(editor.selection.getSelectionText(), ''); + } + } + }, + + // 创建 panel + _createPanel: function _createPanel(text, link) { + var _this = this; + + // panel 中需要用到的id + var inputLinkId = getRandom('input-link'); + var inputTextId = getRandom('input-text'); + var btnOkId = getRandom('btn-ok'); + var btnDelId = getRandom('btn-del'); + + // 是否显示“删除链接” + var delBtnDisplay = this._active ? 'inline-block' : 'none'; + + // 初始化并显示 panel + var panel = new Panel(this, { + width: 300, + // panel 中可包含多个 tab + tabs: [{ + // tab 的标题 + title: '链接', + // 模板 + tpl: '
              \n \n \n
              \n \n \n
              \n
              ', + // 事件绑定 + events: [ + // 插入链接 + { + selector: '#' + btnOkId, + type: 'click', + fn: function fn() { + // 执行插入链接 + var $link = $('#' + inputLinkId); + var $text = $('#' + inputTextId); + var link = $link.val(); + var text = $text.val(); + _this._insertLink(text, link); + + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }, + // 删除链接 + { + selector: '#' + btnDelId, + type: 'click', + fn: function fn() { + // 执行删除链接 + _this._delLink(); + + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }] + } // tab end + ] // tabs end + }); + + // 显示 panel + panel.show(); + + // 记录属性 + this.panel = panel; + }, + + // 删除当前链接 + _delLink: function _delLink() { + if (!this._active) { + return; + } + var editor = this.editor; + var $selectionELem = editor.selection.getSelectionContainerElem(); + if (!$selectionELem) { + return; + } + var selectionText = editor.selection.getSelectionText(); + editor.cmd.do('insertHTML', '' + selectionText + ''); + }, + + // 插入链接 + _insertLink: function _insertLink(text, link) { + var editor = this.editor; + var config = editor.config; + var linkCheck = config.linkCheck; + var checkResult = true; // 默认为 true + if (linkCheck && typeof linkCheck === 'function') { + checkResult = linkCheck(text, link); + } + if (checkResult === true) { + editor.cmd.do('insertHTML', '' + text + ''); + } else { + alert(checkResult); + } + }, + + // 试图改变 active 状态 + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + var $selectionELem = editor.selection.getSelectionContainerElem(); + if (!$selectionELem) { + return; + } + if ($selectionELem.getNodeName() === 'A') { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); + } + } +}; + +/* + italic-menu +*/ +// 构造函数 +function Italic(editor) { + this.editor = editor; + this.$elem = $('
              \n \n
              '); + this.type = 'click'; + + // 当前是否 active 状态 + this._active = false; +} + +// 原型 +Italic.prototype = { + constructor: Italic, + + // 点击事件 + onClick: function onClick(e) { + // 点击菜单将触发这里 + + var editor = this.editor; + var isSeleEmpty = editor.selection.isSelectionEmpty(); + + if (isSeleEmpty) { + // 选区是空的,插入并选中一个“空白” + editor.selection.createEmptyRange(); + } + + // 执行 italic 命令 + editor.cmd.do('italic'); + + if (isSeleEmpty) { + // 需要将选取折叠起来 + editor.selection.collapseRange(); + editor.selection.restoreSelection(); + } + }, + + // 试图改变 active 状态 + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + if (editor.cmd.queryCommandState('italic')) { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); + } + } +}; + +/* + redo-menu +*/ +// 构造函数 +function Redo(editor) { + this.editor = editor; + this.$elem = $('
              \n \n
              '); + this.type = 'click'; + + // 当前是否 active 状态 + this._active = false; +} + +// 原型 +Redo.prototype = { + constructor: Redo, + + // 点击事件 + onClick: function onClick(e) { + // 点击菜单将触发这里 + + var editor = this.editor; + + // 执行 redo 命令 + editor.cmd.do('redo'); + } +}; + +/* + strikeThrough-menu +*/ +// 构造函数 +function StrikeThrough(editor) { + this.editor = editor; + this.$elem = $('
              \n \n
              '); + this.type = 'click'; + + // 当前是否 active 状态 + this._active = false; +} + +// 原型 +StrikeThrough.prototype = { + constructor: StrikeThrough, + + // 点击事件 + onClick: function onClick(e) { + // 点击菜单将触发这里 + + var editor = this.editor; + var isSeleEmpty = editor.selection.isSelectionEmpty(); + + if (isSeleEmpty) { + // 选区是空的,插入并选中一个“空白” + editor.selection.createEmptyRange(); + } + + // 执行 strikeThrough 命令 + editor.cmd.do('strikeThrough'); + + if (isSeleEmpty) { + // 需要将选取折叠起来 + editor.selection.collapseRange(); + editor.selection.restoreSelection(); + } + }, + + // 试图改变 active 状态 + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + if (editor.cmd.queryCommandState('strikeThrough')) { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); + } + } +}; + +/* + underline-menu +*/ +// 构造函数 +function Underline(editor) { + this.editor = editor; + this.$elem = $('
              \n \n
              '); + this.type = 'click'; + + // 当前是否 active 状态 + this._active = false; +} + +// 原型 +Underline.prototype = { + constructor: Underline, + + // 点击事件 + onClick: function onClick(e) { + // 点击菜单将触发这里 + + var editor = this.editor; + var isSeleEmpty = editor.selection.isSelectionEmpty(); + + if (isSeleEmpty) { + // 选区是空的,插入并选中一个“空白” + editor.selection.createEmptyRange(); + } + + // 执行 underline 命令 + editor.cmd.do('underline'); + + if (isSeleEmpty) { + // 需要将选取折叠起来 + editor.selection.collapseRange(); + editor.selection.restoreSelection(); + } + }, + + // 试图改变 active 状态 + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + if (editor.cmd.queryCommandState('underline')) { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); + } + } +}; + +/* + undo-menu +*/ +// 构造函数 +function Undo(editor) { + this.editor = editor; + this.$elem = $('
              \n \n
              '); + this.type = 'click'; + + // 当前是否 active 状态 + this._active = false; +} + +// 原型 +Undo.prototype = { + constructor: Undo, + + // 点击事件 + onClick: function onClick(e) { + // 点击菜单将触发这里 + + var editor = this.editor; + + // 执行 undo 命令 + editor.cmd.do('undo'); + } +}; + +/* + menu - list +*/ +// 构造函数 +function List(editor) { + var _this = this; + + this.editor = editor; + this.$elem = $('
              '); + this.type = 'droplist'; + + // 当前是否 active 状态 + this._active = false; + + // 初始化 droplist + this.droplist = new DropList(this, { + width: 120, + $title: $('

              设置列表

              '), + type: 'list', // droplist 以列表形式展示 + list: [{ $elem: $(' 有序列表'), value: 'insertOrderedList' }, { $elem: $(' 无序列表'), value: 'insertUnorderedList' }], + onClick: function onClick(value) { + // 注意 this 是指向当前的 List 对象 + _this._command(value); + } + }); +} + +// 原型 +List.prototype = { + constructor: List, + + // 执行命令 + _command: function _command(value) { + var editor = this.editor; + var $textElem = editor.$textElem; + editor.selection.restoreSelection(); + if (editor.cmd.queryCommandState(value)) { + return; + } + editor.cmd.do(value); + + // 验证列表是否被包裹在

              之内 + var $selectionElem = editor.selection.getSelectionContainerElem(); + if ($selectionElem.getNodeName() === 'LI') { + $selectionElem = $selectionElem.parent(); + } + if (/^ol|ul$/i.test($selectionElem.getNodeName()) === false) { + return; + } + if ($selectionElem.equal($textElem)) { + // 证明是顶级标签,没有被

              包裹 + return; + } + var $parent = $selectionElem.parent(); + if ($parent.equal($textElem)) { + // $parent 是顶级标签,不能删除 + return; + } + + $selectionElem.insertAfter($parent); + $parent.remove(); + }, + + // 试图改变 active 状态 + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + if (editor.cmd.queryCommandState('insertUnOrderedList') || editor.cmd.queryCommandState('insertOrderedList')) { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); + } + } +}; + +/* + menu - justify +*/ +// 构造函数 +function Justify(editor) { + var _this = this; + + this.editor = editor; + this.$elem = $('

              '); + this.type = 'droplist'; + + // 当前是否 active 状态 + this._active = false; + + // 初始化 droplist + this.droplist = new DropList(this, { + width: 100, + $title: $('

              对齐方式

              '), + type: 'list', // droplist 以列表形式展示 + list: [{ $elem: $(' 靠左'), value: 'justifyLeft' }, { $elem: $(' 居中'), value: 'justifyCenter' }, { $elem: $(' 靠右'), value: 'justifyRight' }], + onClick: function onClick(value) { + // 注意 this 是指向当前的 List 对象 + _this._command(value); + } + }); +} + +// 原型 +Justify.prototype = { + constructor: Justify, + + // 执行命令 + _command: function _command(value) { + var editor = this.editor; + editor.cmd.do(value); + } +}; + +/* + menu - Forecolor +*/ +// 构造函数 +function ForeColor(editor) { + var _this = this; + + this.editor = editor; + this.$elem = $('
              '); + this.type = 'droplist'; + + // 获取配置的颜色 + var config = editor.config; + var colors = config.colors || []; + + // 当前是否 active 状态 + this._active = false; + + // 初始化 droplist + this.droplist = new DropList(this, { + width: 120, + $title: $('

              文字颜色

              '), + type: 'inline-block', // droplist 内容以 block 形式展示 + list: colors.map(function (color) { + return { $elem: $(''), value: color }; + }), + onClick: function onClick(value) { + // 注意 this 是指向当前的 ForeColor 对象 + _this._command(value); + } + }); +} + +// 原型 +ForeColor.prototype = { + constructor: ForeColor, + + // 执行命令 + _command: function _command(value) { + var editor = this.editor; + editor.cmd.do('foreColor', value); + } +}; + +/* + menu - BackColor +*/ +// 构造函数 +function BackColor(editor) { + var _this = this; + + this.editor = editor; + this.$elem = $('
              '); + this.type = 'droplist'; + + // 获取配置的颜色 + var config = editor.config; + var colors = config.colors || []; + + // 当前是否 active 状态 + this._active = false; + + // 初始化 droplist + this.droplist = new DropList(this, { + width: 120, + $title: $('

              背景色

              '), + type: 'inline-block', // droplist 内容以 block 形式展示 + list: colors.map(function (color) { + return { $elem: $(''), value: color }; + }), + onClick: function onClick(value) { + // 注意 this 是指向当前的 BackColor 对象 + _this._command(value); + } + }); +} + +// 原型 +BackColor.prototype = { + constructor: BackColor, + + // 执行命令 + _command: function _command(value) { + var editor = this.editor; + editor.cmd.do('backColor', value); + } +}; + +/* + menu - quote +*/ +// 构造函数 +function Quote(editor) { + this.editor = editor; + this.$elem = $('
              \n \n
              '); + this.type = 'click'; + + // 当前是否 active 状态 + this._active = false; +} + +// 原型 +Quote.prototype = { + constructor: Quote, + + onClick: function onClick(e) { + var editor = this.editor; + var $selectionElem = editor.selection.getSelectionContainerElem(); + var nodeName = $selectionElem.getNodeName(); + + if (!UA.isIE()) { + if (nodeName === 'BLOCKQUOTE') { + // 撤销 quote + editor.cmd.do('formatBlock', '

              '); + } else { + // 转换为 quote + editor.cmd.do('formatBlock', '

              '); + } + return; + } + + // IE 中不支持 formatBlock
              ,要用其他方式兼容 + var content = void 0, + $targetELem = void 0; + if (nodeName === 'P') { + // 将 P 转换为 quote + content = $selectionElem.text(); + $targetELem = $('
              ' + content + '
              '); + $targetELem.insertAfter($selectionElem); + $selectionElem.remove(); + return; + } + if (nodeName === 'BLOCKQUOTE') { + // 撤销 quote + content = $selectionElem.text(); + $targetELem = $('

              ' + content + '

              '); + $targetELem.insertAfter($selectionElem); + $selectionElem.remove(); + } + }, + + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + var reg = /^BLOCKQUOTE$/i; + var cmdValue = editor.cmd.queryCommandValue('formatBlock'); + if (reg.test(cmdValue)) { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); + } + } +}; + +/* + menu - code +*/ +// 构造函数 +function Code(editor) { + this.editor = editor; + this.$elem = $('
              \n \n
              '); + this.type = 'panel'; + + // 当前是否 active 状态 + this._active = false; +} + +// 原型 +Code.prototype = { + constructor: Code, + + onClick: function onClick(e) { + var editor = this.editor; + var $startElem = editor.selection.getSelectionStartElem(); + var $endElem = editor.selection.getSelectionEndElem(); + var isSeleEmpty = editor.selection.isSelectionEmpty(); + var selectionText = editor.selection.getSelectionText(); + var $code = void 0; + + if (!$startElem.equal($endElem)) { + // 跨元素选择,不做处理 + editor.selection.restoreSelection(); + return; + } + if (!isSeleEmpty) { + // 选取不是空,用 包裹即可 + $code = $('' + selectionText + ''); + editor.cmd.do('insertElem', $code); + editor.selection.createRangeByElem($code, false); + editor.selection.restoreSelection(); + return; + } + + // 选取是空,且没有夸元素选择,则插入
              
              +        if (this._active) {
              +            // 选中状态,将编辑内容
              +            this._createPanel($startElem.html());
              +        } else {
              +            // 未选中状态,将创建内容
              +            this._createPanel();
              +        }
              +    },
              +
              +    _createPanel: function _createPanel(value) {
              +        var _this = this;
              +
              +        // value - 要编辑的内容
              +        value = value || '';
              +        var type = !value ? 'new' : 'edit';
              +        var textId = getRandom('texxt');
              +        var btnId = getRandom('btn');
              +
              +        var panel = new Panel(this, {
              +            width: 500,
              +            // 一个 Panel 包含多个 tab
              +            tabs: [{
              +                // 标题
              +                title: '插入代码',
              +                // 模板
              +                tpl: '
              \n \n
              \n \n
              \n
              ', + // 事件绑定 + events: [ + // 插入代码 + { + selector: '#' + btnId, + type: 'click', + fn: function fn() { + var $text = $('#' + textId); + var text = $text.val() || $text.html(); + text = replaceHtmlSymbol(text); + if (type === 'new') { + // 新插入 + _this._insertCode(text); + } else { + // 编辑更新 + _this._updateCode(text); + } + + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }] + } // first tab end + ] // tabs end + }); // new Panel end + + // 显示 panel + panel.show(); + + // 记录属性 + this.panel = panel; + }, + + // 插入代码 + _insertCode: function _insertCode(value) { + var editor = this.editor; + editor.cmd.do('insertHTML', '
              ' + value + '


              '); + }, + + // 更新代码 + _updateCode: function _updateCode(value) { + var editor = this.editor; + var $selectionELem = editor.selection.getSelectionContainerElem(); + if (!$selectionELem) { + return; + } + $selectionELem.html(value); + editor.selection.restoreSelection(); + }, + + // 试图改变 active 状态 + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + var $selectionELem = editor.selection.getSelectionContainerElem(); + if (!$selectionELem) { + return; + } + var $parentElem = $selectionELem.parent(); + if ($selectionELem.getNodeName() === 'CODE' && $parentElem.getNodeName() === 'PRE') { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); + } + } +}; + +/* + menu - emoticon +*/ +// 构造函数 +function Emoticon(editor) { + this.editor = editor; + this.$elem = $('
              \n \n
              '); + this.type = 'panel'; + + // 当前是否 active 状态 + this._active = false; +} + +// 原型 +Emoticon.prototype = { + constructor: Emoticon, + + onClick: function onClick() { + this._createPanel(); + }, + + _createPanel: function _createPanel() { + var _this = this; + + var editor = this.editor; + var config = editor.config; + // 获取表情配置 + var emotions = config.emotions || []; + + // 创建表情 dropPanel 的配置 + var tabConfig = []; + emotions.forEach(function (emotData) { + var emotType = emotData.type; + var content = emotData.content || []; + + // 这一组表情最终拼接出来的 html + var faceHtml = ''; + + // emoji 表情 + if (emotType === 'emoji') { + content.forEach(function (item) { + if (item) { + faceHtml += '' + item + ''; + } + }); + } + // 图片表情 + if (emotType === 'image') { + content.forEach(function (item) { + var src = item.src; + var alt = item.alt; + if (src) { + // 加一个 data-w-e 属性,点击图片的时候不再提示编辑图片 + faceHtml += '' + alt + ''; + } + }); + } + + tabConfig.push({ + title: emotData.title, + tpl: '
              ' + faceHtml + '
              ', + events: [{ + selector: 'span.w-e-item', + type: 'click', + fn: function fn(e) { + var target = e.target; + var $target = $(target); + var nodeName = $target.getNodeName(); + + var insertHtml = void 0; + if (nodeName === 'IMG') { + // 插入图片 + insertHtml = $target.parent().html(); + } else { + // 插入 emoji + insertHtml = '' + $target.html() + ''; + } + + _this._insert(insertHtml); + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }] + }); + }); + + var panel = new Panel(this, { + width: 300, + height: 200, + // 一个 Panel 包含多个 tab + tabs: tabConfig + }); + + // 显示 panel + panel.show(); + + // 记录属性 + this.panel = panel; + }, + + // 插入表情 + _insert: function _insert(emotHtml) { + var editor = this.editor; + editor.cmd.do('insertHTML', emotHtml); + } +}; + +/* + menu - table +*/ +// 构造函数 +function Table(editor) { + this.editor = editor; + this.$elem = $('
              '); + this.type = 'panel'; + + // 当前是否 active 状态 + this._active = false; +} + +// 原型 +Table.prototype = { + constructor: Table, + + onClick: function onClick() { + if (this._active) { + // 编辑现有表格 + this._createEditPanel(); + } else { + // 插入新表格 + this._createInsertPanel(); + } + }, + + // 创建插入新表格的 panel + _createInsertPanel: function _createInsertPanel() { + var _this = this; + + // 用到的 id + var btnInsertId = getRandom('btn'); + var textRowNum = getRandom('row'); + var textColNum = getRandom('col'); + + var panel = new Panel(this, { + width: 250, + // panel 包含多个 tab + tabs: [{ + // 标题 + title: '插入表格', + // 模板 + tpl: '
              \n

              \n \u521B\u5EFA\n \n \u884C\n \n \u5217\u7684\u8868\u683C\n

              \n
              \n \n
              \n
              ', + // 事件绑定 + events: [{ + // 点击按钮,插入表格 + selector: '#' + btnInsertId, + type: 'click', + fn: function fn() { + var rowNum = parseInt($('#' + textRowNum).val()); + var colNum = parseInt($('#' + textColNum).val()); + + if (rowNum && colNum && rowNum > 0 && colNum > 0) { + // form 数据有效 + _this._insert(rowNum, colNum); + } + + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }] + } // first tab end + ] // tabs end + }); // panel end + + // 展示 panel + panel.show(); + + // 记录属性 + this.panel = panel; + }, + + // 插入表格 + _insert: function _insert(rowNum, colNum) { + // 拼接 table 模板 + var r = void 0, + c = void 0; + var html = '
              '; + for (r = 0; r < rowNum; r++) { + html += ''; + if (r === 0) { + for (c = 0; c < colNum; c++) { + html += ''; + } + } else { + for (c = 0; c < colNum; c++) { + html += ''; + } + } + html += ''; + } + html += '
                


              '; + + // 执行命令 + var editor = this.editor; + editor.cmd.do('insertHTML', html); + + // 防止 firefox 下出现 resize 的控制点 + editor.cmd.do('enableObjectResizing', false); + editor.cmd.do('enableInlineTableEditing', false); + }, + + // 创建编辑表格的 panel + _createEditPanel: function _createEditPanel() { + var _this2 = this; + + // 可用的 id + var addRowBtnId = getRandom('add-row'); + var addColBtnId = getRandom('add-col'); + var delRowBtnId = getRandom('del-row'); + var delColBtnId = getRandom('del-col'); + var delTableBtnId = getRandom('del-table'); + + // 创建 panel 对象 + var panel = new Panel(this, { + width: 320, + // panel 包含多个 tab + tabs: [{ + // 标题 + title: '编辑表格', + // 模板 + tpl: '
              \n
              \n \n \n \n \n
              \n
              \n \n \n
              ', + // 事件绑定 + events: [{ + // 增加行 + selector: '#' + addRowBtnId, + type: 'click', + fn: function fn() { + _this2._addRow(); + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }, { + // 增加列 + selector: '#' + addColBtnId, + type: 'click', + fn: function fn() { + _this2._addCol(); + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }, { + // 删除行 + selector: '#' + delRowBtnId, + type: 'click', + fn: function fn() { + _this2._delRow(); + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }, { + // 删除列 + selector: '#' + delColBtnId, + type: 'click', + fn: function fn() { + _this2._delCol(); + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }, { + // 删除表格 + selector: '#' + delTableBtnId, + type: 'click', + fn: function fn() { + _this2._delTable(); + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }] + }] + }); + // 显示 panel + panel.show(); + }, + + // 获取选中的单元格的位置信息 + _getLocationData: function _getLocationData() { + var result = {}; + var editor = this.editor; + var $selectionELem = editor.selection.getSelectionContainerElem(); + if (!$selectionELem) { + return; + } + var nodeName = $selectionELem.getNodeName(); + if (nodeName !== 'TD' && nodeName !== 'TH') { + return; + } + + // 获取 td index + var $tr = $selectionELem.parent(); + var $tds = $tr.children(); + var tdLength = $tds.length; + $tds.forEach(function (td, index) { + if (td === $selectionELem[0]) { + // 记录并跳出循环 + result.td = { + index: index, + elem: td, + length: tdLength + }; + return false; + } + }); + + // 获取 tr index + var $tbody = $tr.parent(); + var $trs = $tbody.children(); + var trLength = $trs.length; + $trs.forEach(function (tr, index) { + if (tr === $tr[0]) { + // 记录并跳出循环 + result.tr = { + index: index, + elem: tr, + length: trLength + }; + return false; + } + }); + + // 返回结果 + return result; + }, + + // 增加行 + _addRow: function _addRow() { + // 获取当前单元格的位置信息 + var locationData = this._getLocationData(); + if (!locationData) { + return; + } + var trData = locationData.tr; + var $currentTr = $(trData.elem); + var tdData = locationData.td; + var tdLength = tdData.length; + + // 拼接即将插入的字符串 + var newTr = document.createElement('tr'); + var tpl = '', + i = void 0; + for (i = 0; i < tdLength; i++) { + tpl += ' '; + } + newTr.innerHTML = tpl; + // 插入 + $(newTr).insertAfter($currentTr); + }, + + // 增加列 + _addCol: function _addCol() { + // 获取当前单元格的位置信息 + var locationData = this._getLocationData(); + if (!locationData) { + return; + } + var trData = locationData.tr; + var tdData = locationData.td; + var tdIndex = tdData.index; + var $currentTr = $(trData.elem); + var $trParent = $currentTr.parent(); + var $trs = $trParent.children(); + + // 遍历所有行 + $trs.forEach(function (tr) { + var $tr = $(tr); + var $tds = $tr.children(); + var $currentTd = $tds.get(tdIndex); + var name = $currentTd.getNodeName().toLowerCase(); + + // new 一个 td,并插入 + var newTd = document.createElement(name); + $(newTd).insertAfter($currentTd); + }); + }, + + // 删除行 + _delRow: function _delRow() { + // 获取当前单元格的位置信息 + var locationData = this._getLocationData(); + if (!locationData) { + return; + } + var trData = locationData.tr; + var $currentTr = $(trData.elem); + $currentTr.remove(); + }, + + // 删除列 + _delCol: function _delCol() { + // 获取当前单元格的位置信息 + var locationData = this._getLocationData(); + if (!locationData) { + return; + } + var trData = locationData.tr; + var tdData = locationData.td; + var tdIndex = tdData.index; + var $currentTr = $(trData.elem); + var $trParent = $currentTr.parent(); + var $trs = $trParent.children(); + + // 遍历所有行 + $trs.forEach(function (tr) { + var $tr = $(tr); + var $tds = $tr.children(); + var $currentTd = $tds.get(tdIndex); + // 删除 + $currentTd.remove(); + }); + }, + + // 删除表格 + _delTable: function _delTable() { + var editor = this.editor; + var $selectionELem = editor.selection.getSelectionContainerElem(); + if (!$selectionELem) { + return; + } + var $table = $selectionELem.parentUntil('table'); + if (!$table) { + return; + } + $table.remove(); + }, + + // 试图改变 active 状态 + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + var $selectionELem = editor.selection.getSelectionContainerElem(); + if (!$selectionELem) { + return; + } + var nodeName = $selectionELem.getNodeName(); + if (nodeName === 'TD' || nodeName === 'TH') { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); + } + } +}; + +/* + menu - video +*/ +// 构造函数 +function Video(editor) { + this.editor = editor; + this.$elem = $('
              '); + this.type = 'panel'; + + // 当前是否 active 状态 + this._active = false; +} + +// 原型 +Video.prototype = { + constructor: Video, + + onClick: function onClick() { + this._createPanel(); + }, + + _createPanel: function _createPanel() { + var _this = this; + + // 创建 id + var textValId = getRandom('text-val'); + var btnId = getRandom('btn'); + + // 创建 panel + var panel = new Panel(this, { + width: 350, + // 一个 panel 多个 tab + tabs: [{ + // 标题 + title: '插入视频', + // 模板 + tpl: '
              \n \n
              \n \n
              \n
              ', + // 事件绑定 + events: [{ + selector: '#' + btnId, + type: 'click', + fn: function fn() { + var $text = $('#' + textValId); + var val = $text.val().trim(); + + // 测试用视频地址 + // + + if (val) { + // 插入视频 + _this._insert(val); + } + + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }] + } // first tab end + ] // tabs end + }); // panel end + + // 显示 panel + panel.show(); + + // 记录属性 + this.panel = panel; + }, + + // 插入视频 + _insert: function _insert(val) { + var editor = this.editor; + editor.cmd.do('insertHTML', val + '


              '); + } +}; + +/* + menu - img +*/ +// 构造函数 +function Image(editor) { + this.editor = editor; + var imgMenuId = getRandom('w-e-img'); + this.$elem = $('
              '); + editor.imgMenuId = imgMenuId; + this.type = 'panel'; + + // 当前是否 active 状态 + this._active = false; +} + +// 原型 +Image.prototype = { + constructor: Image, + + onClick: function onClick() { + var editor = this.editor; + var config = editor.config; + if (config.qiniu) { + return; + } + if (this._active) { + this._createEditPanel(); + } else { + this._createInsertPanel(); + } + }, + + _createEditPanel: function _createEditPanel() { + var editor = this.editor; + + // id + var width30 = getRandom('width-30'); + var width50 = getRandom('width-50'); + var width100 = getRandom('width-100'); + var delBtn = getRandom('del-btn'); + + // tab 配置 + var tabsConfig = [{ + title: '编辑图片', + tpl: '
              \n
              \n \u6700\u5927\u5BBD\u5EA6\uFF1A\n \n \n \n
              \n
              \n \n \n
              ', + events: [{ + selector: '#' + width30, + type: 'click', + fn: function fn() { + var $img = editor._selectedImg; + if ($img) { + $img.css('max-width', '30%'); + } + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }, { + selector: '#' + width50, + type: 'click', + fn: function fn() { + var $img = editor._selectedImg; + if ($img) { + $img.css('max-width', '50%'); + } + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }, { + selector: '#' + width100, + type: 'click', + fn: function fn() { + var $img = editor._selectedImg; + if ($img) { + $img.css('max-width', '100%'); + } + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }, { + selector: '#' + delBtn, + type: 'click', + fn: function fn() { + var $img = editor._selectedImg; + if ($img) { + $img.remove(); + } + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }] + }]; + + // 创建 panel 并显示 + var panel = new Panel(this, { + width: 300, + tabs: tabsConfig + }); + panel.show(); + + // 记录属性 + this.panel = panel; + }, + + _createInsertPanel: function _createInsertPanel() { + var editor = this.editor; + var uploadImg = editor.uploadImg; + var config = editor.config; + + // id + var upTriggerId = getRandom('up-trigger'); + var upFileId = getRandom('up-file'); + var linkUrlId = getRandom('link-url'); + var linkBtnId = getRandom('link-btn'); + + // tabs 的配置 + var tabsConfig = [{ + title: '上传图片', + tpl: '
              \n
              \n \n
              \n
              \n \n
              \n
              ', + events: [{ + // 触发选择图片 + selector: '#' + upTriggerId, + type: 'click', + fn: function fn() { + var $file = $('#' + upFileId); + var fileElem = $file[0]; + if (fileElem) { + fileElem.click(); + } else { + // 返回 true 可关闭 panel + return true; + } + } + }, { + // 选择图片完毕 + selector: '#' + upFileId, + type: 'change', + fn: function fn() { + var $file = $('#' + upFileId); + var fileElem = $file[0]; + if (!fileElem) { + // 返回 true 可关闭 panel + return true; + } + + // 获取选中的 file 对象列表 + var fileList = fileElem.files; + if (fileList.length) { + uploadImg.uploadImg(fileList); + } + + // 返回 true 可关闭 panel + return true; + } + }] + }, // first tab end + { + title: '网络图片', + tpl: '
              \n \n
              \n \n
              \n
              ', + events: [{ + selector: '#' + linkBtnId, + type: 'click', + fn: function fn() { + var $linkUrl = $('#' + linkUrlId); + var url = $linkUrl.val().trim(); + + if (url) { + uploadImg.insertLinkImg(url); + } + + // 返回 true 表示函数执行结束之后关闭 panel + return true; + } + }] + } // second tab end + ]; // tabs end + + // 判断 tabs 的显示 + var tabsConfigResult = []; + if ((config.uploadImgShowBase64 || config.uploadImgServer || config.customUploadImg) && window.FileReader) { + // 显示“上传图片” + tabsConfigResult.push(tabsConfig[0]); + } + if (config.showLinkImg) { + // 显示“网络图片” + tabsConfigResult.push(tabsConfig[1]); + } + + // 创建 panel 并显示 + var panel = new Panel(this, { + width: 300, + tabs: tabsConfigResult + }); + panel.show(); + + // 记录属性 + this.panel = panel; + }, + + // 试图改变 active 状态 + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + if (editor._selectedImg) { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); + } + } +}; + +/* + 所有菜单的汇总 +*/ + +// 存储菜单的构造函数 +var MenuConstructors = {}; + +MenuConstructors.bold = Bold; + +MenuConstructors.head = Head; + +MenuConstructors.link = Link; + +MenuConstructors.italic = Italic; + +MenuConstructors.redo = Redo; + +MenuConstructors.strikeThrough = StrikeThrough; + +MenuConstructors.underline = Underline; + +MenuConstructors.undo = Undo; + +MenuConstructors.list = List; + +MenuConstructors.justify = Justify; + +MenuConstructors.foreColor = ForeColor; + +MenuConstructors.backColor = BackColor; + +MenuConstructors.quote = Quote; + +MenuConstructors.code = Code; + +MenuConstructors.emoticon = Emoticon; + +MenuConstructors.table = Table; + +MenuConstructors.video = Video; + +MenuConstructors.image = Image; + +/* + 菜单集合 +*/ +// 构造函数 +function Menus(editor) { + this.editor = editor; + this.menus = {}; +} + +// 修改原型 +Menus.prototype = { + constructor: Menus, + + // 初始化菜单 + init: function init() { + var _this = this; + + var editor = this.editor; + var config = editor.config || {}; + var configMenus = config.menus || []; // 获取配置中的菜单 + + // 根据配置信息,创建菜单 + configMenus.forEach(function (menuKey) { + var MenuConstructor = MenuConstructors[menuKey]; + if (MenuConstructor && typeof MenuConstructor === 'function') { + // 创建单个菜单 + _this.menus[menuKey] = new MenuConstructor(editor); + } + }); + + // 添加到菜单栏 + this._addToToolbar(); + + // 绑定事件 + this._bindEvent(); + }, + + // 添加到菜单栏 + _addToToolbar: function _addToToolbar() { + var editor = this.editor; + var $toolbarElem = editor.$toolbarElem; + var menus = this.menus; + var config = editor.config; + // config.zIndex 是配置的编辑区域的 z-index,菜单的 z-index 得在其基础上 +1 + var zIndex = config.zIndex + 1; + objForEach(menus, function (key, menu) { + var $elem = menu.$elem; + if ($elem) { + // 设置 z-index + $elem.css('z-index', zIndex); + $toolbarElem.append($elem); + } + }); + }, + + // 绑定菜单 click mouseenter 事件 + _bindEvent: function _bindEvent() { + var menus = this.menus; + var editor = this.editor; + objForEach(menus, function (key, menu) { + var type = menu.type; + if (!type) { + return; + } + var $elem = menu.$elem; + var droplist = menu.droplist; + var panel = menu.panel; + + // 点击类型,例如 bold + if (type === 'click' && menu.onClick) { + $elem.on('click', function (e) { + if (editor.selection.getRange() == null) { + return; + } + menu.onClick(e); + }); + } + + // 下拉框,例如 head + if (type === 'droplist' && droplist) { + $elem.on('mouseenter', function (e) { + if (editor.selection.getRange() == null) { + return; + } + // 显示 + droplist.showTimeoutId = setTimeout(function () { + droplist.show(); + }, 200); + }).on('mouseleave', function (e) { + // 隐藏 + droplist.hideTimeoutId = setTimeout(function () { + droplist.hide(); + }, 0); + }); + } + + // 弹框类型,例如 link + if (type === 'panel' && menu.onClick) { + $elem.on('click', function (e) { + e.stopPropagation(); + if (editor.selection.getRange() == null) { + return; + } + // 在自定义事件中显示 panel + menu.onClick(e); + }); + } + }); + }, + + // 尝试修改菜单状态 + changeActive: function changeActive() { + var menus = this.menus; + objForEach(menus, function (key, menu) { + if (menu.tryChangeActive) { + setTimeout(function () { + menu.tryChangeActive(); + }, 100); + } + }); + } +}; + +/* + 粘贴信息的处理 +*/ + +// 获取粘贴的纯文本 +function getPasteText(e) { + var clipboardData = e.clipboardData || e.originalEvent && e.originalEvent.clipboardData; + var pasteText = void 0; + if (clipboardData == null) { + pasteText = window.clipboardData && window.clipboardData.getData('text'); + } else { + pasteText = clipboardData.getData('text/plain'); + } + + return replaceHtmlSymbol(pasteText); +} + +// 获取粘贴的html +function getPasteHtml(e, filterStyle) { + var clipboardData = e.clipboardData || e.originalEvent && e.originalEvent.clipboardData; + var pasteText = void 0, + pasteHtml = void 0; + if (clipboardData == null) { + pasteText = window.clipboardData && window.clipboardData.getData('text'); + } else { + pasteText = clipboardData.getData('text/plain'); + pasteHtml = clipboardData.getData('text/html'); + } + if (!pasteHtml && pasteText) { + pasteHtml = '

              ' + replaceHtmlSymbol(pasteText) + '

              '; + } + if (!pasteHtml) { + return; + } + + // 过滤word中状态过来的无用字符 + var docSplitHtml = pasteHtml.split(''); + if (docSplitHtml.length === 2) { + pasteHtml = docSplitHtml[0]; + } + + // 过滤无用标签 + pasteHtml = pasteHtml.replace(/<(meta|script|link).+?>/igm, ''); + // 去掉注释 + pasteHtml = pasteHtml.replace(//mg, ''); + // 过滤 data-xxx 属性 + pasteHtml = pasteHtml.replace(/\s?data-.+?=('|").+?('|")/igm, ''); + + if (filterStyle) { + // 过滤样式 + pasteHtml = pasteHtml.replace(/\s?(class|style)=('|").+?('|")/igm, ''); + } else { + // 保留样式 + pasteHtml = pasteHtml.replace(/\s?class=('|").+?('|")/igm, ''); + } + + return pasteHtml; +} + +// 获取粘贴的图片文件 +function getPasteImgs(e) { + var result = []; + var txt = getPasteText(e); + if (txt) { + // 有文字,就忽略图片 + return result; + } + + var clipboardData = e.clipboardData || e.originalEvent && e.originalEvent.clipboardData || {}; + var items = clipboardData.items; + if (!items) { + return result; + } + + objForEach(items, function (key, value) { + var type = value.type; + if (/image/i.test(type)) { + result.push(value.getAsFile()); + } + }); + + return result; +} + +/* + 编辑区域 +*/ + +// 获取一个 elem.childNodes 的 JSON 数据 +function getChildrenJSON($elem) { + var result = []; + var $children = $elem.childNodes() || []; // 注意 childNodes() 可以获取文本节点 + $children.forEach(function (curElem) { + var elemResult = void 0; + var nodeType = curElem.nodeType; + + // 文本节点 + if (nodeType === 3) { + elemResult = curElem.textContent; + } + + // 普通 DOM 节点 + if (nodeType === 1) { + elemResult = {}; + + // tag + elemResult.tag = curElem.nodeName.toLowerCase(); + // attr + var attrData = []; + var attrList = curElem.attributes || {}; + var attrListLength = attrList.length || 0; + for (var i = 0; i < attrListLength; i++) { + var attr = attrList[i]; + attrData.push({ + name: attr.name, + value: attr.value + }); + } + elemResult.attrs = attrData; + // children(递归) + elemResult.children = getChildrenJSON($(curElem)); + } + + result.push(elemResult); + }); + return result; +} + +// 构造函数 +function Text(editor) { + this.editor = editor; +} + +// 修改原型 +Text.prototype = { + constructor: Text, + + // 初始化 + init: function init() { + // 绑定事件 + this._bindEvent(); + }, + + // 清空内容 + clear: function clear() { + this.html('


              '); + }, + + // 获取 设置 html + html: function html(val) { + var editor = this.editor; + var $textElem = editor.$textElem; + var html = void 0; + if (val == null) { + html = $textElem.html(); + // 未选中任何内容的时候点击“加粗”或者“斜体”等按钮,就得需要一个空的占位符 ​ ,这里替换掉 + html = html.replace(/\u200b/gm, ''); + return html; + } else { + $textElem.html(val); + + // 初始化选取,将光标定位到内容尾部 + editor.initSelection(); + } + }, + + // 获取 JSON + getJSON: function getJSON() { + var editor = this.editor; + var $textElem = editor.$textElem; + return getChildrenJSON($textElem); + }, + + // 获取 设置 text + text: function text(val) { + var editor = this.editor; + var $textElem = editor.$textElem; + var text = void 0; + if (val == null) { + text = $textElem.text(); + // 未选中任何内容的时候点击“加粗”或者“斜体”等按钮,就得需要一个空的占位符 ​ ,这里替换掉 + text = text.replace(/\u200b/gm, ''); + return text; + } else { + $textElem.text('

              ' + val + '

              '); + + // 初始化选取,将光标定位到内容尾部 + editor.initSelection(); + } + }, + + // 追加内容 + append: function append(html) { + var editor = this.editor; + var $textElem = editor.$textElem; + $textElem.append($(html)); + + // 初始化选取,将光标定位到内容尾部 + editor.initSelection(); + }, + + // 绑定事件 + _bindEvent: function _bindEvent() { + // 实时保存选取 + this._saveRangeRealTime(); + + // 按回车建时的特殊处理 + this._enterKeyHandle(); + + // 清空时保留


              + this._clearHandle(); + + // 粘贴事件(粘贴文字,粘贴图片) + this._pasteHandle(); + + // tab 特殊处理 + this._tabHandle(); + + // img 点击 + this._imgHandle(); + + // 拖拽事件 + this._dragHandle(); + }, + + // 实时保存选取 + _saveRangeRealTime: function _saveRangeRealTime() { + var editor = this.editor; + var $textElem = editor.$textElem; + + // 保存当前的选区 + function saveRange(e) { + // 随时保存选区 + editor.selection.saveRange(); + // 更新按钮 ative 状态 + editor.menus.changeActive(); + } + // 按键后保存 + $textElem.on('keyup', saveRange); + $textElem.on('mousedown', function (e) { + // mousedown 状态下,鼠标滑动到编辑区域外面,也需要保存选区 + $textElem.on('mouseleave', saveRange); + }); + $textElem.on('mouseup', function (e) { + saveRange(); + // 在编辑器区域之内完成点击,取消鼠标滑动到编辑区外面的事件 + $textElem.off('mouseleave', saveRange); + }); + }, + + // 按回车键时的特殊处理 + _enterKeyHandle: function _enterKeyHandle() { + var editor = this.editor; + var $textElem = editor.$textElem; + + function insertEmptyP($selectionElem) { + var $p = $('


              '); + $p.insertBefore($selectionElem); + editor.selection.createRangeByElem($p, true); + editor.selection.restoreSelection(); + $selectionElem.remove(); + } + + // 将回车之后生成的非

              的顶级标签,改为

              + function pHandle(e) { + var $selectionElem = editor.selection.getSelectionContainerElem(); + var $parentElem = $selectionElem.parent(); + + if ($parentElem.html() === '
              ') { + // 回车之前光标所在一个

              .....

              ,忽然回车生成一个空的


              + // 而且继续回车跳不出去,因此只能特殊处理 + insertEmptyP($selectionElem); + return; + } + + if (!$parentElem.equal($textElem)) { + // 不是顶级标签 + return; + } + + var nodeName = $selectionElem.getNodeName(); + if (nodeName === 'P') { + // 当前的标签是 P ,不用做处理 + return; + } + + if ($selectionElem.text()) { + // 有内容,不做处理 + return; + } + + // 插入

              ,并将选取定位到

              ,删除当前标签 + insertEmptyP($selectionElem); + } + + $textElem.on('keyup', function (e) { + if (e.keyCode !== 13) { + // 不是回车键 + return; + } + // 将回车之后生成的非

              的顶级标签,改为

              + pHandle(e); + }); + + //

              回车时 特殊处理 + function codeHandle(e) { + var $selectionElem = editor.selection.getSelectionContainerElem(); + if (!$selectionElem) { + return; + } + var $parentElem = $selectionElem.parent(); + var selectionNodeName = $selectionElem.getNodeName(); + var parentNodeName = $parentElem.getNodeName(); + + if (selectionNodeName !== 'CODE' || parentNodeName !== 'PRE') { + // 不符合要求 忽略 + return; + } + + if (!editor.cmd.queryCommandSupported('insertHTML')) { + // 必须原生支持 insertHTML 命令 + return; + } + + // 处理:光标定位到代码末尾,联系点击两次回车,即跳出代码块 + if (editor._willBreakCode === true) { + // 此时可以跳出代码块 + // 插入

              ,并将选取定位到

              + var $p = $('


              '); + $p.insertAfter($parentElem); + editor.selection.createRangeByElem($p, true); + editor.selection.restoreSelection(); + + // 修改状态 + editor._willBreakCode = false; + + e.preventDefault(); + return; + } + + var _startOffset = editor.selection.getRange().startOffset; + + // 处理:回车时,不能插入
              而是插入 \n ,因为是在 pre 标签里面 + editor.cmd.do('insertHTML', '\n'); + editor.selection.saveRange(); + if (editor.selection.getRange().startOffset === _startOffset) { + // 没起作用,再来一遍 + editor.cmd.do('insertHTML', '\n'); + } + + var codeLength = $selectionElem.html().length; + if (editor.selection.getRange().startOffset + 1 === codeLength) { + // 说明光标在代码最后的位置,执行了回车操作 + // 记录下来,以便下次回车时候跳出 code + editor._willBreakCode = true; + } + + // 阻止默认行为 + e.preventDefault(); + } + + $textElem.on('keydown', function (e) { + if (e.keyCode !== 13) { + // 不是回车键 + // 取消即将跳转代码块的记录 + editor._willBreakCode = false; + return; + } + //
              回车时 特殊处理 + codeHandle(e); + }); + }, + + // 清空时保留


              + _clearHandle: function _clearHandle() { + var editor = this.editor; + var $textElem = editor.$textElem; + + $textElem.on('keydown', function (e) { + if (e.keyCode !== 8) { + return; + } + var txtHtml = $textElem.html().toLowerCase().trim(); + if (txtHtml === '


              ') { + // 最后剩下一个空行,就不再删除了 + e.preventDefault(); + return; + } + }); + + $textElem.on('keyup', function (e) { + if (e.keyCode !== 8) { + return; + } + var $p = void 0; + var txtHtml = $textElem.html().toLowerCase().trim(); + + // firefox 时用 txtHtml === '
              ' 判断,其他用 !txtHtml 判断 + if (!txtHtml || txtHtml === '
              ') { + // 内容空了 + $p = $('


              '); + $textElem.html(''); // 一定要先清空,否则在 firefox 下有问题 + $textElem.append($p); + editor.selection.createRangeByElem($p, false, true); + editor.selection.restoreSelection(); + } + }); + }, + + // 粘贴事件(粘贴文字 粘贴图片) + _pasteHandle: function _pasteHandle() { + var editor = this.editor; + var config = editor.config; + var pasteFilterStyle = config.pasteFilterStyle; + var pasteTextHandle = config.pasteTextHandle; + var $textElem = editor.$textElem; + + // 粘贴图片、文本的事件,每次只能执行一个 + // 判断该次粘贴事件是否可以执行 + var pasteTime = 0; + function canDo() { + var now = Date.now(); + var flag = false; + if (now - pasteTime >= 500) { + // 间隔大于 500 ms ,可以执行 + flag = true; + } + pasteTime = now; + return flag; + } + function resetTime() { + pasteTime = 0; + } + + // 粘贴文字 + $textElem.on('paste', function (e) { + if (UA.isIE()) { + return; + } else { + // 阻止默认行为,使用 execCommand 的粘贴命令 + e.preventDefault(); + } + + // 粘贴图片和文本,只能同时使用一个 + if (!canDo()) { + return; + } + + // 获取粘贴的文字 + var pasteHtml = getPasteHtml(e, pasteFilterStyle); + var pasteText = getPasteText(e); + pasteText = pasteText.replace(/\n/gm, '
              '); + + var $selectionElem = editor.selection.getSelectionContainerElem(); + if (!$selectionElem) { + return; + } + var nodeName = $selectionElem.getNodeName(); + + // code 中只能粘贴纯文本 + if (nodeName === 'CODE' || nodeName === 'PRE') { + if (pasteTextHandle && isFunction(pasteTextHandle)) { + // 用户自定义过滤处理粘贴内容 + pasteText = '' + (pasteTextHandle(pasteText) || ''); + } + editor.cmd.do('insertHTML', '

              ' + pasteText + '

              '); + return; + } + + // 先放开注释,有问题再追查 ———— + // // 表格中忽略,可能会出现异常问题 + // if (nodeName === 'TD' || nodeName === 'TH') { + // return + // } + + if (!pasteHtml) { + // 没有内容,可继续执行下面的图片粘贴 + resetTime(); + return; + } + try { + // firefox 中,获取的 pasteHtml 可能是没有
                包裹的
              • + // 因此执行 insertHTML 会报错 + if (pasteTextHandle && isFunction(pasteTextHandle)) { + // 用户自定义过滤处理粘贴内容 + pasteHtml = '' + (pasteTextHandle(pasteHtml) || ''); + } + editor.cmd.do('insertHTML', pasteHtml); + } catch (ex) { + // 此时使用 pasteText 来兼容一下 + if (pasteTextHandle && isFunction(pasteTextHandle)) { + // 用户自定义过滤处理粘贴内容 + pasteText = '' + (pasteTextHandle(pasteText) || ''); + } + editor.cmd.do('insertHTML', '

                ' + pasteText + '

                '); + } + }); + + // 粘贴图片 + $textElem.on('paste', function (e) { + if (UA.isIE()) { + return; + } else { + e.preventDefault(); + } + + // 粘贴图片和文本,只能同时使用一个 + if (!canDo()) { + return; + } + + // 获取粘贴的图片 + var pasteFiles = getPasteImgs(e); + if (!pasteFiles || !pasteFiles.length) { + return; + } + + // 获取当前的元素 + var $selectionElem = editor.selection.getSelectionContainerElem(); + if (!$selectionElem) { + return; + } + var nodeName = $selectionElem.getNodeName(); + + // code 中粘贴忽略 + if (nodeName === 'CODE' || nodeName === 'PRE') { + return; + } + + // 上传图片 + var uploadImg = editor.uploadImg; + uploadImg.uploadImg(pasteFiles); + }); + }, + + // tab 特殊处理 + _tabHandle: function _tabHandle() { + var editor = this.editor; + var $textElem = editor.$textElem; + + $textElem.on('keydown', function (e) { + if (e.keyCode !== 9) { + return; + } + if (!editor.cmd.queryCommandSupported('insertHTML')) { + // 必须原生支持 insertHTML 命令 + return; + } + var $selectionElem = editor.selection.getSelectionContainerElem(); + if (!$selectionElem) { + return; + } + var $parentElem = $selectionElem.parent(); + var selectionNodeName = $selectionElem.getNodeName(); + var parentNodeName = $parentElem.getNodeName(); + + if (selectionNodeName === 'CODE' && parentNodeName === 'PRE') { + //
                 里面
                +                editor.cmd.do('insertHTML', '    ');
                +            } else {
                +                // 普通文字
                +                editor.cmd.do('insertHTML', '    ');
                +            }
                +
                +            e.preventDefault();
                +        });
                +    },
                +
                +    // img 点击
                +    _imgHandle: function _imgHandle() {
                +        var editor = this.editor;
                +        var $textElem = editor.$textElem;
                +
                +        // 为图片增加 selected 样式
                +        $textElem.on('click', 'img', function (e) {
                +            var img = this;
                +            var $img = $(img);
                +
                +            if ($img.attr('data-w-e') === '1') {
                +                // 是表情图片,忽略
                +                return;
                +            }
                +
                +            // 记录当前点击过的图片
                +            editor._selectedImg = $img;
                +
                +            // 修改选区并 restore ,防止用户此时点击退格键,会删除其他内容
                +            editor.selection.createRangeByElem($img);
                +            editor.selection.restoreSelection();
                +        });
                +
                +        // 去掉图片的 selected 样式
                +        $textElem.on('click  keyup', function (e) {
                +            if (e.target.matches('img')) {
                +                // 点击的是图片,忽略
                +                return;
                +            }
                +            // 删除记录
                +            editor._selectedImg = null;
                +        });
                +    },
                +
                +    // 拖拽事件
                +    _dragHandle: function _dragHandle() {
                +        var editor = this.editor;
                +
                +        // 禁用 document 拖拽事件
                +        var $document = $(document);
                +        $document.on('dragleave drop dragenter dragover', function (e) {
                +            e.preventDefault();
                +        });
                +
                +        // 添加编辑区域拖拽事件
                +        var $textElem = editor.$textElem;
                +        $textElem.on('drop', function (e) {
                +            e.preventDefault();
                +            var files = e.dataTransfer && e.dataTransfer.files;
                +            if (!files || !files.length) {
                +                return;
                +            }
                +
                +            // 上传图片
                +            var uploadImg = editor.uploadImg;
                +            uploadImg.uploadImg(files);
                +        });
                +    }
                +};
                +
                +/*
                +    命令,封装 document.execCommand
                +*/
                +
                +// 构造函数
                +function Command(editor) {
                +    this.editor = editor;
                +}
                +
                +// 修改原型
                +Command.prototype = {
                +    constructor: Command,
                +
                +    // 执行命令
                +    do: function _do(name, value) {
                +        var editor = this.editor;
                +
                +        // 使用 styleWithCSS
                +        if (!editor._useStyleWithCSS) {
                +            document.execCommand('styleWithCSS', null, true);
                +            editor._useStyleWithCSS = true;
                +        }
                +
                +        // 如果无选区,忽略
                +        if (!editor.selection.getRange()) {
                +            return;
                +        }
                +
                +        // 恢复选取
                +        editor.selection.restoreSelection();
                +
                +        // 执行
                +        var _name = '_' + name;
                +        if (this[_name]) {
                +            // 有自定义事件
                +            this[_name](value);
                +        } else {
                +            // 默认 command
                +            this._execCommand(name, value);
                +        }
                +
                +        // 修改菜单状态
                +        editor.menus.changeActive();
                +
                +        // 最后,恢复选取保证光标在原来的位置闪烁
                +        editor.selection.saveRange();
                +        editor.selection.restoreSelection();
                +
                +        // 触发 onchange
                +        editor.change && editor.change();
                +    },
                +
                +    // 自定义 insertHTML 事件
                +    _insertHTML: function _insertHTML(html) {
                +        var editor = this.editor;
                +        var range = editor.selection.getRange();
                +
                +        if (this.queryCommandSupported('insertHTML')) {
                +            // W3C
                +            this._execCommand('insertHTML', html);
                +        } else if (range.insertNode) {
                +            // IE
                +            range.deleteContents();
                +            range.insertNode($(html)[0]);
                +        } else if (range.pasteHTML) {
                +            // IE <= 10
                +            range.pasteHTML(html);
                +        }
                +    },
                +
                +    // 插入 elem
                +    _insertElem: function _insertElem($elem) {
                +        var editor = this.editor;
                +        var range = editor.selection.getRange();
                +
                +        if (range.insertNode) {
                +            range.deleteContents();
                +            range.insertNode($elem[0]);
                +        }
                +    },
                +
                +    // 封装 execCommand
                +    _execCommand: function _execCommand(name, value) {
                +        document.execCommand(name, false, value);
                +    },
                +
                +    // 封装 document.queryCommandValue
                +    queryCommandValue: function queryCommandValue(name) {
                +        return document.queryCommandValue(name);
                +    },
                +
                +    // 封装 document.queryCommandState
                +    queryCommandState: function queryCommandState(name) {
                +        return document.queryCommandState(name);
                +    },
                +
                +    // 封装 document.queryCommandSupported
                +    queryCommandSupported: function queryCommandSupported(name) {
                +        return document.queryCommandSupported(name);
                +    }
                +};
                +
                +/*
                +    selection range API
                +*/
                +
                +// 构造函数
                +function API(editor) {
                +    this.editor = editor;
                +    this._currentRange = null;
                +}
                +
                +// 修改原型
                +API.prototype = {
                +    constructor: API,
                +
                +    // 获取 range 对象
                +    getRange: function getRange() {
                +        return this._currentRange;
                +    },
                +
                +    // 保存选区
                +    saveRange: function saveRange(_range) {
                +        if (_range) {
                +            // 保存已有选区
                +            this._currentRange = _range;
                +            return;
                +        }
                +
                +        // 获取当前的选区
                +        var selection = window.getSelection();
                +        if (selection.rangeCount === 0) {
                +            return;
                +        }
                +        var range = selection.getRangeAt(0);
                +
                +        // 判断选区内容是否在编辑内容之内
                +        var $containerElem = this.getSelectionContainerElem(range);
                +        if (!$containerElem) {
                +            return;
                +        }
                +        var editor = this.editor;
                +        var $textElem = editor.$textElem;
                +        if ($textElem.isContain($containerElem)) {
                +            // 是编辑内容之内的
                +            this._currentRange = range;
                +        }
                +    },
                +
                +    // 折叠选区
                +    collapseRange: function collapseRange(toStart) {
                +        if (toStart == null) {
                +            // 默认为 false
                +            toStart = false;
                +        }
                +        var range = this._currentRange;
                +        if (range) {
                +            range.collapse(toStart);
                +        }
                +    },
                +
                +    // 选中区域的文字
                +    getSelectionText: function getSelectionText() {
                +        var range = this._currentRange;
                +        if (range) {
                +            return this._currentRange.toString();
                +        } else {
                +            return '';
                +        }
                +    },
                +
                +    // 选区的 $Elem
                +    getSelectionContainerElem: function getSelectionContainerElem(range) {
                +        range = range || this._currentRange;
                +        var elem = void 0;
                +        if (range) {
                +            elem = range.commonAncestorContainer;
                +            return $(elem.nodeType === 1 ? elem : elem.parentNode);
                +        }
                +    },
                +    getSelectionStartElem: function getSelectionStartElem(range) {
                +        range = range || this._currentRange;
                +        var elem = void 0;
                +        if (range) {
                +            elem = range.startContainer;
                +            return $(elem.nodeType === 1 ? elem : elem.parentNode);
                +        }
                +    },
                +    getSelectionEndElem: function getSelectionEndElem(range) {
                +        range = range || this._currentRange;
                +        var elem = void 0;
                +        if (range) {
                +            elem = range.endContainer;
                +            return $(elem.nodeType === 1 ? elem : elem.parentNode);
                +        }
                +    },
                +
                +    // 选区是否为空
                +    isSelectionEmpty: function isSelectionEmpty() {
                +        var range = this._currentRange;
                +        if (range && range.startContainer) {
                +            if (range.startContainer === range.endContainer) {
                +                if (range.startOffset === range.endOffset) {
                +                    return true;
                +                }
                +            }
                +        }
                +        return false;
                +    },
                +
                +    // 恢复选区
                +    restoreSelection: function restoreSelection() {
                +        var selection = window.getSelection();
                +        selection.removeAllRanges();
                +        selection.addRange(this._currentRange);
                +    },
                +
                +    // 创建一个空白(即 ​ 字符)选区
                +    createEmptyRange: function createEmptyRange() {
                +        var editor = this.editor;
                +        var range = this.getRange();
                +        var $elem = void 0;
                +
                +        if (!range) {
                +            // 当前无 range
                +            return;
                +        }
                +        if (!this.isSelectionEmpty()) {
                +            // 当前选区必须没有内容才可以
                +            return;
                +        }
                +
                +        try {
                +            // 目前只支持 webkit 内核
                +            if (UA.isWebkit()) {
                +                // 插入 ​
                +                editor.cmd.do('insertHTML', '​');
                +                // 修改 offset 位置
                +                range.setEnd(range.endContainer, range.endOffset + 1);
                +                // 存储
                +                this.saveRange(range);
                +            } else {
                +                $elem = $('');
                +                editor.cmd.do('insertElem', $elem);
                +                this.createRangeByElem($elem, true);
                +            }
                +        } catch (ex) {
                +            // 部分情况下会报错,兼容一下
                +        }
                +    },
                +
                +    // 根据 $Elem 设置选区
                +    createRangeByElem: function createRangeByElem($elem, toStart, isContent) {
                +        // $elem - 经过封装的 elem
                +        // toStart - true 开始位置,false 结束位置
                +        // isContent - 是否选中Elem的内容
                +        if (!$elem.length) {
                +            return;
                +        }
                +
                +        var elem = $elem[0];
                +        var range = document.createRange();
                +
                +        if (isContent) {
                +            range.selectNodeContents(elem);
                +        } else {
                +            range.selectNode(elem);
                +        }
                +
                +        if (typeof toStart === 'boolean') {
                +            range.collapse(toStart);
                +        }
                +
                +        // 存储 range
                +        this.saveRange(range);
                +    }
                +};
                +
                +/*
                +    上传进度条
                +*/
                +
                +function Progress(editor) {
                +    this.editor = editor;
                +    this._time = 0;
                +    this._isShow = false;
                +    this._isRender = false;
                +    this._timeoutId = 0;
                +    this.$textContainer = editor.$textContainerElem;
                +    this.$bar = $('
                '); +} + +Progress.prototype = { + constructor: Progress, + + show: function show(progress) { + var _this = this; + + // 状态处理 + if (this._isShow) { + return; + } + this._isShow = true; + + // 渲染 + var $bar = this.$bar; + if (!this._isRender) { + var $textContainer = this.$textContainer; + $textContainer.append($bar); + } else { + this._isRender = true; + } + + // 改变进度(节流,100ms 渲染一次) + if (Date.now() - this._time > 100) { + if (progress <= 1) { + $bar.css('width', progress * 100 + '%'); + this._time = Date.now(); + } + } + + // 隐藏 + var timeoutId = this._timeoutId; + if (timeoutId) { + clearTimeout(timeoutId); + } + timeoutId = setTimeout(function () { + _this._hide(); + }, 500); + }, + + _hide: function _hide() { + var $bar = this.$bar; + $bar.remove(); + + // 修改状态 + this._time = 0; + this._isShow = false; + this._isRender = false; + } +}; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; +} : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; +}; + +/* + 上传图片 +*/ + +// 构造函数 +function UploadImg(editor) { + this.editor = editor; +} + +// 原型 +UploadImg.prototype = { + constructor: UploadImg, + + // 根据 debug 弹出不同的信息 + _alert: function _alert(alertInfo, debugInfo) { + var editor = this.editor; + var debug = editor.config.debug; + var customAlert = editor.config.customAlert; + + if (debug) { + throw new Error('wangEditor: ' + (debugInfo || alertInfo)); + } else { + if (customAlert && typeof customAlert === 'function') { + customAlert(alertInfo); + } else { + alert(alertInfo); + } + } + }, + + // 根据链接插入图片 + insertLinkImg: function insertLinkImg(link) { + var _this2 = this; + + if (!link) { + return; + } + var editor = this.editor; + var config = editor.config; + + // 校验格式 + var linkImgCheck = config.linkImgCheck; + var checkResult = void 0; + if (linkImgCheck && typeof linkImgCheck === 'function') { + checkResult = linkImgCheck(link); + if (typeof checkResult === 'string') { + // 校验失败,提示信息 + alert(checkResult); + return; + } + } + + editor.cmd.do('insertHTML', ''); + + // 验证图片 url 是否有效,无效的话给出提示 + var img = document.createElement('img'); + img.onload = function () { + var callback = config.linkImgCallback; + if (callback && typeof callback === 'function') { + callback(link); + } + + img = null; + }; + img.onerror = function () { + img = null; + // 无法成功下载图片 + _this2._alert('插入图片错误', 'wangEditor: \u63D2\u5165\u56FE\u7247\u51FA\u9519\uFF0C\u56FE\u7247\u94FE\u63A5\u662F "' + link + '"\uFF0C\u4E0B\u8F7D\u8BE5\u94FE\u63A5\u5931\u8D25'); + return; + }; + img.onabort = function () { + img = null; + }; + img.src = link; + }, + + // 上传图片 + uploadImg: function uploadImg(files) { + var _this3 = this; + + if (!files || !files.length) { + return; + } + + // ------------------------------ 获取配置信息 ------------------------------ + var editor = this.editor; + var config = editor.config; + var uploadImgServer = config.uploadImgServer; + var uploadImgShowBase64 = config.uploadImgShowBase64; + + var maxSize = config.uploadImgMaxSize; + var maxSizeM = maxSize / 1024 / 1024; + var maxLength = config.uploadImgMaxLength || 10000; + var uploadFileName = config.uploadFileName || ''; + var uploadImgParams = config.uploadImgParams || {}; + var uploadImgParamsWithUrl = config.uploadImgParamsWithUrl; + var uploadImgHeaders = config.uploadImgHeaders || {}; + var hooks = config.uploadImgHooks || {}; + var timeout = config.uploadImgTimeout || 3000; + var withCredentials = config.withCredentials; + if (withCredentials == null) { + withCredentials = false; + } + var customUploadImg = config.customUploadImg; + + if (!customUploadImg) { + // 没有 customUploadImg 的情况下,需要如下两个配置才能继续进行图片上传 + if (!uploadImgServer && !uploadImgShowBase64) { + return; + } + } + + // ------------------------------ 验证文件信息 ------------------------------ + var resultFiles = []; + var errInfo = []; + arrForEach(files, function (file) { + var name = file.name; + var size = file.size; + + // chrome 低版本 name === undefined + if (!name || !size) { + return; + } + + if (/\.(jpg|jpeg|png|bmp|gif)$/i.test(name) === false) { + // 后缀名不合法,不是图片 + errInfo.push('\u3010' + name + '\u3011\u4E0D\u662F\u56FE\u7247'); + return; + } + if (maxSize < size) { + // 上传图片过大 + errInfo.push('\u3010' + name + '\u3011\u5927\u4E8E ' + maxSizeM + 'M'); + return; + } + + // 验证通过的加入结果列表 + resultFiles.push(file); + }); + // 抛出验证信息 + if (errInfo.length) { + this._alert('图片验证未通过: \n' + errInfo.join('\n')); + return; + } + if (resultFiles.length > maxLength) { + this._alert('一次最多上传' + maxLength + '张图片'); + return; + } + + // ------------------------------ 自定义上传 ------------------------------ + if (customUploadImg && typeof customUploadImg === 'function') { + customUploadImg(resultFiles, this.insertLinkImg.bind(this)); + + // 阻止以下代码执行 + return; + } + + // 添加图片数据 + var formdata = new FormData(); + arrForEach(resultFiles, function (file) { + var name = uploadFileName || file.name; + formdata.append(name, file); + }); + + // ------------------------------ 上传图片 ------------------------------ + if (uploadImgServer && typeof uploadImgServer === 'string') { + // 添加参数 + var uploadImgServerArr = uploadImgServer.split('#'); + uploadImgServer = uploadImgServerArr[0]; + var uploadImgServerHash = uploadImgServerArr[1] || ''; + objForEach(uploadImgParams, function (key, val) { + val = encodeURIComponent(val); + + // 第一,将参数拼接到 url 中 + if (uploadImgParamsWithUrl) { + if (uploadImgServer.indexOf('?') > 0) { + uploadImgServer += '&'; + } else { + uploadImgServer += '?'; + } + uploadImgServer = uploadImgServer + key + '=' + val; + } + + // 第二,将参数添加到 formdata 中 + formdata.append(key, val); + }); + if (uploadImgServerHash) { + uploadImgServer += '#' + uploadImgServerHash; + } + + // 定义 xhr + var xhr = new XMLHttpRequest(); + xhr.open('POST', uploadImgServer); + + // 设置超时 + xhr.timeout = timeout; + xhr.ontimeout = function () { + // hook - timeout + if (hooks.timeout && typeof hooks.timeout === 'function') { + hooks.timeout(xhr, editor); + } + + _this3._alert('上传图片超时'); + }; + + // 监控 progress + if (xhr.upload) { + xhr.upload.onprogress = function (e) { + var percent = void 0; + // 进度条 + var progressBar = new Progress(editor); + if (e.lengthComputable) { + percent = e.loaded / e.total; + progressBar.show(percent); + } + }; + } + + // 返回数据 + xhr.onreadystatechange = function () { + var result = void 0; + if (xhr.readyState === 4) { + if (xhr.status < 200 || xhr.status >= 300) { + // hook - error + if (hooks.error && typeof hooks.error === 'function') { + hooks.error(xhr, editor); + } + + // xhr 返回状态错误 + _this3._alert('上传图片发生错误', '\u4E0A\u4F20\u56FE\u7247\u53D1\u751F\u9519\u8BEF\uFF0C\u670D\u52A1\u5668\u8FD4\u56DE\u72B6\u6001\u662F ' + xhr.status); + return; + } + + result = xhr.responseText; + if ((typeof result === 'undefined' ? 'undefined' : _typeof(result)) !== 'object') { + try { + result = JSON.parse(result); + } catch (ex) { + // hook - fail + if (hooks.fail && typeof hooks.fail === 'function') { + hooks.fail(xhr, editor, result); + } + + _this3._alert('上传图片失败', '上传图片返回结果错误,返回结果是: ' + result); + return; + } + } + if (!hooks.customInsert && result.errno != '0') { + // hook - fail + if (hooks.fail && typeof hooks.fail === 'function') { + hooks.fail(xhr, editor, result); + } + + // 数据错误 + _this3._alert('上传图片失败', '上传图片返回结果错误,返回结果 errno=' + result.errno); + } else { + if (hooks.customInsert && typeof hooks.customInsert === 'function') { + // 使用者自定义插入方法 + hooks.customInsert(_this3.insertLinkImg.bind(_this3), result, editor); + } else { + // 将图片插入编辑器 + var data = result.data || []; + data.forEach(function (link) { + _this3.insertLinkImg(link); + }); + } + + // hook - success + if (hooks.success && typeof hooks.success === 'function') { + hooks.success(xhr, editor, result); + } + } + } + }; + + // hook - before + if (hooks.before && typeof hooks.before === 'function') { + var beforeResult = hooks.before(xhr, editor, resultFiles); + if (beforeResult && (typeof beforeResult === 'undefined' ? 'undefined' : _typeof(beforeResult)) === 'object') { + if (beforeResult.prevent) { + // 如果返回的结果是 {prevent: true, msg: 'xxxx'} 则表示用户放弃上传 + this._alert(beforeResult.msg); + return; + } + } + } + + // 自定义 headers + objForEach(uploadImgHeaders, function (key, val) { + xhr.setRequestHeader(key, val); + }); + + // 跨域传 cookie + xhr.withCredentials = withCredentials; + + // 发送请求 + xhr.send(formdata); + + // 注意,要 return 。不去操作接下来的 base64 显示方式 + return; + } + + // ------------------------------ 显示 base64 格式 ------------------------------ + if (uploadImgShowBase64) { + arrForEach(files, function (file) { + var _this = _this3; + var reader = new FileReader(); + reader.readAsDataURL(file); + reader.onload = function () { + _this.insertLinkImg(this.result); + }; + }); + } + } +}; + +/* + 编辑器构造函数 +*/ + +// id,累加 +var editorId = 1; + +// 构造函数 +function Editor(toolbarSelector, textSelector) { + if (toolbarSelector == null) { + // 没有传入任何参数,报错 + throw new Error('错误:初始化编辑器时候未传入任何参数,请查阅文档'); + } + // id,用以区分单个页面不同的编辑器对象 + this.id = 'wangEditor-' + editorId++; + + this.toolbarSelector = toolbarSelector; + this.textSelector = textSelector; + + // 自定义配置 + this.customConfig = {}; +} + +// 修改原型 +Editor.prototype = { + constructor: Editor, + + // 初始化配置 + _initConfig: function _initConfig() { + // _config 是默认配置,this.customConfig 是用户自定义配置,将它们 merge 之后再赋值 + var target = {}; + this.config = Object.assign(target, config, this.customConfig); + + // 将语言配置,生成正则表达式 + var langConfig = this.config.lang || {}; + var langArgs = []; + objForEach(langConfig, function (key, val) { + // key 即需要生成正则表达式的规则,如“插入链接” + // val 即需要被替换成的语言,如“insert link” + langArgs.push({ + reg: new RegExp(key, 'img'), + val: val + + }); + }); + this.config.langArgs = langArgs; + }, + + // 初始化 DOM + _initDom: function _initDom() { + var _this = this; + + var toolbarSelector = this.toolbarSelector; + var $toolbarSelector = $(toolbarSelector); + var textSelector = this.textSelector; + + var config$$1 = this.config; + var zIndex = config$$1.zIndex; + + // 定义变量 + var $toolbarElem = void 0, + $textContainerElem = void 0, + $textElem = void 0, + $children = void 0; + + if (textSelector == null) { + // 只传入一个参数,即是容器的选择器或元素,toolbar 和 text 的元素自行创建 + $toolbarElem = $('
                '); + $textContainerElem = $('
                '); + + // 将编辑器区域原有的内容,暂存起来 + $children = $toolbarSelector.children(); + + // 添加到 DOM 结构中 + $toolbarSelector.append($toolbarElem).append($textContainerElem); + + // 自行创建的,需要配置默认的样式 + $toolbarElem.css('background-color', '#f1f1f1').css('border', '1px solid #ccc'); + $textContainerElem.css('border', '1px solid #ccc').css('border-top', 'none').css('height', '300px'); + } else { + // toolbar 和 text 的选择器都有值,记录属性 + $toolbarElem = $toolbarSelector; + $textContainerElem = $(textSelector); + // 将编辑器区域原有的内容,暂存起来 + $children = $textContainerElem.children(); + } + + // 编辑区域 + $textElem = $('
                '); + $textElem.attr('contenteditable', 'true').css('width', '100%').css('height', '100%'); + + // 初始化编辑区域内容 + if ($children && $children.length) { + $textElem.append($children); + } else { + $textElem.append($('


                ')); + } + + // 编辑区域加入DOM + $textContainerElem.append($textElem); + + // 设置通用的 class + $toolbarElem.addClass('w-e-toolbar'); + $textContainerElem.addClass('w-e-text-container'); + $textContainerElem.css('z-index', zIndex); + $textElem.addClass('w-e-text'); + + // 添加 ID + var toolbarElemId = getRandom('toolbar-elem'); + $toolbarElem.attr('id', toolbarElemId); + var textElemId = getRandom('text-elem'); + $textElem.attr('id', textElemId); + + // 记录属性 + this.$toolbarElem = $toolbarElem; + this.$textContainerElem = $textContainerElem; + this.$textElem = $textElem; + this.toolbarElemId = toolbarElemId; + this.textElemId = textElemId; + + // 记录输入法的开始和结束 + var compositionEnd = true; + $textContainerElem.on('compositionstart', function () { + // 输入法开始输入 + compositionEnd = false; + }); + $textContainerElem.on('compositionend', function () { + // 输入法结束输入 + compositionEnd = true; + }); + + // 绑定 onchange + $textContainerElem.on('click keyup', function () { + // 输入法结束才出发 onchange + compositionEnd && _this.change && _this.change(); + }); + $toolbarElem.on('click', function () { + this.change && this.change(); + }); + + //绑定 onfocus 与 onblur 事件 + if (config$$1.onfocus || config$$1.onblur) { + // 当前编辑器是否是焦点状态 + this.isFocus = false; + + $(document).on('click', function (e) { + //判断当前点击元素是否在编辑器内 + var isChild = $textElem.isContain($(e.target)); + + //判断当前点击元素是否为工具栏 + var isToolbar = $toolbarElem.isContain($(e.target)); + var isMenu = $toolbarElem[0] == e.target ? true : false; + + if (!isChild) { + //若为选择工具栏中的功能,则不视为成blur操作 + if (isToolbar && !isMenu) { + return; + } + + if (_this.isFocus) { + _this.onblur && _this.onblur(); + } + _this.isFocus = false; + } else { + if (!_this.isFocus) { + _this.onfocus && _this.onfocus(); + } + _this.isFocus = true; + } + }); + } + }, + + // 封装 command + _initCommand: function _initCommand() { + this.cmd = new Command(this); + }, + + // 封装 selection range API + _initSelectionAPI: function _initSelectionAPI() { + this.selection = new API(this); + }, + + // 添加图片上传 + _initUploadImg: function _initUploadImg() { + this.uploadImg = new UploadImg(this); + }, + + // 初始化菜单 + _initMenus: function _initMenus() { + this.menus = new Menus(this); + this.menus.init(); + }, + + // 添加 text 区域 + _initText: function _initText() { + this.txt = new Text(this); + this.txt.init(); + }, + + // 初始化选区,将光标定位到内容尾部 + initSelection: function initSelection(newLine) { + var $textElem = this.$textElem; + var $children = $textElem.children(); + if (!$children.length) { + // 如果编辑器区域无内容,添加一个空行,重新设置选区 + $textElem.append($('


                ')); + this.initSelection(); + return; + } + + var $last = $children.last(); + + if (newLine) { + // 新增一个空行 + var html = $last.html().toLowerCase(); + var nodeName = $last.getNodeName(); + if (html !== '
                ' && html !== '' || nodeName !== 'P') { + // 最后一个元素不是


                ,添加一个空行,重新设置选区 + $textElem.append($('


                ')); + this.initSelection(); + return; + } + } + + this.selection.createRangeByElem($last, false, true); + this.selection.restoreSelection(); + }, + + // 绑定事件 + _bindEvent: function _bindEvent() { + // -------- 绑定 onchange 事件 -------- + var onChangeTimeoutId = 0; + var beforeChangeHtml = this.txt.html(); + var config$$1 = this.config; + + // onchange 触发延迟时间 + var onchangeTimeout = config$$1.onchangeTimeout; + onchangeTimeout = parseInt(onchangeTimeout, 10); + if (!onchangeTimeout || onchangeTimeout <= 0) { + onchangeTimeout = 200; + } + + var onchange = config$$1.onchange; + if (onchange && typeof onchange === 'function') { + // 触发 change 的有三个场景: + // 1. $textContainerElem.on('click keyup') + // 2. $toolbarElem.on('click') + // 3. editor.cmd.do() + this.change = function () { + // 判断是否有变化 + var currentHtml = this.txt.html(); + + if (currentHtml.length === beforeChangeHtml.length) { + // 需要比较每一个字符 + if (currentHtml === beforeChangeHtml) { + return; + } + } + + // 执行,使用节流 + if (onChangeTimeoutId) { + clearTimeout(onChangeTimeoutId); + } + onChangeTimeoutId = setTimeout(function () { + // 触发配置的 onchange 函数 + onchange(currentHtml); + beforeChangeHtml = currentHtml; + }, onchangeTimeout); + }; + } + + // -------- 绑定 onblur 事件 -------- + var onblur = config$$1.onblur; + if (onblur && typeof onblur === 'function') { + this.onblur = function () { + var currentHtml = this.txt.html(); + onblur(currentHtml); + }; + } + + // -------- 绑定 onfocus 事件 -------- + var onfocus = config$$1.onfocus; + if (onfocus && typeof onfocus === 'function') { + this.onfocus = function () { + onfocus(); + }; + } + }, + + // 创建编辑器 + create: function create() { + // 初始化配置信息 + this._initConfig(); + + // 初始化 DOM + this._initDom(); + + // 封装 command API + this._initCommand(); + + // 封装 selection range API + this._initSelectionAPI(); + + // 添加 text + this._initText(); + + // 初始化菜单 + this._initMenus(); + + // 添加 图片上传 + this._initUploadImg(); + + // 初始化选区,将光标定位到内容尾部 + this.initSelection(true); + + // 绑定事件 + this._bindEvent(); + }, + + // 解绑所有事件(暂时不对外开放) + _offAllEvent: function _offAllEvent() { + $.offAll(); + } +}; + +// 检验是否浏览器环境 +try { + document; +} catch (ex) { + throw new Error('请在浏览器环境下运行'); +} + +// polyfill +polyfill(); + +// 这里的 `inlinecss` 将被替换成 css 代码的内容,详情可去 ./gulpfile.js 中搜索 `inlinecss` 关键字 +var inlinecss = '.w-e-toolbar,.w-e-text-container,.w-e-menu-panel { padding: 0; margin: 0; box-sizing: border-box;}.w-e-toolbar *,.w-e-text-container *,.w-e-menu-panel * { padding: 0; margin: 0; box-sizing: border-box;}.w-e-clear-fix:after { content: ""; display: table; clear: both;}.w-e-toolbar .w-e-droplist { position: absolute; left: 0; top: 0; background-color: #fff; border: 1px solid #f1f1f1; border-right-color: #ccc; border-bottom-color: #ccc;}.w-e-toolbar .w-e-droplist .w-e-dp-title { text-align: center; color: #999; line-height: 2; border-bottom: 1px solid #f1f1f1; font-size: 13px;}.w-e-toolbar .w-e-droplist ul.w-e-list { list-style: none; line-height: 1;}.w-e-toolbar .w-e-droplist ul.w-e-list li.w-e-item { color: #333; padding: 5px 0;}.w-e-toolbar .w-e-droplist ul.w-e-list li.w-e-item:hover { background-color: #f1f1f1;}.w-e-toolbar .w-e-droplist ul.w-e-block { list-style: none; text-align: left; padding: 5px;}.w-e-toolbar .w-e-droplist ul.w-e-block li.w-e-item { display: inline-block; *display: inline; *zoom: 1; padding: 3px 5px;}.w-e-toolbar .w-e-droplist ul.w-e-block li.w-e-item:hover { background-color: #f1f1f1;}@font-face { font-family: \'w-e-icon\'; src: url(data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAABXAAAsAAAAAFXQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgDxIPAmNtYXAAAAFoAAAA9AAAAPRAxxN6Z2FzcAAAAlwAAAAIAAAACAAAABBnbHlmAAACZAAAEHwAABB8kRGt5WhlYWQAABLgAAAANgAAADYN4rlyaGhlYQAAExgAAAAkAAAAJAfEA99obXR4AAATPAAAAHwAAAB8cAcDvGxvY2EAABO4AAAAQAAAAEAx8jYEbWF4cAAAE/gAAAAgAAAAIAAqALZuYW1lAAAUGAAAAYYAAAGGmUoJ+3Bvc3QAABWgAAAAIAAAACAAAwAAAAMD3AGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA8fwDwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEANgAAAAyACAABAASAAEAIOkG6Q3pEulH6Wbpd+m56bvpxunL6d/qDepl6mjqcep58A3wFPEg8dzx/P/9//8AAAAAACDpBukN6RLpR+ll6Xfpuem76cbpy+nf6g3qYupo6nHqd/AN8BTxIPHc8fz//f//AAH/4xb+FvgW9BbAFqMWkxZSFlEWRxZDFjAWAxWvFa0VpRWgEA0QBw78DkEOIgADAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAPAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAIAAP/ABAADwAAEABMAAAE3AScBAy4BJxM3ASMBAyUBNQEHAYCAAcBA/kCfFzsyY4ABgMD+gMACgAGA/oBOAUBAAcBA/kD+nTI7FwERTgGA/oD9gMABgMD+gIAABAAAAAAEAAOAABAAIQAtADQAAAE4ATEROAExITgBMRE4ATEhNSEiBhURFBYzITI2NRE0JiMHFAYjIiY1NDYzMhYTITUTATM3A8D8gAOA/IAaJiYaA4AaJiYagDgoKDg4KCg4QP0A4AEAQOADQP0AAwBAJhr9ABomJhoDABom4Cg4OCgoODj9uIABgP7AwAAAAgAAAEAEAANAACgALAAAAS4DIyIOAgcOAxUUHgIXHgMzMj4CNz4DNTQuAicBEQ0BA9U2cXZ5Pz95dnE2Cw8LBgYLDws2cXZ5Pz95dnE2Cw8LBgYLDwv9qwFA/sADIAgMCAQECAwIKVRZWy8vW1lUKQgMCAQECAwIKVRZWy8vW1lUKf3gAYDAwAAAAAACAMD/wANAA8AAEwAfAAABIg4CFRQeAjEwPgI1NC4CAyImNTQ2MzIWFRQGAgBCdVcyZHhkZHhkMld1QlBwcFBQcHADwDJXdUJ4+syCgsz6eEJ1VzL+AHBQUHBwUFBwAAABAAAAAAQAA4AAIQAAASIOAgcnESEnPgEzMh4CFRQOAgcXPgM1NC4CIwIANWRcUiOWAYCQNYtQUItpPBIiMB5VKEAtGFCLu2oDgBUnNyOW/oCQNDw8aYtQK1FJQRpgI1ZibDlqu4tQAAEAAAAABAADgAAgAAATFB4CFzcuAzU0PgIzMhYXByERBy4DIyIOAgAYLUAoVR4wIhI8aYtQUIs1kAGAliNSXGQ1aruLUAGAOWxiViNgGkFJUStQi2k8PDSQAYCWIzcnFVCLuwACAAAAQAQBAwAAHgA9AAATMh4CFRQOAiMiLgI1JzQ+AjMVIgYHDgEHPgEhMh4CFRQOAiMiLgI1JzQ+AjMVIgYHDgEHPgHhLlI9IyM9Ui4uUj0jAUZ6o11AdS0JEAcIEgJJLlI9IyM9Ui4uUj0jAUZ6o11AdS0JEAcIEgIAIz1SLi5SPSMjPVIuIF2jekaAMC4IEwoCASM9Ui4uUj0jIz1SLiBdo3pGgDAuCBMKAgEAAAYAQP/ABAADwAADAAcACwARAB0AKQAAJSEVIREhFSERIRUhJxEjNSM1ExUzFSM1NzUjNTMVFREjNTM1IzUzNSM1AYACgP2AAoD9gAKA/YDAQEBAgMCAgMDAgICAgICAAgCAAgCAwP8AwED98jJAkjwyQJLu/sBAQEBAQAAGAAD/wAQAA8AAAwAHAAsAFwAjAC8AAAEhFSERIRUhESEVIQE0NjMyFhUUBiMiJhE0NjMyFhUUBiMiJhE0NjMyFhUUBiMiJgGAAoD9gAKA/YACgP2A/oBLNTVLSzU1S0s1NUtLNTVLSzU1S0s1NUsDgID/AID/AIADQDVLSzU1S0v+tTVLSzU1S0v+tTVLSzU1S0sAAwAAAAAEAAOgAAMADQAUAAA3IRUhJRUhNRMhFSE1ISUJASMRIxEABAD8AAQA/ACAAQABAAEA/WABIAEg4IBAQMBAQAEAgIDAASD+4P8AAQAAAAAAAgBT/8wDrQO0AC8AXAAAASImJy4BNDY/AT4BMzIWFx4BFAYPAQYiJyY0PwE2NCcuASMiBg8BBhQXFhQHDgEjAyImJy4BNDY/ATYyFxYUDwEGFBceATMyNj8BNjQnJjQ3NjIXHgEUBg8BDgEjAbgKEwgjJCQjwCNZMTFZIyMkJCNYDywPDw9YKSkUMxwcMxTAKSkPDwgTCrgxWSMjJCQjWA8sDw8PWCkpFDMcHDMUwCkpDw8PKxAjJCQjwCNZMQFECAckWl5aJMAiJSUiJFpeWiRXEBAPKw9YKXQpFBUVFMApdCkPKxAHCP6IJSIkWl5aJFcQEA8rD1gpdCkUFRUUwCl0KQ8rEA8PJFpeWiTAIiUAAAAABQAA/8AEAAPAABMAJwA7AEcAUwAABTI+AjU0LgIjIg4CFRQeAhMyHgIVFA4CIyIuAjU0PgITMj4CNw4DIyIuAiceAyc0NjMyFhUUBiMiJiU0NjMyFhUUBiMiJgIAaruLUFCLu2pqu4tQUIu7alaYcUFBcZhWVphxQUFxmFYrVVFMIwU3Vm8/P29WNwUjTFFV1SUbGyUlGxslAYAlGxslJRsbJUBQi7tqaruLUFCLu2pqu4tQA6BBcZhWVphxQUFxmFZWmHFB/gkMFSAUQ3RWMTFWdEMUIBUM9yg4OCgoODgoKDg4KCg4OAAAAAADAAD/wAQAA8AAEwAnADMAAAEiDgIVFB4CMzI+AjU0LgIDIi4CNTQ+AjMyHgIVFA4CEwcnBxcHFzcXNyc3AgBqu4tQUIu7amq7i1BQi7tqVphxQUFxmFZWmHFBQXGYSqCgYKCgYKCgYKCgA8BQi7tqaruLUFCLu2pqu4tQ/GBBcZhWVphxQUFxmFZWmHFBAqCgoGCgoGCgoGCgoAADAMAAAANAA4AAEgAbACQAAAE+ATU0LgIjIREhMj4CNTQmATMyFhUUBisBEyMRMzIWFRQGAsQcIChGXTX+wAGANV1GKET+hGUqPDwpZp+fnyw+PgHbIlQvNV1GKPyAKEZdNUZ0AUZLNTVL/oABAEs1NUsAAAIAwAAAA0ADgAAbAB8AAAEzERQOAiMiLgI1ETMRFBYXHgEzMjY3PgE1ASEVIQLAgDJXdUJCdVcygBsYHEkoKEkcGBv+AAKA/YADgP5gPGlOLS1OaTwBoP5gHjgXGBsbGBc4Hv6ggAAAAQCAAAADgAOAAAsAAAEVIwEzFSE1MwEjNQOAgP7AgP5AgAFAgAOAQP0AQEADAEAAAQAAAAAEAAOAAD0AAAEVIx4BFRQGBw4BIyImJy4BNTMUFjMyNjU0JiMhNSEuAScuATU0Njc+ATMyFhceARUjNCYjIgYVFBYzMhYXBADrFRY1MCxxPj5xLDA1gHJOTnJyTv4AASwCBAEwNTUwLHE+PnEsMDWAck5OcnJOO24rAcBAHUEiNWIkISQkISRiNTRMTDQ0TEABAwEkYjU1YiQhJCQhJGI1NExMNDRMIR8AAAAHAAD/wAQAA8AAAwAHAAsADwATABsAIwAAEzMVIzczFSMlMxUjNzMVIyUzFSMDEyETMxMhEwEDIQMjAyEDAICAwMDAAQCAgMDAwAEAgIAQEP0AECAQAoAQ/UAQAwAQIBD9gBABwEBAQEBAQEBAQAJA/kABwP6AAYD8AAGA/oABQP7AAAAKAAAAAAQAA4AAAwAHAAsADwATABcAGwAfACMAJwAAExEhEQE1IRUdASE1ARUhNSMVITURIRUhJSEVIRE1IRUBIRUhITUhFQAEAP2AAQD/AAEA/wBA/wABAP8AAoABAP8AAQD8gAEA/wACgAEAA4D8gAOA/cDAwEDAwAIAwMDAwP8AwMDAAQDAwP7AwMDAAAAFAAAAAAQAA4AAAwAHAAsADwATAAATIRUhFSEVIREhFSERIRUhESEVIQAEAPwAAoD9gAKA/YAEAPwABAD8AAOAgECA/wCAAUCA/wCAAAAAAAUAAAAABAADgAADAAcACwAPABMAABMhFSEXIRUhESEVIQMhFSERIRUhAAQA/ADAAoD9gAKA/YDABAD8AAQA/AADgIBAgP8AgAFAgP8AgAAABQAAAAAEAAOAAAMABwALAA8AEwAAEyEVIQUhFSERIRUhASEVIREhFSEABAD8AAGAAoD9gAKA/YD+gAQA/AAEAPwAA4CAQID/AIABQID/AIAAAAAAAQA/AD8C5gLmACwAACUUDwEGIyIvAQcGIyIvASY1ND8BJyY1ND8BNjMyHwE3NjMyHwEWFRQPARcWFQLmEE4QFxcQqKgQFxYQThAQqKgQEE4QFhcQqKgQFxcQThAQqKgQwxYQThAQqKgQEE4QFhcQqKgQFxcQThAQqKgQEE4QFxcQqKgQFwAAAAYAAAAAAyUDbgAUACgAPABNAFUAggAAAREUBwYrASInJjURNDc2OwEyFxYVMxEUBwYrASInJjURNDc2OwEyFxYXERQHBisBIicmNRE0NzY7ATIXFhMRIREUFxYXFjMhMjc2NzY1ASEnJicjBgcFFRQHBisBERQHBiMhIicmNREjIicmPQE0NzY7ATc2NzY7ATIXFh8BMzIXFhUBJQYFCCQIBQYGBQgkCAUGkgUFCCUIBQUFBQglCAUFkgUFCCUIBQUFBQglCAUFSf4ABAQFBAIB2wIEBAQE/oABABsEBrUGBAH3BgUINxobJv4lJhsbNwgFBQUFCLEoCBcWF7cXFhYJKLAIBQYCEv63CAUFBQUIAUkIBQYGBQj+twgFBQUFCAFJCAUGBgUI/rcIBQUFBQgBSQgFBgYF/lsCHf3jDQsKBQUFBQoLDQJmQwUCAgVVJAgGBf3jMCIjISIvAiAFBggkCAUFYBUPDw8PFWAFBQgAAgAHAEkDtwKvABoALgAACQEGIyIvASY1ND8BJyY1ND8BNjMyFwEWFRQHARUUBwYjISInJj0BNDc2MyEyFxYBTv72BgcIBR0GBuHhBgYdBQgHBgEKBgYCaQUFCP3bCAUFBQUIAiUIBQUBhf72BgYcBggHBuDhBgcHBh0FBf71BQgHBv77JQgFBQUFCCUIBQUFBQAAAAEAIwAAA90DbgCzAAAlIicmIyIHBiMiJyY1NDc2NzY3Njc2PQE0JyYjISIHBh0BFBcWFxYzFhcWFRQHBiMiJyYjIgcGIyInJjU0NzY3Njc2NzY9ARE0NTQ1NCc0JyYnJicmJyYnJiMiJyY1NDc2MzIXFjMyNzYzMhcWFRQHBiMGBwYHBh0BFBcWMyEyNzY9ATQnJicmJyY1NDc2MzIXFjMyNzYzMhcWFRQHBgciBwYHBhURFBcWFxYXMhcWFRQHBiMDwRkzMhoZMjMZDQgHCQoNDBEQChIBBxX+fhYHARUJEhMODgwLBwcOGzU1GhgxMRgNBwcJCQsMEA8JEgECAQIDBAQFCBIRDQ0KCwcHDho1NRoYMDEYDgcHCQoMDRAQCBQBBw8BkA4HARQKFxcPDgcHDhkzMhkZMTEZDgcHCgoNDRARCBQUCRERDg0KCwcHDgACAgICDAsPEQkJAQEDAwUMROAMBQMDBQzUUQ0GAQIBCAgSDwwNAgICAgwMDhEICQECAwMFDUUhAdACDQ0ICA4OCgoLCwcHAwYBAQgIEg8MDQICAgINDA8RCAgBAgEGDFC2DAcBAQcMtlAMBgEBBgcWDwwNAgICAg0MDxEICAEBAgYNT/3mRAwGAgIBCQgRDwwNAAACAAD/twP/A7cAEwA5AAABMhcWFRQHAgcGIyInJjU0NwE2MwEWFxYfARYHBiMiJyYnJicmNRYXFhcWFxYzMjc2NzY3Njc2NzY3A5soHh4avkw3RUg0NDUBbSEp/fgXJicvAQJMTHtHNjYhIRARBBMUEBASEQkXCA8SExUVHR0eHikDtxsaKCQz/plGNDU0SUkwAUsf/bErHx8NKHpNTBobLi86OkQDDw4LCwoKFiUbGhERCgsEBAIAAQAAAAAAANox8glfDzz1AAsEAAAAAADVYbp/AAAAANVhun8AAP+3BAEDwAAAAAgAAgAAAAAAAAABAAADwP/AAAAEAAAA//8EAQABAAAAAAAAAAAAAAAAAAAAHwQAAAAAAAAAAAAAAAIAAAAEAAAABAAAAAQAAAAEAADABAAAAAQAAAAEAAAABAAAQAQAAAAEAAAABAAAUwQAAAAEAAAABAAAwAQAAMAEAACABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAyUAPwMlAAADvgAHBAAAIwP/AAAAAAAAAAoAFAAeAEwAlADaAQoBPgFwAcgCBgJQAnoDBAN6A8gEAgQ2BE4EpgToBTAFWAWABaoF7gamBvAH4gg+AAEAAAAfALQACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAHAAAAAQAAAAAAAgAHAGAAAQAAAAAAAwAHADYAAQAAAAAABAAHAHUAAQAAAAAABQALABUAAQAAAAAABgAHAEsAAQAAAAAACgAaAIoAAwABBAkAAQAOAAcAAwABBAkAAgAOAGcAAwABBAkAAwAOAD0AAwABBAkABAAOAHwAAwABBAkABQAWACAAAwABBAkABgAOAFIAAwABBAkACgA0AKRpY29tb29uAGkAYwBvAG0AbwBvAG5WZXJzaW9uIDEuMABWAGUAcgBzAGkAbwBuACAAMQAuADBpY29tb29uAGkAYwBvAG0AbwBvAG5pY29tb29uAGkAYwBvAG0AbwBvAG5SZWd1bGFyAFIAZQBnAHUAbABhAHJpY29tb29uAGkAYwBvAG0AbwBvAG5Gb250IGdlbmVyYXRlZCBieSBJY29Nb29uLgBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format(\'truetype\'); font-weight: normal; font-style: normal;}[class^="w-e-icon-"],[class*=" w-e-icon-"] { /* use !important to prevent issues with browser extensions that change fonts */ font-family: \'w-e-icon\' !important; speak: none; font-style: normal; font-weight: normal; font-variant: normal; text-transform: none; line-height: 1; /* Better Font Rendering =========== */ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;}.w-e-icon-close:before { content: "\\f00d";}.w-e-icon-upload2:before { content: "\\e9c6";}.w-e-icon-trash-o:before { content: "\\f014";}.w-e-icon-header:before { content: "\\f1dc";}.w-e-icon-pencil2:before { content: "\\e906";}.w-e-icon-paint-brush:before { content: "\\f1fc";}.w-e-icon-image:before { content: "\\e90d";}.w-e-icon-play:before { content: "\\e912";}.w-e-icon-location:before { content: "\\e947";}.w-e-icon-undo:before { content: "\\e965";}.w-e-icon-redo:before { content: "\\e966";}.w-e-icon-quotes-left:before { content: "\\e977";}.w-e-icon-list-numbered:before { content: "\\e9b9";}.w-e-icon-list2:before { content: "\\e9bb";}.w-e-icon-link:before { content: "\\e9cb";}.w-e-icon-happy:before { content: "\\e9df";}.w-e-icon-bold:before { content: "\\ea62";}.w-e-icon-underline:before { content: "\\ea63";}.w-e-icon-italic:before { content: "\\ea64";}.w-e-icon-strikethrough:before { content: "\\ea65";}.w-e-icon-table2:before { content: "\\ea71";}.w-e-icon-paragraph-left:before { content: "\\ea77";}.w-e-icon-paragraph-center:before { content: "\\ea78";}.w-e-icon-paragraph-right:before { content: "\\ea79";}.w-e-icon-terminal:before { content: "\\f120";}.w-e-icon-page-break:before { content: "\\ea68";}.w-e-icon-cancel-circle:before { content: "\\ea0d";}.w-e-toolbar { display: -webkit-box; display: -ms-flexbox; display: flex; padding: 0 5px; /* flex-wrap: wrap; */ /* 单个菜单 */}.w-e-toolbar .w-e-menu { position: relative; text-align: center; padding: 5px 10px; cursor: pointer;}.w-e-toolbar .w-e-menu i { color: #999;}.w-e-toolbar .w-e-menu:hover i { color: #333;}.w-e-toolbar .w-e-active i { color: #1e88e5;}.w-e-toolbar .w-e-active:hover i { color: #1e88e5;}.w-e-text-container .w-e-panel-container { position: absolute; top: 0; left: 50%; border: 1px solid #ccc; border-top: 0; box-shadow: 1px 1px 2px #ccc; color: #333; background-color: #fff; /* 为 emotion panel 定制的样式 */ /* 上传图片的 panel 定制样式 */}.w-e-text-container .w-e-panel-container .w-e-panel-close { position: absolute; right: 0; top: 0; padding: 5px; margin: 2px 5px 0 0; cursor: pointer; color: #999;}.w-e-text-container .w-e-panel-container .w-e-panel-close:hover { color: #333;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-title { list-style: none; display: -webkit-box; display: -ms-flexbox; display: flex; font-size: 14px; margin: 2px 10px 0 10px; border-bottom: 1px solid #f1f1f1;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-title .w-e-item { padding: 3px 5px; color: #999; cursor: pointer; margin: 0 3px; position: relative; top: 1px;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-title .w-e-active { color: #333; border-bottom: 1px solid #333; cursor: default; font-weight: 700;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content { padding: 10px 15px 10px 15px; font-size: 16px; /* 输入框的样式 */ /* 按钮的样式 */}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content input:focus,.w-e-text-container .w-e-panel-container .w-e-panel-tab-content textarea:focus,.w-e-text-container .w-e-panel-container .w-e-panel-tab-content button:focus { outline: none;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content textarea { width: 100%; border: 1px solid #ccc; padding: 5px;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content textarea:focus { border-color: #1e88e5;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content input[type=text] { border: none; border-bottom: 1px solid #ccc; font-size: 14px; height: 20px; color: #333; text-align: left;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content input[type=text].small { width: 30px; text-align: center;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content input[type=text].block { display: block; width: 100%; margin: 10px 0;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content input[type=text]:focus { border-bottom: 2px solid #1e88e5;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button { font-size: 14px; color: #1e88e5; border: none; padding: 5px 10px; background-color: #fff; cursor: pointer; border-radius: 3px;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.left { float: left; margin-right: 10px;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.right { float: right; margin-left: 10px;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.gray { color: #999;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.red { color: #c24f4a;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button:hover { background-color: #f1f1f1;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container:after { content: ""; display: table; clear: both;}.w-e-text-container .w-e-panel-container .w-e-emoticon-container .w-e-item { cursor: pointer; font-size: 18px; padding: 0 3px; display: inline-block; *display: inline; *zoom: 1;}.w-e-text-container .w-e-panel-container .w-e-up-img-container { text-align: center;}.w-e-text-container .w-e-panel-container .w-e-up-img-container .w-e-up-btn { display: inline-block; *display: inline; *zoom: 1; color: #999; cursor: pointer; font-size: 60px; line-height: 1;}.w-e-text-container .w-e-panel-container .w-e-up-img-container .w-e-up-btn:hover { color: #333;}.w-e-text-container { position: relative;}.w-e-text-container .w-e-progress { position: absolute; background-color: #1e88e5; bottom: 0; left: 0; height: 1px;}.w-e-text { padding: 0 10px; overflow-y: scroll;}.w-e-text p,.w-e-text h1,.w-e-text h2,.w-e-text h3,.w-e-text h4,.w-e-text h5,.w-e-text table,.w-e-text pre { margin: 10px 0; line-height: 1.5;}.w-e-text ul,.w-e-text ol { margin: 10px 0 10px 20px;}.w-e-text blockquote { display: block; border-left: 8px solid #d0e5f2; padding: 5px 10px; margin: 10px 0; line-height: 1.4; font-size: 100%; background-color: #f1f1f1;}.w-e-text code { display: inline-block; *display: inline; *zoom: 1; background-color: #f1f1f1; border-radius: 3px; padding: 3px 5px; margin: 0 3px;}.w-e-text pre code { display: block;}.w-e-text table { border-top: 1px solid #ccc; border-left: 1px solid #ccc;}.w-e-text table td,.w-e-text table th { border-bottom: 1px solid #ccc; border-right: 1px solid #ccc; padding: 3px 5px;}.w-e-text table th { border-bottom: 2px solid #ccc; text-align: center;}.w-e-text:focus { outline: none;}.w-e-text img { cursor: pointer;}.w-e-text img:hover { box-shadow: 0 0 5px #333;}'; + +// 将 css 代码添加到 + + + +
                +
                +
                + +
                + +
                + + + +
                +
                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                +
                + 我是网络小说写手,我要注册为小说精品屋签约作者:
                +
                邀请码: + * 小说精品屋分配给作者的邀请码 +
                + 作者笔名: + + + + + * 长度为2到8位的中英文 +
                + 手机号码: + + + + * 小说精品屋的编辑会通过这个号码与您联系 +
                + QQ或微信: + + + + * 小说精品屋的编辑会通过这个号码与您联系 +
                + 电子邮箱: + + + + * 长度为2到15位的中英文,数字 +
                + 男女主角: + + + + * 请选择作品方向 +
                +
                + + + + + + + +
                +
                + + +
                +
                + + +
                + +
                +
                + + + + diff --git a/novel-front/src/main/resources/templates/book/book_content.html b/novel-front/src/main/resources/templates/book/book_content.html index ec9505e..4d6168c 100644 --- a/novel-front/src/main/resources/templates/book/book_content.html +++ b/novel-front/src/main/resources/templates/book/book_content.html @@ -86,7 +86,42 @@ 作者:
              -
              +
              +
              +

              + +

              + + +
              +
              +

              此章为VIP章节,需要订阅后才能继续阅读

              +
              +
              + +
              + +
              + + + +
              +
                +
              • 价格:10屋币(1元=100屋币)
              • +
              • 购买
              • + +
              + + + +
              +
              +
              +
              diff --git a/novel-front/src/main/resources/templates/book/book_index.html b/novel-front/src/main/resources/templates/book/book_index.html index 84f029d..c6146a1 100644 --- a/novel-front/src/main/resources/templates/book/book_index.html +++ b/novel-front/src/main/resources/templates/book/book_index.html @@ -44,7 +44,11 @@

              diff --git a/novel-front/src/main/resources/templates/common/top.html b/novel-front/src/main/resources/templates/common/top.html index 0b78dc1..a2738b4 100644 --- a/novel-front/src/main/resources/templates/common/top.html +++ b/novel-front/src/main/resources/templates/common/top.html @@ -43,7 +43,7 @@
            • 全部作品
            • 排行榜
            • 充值
            • -
            • 作家专区
            • +
            • 作家专区