From 2bd840766e2fde28bd31aed2cce7cf27e2b59331 Mon Sep 17 00:00:00 2001 From: ALW <850658129@qq.com> Date: Mon, 30 Jan 2023 08:52:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9F=A5=E7=9C=8Bpdf=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../commomSearch/CommomSearchController.java | 358 ++++-- .../TemplateSearchController.java | 17 + .../com/emr/dao/Archive_DetailMapper.java | 6 + .../java/com/emr/entity/Archive_Detail.java | 11 + .../java/com/emr/service/CommomService.java | 59 +- src/main/java/com/emr/util/Jpg2PdfUtil.java | 283 +++++ .../com/emr/vo/commomSearch/CommomTree.java | 31 + .../resources/mapper/Archive_DetailMapper.xml | 38 + .../mapper/commomSearch/ScanPathMapper.xml | 2 +- .../commomSearch/commomListqf.jsp | 6 +- .../dist/css/skins/_all-skins.min.css | 2 +- .../commomSearch/showRecordIframeBlood.js | 69 +- src/main/webapp/static/pdfjs/web/viewer.html | 703 +++++------ src/main/webapp/static/pdfjs/web/viewer.js | 1028 ++++++++--------- 14 files changed, 1626 insertions(+), 987 deletions(-) diff --git a/src/main/java/com/emr/controller/commomSearch/CommomSearchController.java b/src/main/java/com/emr/controller/commomSearch/CommomSearchController.java index c5f08cf..c03db15 100644 --- a/src/main/java/com/emr/controller/commomSearch/CommomSearchController.java +++ b/src/main/java/com/emr/controller/commomSearch/CommomSearchController.java @@ -20,6 +20,7 @@ import com.emr.service.recordType.EmrTypeRelatedService; import com.emr.service.recordType.EmrTypeService; import com.emr.service.tScanAssort.T_Scan_AssortService; import com.emr.util.ExceptionPrintUtil; +import com.emr.util.Jpg2PdfUtil; import com.emr.util.img2PdfUtil; import com.emr.vo.EmrPrintOrDownLoadInfo.EmrPrintOrDownLoadInfoVo; import com.emr.vo.FontVo.ScanAssortVo; @@ -38,6 +39,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; import java.net.InetAddress; import java.net.UnknownHostException; import java.text.SimpleDateFormat; @@ -63,6 +65,8 @@ public class CommomSearchController { @Autowired private CommomMapper commomMapper; @Autowired + private Archive_DetailMapper archiveDetailMapper; + @Autowired private EmrTypeRelatedService typeRelatedService; @Autowired private T_Scan_AssortService scanAssortService; @@ -241,19 +245,19 @@ public class CommomSearchController { String attending = null; String fileSource = null; List commomVos = commomMapper.selectAllAndPatientId(patientId); - for (CommomVo list:commomVos){ - admissTimes = list.getAdmissTimes(); - name = list.getName(); + for (CommomVo list : commomVos) { + admissTimes = list.getAdmissTimes(); + name = list.getName(); fileSource = list.getFileSource(); disDate = list.getDisDate(); - disDept = list.getDisDept(); - attending = list.getAttending(); + disDept = list.getDisDept(); + attending = list.getAttending(); } String userName = user.getUserPosition(); - SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss "); + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss "); Date date = new Date(System.currentTimeMillis()); String format = formatter.format(date); - browseRecords browseRecords=new browseRecords(); + browseRecords browseRecords = new browseRecords(); browseRecords.setAdmissTimes(admissTimes); browseRecords.setPatientName(name); browseRecords.setDisDate(disDate); @@ -264,30 +268,30 @@ public class CommomSearchController { browseRecords.setBrowseName(userName); // 获取访问真实IP String ipAddress = request.getHeader("x-forwarded-for"); - if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { + if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("Proxy-Client-IP"); } - if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { + if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("WL-Proxy-Client-IP"); } - if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { + if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getRemoteAddr(); - if("127.0.0.1".equals(ipAddress) || "0:0:0:0:0:0:0:1".equals(ipAddress)){ + if ("127.0.0.1".equals(ipAddress) || "0:0:0:0:0:0:0:1".equals(ipAddress)) { //根据网卡取本机配置的IP - InetAddress inet=null; + InetAddress inet = null; try { inet = InetAddress.getLocalHost(); } catch (UnknownHostException e) { e.printStackTrace(); } assert inet != null; - ipAddress= inet.getHostAddress(); + ipAddress = inet.getHostAddress(); } } //对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割 - if(ipAddress!=null && ipAddress.length()>15){ //"***.***.***.***".length() = 15 - if(ipAddress.indexOf(",")>0){ - ipAddress = ipAddress.substring(0,ipAddress.indexOf(",")); + if (ipAddress != null && ipAddress.length() > 15) { //"***.***.***.***".length() = 15 + if (ipAddress.indexOf(",") > 0) { + ipAddress = ipAddress.substring(0, ipAddress.indexOf(",")); } } browseRecords.setIp(ipAddress); @@ -296,7 +300,7 @@ public class CommomSearchController { } @RequestMapping("showRecordSouth") - public String showRecordSouth(String patientId, String userName, String deptName ,Model model, HttpServletRequest request) { + public String showRecordSouth(String patientId, String userName, String deptName, Model model, HttpServletRequest request) { model.addAttribute("patientId", patientId); model.addAttribute("userName", userName); model.addAttribute("deptName", deptName); @@ -434,6 +438,7 @@ public class CommomSearchController { /** * 南方医院访问 + * * @param userName * @param flag * @param model @@ -557,92 +562,189 @@ public class CommomSearchController { if (typeId != null) { typeRelateds = typeRelatedService.selectAssortIdsByTypeId(typeId); } - //第一级:全部影像资料 - CommomTree tree1 = new CommomTree(); - Integer id = 1; - tree1.setId(id); - tree1.setNewName("全部影像资料"); - if (null != commomVos && !commomVos.isEmpty()) { - //去重,取出不重复的分类集合 - Map assortMap = new LinkedHashMap<>(); - for (CommomTree commomVo1 : commomVos) { - assortMap.put(commomVo1.getAssortId(), commomVo1); - } - //判断分类是否全选,全选,父类跟着全选 - if (null != typeRelateds && !typeRelateds.isEmpty()) { - boolean checkedFlag = true; - for (Map.Entry map : assortMap.entrySet()) { - //定义是否存在 - boolean flag = false; - for (Emr_Type_Related typeRelated : typeRelateds) { - if (typeRelated.getAssortId().equals(map.getKey())) { - flag = true; + if (commomVos.size() > 0) { + //第一级:全部影像资料 + CommomTree tree1 = new CommomTree(); + Integer id = 1; + tree1.setId(id); + tree1.setNewName("全部影像资料"); + if (null != commomVos && !commomVos.isEmpty()) { + //去重,取出不重复的分类集合 + Map assortMap = new LinkedHashMap<>(); + for (CommomTree commomVo1 : commomVos) { + assortMap.put(commomVo1.getAssortId(), commomVo1); + } + //判断分类是否全选,全选,父类跟着全选 + if (null != typeRelateds && !typeRelateds.isEmpty()) { + boolean checkedFlag = true; + for (Map.Entry map : assortMap.entrySet()) { + //定义是否存在 + boolean flag = false; + for (Emr_Type_Related typeRelated : typeRelateds) { + if (typeRelated.getAssortId().equals(map.getKey())) { + flag = true; + break; + } + } + if (!flag) { + checkedFlag = false; break; } } - if (!flag) { - checkedFlag = false; - break; + if (checkedFlag) { + tree1.setChecked("true"); } - } - if (checkedFlag) { + } else { tree1.setChecked("true"); } - } else { - tree1.setChecked("true"); + treeList.add(tree1); + int oneId = 0; + for (Map.Entry map : assortMap.entrySet()) { + id++; + oneId = id; + String assortId = map.getValue().getAssortId(); + CommomTree tree2 = new CommomTree(); + tree2.setId(id); + tree2.setParentId(1); + tree2.setAssortId(map.getValue().getAssortId()); + //判断选中 + boolean checkFlag = false; + if (null != typeRelateds && !typeRelateds.isEmpty()) { + for (Emr_Type_Related typeRelated : typeRelateds) { + if (StringUtils.isNotBlank(assortId) && assortId.equals(typeRelated.getAssortId())) { + tree2.setChecked("true"); + checkFlag = true; + break; + } + } + } else { + checkFlag = true; + tree2.setChecked("true"); + } + //定义该类影像图片数量 + int scanPathCount = 0; + //第二层 图片 + for (CommomTree commomVo : commomVos) { + if (StringUtils.isNotBlank(assortId) && StringUtils.isNotBlank(commomVo.getAssortId()) && + assortId.equals(commomVo.getAssortId())) { + id++; + CommomTree tree3 = new CommomTree(); + tree3.setId(id); + tree3.setParentId(oneId); + tree3.setAssortId(assortId); + if (checkFlag) { + tree3.setChecked("true"); + } + scanPathCount++; + //图片名称 + String name = commomVo.getScanPage(); + tree3.setAssortName(name); + //设置树图片节点的名称 + tree3.setNewName("(第" + scanPathCount + "页)" + name); + tree3.setSource(commomVo.getSource()); + //存储水印图片 + treeList.add(tree3); + + } + } + tree2.setNewName(map.getValue().getAssortName() + "(" + scanPathCount + ")"); + treeList.add(tree2); + } } - treeList.add(tree1); - int oneId = 0; - for (Map.Entry map : assortMap.entrySet()) { - id++; - oneId = id; - String assortId = map.getValue().getAssortId(); - CommomTree tree2 = new CommomTree(); - tree2.setId(id); - tree2.setParentId(1); - tree2.setAssortId(map.getValue().getAssortId()); - //判断选中 - boolean checkFlag = false; + } + List archiveDetails = new ArrayList<>(); + if (commomVos.size() == 0) { + List archiveDetail = archiveDetailMapper.selectPdfPathByPatient2(patientId); + //第一级:全部影像资料 + CommomTree tree1 = new CommomTree(); + Integer id = 1; + tree1.setId(id); + tree1.setNewName("全部影像资料"); + if (null != archiveDetail && !archiveDetail.isEmpty()) { + //去重,取出不重复的分类集合 + Map assortMap = new LinkedHashMap<>(); + for (CommomTree commomVo1 : archiveDetail) { + assortMap.put(commomVo1.getAssortId(), commomVo1); + } + //判断分类是否全选,全选,父类跟着全选 if (null != typeRelateds && !typeRelateds.isEmpty()) { - for (Emr_Type_Related typeRelated : typeRelateds) { - if (StringUtils.isNotBlank(assortId) && assortId.equals(typeRelated.getAssortId())) { - tree2.setChecked("true"); - checkFlag = true; + boolean checkedFlag = true; + for (Map.Entry map : assortMap.entrySet()) { + //定义是否存在 + boolean flag = false; + for (Emr_Type_Related typeRelated : typeRelateds) { + if (typeRelated.getAssortId().equals(map.getKey())) { + flag = true; + break; + } + } + if (!flag) { + checkedFlag = false; break; } } + if (checkedFlag) { + tree1.setChecked("true"); + } } else { - checkFlag = true; - tree2.setChecked("true"); + tree1.setChecked("true"); } - //定义该类影像图片数量 - int scanPathCount = 0; - //第二层 图片 - for (CommomTree commomVo : commomVos) { - if (StringUtils.isNotBlank(assortId) && StringUtils.isNotBlank(commomVo.getAssortId()) && - assortId.equals(commomVo.getAssortId())) { - id++; - CommomTree tree3 = new CommomTree(); - tree3.setId(id); - tree3.setParentId(oneId); - tree3.setAssortId(assortId); - if (checkFlag) { - tree3.setChecked("true"); + treeList.add(tree1); + int oneId = 0; + for (Map.Entry map : assortMap.entrySet()) { + id++; + oneId = id; + String assortId = map.getValue().getAssortId(); + CommomTree tree2 = new CommomTree(); + tree2.setId(id); + tree2.setParentId(1); + tree2.setAssortId(map.getValue().getAssortId()); + //判断选中 + boolean checkFlag = false; + if (null != typeRelateds && !typeRelateds.isEmpty()) { + for (Emr_Type_Related typeRelated : typeRelateds) { + if (StringUtils.isNotBlank(assortId) && assortId.equals(typeRelated.getAssortId())) { + tree2.setChecked("true"); + checkFlag = true; + break; + } } - scanPathCount++; - //图片名称 - String name = commomVo.getScanPage(); - tree3.setAssortName(name); - //设置树图片节点的名称 - tree3.setNewName("(第" + scanPathCount + "页)" + name); - tree3.setSource(commomVo.getSource()); - //存储水印图片 - treeList.add(tree3); + } else { + checkFlag = true; + tree2.setChecked("true"); + } + //定义该类影像图片数量 + int scanPathCount = 0; + //第二层 图片 + int scanPathCountNum = 0; + for (CommomTree commomVo : archiveDetail) { + if (StringUtils.isNotBlank(assortId) && StringUtils.isNotBlank(commomVo.getAssortId()) && + assortId.equals(commomVo.getAssortId())) { + id++; + CommomTree tree3 = new CommomTree(); + tree3.setId(id); + tree3.setParentId(oneId); + tree3.setAssortId(assortId); + if (checkFlag) { + tree3.setChecked("true"); + } + scanPathCount++; + //图片名称 + String name = commomVo.getScanPage(); + tree3.setAssortName(name); + //设置树图片节点的名称 + tree3.setNewName(commomVo.getTitle()); + tree3.setSource(commomVo.getSource()); + //存储水印图片 + treeList.add(tree3); + scanPathCountNum = commomVo.getPageCount(); + + } } + tree2.setNewName(map.getValue().getAssortName() + "(" + scanPathCountNum + ")"); + treeList.add(tree2); } - tree2.setNewName(map.getValue().getAssortName() + "(" + scanPathCount + ")"); - treeList.add(tree2); } } return JSON.toJSONString(treeList); @@ -673,6 +775,28 @@ public class CommomSearchController { return ResultUtil.ok(outs); } + + @RequestMapping(value = "selectPrintPic2", method = RequestMethod.POST) + @ResponseBody + public ResultUtil selectPrintPic2(HttpServletResponse response, String patientId, String rootPaths, String names, String sources, HttpServletRequest request) throws Exception { + //生成加载进度mapKey + Power_User user = (Power_User) request.getSession().getAttribute("CURRENT_USER"); + String mapKey = user.getUserName() + "_" + patientId; + List outs = commomService.selectPrintPic2(response, patientId, names, sources, mapKey); + return ResultUtil.ok(outs); + } + + +// @RequestMapping("showPdf") +// public void showPdf(String patientId, HttpServletRequest request, HttpServletResponse response) { +// EmrPdfWaterSet emrPdfWaterSet = new EmrPdfWaterSet(); +// Power_User user = (Power_User) request.getSession().getAttribute("CURRENT_USER"); +// String mapKey = user.getUserName() + "_" + patientId; +// List fileList = (List) request.getSession().getAttribute(mapKey); +// String pdfWater = "儿童医院"; +// Jpg2PdfUtil.mulFile2One(response, fileList, pdfWater); +// } + /** * 南方太和医院打印预览前加载图片 * @@ -714,9 +838,9 @@ public class CommomSearchController { */ @RequestMapping(value = "showRecordContentBlood") @ResponseBody - public ResultUtil showRecordContentBlood(String patientId, String scanPages, String sources, String flag, HttpServletResponse response,HttpServletRequest request) { + public ResultUtil showRecordContentBlood(String patientId, String scanPages, String sources, String flag, HttpServletResponse response, HttpServletRequest request) { try { - commomService.showRecordContentBlood(patientId, scanPages, sources, flag, response,request); + commomService.showRecordContentBlood(patientId, scanPages, sources, flag, response, request); return ResultUtil.ok(); } catch (Exception e) { ExceptionPrintUtil.printException(e); @@ -727,35 +851,45 @@ public class CommomSearchController { @RequestMapping(value = "getRecordContentBlood") @ResponseBody - public void getRecordContentBlood(String patientId,HttpServletRequest request,HttpServletResponse response) { - try { - Power_User user = (Power_User) request.getSession().getAttribute("CURRENT_USER"); - String mapKey = user.getUserName() + "_" + patientId; - List scanPages = (List)request.getSession().getAttribute(mapKey); - if(!CollectionUtils.isEmpty(scanPages)) { - String pdfName = "档案管理PDF"; - //根据图片路径转换pdf - EmrPdfWaterSet emrPdfWaterSet = pdfWaterSetMapper.selectByPrimaryKey(1); - //定义第二文本水印 姓名 + 科室 + ip - EmrPdfWaterSet emrPdfWaterSet1 = commomService.getEmrPdfWaterSet(emrPdfWaterSet); - //获取角色是否加水印 - Integer userSex = user.getUserSex(); - if(userSex == null || userSex == 0){ - emrPdfWaterSet.setEffective(Short.valueOf("0")); - emrPdfWaterSet1.setEffective(Short.valueOf("0")); + public void getRecordContentBlood(String patientId, HttpServletRequest request, HttpServletResponse response) { + List commomTrees = archiveDetailMapper.selectPdfPathByPatient2(patientId); + if (commomTrees.size() == 0) { + try { + Power_User user = (Power_User) request.getSession().getAttribute("CURRENT_USER"); + String mapKey = user.getUserName() + "_" + patientId; + List scanPages = (List) request.getSession().getAttribute(mapKey); + if (!CollectionUtils.isEmpty(scanPages)) { + String pdfName = "档案管理PDF"; + //根据图片路径转换pdf + EmrPdfWaterSet emrPdfWaterSet = pdfWaterSetMapper.selectByPrimaryKey(1); + //定义第二文本水印 姓名 + 科室 + ip + EmrPdfWaterSet emrPdfWaterSet1 = commomService.getEmrPdfWaterSet(emrPdfWaterSet); + //获取角色是否加水印 + Integer userSex = user.getUserSex(); + if (userSex == null || userSex == 0) { + emrPdfWaterSet.setEffective(Short.valueOf("0")); + emrPdfWaterSet1.setEffective(Short.valueOf("0")); + } + img2PdfUtil.imageToPdf(response, scanPages, pdfName, emrPdfWaterSet, emrPdfWaterSet1); + //移除缓存 + request.removeAttribute(mapKey); } - img2PdfUtil.imageToPdf(response, scanPages, pdfName, emrPdfWaterSet,emrPdfWaterSet1); - //移除缓存 - request.removeAttribute(mapKey); + } catch (Exception e) { + ExceptionPrintUtil.printException(e); + e.printStackTrace(); } - } catch (Exception e) { - ExceptionPrintUtil.printException(e); - e.printStackTrace(); + } else { + String pdfWater = ""; + Power_User user = (Power_User) request.getSession().getAttribute("CURRENT_USER"); + String mapKey = user.getUserName() + "_" + patientId; + List filePaths = (List) request.getSession().getAttribute(mapKey); + Jpg2PdfUtil.mulFile2One(response, filePaths, pdfWater); } } /** * 南方医院访问 + * * @param patientId * @param userName * @param scanPages @@ -767,8 +901,8 @@ public class CommomSearchController { @ResponseBody public void showRecordContentSouth(String patientId, String userName, String deptName, String scanPages, String sources, String flag, HttpServletResponse response, HttpServletRequest request) { try { - userName = (String)request.getSession().getAttribute("userName"); - deptName = (String)request.getSession().getAttribute("deptName"); + userName = (String) request.getSession().getAttribute("userName"); + deptName = (String) request.getSession().getAttribute("deptName"); commomService.showRecordContentSouth(patientId, userName, deptName, scanPages, sources, flag, response); } catch (Exception e) { ExceptionPrintUtil.printException(e); diff --git a/src/main/java/com/emr/controller/templateSearch/TemplateSearchController.java b/src/main/java/com/emr/controller/templateSearch/TemplateSearchController.java index 665bf71..771cc5e 100644 --- a/src/main/java/com/emr/controller/templateSearch/TemplateSearchController.java +++ b/src/main/java/com/emr/controller/templateSearch/TemplateSearchController.java @@ -3,6 +3,7 @@ package com.emr.controller.templateSearch; import com.alibaba.fastjson.JSON; import com.emr.annotation.OptionalLog; import com.emr.controller.FormTokenFlagUtil; +import com.emr.dao.Archive_DetailMapper; import com.emr.dao.CommomMapper; import com.emr.dao.EmrComomSetMapper; import com.emr.dao.Emr_DictionaryMapper; @@ -27,6 +28,7 @@ import com.emr.service.emrPrintOrDownLoadInfo.PrintOrDownLoadInfoService; import com.emr.service.templateSearch.TemplateSearchService; import com.emr.util.*; import com.emr.vo.Msg; +import com.emr.vo.commomSearch.CommomTree; import com.emr.vo.commomSearch.CommomVo; import com.emr.vo.commomSearch.ScanPathForPatientListVo; import com.emr.vo.commomSearch.ScanPathVo; @@ -98,6 +100,8 @@ public class TemplateSearchController { private EmrComomSetMapper emrComomSetMapper; @Autowired private CommomService commomService; + @Autowired + private Archive_DetailMapper archiveDetailMapper; /** * @MethodName templateList @@ -1323,6 +1327,19 @@ public class TemplateSearchController { emrPdfWaterSet.setIsImg(emrPdfWaterSet.getDownloadIsImg()); EmrPdfWaterSet emrPdfWaterSet1 = commomService.getEmrPdfWaterSet(emrPdfWaterSet); img2PdfUtil.imageToPdf(response, filePaths, pdfName, emrPdfWaterSet,emrPdfWaterSet1); + }else { + String fileRealPath=null; + List commomTrees = archiveDetailMapper.selectPdfPathByPatient3(patientIds, assortIds); + List filePaths = new ArrayList(); + for (int i = 0; i < commomTrees.size(); ++i) { + fileRealPath = commomTrees.get(i).getPDFPATH(); + if (StringUtils.isNoneBlank(new CharSequence[]{fileRealPath})) { + filePaths.add(fileRealPath); + } + } + SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd"); + String filename=fmt.format(new Date()); + Jpg2PdfUtil.mulFile2One3(response,filePaths,filename); } } catch (Exception e) { ExceptionPrintUtil.printException(e); diff --git a/src/main/java/com/emr/dao/Archive_DetailMapper.java b/src/main/java/com/emr/dao/Archive_DetailMapper.java index a488441..65c7756 100644 --- a/src/main/java/com/emr/dao/Archive_DetailMapper.java +++ b/src/main/java/com/emr/dao/Archive_DetailMapper.java @@ -1,6 +1,7 @@ package com.emr.dao; import com.emr.entity.Archive_Detail; +import com.emr.vo.commomSearch.CommomTree; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -12,5 +13,10 @@ public interface Archive_DetailMapper { List selectPdfPathByPatient(@Param("patientId")String patientId,@Param("assortIds")String assortIds); + List selectPdfPathByPatient2(@Param("patientId")String patientId); + + List selectPdfPathByPatient3(@Param("patientIds")String patientIds,@Param("assortIds")String assortIds); + + List selectPdfCountByMasterId(@Param("patientId")String patientId); } \ No newline at end of file diff --git a/src/main/java/com/emr/entity/Archive_Detail.java b/src/main/java/com/emr/entity/Archive_Detail.java index 111ef44..1805049 100644 --- a/src/main/java/com/emr/entity/Archive_Detail.java +++ b/src/main/java/com/emr/entity/Archive_Detail.java @@ -19,8 +19,19 @@ public class Archive_Detail { private String flag; + private String sys; + public String getAssortName() { + return assortName; + } + + public void setAssortName(String assortName) { + this.assortName = assortName; + } + + private String assortName; + public String getId() { return id; } diff --git a/src/main/java/com/emr/service/CommomService.java b/src/main/java/com/emr/service/CommomService.java index 2ad3265..ec107ad 100644 --- a/src/main/java/com/emr/service/CommomService.java +++ b/src/main/java/com/emr/service/CommomService.java @@ -227,7 +227,8 @@ public class CommomService { if ("1".equals(sourceArr[i])) { srcStr = root1 + File.separator + scanPageArr[i]; } else { - srcStr = root2 + File.separator + scanPageArr[i]; +// srcStr = root2 + File.separator + scanPageArr[i]; + srcStr = scanPageArr[i]; } } src.add(srcStr); @@ -639,6 +640,62 @@ public class CommomService { return outs; } + + public List selectPrintPic2(HttpServletResponse response, String patientId,String names, String sources, String mapKey) { + List outs = new LinkedList<>(); + if (StringUtils.isNotBlank(names)) { + String[] nameList = names.split(","); +// String[] sourceList = sources.split(","); + //获取水印设置 + EmrPdfWaterSet emrPdfWaterSet = pdfWaterSetMapper.selectByPrimaryKey(1); + //获取是否打印文本水印 + Short printEffective = emrPdfWaterSet.getPrintEffective(); + //获取是否打印图片水印 + Short printIsImg = emrPdfWaterSet.getPrintIsImg(); + for (int i = 0; i < nameList.length; i++) { + //定义图片根目录地址 + String rootPath = ""; + //组织原图片地址 + //原图片地址 + String srcPath = nameList[i]; + //定义输出地址 + String outSrc = ""; + //获取项目上下文地址 + //不需要水印 + String root = ""; + String picPath = ""; + //判断是否是tif图片 + boolean tifFileFlag = checkTifFile(srcPath); + if(tifFileFlag){ + String picSrc = WATERPICPATH + patientId + File.separator ; + //目录不存在则创建 + if (!new File(picSrc).isDirectory()) { + new File(picSrc).mkdirs(); + } + //组织加水印后图片存放地址 + picPath = picSrc + nameList[i]; + //转换图片输出 + //tifToJpg(srcPath,picPath); + outSrc = EMRRECORDJSP + File.separator + "reload" + File.separator + patientId + File.separator + nameList[i]; + }else{ + //将原图片地址转换成映射地址 + //获取盘符并转换映射地址的头部地址 + root = selectRootByNotWater(srcPath); + //获取盘符后面的地址 + String str1 = srcPath.substring(0, srcPath.indexOf(File.separator)); + picPath = srcPath.substring(str1.length() + 1, srcPath.length()); + outSrc = EMRRECORDJSP + File.separator + root + picPath; + outs.add(outSrc); + } + + + Integer value = Math.round((i + 1) * 100 / nameList.length); + printLoadingMap.put(mapKey, value); + } + } + return outs; + } + /** * 判断是否是tif图片 * @param srcPath diff --git a/src/main/java/com/emr/util/Jpg2PdfUtil.java b/src/main/java/com/emr/util/Jpg2PdfUtil.java index cf82825..61b76da 100644 --- a/src/main/java/com/emr/util/Jpg2PdfUtil.java +++ b/src/main/java/com/emr/util/Jpg2PdfUtil.java @@ -5,6 +5,7 @@ import com.lowagie.text.Font; import com.lowagie.text.Image; import com.lowagie.text.pdf.*; import com.lowagie.text.pdf.codec.TiffImage; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -14,6 +15,7 @@ import java.io.*; import java.net.URL; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.Iterator; import java.util.List; /** @@ -129,6 +131,287 @@ public class Jpg2PdfUtil { writer.close(); } } + public static boolean check(String file) { + PdfReader pdfReader = null; + try { + File f = new File(file); + if(f.isFile()){ + pdfReader = new PdfReader(file); + if (pdfReader.getNumberOfPages() != 0) { + return true; + } + } + } catch (Exception e) { + }finally { + if(null != pdfReader){ + pdfReader.close(); + } + } + return false; + } + + + public static void mulFile2One(HttpServletResponse response,List filePaths,String waterMarkName) { + SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //遍历删除,除去损坏,文件不存在,抛异常就是空白页 + Iterator iterator = filePaths.iterator(); + while (iterator.hasNext()) { + String fileStr = iterator.next(); + File file = new File(fileStr); + if(file.isFile()){ + boolean flag = check(fileStr); + if(!flag){ + iterator.remove(); + System.out.println(fmt.format(new Date())+":"+file+"文件损坏"); + } + }else{ + iterator.remove(); + System.out.println(fmt.format(new Date())+":"+file+"文件不存在"); + } + } + if(!filePaths.isEmpty()){ + // pdf合并工具类 + Document document = null; + PdfCopy copy = null; + try { + document = new Document(new PdfReader(filePaths.get(0)).getPageSize(1)); + copy = new PdfCopy(document,response.getOutputStream()); + document.open(); + for (String file : filePaths) { + PdfReader reader = new PdfReader(file); + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + PdfReader pdfReader = null; + //判断是否加水印 + if (StringUtils.isNotBlank(waterMarkName)) { + setWatermark(bos, reader, waterMarkName, null); + pdfReader = new PdfReader(bos.toByteArray()); + } + int n = reader.getNumberOfPages(); + for (int j = 1; j <= n; j++) { + document.newPage(); + PdfImportedPage page = null; + if (StringUtils.isNotBlank(waterMarkName)) { + page = copy.getImportedPage(pdfReader, j); + } else { + page = copy.getImportedPage(reader, j); + } + copy.addPage(page); + } + if(null != pdfReader){ + pdfReader.close(); + } + reader.close(); + try { + bos.flush(); + bos.close(); + }catch (Exception e){ + //e.printStackTrace(); + } + } + }catch (Exception e){ + //e.printStackTrace(); + }finally { + if(null != document){ + document.close(); + } + } + + } + } + + public static void setWatermark(ByteArrayOutputStream bos, PdfReader reader, String waterMarkName, String imgPath){ + PdfStamper stamper = null; + try { + stamper = new PdfStamper(reader, bos); + int total = reader.getNumberOfPages() + 1; + PdfContentByte content; + BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED); + PdfGState gs = new PdfGState(); + for (int i = 1; i < total; i++) { + content = stamper.getOverContent(i);// 在内容上方加水印 + //加文字水印 + if(StringUtils.isNotBlank(waterMarkName)) { + gs.setFillOpacity(0.3f); + gs.setStrokeOpacity(0.3f); + content.setGState(gs); + content.beginText(); + content.setColorFill(Color.LIGHT_GRAY); + content.setFontAndSize(base, 50); + content.setTextMatrix(70, 200); + String[] waterMarks = waterMarkName.split("&"); + //v:距左 v1:距下 v2: + content.showTextAligned(Element.ALIGN_CENTER, waterMarks[0], 250, 600, 40); + /*content.showTextAligned(Element.ALIGN_CENTER, waterMarks[0], 250, 200, 40); + content.showTextAligned(Element.ALIGN_CENTER, waterMarks[0], 800, 600, 40); + content.showTextAligned(Element.ALIGN_CENTER, waterMarks[0], 800, 200, 40); + content.showTextAligned(Element.ALIGN_CENTER, waterMarks[0], 250, 1100, 40); + content.showTextAligned(Element.ALIGN_CENTER, waterMarks[0], 250, 1500, 40); + content.showTextAligned(Element.ALIGN_CENTER, waterMarks[0], 800, 1100, 40); + content.showTextAligned(Element.ALIGN_CENTER, waterMarks[0], 800, 1500, 40);*/ + if(waterMarks.length > 1){ + //v:距左 v1:距下 v2: + content.showTextAligned(Element.ALIGN_CENTER, waterMarks[1], 310, 400, 40); + /* content.showTextAligned(Element.ALIGN_CENTER, waterMarks[1], 310, 150, 40);*/ + /*content.showTextAligned(Element.ALIGN_CENTER, waterMarks[1], 860, 550, 40); + content.showTextAligned(Element.ALIGN_CENTER, waterMarks[1], 860, 150, 40);*/ + /* content.showTextAligned(Element.ALIGN_CENTER, waterMarks[1], 300, 900, 40); + content.showTextAligned(Element.ALIGN_CENTER, waterMarks[1], 300, 1300, 40); + content.showTextAligned(Element.ALIGN_CENTER, waterMarks[1], 800, 900, 40); + content.showTextAligned(Element.ALIGN_CENTER, waterMarks[1], 800, 1300, 40);*/ + } + content.endText(); + } + if(StringUtils.isNotBlank(imgPath)){ + Image image = Image.getInstance(imgPath); + image.setAbsolutePosition(200, 206); // set the first background + image.scaleToFit(200, 200); + content.addImage(image); + } + content.setColorFill(Color.BLACK); + content.setFontAndSize(base, 8); + } + } catch (IOException | DocumentException e) { + e.printStackTrace(); + } finally { + try { + assert stamper != null; + stamper.close(); + } catch (DocumentException | IOException e) { + e.printStackTrace(); + } + } + } + + public static void mulFile2One3(HttpServletResponse response,List filePaths,String filename) { + String waterMarkName=""; + SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //遍历删除,除去损坏,文件不存在,抛异常就是空白页 + Iterator iterator = filePaths.iterator(); + while (iterator.hasNext()) { + String fileStr = iterator.next(); + File file = new File(fileStr); + if(file.isFile()){ + boolean flag = check(fileStr); + if(!flag){ + iterator.remove(); + System.out.println(fmt.format(new Date())+":"+file+"文件损坏"); + } + }else{ + iterator.remove(); + System.out.println(fmt.format(new Date())+":"+file+"文件不存在"); + } + } + if(!filePaths.isEmpty()){ + // pdf合并工具类 + Document document = null; + PdfCopy copy = null; + try { + response.reset(); + response.setCharacterEncoding("utf-8"); + response.setContentType("application/pdf"); + response.setHeader("Content-Disposition", "attachment; filename=" + filename + ".pdf"); + document = new Document(new PdfReader(filePaths.get(0)).getPageSize(1)); + copy = new PdfCopy(document,response.getOutputStream()); + document.open(); + for (String file : filePaths) { + PdfReader reader = new PdfReader(file); + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + PdfReader pdfReader = null; + //判断是否加水印 + if (StringUtils.isNotBlank(waterMarkName)) { + setWatermark(bos, reader, waterMarkName, null); + pdfReader = new PdfReader(bos.toByteArray()); + } + int n = reader.getNumberOfPages(); + for (int j = 1; j <= n; j++) { + document.newPage(); + PdfImportedPage page = null; + if (StringUtils.isNotBlank(waterMarkName)) { + page = copy.getImportedPage(pdfReader, j); + } else { + page = copy.getImportedPage(reader, j); + } + copy.addPage(page); + } + if(null != pdfReader){ + pdfReader.close(); + } + reader.close(); + try { + bos.flush(); + bos.close(); + }catch (Exception e){ + //e.printStackTrace(); + } + } + }catch (Exception e){ + //e.printStackTrace(); + }finally { + if(null != document){ + document.close(); + } + } + + } + } + + public static void mulFile2One2(HttpServletResponse response,List filePaths) { + SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //遍历删除,除去损坏,文件不存在,抛异常就是空白页 + Iterator iterator = filePaths.iterator(); + while (iterator.hasNext()) { + String fileStr = iterator.next(); + File file = new File(fileStr); + if(file.isFile()){ + boolean flag = check(fileStr); + if(!flag){ + iterator.remove(); + System.out.println(fmt.format(new Date())+":"+file+"文件损坏"); + } + }else{ + iterator.remove(); + System.out.println(fmt.format(new Date())+":"+file+"文件不存在"); + } + } + if(!filePaths.isEmpty()){ + // pdf合并工具类 + Document document = null; + PdfCopy copy = null; + try { + response.reset(); + response.setCharacterEncoding("utf-8"); + response.setContentType("application/pdf"); + response.setHeader("Content-Disposition", "attachment; "+"pdf"); + document = new Document(new PdfReader(filePaths.get(0)).getPageSize(1)); + copy = new PdfCopy(document,response.getOutputStream()); + document.open(); + for (String file : filePaths) { + PdfReader reader = new PdfReader(file); + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + PdfReader pdfReader = null; + int n = reader.getNumberOfPages(); + if(null != pdfReader){ + pdfReader.close(); + } + reader.close(); + try { + bos.flush(); + bos.close(); + }catch (Exception e){ + //e.printStackTrace(); + } + } + }catch (Exception e){ + //e.printStackTrace(); + }finally { + if(null != document){ + document.close(); + } + } + + } + } + /** * 在不改变图片形状的同时,判断,如果h>w,则按h压缩,否则在w>h或w=h的情况下,按宽度压缩 diff --git a/src/main/java/com/emr/vo/commomSearch/CommomTree.java b/src/main/java/com/emr/vo/commomSearch/CommomTree.java index 14aedf9..297a751 100644 --- a/src/main/java/com/emr/vo/commomSearch/CommomTree.java +++ b/src/main/java/com/emr/vo/commomSearch/CommomTree.java @@ -3,8 +3,29 @@ package com.emr.vo.commomSearch; public class CommomTree { private Integer id; + private String title; + + private Integer parentId; + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + private Integer PageCount; + + public Integer getPageCount() { + return PageCount; + } + + public void setPageCount(Integer pageCount) { + PageCount = pageCount; + } + private String patientId; private String assortId; @@ -21,6 +42,16 @@ public class CommomTree { private String source; + private String PDFPATH; + + public String getPDFPATH() { + return PDFPATH; + } + + public void setPDFPATH(String PDFPATH) { + this.PDFPATH = PDFPATH; + } + public String getSource() { return source; } diff --git a/src/main/resources/mapper/Archive_DetailMapper.xml b/src/main/resources/mapper/Archive_DetailMapper.xml index 7e70d32..6390e5d 100644 --- a/src/main/resources/mapper/Archive_DetailMapper.xml +++ b/src/main/resources/mapper/Archive_DetailMapper.xml @@ -12,6 +12,8 @@ + + insert into archive_detail (id, PDF_PATH, MasterID, @@ -103,6 +105,7 @@ AssortID in (${assortIds}) ORDER BY zd_assort.assort_sort,UpLoadDateTime + + + \ No newline at end of file diff --git a/src/main/resources/mapper/commomSearch/ScanPathMapper.xml b/src/main/resources/mapper/commomSearch/ScanPathMapper.xml index f4b6f37..bcddac4 100644 --- a/src/main/resources/mapper/commomSearch/ScanPathMapper.xml +++ b/src/main/resources/mapper/commomSearch/ScanPathMapper.xml @@ -58,7 +58,7 @@ ON dbo.zd_assort.assort_id = dbo.t_scan_assort.assort_id - dbo.commomtable.patient_id in (${patientIds}) + dbo.commomtable.patient_id =#{patientIds} AND t_scan_assort.is_del != 1 AND dbo.t_scan_assort.scan_page in (${assortIds}) diff --git a/src/main/webapp/WEB-INF/views/recordManage/commomSearch/commomListqf.jsp b/src/main/webapp/WEB-INF/views/recordManage/commomSearch/commomListqf.jsp index d4da7db..138060c 100644 --- a/src/main/webapp/WEB-INF/views/recordManage/commomSearch/commomListqf.jsp +++ b/src/main/webapp/WEB-INF/views/recordManage/commomSearch/commomListqf.jsp @@ -215,13 +215,13 @@ + value="病案号,ID号,住院次数,姓名,性别,年龄_岁,年龄_月,入院日期,出院日期,出院科室,联系地址,主诊ICD码,主诊名称,主诊转归,住院天数,主治医生,其他诊断,病理诊断,损伤中毒,是否有手术,病案备注,盘号"> + value="commomtable.inpatient_no,commomtable.admiss_id,commomtable.admiss_times,commomtable.name,commomtable.sex,commomtable.age,commomtable.age_month,commomtable.admiss_date,commomtable.dis_date,commomtable.dis_dept,commomtable.home_addr,commomtable.main_diag_code,commomtable.main_diag_name,commomtable.main_dis_thing,commomtable.admiss_days,commomtable.attending,commomtable.other_diag_name,commomtable.pathology_name,commomtable.poisoning_name,commomtable.is_oper,memo,commomtable.file_source,commomtable.ph"> + value="inpatientNo,admissId,admissTimes,name,sex,age,ageMonth,admissDate,disDate,disDept,homeAddr,mainDiagCode,mainDiagName,mainDisThing,admissDays,attending,otherDiagName,pathologyName,poisoningName,isOper,memo,ph"> diff --git a/src/main/webapp/static/bootstrap-3.3.7/dist/css/skins/_all-skins.min.css b/src/main/webapp/static/bootstrap-3.3.7/dist/css/skins/_all-skins.min.css index dfd0f52..3cbda0a 100644 --- a/src/main/webapp/static/bootstrap-3.3.7/dist/css/skins/_all-skins.min.css +++ b/src/main/webapp/static/bootstrap-3.3.7/dist/css/skins/_all-skins.min.css @@ -1 +1 @@ -.skin-blue .main-header .navbar{background-color:#3c8dbc}.skin-blue .main-header .navbar .nav>li>a{color:#fff}.skin-blue .main-header .navbar .nav>li>a:hover,.skin-blue .main-header .navbar .nav>li>a:active,.skin-blue .main-header .navbar .nav>li>a:focus,.skin-blue .main-header .navbar .nav .open>a,.skin-blue .main-header .navbar .nav .open>a:hover,.skin-blue .main-header .navbar .nav .open>a:focus,.skin-blue .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue .main-header .logo{background-color:#367fa9;color:#fff;border-bottom:0 solid transparent}.skin-blue .main-header .logo:hover{background-color:#357ca5}.skin-blue .main-header li.user-header{background-color:#3c8dbc}.skin-blue .content-header{background:transparent}.skin-blue .wrapper,.skin-blue .main-sidebar,.skin-blue .left-side{background-color:#222d32}.skin-blue .user-panel>.info,.skin-blue .user-panel>.info>a{color:#fff}.skin-blue .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-blue .sidebar-menu>li>a{border-left:3px solid transparent}.skin-blue .sidebar-menu>li:hover>a,.skin-blue .sidebar-menu>li.active>a,.skin-blue .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-blue .sidebar-menu>li.active>a{border-left-color:#3c8dbc}.skin-blue .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-blue .sidebar a{color:#b8c7ce}.skin-blue .sidebar a:hover{text-decoration:none}.skin-blue .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-blue .sidebar-menu .treeview-menu>li.active>a,.skin-blue .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-blue .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-blue .sidebar-form input[type="text"],.skin-blue .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-blue .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue .sidebar-form input[type="text"]:focus,.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8}.skin-blue-light .main-header .navbar{background-color:#3c8dbc}.skin-blue-light .main-header .navbar .nav>li>a{color:#fff}.skin-blue-light .main-header .navbar .nav>li>a:hover,.skin-blue-light .main-header .navbar .nav>li>a:active,.skin-blue-light .main-header .navbar .nav>li>a:focus,.skin-blue-light .main-header .navbar .nav .open>a,.skin-blue-light .main-header .navbar .nav .open>a:hover,.skin-blue-light .main-header .navbar .nav .open>a:focus,.skin-blue-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue-light .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue-light .main-header .logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue-light .main-header .logo:hover{background-color:#3b8ab8}.skin-blue-light .main-header li.user-header{background-color:#3c8dbc}.skin-blue-light .content-header{background:transparent}.skin-blue-light .wrapper,.skin-blue-light .main-sidebar,.skin-blue-light .left-side{background-color:#f9fafc}.skin-blue-light .main-sidebar{border-right:1px solid #d2d6de}.skin-blue-light .user-panel>.info,.skin-blue-light .user-panel>.info>a{color:#444}.skin-blue-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-blue-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-blue-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-blue-light .sidebar-menu>li:hover>a,.skin-blue-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-blue-light .sidebar-menu>li.active{border-left-color:#3c8dbc}.skin-blue-light .sidebar-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-blue-light .sidebar a{color:#444}.skin-blue-light .sidebar a:hover{text-decoration:none}.skin-blue-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-blue-light .sidebar-menu .treeview-menu>li.active>a,.skin-blue-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-blue-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-blue-light .sidebar-form input[type="text"],.skin-blue-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-blue-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue-light .sidebar-form input[type="text"]:focus,.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-blue-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-blue-light .main-footer{border-top-color:#d2d6de}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8}.skin-black .main-header{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.skin-black .main-header .navbar-toggle{color:#333}.skin-black .main-header .navbar-brand{color:#333;border-right:1px solid #eee}.skin-black .main-header .navbar{background-color:#fff}.skin-black .main-header .navbar .nav>li>a{color:#333}.skin-black .main-header .navbar .nav>li>a:hover,.skin-black .main-header .navbar .nav>li>a:active,.skin-black .main-header .navbar .nav>li>a:focus,.skin-black .main-header .navbar .nav .open>a,.skin-black .main-header .navbar .nav .open>a:hover,.skin-black .main-header .navbar .nav .open>a:focus,.skin-black .main-header .navbar .nav>.active>a{background:#fff;color:#999}.skin-black .main-header .navbar .sidebar-toggle{color:#333}.skin-black .main-header .navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black .main-header .navbar>.sidebar-toggle{color:#333;border-right:1px solid #eee}.skin-black .main-header .navbar .navbar-nav>li>a{border-right:1px solid #eee}.skin-black .main-header .navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black .main-header .navbar .navbar-right>li>a{border-left:1px solid #eee;border-right-width:0}.skin-black .main-header .logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #eee}.skin-black .main-header .logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black .main-header .logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black .main-header .logo:hover{background-color:#1f1f1f}}.skin-black .main-header li.user-header{background-color:#222}.skin-black .content-header{background:transparent;box-shadow:none}.skin-black .wrapper,.skin-black .main-sidebar,.skin-black .left-side{background-color:#222d32}.skin-black .user-panel>.info,.skin-black .user-panel>.info>a{color:#fff}.skin-black .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-black .sidebar-menu>li>a{border-left:3px solid transparent}.skin-black .sidebar-menu>li:hover>a,.skin-black .sidebar-menu>li.active>a,.skin-black .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-black .sidebar-menu>li.active>a{border-left-color:#fff}.skin-black .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-black .sidebar a{color:#b8c7ce}.skin-black .sidebar a:hover{text-decoration:none}.skin-black .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-black .sidebar-menu .treeview-menu>li.active>a,.skin-black .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-black .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-black .sidebar-form input[type="text"],.skin-black .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-black .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black .sidebar-form input[type="text"]:focus,.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-black .pace .pace-progress{background:#222}.skin-black .pace .pace-activity{border-top-color:#222;border-left-color:#222}.skin-black-light .main-header{border-bottom:1px solid #d2d6de}.skin-black-light .main-header .navbar-toggle{color:#333}.skin-black-light .main-header .navbar-brand{color:#333;border-right:1px solid #d2d6de}.skin-black-light .main-header .navbar{background-color:#fff}.skin-black-light .main-header .navbar .nav>li>a{color:#333}.skin-black-light .main-header .navbar .nav>li>a:hover,.skin-black-light .main-header .navbar .nav>li>a:active,.skin-black-light .main-header .navbar .nav>li>a:focus,.skin-black-light .main-header .navbar .nav .open>a,.skin-black-light .main-header .navbar .nav .open>a:hover,.skin-black-light .main-header .navbar .nav .open>a:focus,.skin-black-light .main-header .navbar .nav>.active>a{background:#fff;color:#999}.skin-black-light .main-header .navbar .sidebar-toggle{color:#333}.skin-black-light .main-header .navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black-light .main-header .navbar>.sidebar-toggle{color:#333;border-right:1px solid #d2d6de}.skin-black-light .main-header .navbar .navbar-nav>li>a{border-right:1px solid #d2d6de}.skin-black-light .main-header .navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black-light .main-header .navbar .navbar-right>li>a{border-left:1px solid #d2d6de;border-right-width:0}.skin-black-light .main-header .logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #d2d6de}.skin-black-light .main-header .logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black-light .main-header .logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black-light .main-header .logo:hover{background-color:#1f1f1f}}.skin-black-light .main-header li.user-header{background-color:#222}.skin-black-light .content-header{background:transparent;box-shadow:none}.skin-black-light .wrapper,.skin-black-light .main-sidebar,.skin-black-light .left-side{background-color:#f9fafc}.skin-black-light .main-sidebar{border-right:1px solid #d2d6de}.skin-black-light .user-panel>.info,.skin-black-light .user-panel>.info>a{color:#444}.skin-black-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-black-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-black-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-black-light .sidebar-menu>li:hover>a,.skin-black-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-black-light .sidebar-menu>li.active{border-left-color:#fff}.skin-black-light .sidebar-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-black-light .sidebar a{color:#444}.skin-black-light .sidebar a:hover{text-decoration:none}.skin-black-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-black-light .sidebar-menu .treeview-menu>li.active>a,.skin-black-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-black-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-black-light .sidebar-form input[type="text"],.skin-black-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-black-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black-light .sidebar-form input[type="text"]:focus,.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-black-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-green .main-header .navbar{background-color:#00a65a}.skin-green .main-header .navbar .nav>li>a{color:#fff}.skin-green .main-header .navbar .nav>li>a:hover,.skin-green .main-header .navbar .nav>li>a:active,.skin-green .main-header .navbar .nav>li>a:focus,.skin-green .main-header .navbar .nav .open>a,.skin-green .main-header .navbar .nav .open>a:hover,.skin-green .main-header .navbar .nav .open>a:focus,.skin-green .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green .main-header .logo{background-color:#008d4c;color:#fff;border-bottom:0 solid transparent}.skin-green .main-header .logo:hover{background-color:#008749}.skin-green .main-header li.user-header{background-color:#00a65a}.skin-green .content-header{background:transparent}.skin-green .wrapper,.skin-green .main-sidebar,.skin-green .left-side{background-color:#222d32}.skin-green .user-panel>.info,.skin-green .user-panel>.info>a{color:#fff}.skin-green .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-green .sidebar-menu>li>a{border-left:3px solid transparent}.skin-green .sidebar-menu>li:hover>a,.skin-green .sidebar-menu>li.active>a,.skin-green .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-green .sidebar-menu>li.active>a{border-left-color:#00a65a}.skin-green .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-green .sidebar a{color:#b8c7ce}.skin-green .sidebar a:hover{text-decoration:none}.skin-green .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-green .sidebar-menu .treeview-menu>li.active>a,.skin-green .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-green .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-green .sidebar-form input[type="text"],.skin-green .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-green .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green .sidebar-form input[type="text"]:focus,.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-green-light .main-header .navbar{background-color:#00a65a}.skin-green-light .main-header .navbar .nav>li>a{color:#fff}.skin-green-light .main-header .navbar .nav>li>a:hover,.skin-green-light .main-header .navbar .nav>li>a:active,.skin-green-light .main-header .navbar .nav>li>a:focus,.skin-green-light .main-header .navbar .nav .open>a,.skin-green-light .main-header .navbar .nav .open>a:hover,.skin-green-light .main-header .navbar .nav .open>a:focus,.skin-green-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green-light .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green-light .main-header .logo{background-color:#00a65a;color:#fff;border-bottom:0 solid transparent}.skin-green-light .main-header .logo:hover{background-color:#00a157}.skin-green-light .main-header li.user-header{background-color:#00a65a}.skin-green-light .content-header{background:transparent}.skin-green-light .wrapper,.skin-green-light .main-sidebar,.skin-green-light .left-side{background-color:#f9fafc}.skin-green-light .main-sidebar{border-right:1px solid #d2d6de}.skin-green-light .user-panel>.info,.skin-green-light .user-panel>.info>a{color:#444}.skin-green-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-green-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-green-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-green-light .sidebar-menu>li:hover>a,.skin-green-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-green-light .sidebar-menu>li.active{border-left-color:#00a65a}.skin-green-light .sidebar-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-green-light .sidebar a{color:#444}.skin-green-light .sidebar a:hover{text-decoration:none}.skin-green-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-green-light .sidebar-menu .treeview-menu>li.active>a,.skin-green-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-green-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-green-light .sidebar-form input[type="text"],.skin-green-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-green-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green-light .sidebar-form input[type="text"]:focus,.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-green-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-red .main-header .navbar{background-color:#dd4b39}.skin-red .main-header .navbar .nav>li>a{color:#fff}.skin-red .main-header .navbar .nav>li>a:hover,.skin-red .main-header .navbar .nav>li>a:active,.skin-red .main-header .navbar .nav>li>a:focus,.skin-red .main-header .navbar .nav .open>a,.skin-red .main-header .navbar .nav .open>a:hover,.skin-red .main-header .navbar .nav .open>a:focus,.skin-red .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red .main-header .logo{background-color:#d73925;color:#fff;border-bottom:0 solid transparent}.skin-red .main-header .logo:hover{background-color:#d33724}.skin-red .main-header li.user-header{background-color:#dd4b39}.skin-red .content-header{background:transparent}.skin-red .wrapper,.skin-red .main-sidebar,.skin-red .left-side{background-color:#222d32}.skin-red .user-panel>.info,.skin-red .user-panel>.info>a{color:#fff}.skin-red .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-red .sidebar-menu>li>a{border-left:3px solid transparent}.skin-red .sidebar-menu>li:hover>a,.skin-red .sidebar-menu>li.active>a,.skin-red .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-red .sidebar-menu>li.active>a{border-left-color:#dd4b39}.skin-red .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-red .sidebar a{color:#b8c7ce}.skin-red .sidebar a:hover{text-decoration:none}.skin-red .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-red .sidebar-menu .treeview-menu>li.active>a,.skin-red .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-red .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-red .sidebar-form input[type="text"],.skin-red .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-red .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red .sidebar-form input[type="text"]:focus,.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-red-light .main-header .navbar{background-color:#dd4b39}.skin-red-light .main-header .navbar .nav>li>a{color:#fff}.skin-red-light .main-header .navbar .nav>li>a:hover,.skin-red-light .main-header .navbar .nav>li>a:active,.skin-red-light .main-header .navbar .nav>li>a:focus,.skin-red-light .main-header .navbar .nav .open>a,.skin-red-light .main-header .navbar .nav .open>a:hover,.skin-red-light .main-header .navbar .nav .open>a:focus,.skin-red-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red-light .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red-light .main-header .logo{background-color:#dd4b39;color:#fff;border-bottom:0 solid transparent}.skin-red-light .main-header .logo:hover{background-color:#dc4735}.skin-red-light .main-header li.user-header{background-color:#dd4b39}.skin-red-light .content-header{background:transparent}.skin-red-light .wrapper,.skin-red-light .main-sidebar,.skin-red-light .left-side{background-color:#f9fafc}.skin-red-light .main-sidebar{border-right:1px solid #d2d6de}.skin-red-light .user-panel>.info,.skin-red-light .user-panel>.info>a{color:#444}.skin-red-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-red-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-red-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-red-light .sidebar-menu>li:hover>a,.skin-red-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-red-light .sidebar-menu>li.active{border-left-color:#dd4b39}.skin-red-light .sidebar-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-red-light .sidebar a{color:#444}.skin-red-light .sidebar a:hover{text-decoration:none}.skin-red-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-red-light .sidebar-menu .treeview-menu>li.active>a,.skin-red-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-red-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-red-light .sidebar-form input[type="text"],.skin-red-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-red-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red-light .sidebar-form input[type="text"]:focus,.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-red-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-yellow .main-header .navbar{background-color:#f39c12}.skin-yellow .main-header .navbar .nav>li>a{color:#fff}.skin-yellow .main-header .navbar .nav>li>a:hover,.skin-yellow .main-header .navbar .nav>li>a:active,.skin-yellow .main-header .navbar .nav>li>a:focus,.skin-yellow .main-header .navbar .nav .open>a,.skin-yellow .main-header .navbar .nav .open>a:hover,.skin-yellow .main-header .navbar .nav .open>a:focus,.skin-yellow .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow .main-header .logo{background-color:#e08e0b;color:#fff;border-bottom:0 solid transparent}.skin-yellow .main-header .logo:hover{background-color:#db8b0b}.skin-yellow .main-header li.user-header{background-color:#f39c12}.skin-yellow .content-header{background:transparent}.skin-yellow .wrapper,.skin-yellow .main-sidebar,.skin-yellow .left-side{background-color:#222d32}.skin-yellow .user-panel>.info,.skin-yellow .user-panel>.info>a{color:#fff}.skin-yellow .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-yellow .sidebar-menu>li>a{border-left:3px solid transparent}.skin-yellow .sidebar-menu>li:hover>a,.skin-yellow .sidebar-menu>li.active>a,.skin-yellow .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-yellow .sidebar-menu>li.active>a{border-left-color:#f39c12}.skin-yellow .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-yellow .sidebar a{color:#b8c7ce}.skin-yellow .sidebar a:hover{text-decoration:none}.skin-yellow .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-yellow .sidebar-menu .treeview-menu>li.active>a,.skin-yellow .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-yellow .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-yellow .sidebar-form input[type="text"],.skin-yellow .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-yellow .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow .sidebar-form input[type="text"]:focus,.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-yellow-light .main-header .navbar{background-color:#f39c12}.skin-yellow-light .main-header .navbar .nav>li>a{color:#fff}.skin-yellow-light .main-header .navbar .nav>li>a:hover,.skin-yellow-light .main-header .navbar .nav>li>a:active,.skin-yellow-light .main-header .navbar .nav>li>a:focus,.skin-yellow-light .main-header .navbar .nav .open>a,.skin-yellow-light .main-header .navbar .nav .open>a:hover,.skin-yellow-light .main-header .navbar .nav .open>a:focus,.skin-yellow-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow-light .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow-light .main-header .logo{background-color:#f39c12;color:#fff;border-bottom:0 solid transparent}.skin-yellow-light .main-header .logo:hover{background-color:#f39a0d}.skin-yellow-light .main-header li.user-header{background-color:#f39c12}.skin-yellow-light .content-header{background:transparent}.skin-yellow-light .wrapper,.skin-yellow-light .main-sidebar,.skin-yellow-light .left-side{background-color:#f9fafc}.skin-yellow-light .main-sidebar{border-right:1px solid #d2d6de}.skin-yellow-light .user-panel>.info,.skin-yellow-light .user-panel>.info>a{color:#444}.skin-yellow-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-yellow-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-yellow-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-yellow-light .sidebar-menu>li:hover>a,.skin-yellow-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-yellow-light .sidebar-menu>li.active{border-left-color:#f39c12}.skin-yellow-light .sidebar-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-yellow-light .sidebar a{color:#444}.skin-yellow-light .sidebar a:hover{text-decoration:none}.skin-yellow-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-yellow-light .sidebar-menu .treeview-menu>li.active>a,.skin-yellow-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-yellow-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-yellow-light .sidebar-form input[type="text"],.skin-yellow-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-yellow-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow-light .sidebar-form input[type="text"]:focus,.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-yellow-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-purple .main-header .navbar{background-color:#605ca8}.skin-purple .main-header .navbar .nav>li>a{color:#fff}.skin-purple .main-header .navbar .nav>li>a:hover,.skin-purple .main-header .navbar .nav>li>a:active,.skin-purple .main-header .navbar .nav>li>a:focus,.skin-purple .main-header .navbar .nav .open>a,.skin-purple .main-header .navbar .nav .open>a:hover,.skin-purple .main-header .navbar .nav .open>a:focus,.skin-purple .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple .main-header .logo{background-color:#555299;color:#fff;border-bottom:0 solid transparent}.skin-purple .main-header .logo:hover{background-color:#545096}.skin-purple .main-header li.user-header{background-color:#605ca8}.skin-purple .content-header{background:transparent}.skin-purple .wrapper,.skin-purple .main-sidebar,.skin-purple .left-side{background-color:#222d32}.skin-purple .user-panel>.info,.skin-purple .user-panel>.info>a{color:#fff}.skin-purple .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-purple .sidebar-menu>li>a{border-left:3px solid transparent}.skin-purple .sidebar-menu>li:hover>a,.skin-purple .sidebar-menu>li.active>a,.skin-purple .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-purple .sidebar-menu>li.active>a{border-left-color:#605ca8}.skin-purple .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-purple .sidebar a{color:#b8c7ce}.skin-purple .sidebar a:hover{text-decoration:none}.skin-purple .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-purple .sidebar-menu .treeview-menu>li.active>a,.skin-purple .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-purple .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-purple .sidebar-form input[type="text"],.skin-purple .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-purple .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple .sidebar-form input[type="text"]:focus,.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-purple-light .main-header .navbar{background-color:#605ca8}.skin-purple-light .main-header .navbar .nav>li>a{color:#fff}.skin-purple-light .main-header .navbar .nav>li>a:hover,.skin-purple-light .main-header .navbar .nav>li>a:active,.skin-purple-light .main-header .navbar .nav>li>a:focus,.skin-purple-light .main-header .navbar .nav .open>a,.skin-purple-light .main-header .navbar .nav .open>a:hover,.skin-purple-light .main-header .navbar .nav .open>a:focus,.skin-purple-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple-light .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple-light .main-header .logo{background-color:#605ca8;color:#fff;border-bottom:0 solid transparent}.skin-purple-light .main-header .logo:hover{background-color:#5d59a6}.skin-purple-light .main-header li.user-header{background-color:#605ca8}.skin-purple-light .content-header{background:transparent}.skin-purple-light .wrapper,.skin-purple-light .main-sidebar,.skin-purple-light .left-side{background-color:#f9fafc}.skin-purple-light .main-sidebar{border-right:1px solid #d2d6de}.skin-purple-light .user-panel>.info,.skin-purple-light .user-panel>.info>a{color:#444}.skin-purple-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-purple-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-purple-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-purple-light .sidebar-menu>li:hover>a,.skin-purple-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-purple-light .sidebar-menu>li.active{border-left-color:#605ca8}.skin-purple-light .sidebar-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-purple-light .sidebar a{color:#444}.skin-purple-light .sidebar a:hover{text-decoration:none}.skin-purple-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-purple-light .sidebar-menu .treeview-menu>li.active>a,.skin-purple-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-purple-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-purple-light .sidebar-form input[type="text"],.skin-purple-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-purple-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple-light .sidebar-form input[type="text"]:focus,.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-purple-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}} \ No newline at end of file +.skin-blue .main-header .navbar{background-color:#3c8dbc}.skin-blue .main-header .navbar .nav>li>a{color:#fff}.skin-blue .main-header .navbar .nav>li>a:hover,.skin-blue .main-header .navbar .nav>li>a:active,.skin-blue .main-header .navbar .nav>li>a:focus,.skin-blue .main-header .navbar .nav .open>a,.skin-blue .main-header .navbar .nav .open>a:hover,.skin-blue .main-header .navbar .nav .open>a:focus,.skin-blue .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue .main-header .logo{background-color:#367fa9;color:#fff;border-bottom:0 solid transparent}.skin-blue .main-header .logo:hover{background-color:#357ca5}.skin-blue .main-header li.user-header{background-color:#3c8dbc}.skin-blue .content-header{background:transparent}.skin-blue .wrapper,.skin-blue .main-sidebar,.skin-blue .left-side{background-color:#222d32}.skin-blue .user-panel>.info,.skin-blue .user-panel>.info>a{color:#fff}.skin-blue .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-blue .sidebar-menu>li>a{border-left:3px solid transparent}.skin-blue .sidebar-menu>li:hover>a,.skin-blue .sidebar-menu>li.active>a,.skin-blue .sidebar-menu>li.menu-open>a{color:#f4f4f4;background:#2a58ad}.skin-blue .sidebar-menu>li.active>a{border-left-color:#3c8dbc}.skin-blue .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#337ab7}.skin-blue .sidebar a{color:#b8c7ce}.skin-blue .sidebar a:hover{text-decoration:none}.skin-blue .sidebar-menu .treeview-menu>li>a{color:#f6f6f6}.skin-blue .sidebar-menu .treeview-menu>li.active>a,.skin-blue .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-blue .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-blue .sidebar-form input[type="text"],.skin-blue .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-blue .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue .sidebar-form input[type="text"]:focus,.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8}.skin-blue-light .main-header .navbar{background-color:#3c8dbc}.skin-blue-light .main-header .navbar .nav>li>a{color:#fff}.skin-blue-light .main-header .navbar .nav>li>a:hover,.skin-blue-light .main-header .navbar .nav>li>a:active,.skin-blue-light .main-header .navbar .nav>li>a:focus,.skin-blue-light .main-header .navbar .nav .open>a,.skin-blue-light .main-header .navbar .nav .open>a:hover,.skin-blue-light .main-header .navbar .nav .open>a:focus,.skin-blue-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue-light .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue-light .main-header .logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue-light .main-header .logo:hover{background-color:#3b8ab8}.skin-blue-light .main-header li.user-header{background-color:#3c8dbc}.skin-blue-light .content-header{background:transparent}.skin-blue-light .wrapper,.skin-blue-light .main-sidebar,.skin-blue-light .left-side{background-color:#f9fafc}.skin-blue-light .main-sidebar{border-right:1px solid #d2d6de}.skin-blue-light .user-panel>.info,.skin-blue-light .user-panel>.info>a{color:#444}.skin-blue-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-blue-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-blue-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-blue-light .sidebar-menu>li:hover>a,.skin-blue-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-blue-light .sidebar-menu>li.active{border-left-color:#3c8dbc}.skin-blue-light .sidebar-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-blue-light .sidebar a{color:#444}.skin-blue-light .sidebar a:hover{text-decoration:none}.skin-blue-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-blue-light .sidebar-menu .treeview-menu>li.active>a,.skin-blue-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-blue-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-blue-light .sidebar-form input[type="text"],.skin-blue-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-blue-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue-light .sidebar-form input[type="text"]:focus,.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-blue-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-blue-light .main-footer{border-top-color:#d2d6de}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8}.skin-black .main-header{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.skin-black .main-header .navbar-toggle{color:#333}.skin-black .main-header .navbar-brand{color:#333;border-right:1px solid #eee}.skin-black .main-header .navbar{background-color:#fff}.skin-black .main-header .navbar .nav>li>a{color:#333}.skin-black .main-header .navbar .nav>li>a:hover,.skin-black .main-header .navbar .nav>li>a:active,.skin-black .main-header .navbar .nav>li>a:focus,.skin-black .main-header .navbar .nav .open>a,.skin-black .main-header .navbar .nav .open>a:hover,.skin-black .main-header .navbar .nav .open>a:focus,.skin-black .main-header .navbar .nav>.active>a{background:#fff;color:#999}.skin-black .main-header .navbar .sidebar-toggle{color:#333}.skin-black .main-header .navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black .main-header .navbar>.sidebar-toggle{color:#333;border-right:1px solid #eee}.skin-black .main-header .navbar .navbar-nav>li>a{border-right:1px solid #eee}.skin-black .main-header .navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black .main-header .navbar .navbar-right>li>a{border-left:1px solid #eee;border-right-width:0}.skin-black .main-header .logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #eee}.skin-black .main-header .logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black .main-header .logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black .main-header .logo:hover{background-color:#1f1f1f}}.skin-black .main-header li.user-header{background-color:#222}.skin-black .content-header{background:transparent;box-shadow:none}.skin-black .wrapper,.skin-black .main-sidebar,.skin-black .left-side{background-color:#222d32}.skin-black .user-panel>.info,.skin-black .user-panel>.info>a{color:#fff}.skin-black .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-black .sidebar-menu>li>a{border-left:3px solid transparent}.skin-black .sidebar-menu>li:hover>a,.skin-black .sidebar-menu>li.active>a,.skin-black .sidebar-menu>li.menu-open>a{color:#f4f4f4;background:#2a58ad}.skin-black .sidebar-menu>li.active>a{border-left-color:#fff}.skin-black .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-black .sidebar a{color:#b8c7ce}.skin-black .sidebar a:hover{text-decoration:none}.skin-black .sidebar-menu .treeview-menu>li>a{color:#f6f6f6}.skin-black .sidebar-menu .treeview-menu>li.active>a,.skin-black .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-black .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-black .sidebar-form input[type="text"],.skin-black .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-black .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black .sidebar-form input[type="text"]:focus,.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-black .pace .pace-progress{background:#222}.skin-black .pace .pace-activity{border-top-color:#222;border-left-color:#222}.skin-black-light .main-header{border-bottom:1px solid #d2d6de}.skin-black-light .main-header .navbar-toggle{color:#333}.skin-black-light .main-header .navbar-brand{color:#333;border-right:1px solid #d2d6de}.skin-black-light .main-header .navbar{background-color:#fff}.skin-black-light .main-header .navbar .nav>li>a{color:#333}.skin-black-light .main-header .navbar .nav>li>a:hover,.skin-black-light .main-header .navbar .nav>li>a:active,.skin-black-light .main-header .navbar .nav>li>a:focus,.skin-black-light .main-header .navbar .nav .open>a,.skin-black-light .main-header .navbar .nav .open>a:hover,.skin-black-light .main-header .navbar .nav .open>a:focus,.skin-black-light .main-header .navbar .nav>.active>a{background:#fff;color:#999}.skin-black-light .main-header .navbar .sidebar-toggle{color:#333}.skin-black-light .main-header .navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black-light .main-header .navbar>.sidebar-toggle{color:#333;border-right:1px solid #d2d6de}.skin-black-light .main-header .navbar .navbar-nav>li>a{border-right:1px solid #d2d6de}.skin-black-light .main-header .navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black-light .main-header .navbar .navbar-right>li>a{border-left:1px solid #d2d6de;border-right-width:0}.skin-black-light .main-header .logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #d2d6de}.skin-black-light .main-header .logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black-light .main-header .logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black-light .main-header .logo:hover{background-color:#1f1f1f}}.skin-black-light .main-header li.user-header{background-color:#222}.skin-black-light .content-header{background:transparent;box-shadow:none}.skin-black-light .wrapper,.skin-black-light .main-sidebar,.skin-black-light .left-side{background-color:#f9fafc}.skin-black-light .main-sidebar{border-right:1px solid #d2d6de}.skin-black-light .user-panel>.info,.skin-black-light .user-panel>.info>a{color:#444}.skin-black-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-black-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-black-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-black-light .sidebar-menu>li:hover>a,.skin-black-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-black-light .sidebar-menu>li.active{border-left-color:#fff}.skin-black-light .sidebar-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-black-light .sidebar a{color:#444}.skin-black-light .sidebar a:hover{text-decoration:none}.skin-black-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-black-light .sidebar-menu .treeview-menu>li.active>a,.skin-black-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-black-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-black-light .sidebar-form input[type="text"],.skin-black-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-black-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black-light .sidebar-form input[type="text"]:focus,.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-black-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-green .main-header .navbar{background-color:#00a65a}.skin-green .main-header .navbar .nav>li>a{color:#fff}.skin-green .main-header .navbar .nav>li>a:hover,.skin-green .main-header .navbar .nav>li>a:active,.skin-green .main-header .navbar .nav>li>a:focus,.skin-green .main-header .navbar .nav .open>a,.skin-green .main-header .navbar .nav .open>a:hover,.skin-green .main-header .navbar .nav .open>a:focus,.skin-green .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green .main-header .logo{background-color:#008d4c;color:#fff;border-bottom:0 solid transparent}.skin-green .main-header .logo:hover{background-color:#008749}.skin-green .main-header li.user-header{background-color:#00a65a}.skin-green .content-header{background:transparent}.skin-green .wrapper,.skin-green .main-sidebar,.skin-green .left-side{background-color:#222d32}.skin-green .user-panel>.info,.skin-green .user-panel>.info>a{color:#fff}.skin-green .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-green .sidebar-menu>li>a{border-left:3px solid transparent}.skin-green .sidebar-menu>li:hover>a,.skin-green .sidebar-menu>li.active>a,.skin-green .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-green .sidebar-menu>li.active>a{border-left-color:#00a65a}.skin-green .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-green .sidebar a{color:#b8c7ce}.skin-green .sidebar a:hover{text-decoration:none}.skin-green .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-green .sidebar-menu .treeview-menu>li.active>a,.skin-green .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-green .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-green .sidebar-form input[type="text"],.skin-green .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-green .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green .sidebar-form input[type="text"]:focus,.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-green-light .main-header .navbar{background-color:#00a65a}.skin-green-light .main-header .navbar .nav>li>a{color:#fff}.skin-green-light .main-header .navbar .nav>li>a:hover,.skin-green-light .main-header .navbar .nav>li>a:active,.skin-green-light .main-header .navbar .nav>li>a:focus,.skin-green-light .main-header .navbar .nav .open>a,.skin-green-light .main-header .navbar .nav .open>a:hover,.skin-green-light .main-header .navbar .nav .open>a:focus,.skin-green-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green-light .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green-light .main-header .logo{background-color:#00a65a;color:#fff;border-bottom:0 solid transparent}.skin-green-light .main-header .logo:hover{background-color:#00a157}.skin-green-light .main-header li.user-header{background-color:#00a65a}.skin-green-light .content-header{background:transparent}.skin-green-light .wrapper,.skin-green-light .main-sidebar,.skin-green-light .left-side{background-color:#f9fafc}.skin-green-light .main-sidebar{border-right:1px solid #d2d6de}.skin-green-light .user-panel>.info,.skin-green-light .user-panel>.info>a{color:#444}.skin-green-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-green-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-green-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-green-light .sidebar-menu>li:hover>a,.skin-green-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-green-light .sidebar-menu>li.active{border-left-color:#00a65a}.skin-green-light .sidebar-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-green-light .sidebar a{color:#444}.skin-green-light .sidebar a:hover{text-decoration:none}.skin-green-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-green-light .sidebar-menu .treeview-menu>li.active>a,.skin-green-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-green-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-green-light .sidebar-form input[type="text"],.skin-green-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-green-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green-light .sidebar-form input[type="text"]:focus,.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-green-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-red .main-header .navbar{background-color:#dd4b39}.skin-red .main-header .navbar .nav>li>a{color:#fff}.skin-red .main-header .navbar .nav>li>a:hover,.skin-red .main-header .navbar .nav>li>a:active,.skin-red .main-header .navbar .nav>li>a:focus,.skin-red .main-header .navbar .nav .open>a,.skin-red .main-header .navbar .nav .open>a:hover,.skin-red .main-header .navbar .nav .open>a:focus,.skin-red .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red .main-header .logo{background-color:#d73925;color:#fff;border-bottom:0 solid transparent}.skin-red .main-header .logo:hover{background-color:#d33724}.skin-red .main-header li.user-header{background-color:#dd4b39}.skin-red .content-header{background:transparent}.skin-red .wrapper,.skin-red .main-sidebar,.skin-red .left-side{background-color:#222d32}.skin-red .user-panel>.info,.skin-red .user-panel>.info>a{color:#fff}.skin-red .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-red .sidebar-menu>li>a{border-left:3px solid transparent}.skin-red .sidebar-menu>li:hover>a,.skin-red .sidebar-menu>li.active>a,.skin-red .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-red .sidebar-menu>li.active>a{border-left-color:#dd4b39}.skin-red .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-red .sidebar a{color:#b8c7ce}.skin-red .sidebar a:hover{text-decoration:none}.skin-red .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-red .sidebar-menu .treeview-menu>li.active>a,.skin-red .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-red .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-red .sidebar-form input[type="text"],.skin-red .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-red .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red .sidebar-form input[type="text"]:focus,.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-red-light .main-header .navbar{background-color:#dd4b39}.skin-red-light .main-header .navbar .nav>li>a{color:#fff}.skin-red-light .main-header .navbar .nav>li>a:hover,.skin-red-light .main-header .navbar .nav>li>a:active,.skin-red-light .main-header .navbar .nav>li>a:focus,.skin-red-light .main-header .navbar .nav .open>a,.skin-red-light .main-header .navbar .nav .open>a:hover,.skin-red-light .main-header .navbar .nav .open>a:focus,.skin-red-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red-light .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red-light .main-header .logo{background-color:#dd4b39;color:#fff;border-bottom:0 solid transparent}.skin-red-light .main-header .logo:hover{background-color:#dc4735}.skin-red-light .main-header li.user-header{background-color:#dd4b39}.skin-red-light .content-header{background:transparent}.skin-red-light .wrapper,.skin-red-light .main-sidebar,.skin-red-light .left-side{background-color:#f9fafc}.skin-red-light .main-sidebar{border-right:1px solid #d2d6de}.skin-red-light .user-panel>.info,.skin-red-light .user-panel>.info>a{color:#444}.skin-red-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-red-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-red-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-red-light .sidebar-menu>li:hover>a,.skin-red-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-red-light .sidebar-menu>li.active{border-left-color:#dd4b39}.skin-red-light .sidebar-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-red-light .sidebar a{color:#444}.skin-red-light .sidebar a:hover{text-decoration:none}.skin-red-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-red-light .sidebar-menu .treeview-menu>li.active>a,.skin-red-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-red-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-red-light .sidebar-form input[type="text"],.skin-red-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-red-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red-light .sidebar-form input[type="text"]:focus,.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-red-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-yellow .main-header .navbar{background-color:#f39c12}.skin-yellow .main-header .navbar .nav>li>a{color:#fff}.skin-yellow .main-header .navbar .nav>li>a:hover,.skin-yellow .main-header .navbar .nav>li>a:active,.skin-yellow .main-header .navbar .nav>li>a:focus,.skin-yellow .main-header .navbar .nav .open>a,.skin-yellow .main-header .navbar .nav .open>a:hover,.skin-yellow .main-header .navbar .nav .open>a:focus,.skin-yellow .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow .main-header .logo{background-color:#e08e0b;color:#fff;border-bottom:0 solid transparent}.skin-yellow .main-header .logo:hover{background-color:#db8b0b}.skin-yellow .main-header li.user-header{background-color:#f39c12}.skin-yellow .content-header{background:transparent}.skin-yellow .wrapper,.skin-yellow .main-sidebar,.skin-yellow .left-side{background-color:#222d32}.skin-yellow .user-panel>.info,.skin-yellow .user-panel>.info>a{color:#fff}.skin-yellow .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-yellow .sidebar-menu>li>a{border-left:3px solid transparent}.skin-yellow .sidebar-menu>li:hover>a,.skin-yellow .sidebar-menu>li.active>a,.skin-yellow .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-yellow .sidebar-menu>li.active>a{border-left-color:#f39c12}.skin-yellow .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-yellow .sidebar a{color:#b8c7ce}.skin-yellow .sidebar a:hover{text-decoration:none}.skin-yellow .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-yellow .sidebar-menu .treeview-menu>li.active>a,.skin-yellow .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-yellow .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-yellow .sidebar-form input[type="text"],.skin-yellow .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-yellow .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow .sidebar-form input[type="text"]:focus,.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-yellow-light .main-header .navbar{background-color:#f39c12}.skin-yellow-light .main-header .navbar .nav>li>a{color:#fff}.skin-yellow-light .main-header .navbar .nav>li>a:hover,.skin-yellow-light .main-header .navbar .nav>li>a:active,.skin-yellow-light .main-header .navbar .nav>li>a:focus,.skin-yellow-light .main-header .navbar .nav .open>a,.skin-yellow-light .main-header .navbar .nav .open>a:hover,.skin-yellow-light .main-header .navbar .nav .open>a:focus,.skin-yellow-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow-light .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow-light .main-header .logo{background-color:#f39c12;color:#fff;border-bottom:0 solid transparent}.skin-yellow-light .main-header .logo:hover{background-color:#f39a0d}.skin-yellow-light .main-header li.user-header{background-color:#f39c12}.skin-yellow-light .content-header{background:transparent}.skin-yellow-light .wrapper,.skin-yellow-light .main-sidebar,.skin-yellow-light .left-side{background-color:#f9fafc}.skin-yellow-light .main-sidebar{border-right:1px solid #d2d6de}.skin-yellow-light .user-panel>.info,.skin-yellow-light .user-panel>.info>a{color:#444}.skin-yellow-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-yellow-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-yellow-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-yellow-light .sidebar-menu>li:hover>a,.skin-yellow-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-yellow-light .sidebar-menu>li.active{border-left-color:#f39c12}.skin-yellow-light .sidebar-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-yellow-light .sidebar a{color:#444}.skin-yellow-light .sidebar a:hover{text-decoration:none}.skin-yellow-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-yellow-light .sidebar-menu .treeview-menu>li.active>a,.skin-yellow-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-yellow-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-yellow-light .sidebar-form input[type="text"],.skin-yellow-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-yellow-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow-light .sidebar-form input[type="text"]:focus,.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-yellow-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-purple .main-header .navbar{background-color:#605ca8}.skin-purple .main-header .navbar .nav>li>a{color:#fff}.skin-purple .main-header .navbar .nav>li>a:hover,.skin-purple .main-header .navbar .nav>li>a:active,.skin-purple .main-header .navbar .nav>li>a:focus,.skin-purple .main-header .navbar .nav .open>a,.skin-purple .main-header .navbar .nav .open>a:hover,.skin-purple .main-header .navbar .nav .open>a:focus,.skin-purple .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple .main-header .logo{background-color:#555299;color:#fff;border-bottom:0 solid transparent}.skin-purple .main-header .logo:hover{background-color:#545096}.skin-purple .main-header li.user-header{background-color:#605ca8}.skin-purple .content-header{background:transparent}.skin-purple .wrapper,.skin-purple .main-sidebar,.skin-purple .left-side{background-color:#222d32}.skin-purple .user-panel>.info,.skin-purple .user-panel>.info>a{color:#fff}.skin-purple .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-purple .sidebar-menu>li>a{border-left:3px solid transparent}.skin-purple .sidebar-menu>li:hover>a,.skin-purple .sidebar-menu>li.active>a,.skin-purple .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-purple .sidebar-menu>li.active>a{border-left-color:#605ca8}.skin-purple .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-purple .sidebar a{color:#b8c7ce}.skin-purple .sidebar a:hover{text-decoration:none}.skin-purple .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-purple .sidebar-menu .treeview-menu>li.active>a,.skin-purple .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-purple .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-purple .sidebar-form input[type="text"],.skin-purple .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-purple .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple .sidebar-form input[type="text"]:focus,.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-purple-light .main-header .navbar{background-color:#605ca8}.skin-purple-light .main-header .navbar .nav>li>a{color:#fff}.skin-purple-light .main-header .navbar .nav>li>a:hover,.skin-purple-light .main-header .navbar .nav>li>a:active,.skin-purple-light .main-header .navbar .nav>li>a:focus,.skin-purple-light .main-header .navbar .nav .open>a,.skin-purple-light .main-header .navbar .nav .open>a:hover,.skin-purple-light .main-header .navbar .nav .open>a:focus,.skin-purple-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple-light .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple-light .main-header .logo{background-color:#605ca8;color:#fff;border-bottom:0 solid transparent}.skin-purple-light .main-header .logo:hover{background-color:#5d59a6}.skin-purple-light .main-header li.user-header{background-color:#605ca8}.skin-purple-light .content-header{background:transparent}.skin-purple-light .wrapper,.skin-purple-light .main-sidebar,.skin-purple-light .left-side{background-color:#f9fafc}.skin-purple-light .main-sidebar{border-right:1px solid #d2d6de}.skin-purple-light .user-panel>.info,.skin-purple-light .user-panel>.info>a{color:#444}.skin-purple-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-purple-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-purple-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-purple-light .sidebar-menu>li:hover>a,.skin-purple-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-purple-light .sidebar-menu>li.active{border-left-color:#605ca8}.skin-purple-light .sidebar-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-purple-light .sidebar a{color:#444}.skin-purple-light .sidebar a:hover{text-decoration:none}.skin-purple-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-purple-light .sidebar-menu .treeview-menu>li.active>a,.skin-purple-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-purple-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-purple-light .sidebar-form input[type="text"],.skin-purple-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-purple-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple-light .sidebar-form input[type="text"]:focus,.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-purple-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}} \ No newline at end of file diff --git a/src/main/webapp/static/js/recordManage/commomSearch/showRecordIframeBlood.js b/src/main/webapp/static/js/recordManage/commomSearch/showRecordIframeBlood.js index a68fdd1..b8e24c5 100644 --- a/src/main/webapp/static/js/recordManage/commomSearch/showRecordIframeBlood.js +++ b/src/main/webapp/static/js/recordManage/commomSearch/showRecordIframeBlood.js @@ -136,13 +136,14 @@ function onloadPdf(scanPages, sources) { datType: 'json', success: function (data) { if (data.code == 0) { - var str = path + "/commom/getRecordContentBlood?patientId=" + patientId; - $("#iframe1").attr("src", path + "/static/pdfjs/web/viewer1.html?file=" + encodeURIComponent(str)); + var str = path + "/commom/getRecordContentBlood?patientId=" + patientId; + $("#iframe1").attr("src", path + "/static/pdfjs/web/viewer.html?file=" + encodeURIComponent(str)) var rootPaths = parent.$("#rootPaths").val(); - //加载的图片 var print = $("#print").val(); - if (scanPages != '' && print == 1) { - selectPrintPic(patientId, rootPaths, scanPages, sources); + if (rootPaths!=",") { + if (scanPages != '' && print == 1) { + selectPrintPic(patientId, rootPaths, scanPages, sources); + } } } } @@ -181,6 +182,62 @@ function selectPrintPic(patientId, rootPaths, scanPages, sources) { sources: sources }, datType: 'json', + success: function (data) { + if (data.code == 0) { + var resultList = data.data; + if (null != resultList) { + var img = ''; + for (var i = 0; i < resultList.length; i++) { + img += ""; + } + var interval = setInterval(function () { + if ($("#iframeLoad").val() == 1) { + // iframe.contentDocument.getElementById("printContainer1").innerHTML = img; + $("#printPicLoaded").val(1); + // iframe.contentDocument.getElementById("printLoading").style.display = 'none'; + // iframe.contentDocument.getElementById("print").style.display = 'block'; + clearInterval(interval); + } + }, 200); + } + } else { + toastr.error(data.msg); + } + } + }) + //查询进度定时器 + var interval1 = setInterval(function () { + $.ajax({ + type: 'get', + url: path + "/commom/getPrintPicLoading", + data: {patientId: $("#patientId").val()}, + dataType: 'json', + success: function (data) { + if (data.code == 0) { + var value = data.data; + $("#loading").val(value + "%"); + if (value == 100) { + //杀死进度定时器 + clearInterval(interval1); + } + } else { + toastr.error(data.msg); + } + } + }) + }, 100); +} + +function selectPrintPic2(patientId, scanPages, sources) { + $.ajax({ + type: 'post', + url: path + "/commom/selectPrintPic2", + data: { + patientId: patientId, + names: scanPages, + sources: sources + }, + datType: 'json', success: function (data) { if (data.code == 0) { var resultList = data.data; @@ -257,7 +314,7 @@ function onloadJpgForPdf() { message: "确认将左侧树选中的图片下载pdf?", operate: function (reselt) { if (reselt) { - var patientId = "'" + $("#patientId").val() + "'"; + var patientId = $("#patientId").val(); var assortIds = $("#assortIds").val(); var flag = parent.$("#flag").val(); post(path + '/template/downloadPdfBlood', { diff --git a/src/main/webapp/static/pdfjs/web/viewer.html b/src/main/webapp/static/pdfjs/web/viewer.html index 81cc9b0..17b7aed 100644 --- a/src/main/webapp/static/pdfjs/web/viewer.html +++ b/src/main/webapp/static/pdfjs/web/viewer.html @@ -18,28 +18,28 @@ Adobe CMap resources are covered by their own copyright and license: http://sourceforge.net/adobe/cmap/wiki/License/ --> - - - - - PDF.js viewer + + + + + PDF.js viewer - - - + + + - - - - - - - - - + + + + + + + + + - + - - -
- -
-
-
- - - -
-
-
-
-
- - -
-
- -
- +
+
+
+ + +
+
+ +
+ + + + +
+
+
+
+ -
- +
+ +
+ +
+ + +
- - - - - -
- - - -
-
-
-
- -
- -
- -
- -
- - - -
-
- - - - - - - -
- -
-
-
-
- -
- -
- + -
-
-
-
-
-
-
+
+
+
+
+
+
+
- - - - - - - -
-
-
+ + + + + + + +
+
+
- -
+ +
- +
- + diff --git a/src/main/webapp/static/pdfjs/web/viewer.js b/src/main/webapp/static/pdfjs/web/viewer.js index 51010b1..b8f8fc4 100644 --- a/src/main/webapp/static/pdfjs/web/viewer.js +++ b/src/main/webapp/static/pdfjs/web/viewer.js @@ -38,15 +38,15 @@ var PAGE_NUMBER_LOADING_INDICATOR = 'visiblePageIsLoading'; var DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT = 5000; PDFJS.imageResourcesPath = './images/'; - PDFJS.workerSrc = '../build/pdf.worker.js'; - PDFJS.cMapUrl = '../web/cmaps/'; - PDFJS.cMapPacked = true; +PDFJS.workerSrc = '../build/pdf.worker.js'; +PDFJS.cMapUrl = '../web/cmaps/'; +PDFJS.cMapPacked = true; var mozL10n = document.mozL10n || document.webL10n; var CSS_UNITS = 96.0 / 72.0; -var DEFAULT_SCALE = 'auto'; +var DEFAULT_SCALE = '1'; var UNKNOWN_SCALE = 0; var MAX_AUTO_SCALE = 1.25; var SCROLLBAR_PADDING = 40; @@ -107,24 +107,24 @@ function getFileName(url) { var anchor = url.indexOf('#'); var query = url.indexOf('?'); var end = Math.min( - anchor > 0 ? anchor : url.length, - query > 0 ? query : url.length); + anchor > 0 ? anchor : url.length, + query > 0 ? query : url.length); return url.substring(url.lastIndexOf('/', end) + 1, end); } /** * Returns scale factor for the canvas. It makes sense for the HiDPI displays. * @return {Object} The object with horizontal (sx) and vertical (sy) - scales. The scaled property is set to false if scaling is - not required, true otherwise. + scales. The scaled property is set to false if scaling is + not required, true otherwise. */ function getOutputScale(ctx) { var devicePixelRatio = window.devicePixelRatio || 1; var backingStoreRatio = ctx.webkitBackingStorePixelRatio || - ctx.mozBackingStorePixelRatio || - ctx.msBackingStorePixelRatio || - ctx.oBackingStorePixelRatio || - ctx.backingStorePixelRatio || 1; + ctx.mozBackingStorePixelRatio || + ctx.msBackingStorePixelRatio || + ctx.oBackingStorePixelRatio || + ctx.backingStorePixelRatio || 1; var pixelRatio = devicePixelRatio / backingStoreRatio; return { sx: pixelRatio, @@ -250,7 +250,7 @@ function getVisibleElements(scrollEl, views, sortByVisibility) { function isElementBottomBelowViewTop(view) { var element = view.div; var elementBottom = - element.offsetTop + element.clientTop + element.clientHeight; + element.offsetTop + element.clientTop + element.clientHeight; return elementBottom > top; } @@ -258,7 +258,7 @@ function getVisibleElements(scrollEl, views, sortByVisibility) { var currentHeight, viewHeight, hiddenHeight, percentHeight; var currentWidth, viewWidth; var firstVisibleElementInd = (views.length === 0) ? 0 : - binarySearchFirstItem(views, isElementBottomBelowViewTop); + binarySearchFirstItem(views, isElementBottomBelowViewTop); for (var i = firstVisibleElementInd, ii = views.length; i < ii; i++) { view = views[i]; @@ -276,7 +276,7 @@ function getVisibleElements(scrollEl, views, sortByVisibility) { continue; } hiddenHeight = Math.max(0, top - currentHeight) + - Math.max(0, currentHeight + viewHeight - bottom); + Math.max(0, currentHeight + viewHeight - bottom); percentHeight = ((viewHeight - hiddenHeight) * 100 / viewHeight) | 0; visible.push({ @@ -322,15 +322,15 @@ function getPDFFileNameFromURL(url) { var reFilename = /[^\/?#=]+\.pdf\b(?!.*\.pdf\b)/i; var splitURI = reURI.exec(url); var suggestedFilename = reFilename.exec(splitURI[1]) || - reFilename.exec(splitURI[2]) || - reFilename.exec(splitURI[3]); + reFilename.exec(splitURI[2]) || + reFilename.exec(splitURI[3]); if (suggestedFilename) { suggestedFilename = suggestedFilename[0]; if (suggestedFilename.indexOf('%') !== -1) { // URL-encoded %2Fpath%2Fto%2Ffile.pdf should be file.pdf try { suggestedFilename = - reFilename.exec(decodeURIComponent(suggestedFilename))[0]; + reFilename.exec(decodeURIComponent(suggestedFilename))[0]; } catch(e) { // Possible (extremely rare) errors: // URIError "Malformed URI", e.g. for "%AA.pdf" // TypeError "null has no properties", e.g. for "%2F.pdf" @@ -395,7 +395,7 @@ var ProgressBar = (function ProgressBarClosure() { var scrollbarWidth = container.offsetWidth - viewer.offsetWidth; if (scrollbarWidth > 0) { this.bar.setAttribute('style', 'width: calc(100% - ' + - scrollbarWidth + 'px);'); + scrollbarWidth + 'px);'); } } }, @@ -465,11 +465,11 @@ var Preferences = { initialize: function preferencesInitialize() { return this.initializedPromise = this._readFromStorage(DEFAULT_PREFERENCES).then(function(prefObj) { - this.isInitializedPromiseResolved = true; - if (prefObj) { - this.prefs = prefObj; - } - }.bind(this)); + this.isInitializedPromiseResolved = true; + if (prefObj) { + this.prefs = prefObj; + } + }.bind(this)); }, /** @@ -543,12 +543,12 @@ var Preferences = { value = value.toString(); } else { throw new Error('Preferences_set: \'' + value + '\' is a \"' + - valueType + '\", expected \"' + defaultType + '\".'); + valueType + '\", expected \"' + defaultType + '\".'); } } else { if (valueType === 'number' && (value | 0) !== value) { throw new Error('Preferences_set: \'' + value + - '\' must be an \"integer\".'); + '\' must be an \"integer\".'); } } this.prefs[name] = value; @@ -682,7 +682,7 @@ Preferences._readFromStorage = function (prefObj) { // Also intercept Cmd/Ctrl + Shift + P in Chrome and Opera if (event.keyCode === 80/*P*/ && (event.ctrlKey || event.metaKey) && !event.altKey && (!event.shiftKey || window.chrome || window.opera)) { - //window.print(); + window.print(); if (hasAttachEvent) { // Only attachEvent can cancel Ctrl + P dialog in IE <=10 // attachEvent is gone in IE11, so the dialog will re-appear in IE11. @@ -778,7 +778,7 @@ var DownloadManager = (function DownloadManagerClosure() { contentType) { if (navigator.msSaveBlob) { // IE10 and above return navigator.msSaveBlob(new Blob([data], { type: contentType }), - filename); + filename); } var blobUrl = PDFJS.createObjectURL(data, contentType); @@ -828,29 +828,29 @@ var ViewHistory = (function ViewHistoryClosure() { this.isInitializedPromiseResolved = false; this.initializedPromise = this._readFromStorage().then(function (databaseStr) { - this.isInitializedPromiseResolved = true; + this.isInitializedPromiseResolved = true; - var database = JSON.parse(databaseStr || '{}'); - if (!('files' in database)) { - database.files = []; - } - if (database.files.length >= VIEW_HISTORY_MEMORY) { - database.files.shift(); - } - var index; - for (var i = 0, length = database.files.length; i < length; i++) { - var branch = database.files[i]; - if (branch.fingerprint === this.fingerprint) { - index = i; - break; - } - } - if (typeof index !== 'number') { - index = database.files.push({fingerprint: this.fingerprint}) - 1; - } - this.file = database.files[index]; - this.database = database; - }.bind(this)); + var database = JSON.parse(databaseStr || '{}'); + if (!('files' in database)) { + database.files = []; + } + if (database.files.length >= VIEW_HISTORY_MEMORY) { + database.files.shift(); + } + var index; + for (var i = 0, length = database.files.length; i < length; i++) { + var branch = database.files[i]; + if (branch.fingerprint === this.fingerprint) { + index = i; + break; + } + } + if (typeof index !== 'number') { + index = database.files.push({fingerprint: this.fingerprint}) - 1; + } + this.file = database.files[index]; + this.database = database; + }.bind(this)); } ViewHistory.prototype = { @@ -925,7 +925,7 @@ var PDFFindBar = (function PDFFindBarClosure() { if (this.findController === null) { throw new Error('PDFFindBar cannot be used without a ' + - 'PDFFindController instance.'); + 'PDFFindController instance.'); } // Add event listeners to the DOM elements. var self = this; @@ -1000,10 +1000,10 @@ var PDFFindBar = (function PDFFindBarClosure() { case FindStates.FIND_WRAPPED: if (previous) { findMsg = mozL10n.get('find_reached_top', null, - 'Reached top of document, continued from bottom'); + 'Reached top of document, continued from bottom'); } else { findMsg = mozL10n.get('find_reached_bottom', null, - 'Reached end of document, continued from top'); + 'Reached end of document, continued from top'); } break; } @@ -1192,22 +1192,22 @@ var PDFFindController = (function PDFFindControllerClosure() { var self = this; function extractPageText(pageIndex) { self.pdfViewer.getPageTextContent(pageIndex).then( - function textContentResolved(textContent) { - var textItems = textContent.items; - var str = []; + function textContentResolved(textContent) { + var textItems = textContent.items; + var str = []; - for (var i = 0, len = textItems.length; i < len; i++) { - str.push(textItems[i].str); - } + for (var i = 0, len = textItems.length; i < len; i++) { + str.push(textItems[i].str); + } - // Store the pageContent as a string. - self.pageContents.push(str.join('')); + // Store the pageContent as a string. + self.pageContents.push(str.join('')); - extractTextPromisesResolves[pageIndex](pageIndex); - if ((pageIndex + 1) < self.pdfViewer.pagesCount) { - extractPageText(pageIndex + 1); + extractTextPromisesResolves[pageIndex](pageIndex); + if ((pageIndex + 1) < self.pdfViewer.pagesCount) { + extractPageText(pageIndex + 1); + } } - } ); } extractPageText(0); @@ -1304,7 +1304,7 @@ var PDFFindController = (function PDFFindControllerClosure() { // the next match on the page. this.hadMatch = true; offset.matchIdx = (previous ? offset.matchIdx - 1 : - offset.matchIdx + 1); + offset.matchIdx + 1); this.updateMatch(true); return; } @@ -1420,12 +1420,12 @@ var PDFFindController = (function PDFFindControllerClosure() { updateUIState: function PDFFindController_updateUIState(state, previous) { if (this.integratedFind) { FirefoxCom.request('updateFindControlState', - { result: state, findPrevious: previous }); + { result: state, findPrevious: previous }); return; } if (this.findBar === null) { throw new Error('PDFFindController is not initialized with a ' + - 'PDFFindBar instance.'); + 'PDFFindBar instance.'); } this.findBar.updateUIState(state, previous); } @@ -1504,9 +1504,9 @@ var PDFHistory = { // update the previous entry in the browser history. if (self.uid === 0) { var previousParams = (self.previousHash && self.currentBookmark && - self.previousHash !== self.currentBookmark) ? - { hash: self.currentBookmark, page: self.currentPage } : - { page: 1 }; + self.previousHash !== self.currentBookmark) ? + { hash: self.currentBookmark, page: self.currentPage } : + { page: 1 }; self.historyUnlocked = false; self.allowHashChange = false; window.history.back(); @@ -1523,7 +1523,7 @@ var PDFHistory = { var previousParams = self._getPreviousParams(null, true); if (previousParams) { var replacePrevious = (!self.current.dest && - self.current.hash !== self.previousHash); + self.current.hash !== self.previousHash); self._pushToHistory(previousParams, false, replacePrevious); self._updatePreviousBookmark(); } @@ -1547,8 +1547,8 @@ var PDFHistory = { _isStateObjectDefined: function pdfHistory_isStateObjectDefined(state) { return (state && state.uid >= 0 && - state.fingerprint && this.fingerprint === state.fingerprint && - state.target && state.target.hash) ? true : false; + state.fingerprint && this.fingerprint === state.fingerprint && + state.target && state.target.hash) ? true : false; }, _pushOrReplaceState: function pdfHistory_pushOrReplaceState(stateObj, @@ -1609,9 +1609,9 @@ var PDFHistory = { } if (params.dest && !params.hash) { params.hash = (this.current.hash && this.current.dest && - this.current.dest === params.dest) ? - this.current.hash : - this.linkService.getDestinationHash(params.dest).split('#')[1]; + this.current.dest === params.dest) ? + this.current.hash : + this.linkService.getDestinationHash(params.dest).split('#')[1]; } if (params.page) { params.page |= 0; @@ -1656,7 +1656,7 @@ var PDFHistory = { this._pushToHistory(params, true); } } else if (this.current.page && params.page && - this.current.page !== params.page) { + this.current.page !== params.page) { this._pushToHistory(params, true); } }, @@ -1716,12 +1716,12 @@ var PDFHistory = { var previousParams = this._getPreviousParams(); if (previousParams) { var replacePrevious = (!this.current.dest && - this.current.hash !== this.previousHash); + this.current.hash !== this.previousHash); this._pushToHistory(previousParams, false, replacePrevious); } } this._pushOrReplaceState(this._stateObj(params), - (overwrite || this.uid === 0)); + (overwrite || this.uid === 0)); this.currentUid = this.uid++; this.current = params; this.updatePreviousBookmark = true; @@ -1729,7 +1729,7 @@ var PDFHistory = { _goTo: function pdfHistory_goTo(state) { if (!(this.initialized && this.historyUnlocked && - this._isStateObjectDefined(state))) { + this._isStateObjectDefined(state))) { return; } if (!this.reInitialized && state.uid < this.currentUid) { @@ -1928,7 +1928,7 @@ var SecondaryToolbar = { return; } this.buttonContainer.setAttribute('style', - 'max-height: ' + (this.newContainerHeight - SCROLLBAR_PADDING) + 'px;'); + 'max-height: ' + (this.newContainerHeight - SCROLLBAR_PADDING) + 'px;'); this.previousContainerHeight = this.newContainerHeight; }, @@ -2075,14 +2075,14 @@ var PDFPresentationMode = (function PDFPresentationModeClosure() { if (Math.abs(this.mouseScrollDelta) >= PAGE_SWITCH_THRESHOLD) { var pageSwitchDirection = (this.mouseScrollDelta > 0) ? - PageSwitchDirection.UP : PageSwitchDirection.DOWN; + PageSwitchDirection.UP : PageSwitchDirection.DOWN; var page = PDFViewerApplication.page; this._resetMouseScrollState(); // If we're at the first/last page, we don't need to do anything. if ((page === 1 && pageSwitchDirection === PageSwitchDirection.UP) || (page === PDFViewerApplication.pagesCount && - pageSwitchDirection === PageSwitchDirection.DOWN)) { + pageSwitchDirection === PageSwitchDirection.DOWN)) { return; } PDFViewerApplication.page = (page + pageSwitchDirection); @@ -2092,9 +2092,9 @@ var PDFPresentationMode = (function PDFPresentationModeClosure() { get isFullscreen() { return !!(document.fullscreenElement || - document.mozFullScreen || - document.webkitIsFullScreen || - document.msFullscreenElement); + document.mozFullScreen || + document.webkitIsFullScreen || + document.msFullscreenElement); }, /** @@ -2133,11 +2133,11 @@ var PDFPresentationMode = (function PDFPresentationModeClosure() { */ _resetSwitchInProgress: function PDFPresentationMode_resetSwitchInProgress() { - if (this.switchInProgress) { - clearTimeout(this.switchInProgress); - delete this.switchInProgress; - } - }, + if (this.switchInProgress) { + clearTimeout(this.switchInProgress); + delete this.switchInProgress; + } + }, /** * @private @@ -2209,7 +2209,7 @@ var PDFPresentationMode = (function PDFPresentationModeClosure() { // Enable clicking of links in presentation mode. Please note: // Only links pointing to destinations in the current PDF document work. var isInternalLink = (evt.target.href && - evt.target.classList.contains('internalLink')); + evt.target.classList.contains('internalLink')); if (!isInternalLink) { // Unless an internal link was clicked, advance one page. evt.preventDefault(); @@ -2258,9 +2258,9 @@ var PDFPresentationMode = (function PDFPresentationModeClosure() { */ _resetMouseScrollState: function PDFPresentationMode_resetMouseScrollState() { - this.mouseScrollTimeStamp = 0; - this.mouseScrollDelta = 0; - }, + this.mouseScrollTimeStamp = 0; + this.mouseScrollDelta = 0; + }, /** * @private @@ -2282,16 +2282,16 @@ var PDFPresentationMode = (function PDFPresentationModeClosure() { */ _removeWindowListeners: function PDFPresentationMode_removeWindowListeners() { - window.removeEventListener('mousemove', this.showControlsBind); - window.removeEventListener('mousedown', this.mouseDownBind); - window.removeEventListener('keydown', this.resetMouseScrollStateBind); - window.removeEventListener('contextmenu', this.contextMenuBind); - - delete this.showControlsBind; - delete this.mouseDownBind; - delete this.resetMouseScrollStateBind; - delete this.contextMenuBind; - }, + window.removeEventListener('mousemove', this.showControlsBind); + window.removeEventListener('mousedown', this.mouseDownBind); + window.removeEventListener('keydown', this.resetMouseScrollStateBind); + window.removeEventListener('contextmenu', this.contextMenuBind); + + delete this.showControlsBind; + delete this.mouseDownBind; + delete this.resetMouseScrollStateBind; + delete this.contextMenuBind; + }, /** * @private @@ -2309,30 +2309,30 @@ var PDFPresentationMode = (function PDFPresentationModeClosure() { */ _addFullscreenChangeListeners: function PDFPresentationMode_addFullscreenChangeListeners() { - this.fullscreenChangeBind = this._fullscreenChange.bind(this); + this.fullscreenChangeBind = this._fullscreenChange.bind(this); - window.addEventListener('fullscreenchange', this.fullscreenChangeBind); - window.addEventListener('mozfullscreenchange', this.fullscreenChangeBind); - window.addEventListener('webkitfullscreenchange', - this.fullscreenChangeBind); - window.addEventListener('MSFullscreenChange', this.fullscreenChangeBind); - }, + window.addEventListener('fullscreenchange', this.fullscreenChangeBind); + window.addEventListener('mozfullscreenchange', this.fullscreenChangeBind); + window.addEventListener('webkitfullscreenchange', + this.fullscreenChangeBind); + window.addEventListener('MSFullscreenChange', this.fullscreenChangeBind); + }, /** * @private */ _removeFullscreenChangeListeners: function PDFPresentationMode_removeFullscreenChangeListeners() { - window.removeEventListener('fullscreenchange', this.fullscreenChangeBind); - window.removeEventListener('mozfullscreenchange', - this.fullscreenChangeBind); - window.removeEventListener('webkitfullscreenchange', - this.fullscreenChangeBind); - window.removeEventListener('MSFullscreenChange', - this.fullscreenChangeBind); - - delete this.fullscreenChangeBind; - } + window.removeEventListener('fullscreenchange', this.fullscreenChangeBind); + window.removeEventListener('mozfullscreenchange', + this.fullscreenChangeBind); + window.removeEventListener('webkitfullscreenchange', + this.fullscreenChangeBind); + window.removeEventListener('MSFullscreenChange', + this.fullscreenChangeBind); + + delete this.fullscreenChangeBind; + } }; return PDFPresentationMode; @@ -2442,7 +2442,7 @@ var GrabToPan = (function GrabToPanClosure() { // Use matchesSelector to check whether the clicked element // is (a child of) an input element / link return node[matchesSelector]( - 'a[href], a[href] *, input, textarea, button, button *, select, option' + 'a[href], a[href] *, input, textarea, button, button *, select, option' ); }, @@ -2535,7 +2535,7 @@ var GrabToPan = (function GrabToPanClosure() { var isChrome15OrOpera15plus = chrome && (chrome.webstore || chrome.app); // ^ Chrome 15+ ^ Opera 15+ var isSafari6plus = /Apple/.test(navigator.vendor) && - /Version\/([6-9]\d*|[1-5]\d+)/.test(navigator.userAgent); + /Version\/([6-9]\d*|[1-5]\d+)/.test(navigator.userAgent); /** * Whether the left mouse is not pressed. @@ -2572,14 +2572,14 @@ var HandTool = { } if (isActive) { toggleHandTool.title = - mozL10n.get('hand_tool_disable.title', null, 'Disable hand tool'); + mozL10n.get('hand_tool_disable.title', null, 'Disable hand tool'); toggleHandTool.firstElementChild.textContent = - mozL10n.get('hand_tool_disable_label', null, 'Disable hand tool'); + mozL10n.get('hand_tool_disable_label', null, 'Disable hand tool'); } else { toggleHandTool.title = - mozL10n.get('hand_tool_enable.title', null, 'Enable hand tool'); + mozL10n.get('hand_tool_enable.title', null, 'Enable hand tool'); toggleHandTool.firstElementChild.textContent = - mozL10n.get('hand_tool_enable_label', null, 'Enable hand tool'); + mozL10n.get('hand_tool_enable_label', null, 'Enable hand tool'); } } }); @@ -2656,9 +2656,9 @@ var OverlayManager = { throw new Error('The overlay is already registered.'); } this.overlays[name] = { element: element, - container: container, - callerCloseMethod: (callerCloseMethod || null), - canForceClose: (canForceClose || false) }; + container: container, + callerCloseMethod: (callerCloseMethod || null), + canForceClose: (canForceClose || false) }; resolve(); }.bind(this)); }, @@ -2774,7 +2774,7 @@ var PasswordPrompt = { // Attach the event listeners. this.passwordSubmit.addEventListener('click', - this.verifyPassword.bind(this)); + this.verifyPassword.bind(this)); this.passwordCancel.addEventListener('click', this.close.bind(this)); @@ -2792,11 +2792,11 @@ var PasswordPrompt = { this.passwordField.focus(); var promptString = mozL10n.get('password_label', null, - 'Enter the password to open this PDF file.'); + 'Enter the password to open this PDF file.'); if (this.reason === PDFJS.PasswordResponses.INCORRECT_PASSWORD) { promptString = mozL10n.get('password_invalid', null, - 'Invalid password. Please try again.'); + 'Invalid password. Please try again.'); } this.passwordText.textContent = promptString; @@ -2860,7 +2860,7 @@ var PDFDocumentProperties = (function PDFDocumentPropertiesClosure() { */ open: function PDFDocumentProperties_open() { Promise.all([OverlayManager.open(this.overlayName), - this.dataAvailablePromise]).then(function () { + this.dataAvailablePromise]).then(function () { this._getProperties(); }.bind(this)); }, @@ -2896,10 +2896,10 @@ var PDFDocumentProperties = (function PDFDocumentPropertiesClosure() { */ setDocumentAndUrl: function PDFDocumentProperties_setDocumentAndUrl(pdfDocument, url) { - this.pdfDocument = pdfDocument; - this.url = url; - this.resolveDataAvailable(); - }, + this.pdfDocument = pdfDocument; + this.url = url; + this.resolveDataAvailable(); + }, /** * @private @@ -3018,8 +3018,8 @@ var PDFDocumentProperties = (function PDFDocumentPropertiesClosure() { var dateString = date.toLocaleDateString(); var timeString = date.toLocaleTimeString(); return mozL10n.get('document_properties_date_string', - {date: dateString, time: timeString}, - '{{date}}, {{time}}'); + {date: dateString, time: timeString}, + '{{date}}, {{time}}'); } }; @@ -3079,8 +3079,8 @@ var PDFRenderingQueue = (function PDFRenderingQueueClosure() { */ setThumbnailViewer: function PDFRenderingQueue_setThumbnailViewer(pdfThumbnailViewer) { - this.pdfThumbnailViewer = pdfThumbnailViewer; - }, + this.pdfThumbnailViewer = pdfThumbnailViewer; + }, /** * @param {IRenderableView} view @@ -3150,7 +3150,7 @@ var PDFRenderingQueue = (function PDFRenderingQueueClosure() { } else { var previousPageIndex = visible.first.id - 2; if (views[previousPageIndex] && - !this.isViewFinished(views[previousPageIndex])) { + !this.isViewFinished(views[previousPageIndex])) { return views[previousPageIndex]; } } @@ -3273,7 +3273,7 @@ var PDFPageView = (function PDFPageViewClosure() { this.pdfPageRotate = pdfPage.rotate; var totalRotation = (this.rotation + this.pdfPageRotate) % 360; this.viewport = pdfPage.getViewport(this.scale * CSS_UNITS, - totalRotation); + totalRotation); this.stats = pdfPage.stats; this.reset(); }, @@ -3300,7 +3300,7 @@ var PDFPageView = (function PDFPageViewClosure() { var childNodes = div.childNodes; var currentZoomLayer = this.zoomLayer || null; var currentAnnotationNode = (keepAnnotations && this.annotationLayer && - this.annotationLayer.div) || null; + this.annotationLayer.div) || null; for (var i = childNodes.length - 1; i >= 0; i--) { var node = childNodes[i]; if (currentZoomLayer === node || currentAnnotationNode === node) { @@ -3361,7 +3361,7 @@ var PDFPageView = (function PDFPageViewClosure() { if (this.canvas && (PDFJS.useOnlyCssZoom || - (this.hasRestrictedScaling && isScalingRestricted))) { + (this.hasRestrictedScaling && isScalingRestricted))) { this.cssTransform(this.canvas, true); return; } else if (this.canvas && !this.zoomLayer) { @@ -3389,9 +3389,9 @@ var PDFPageView = (function PDFPageViewClosure() { var height = this.viewport.height; var div = this.div; canvas.style.width = canvas.parentNode.style.width = div.style.width = - Math.floor(width) + 'px'; + Math.floor(width) + 'px'; canvas.style.height = canvas.parentNode.style.height = div.style.height = - Math.floor(height) + 'px'; + Math.floor(height) + 'px'; // The canvas may have been originally rotated, rotate relative to that. var relativeRotation = this.viewport.rotation - canvas._viewport.rotation; var absRotation = Math.abs(relativeRotation); @@ -3402,7 +3402,7 @@ var PDFPageView = (function PDFPageViewClosure() { scaleY = width / height; } var cssTransform = 'rotate(' + relativeRotation + 'deg) ' + - 'scale(' + scaleX + ',' + scaleY + ')'; + 'scale(' + scaleX + ',' + scaleY + ')'; CustomStyle.setProp('transform', canvas, cssTransform); if (this.textLayer) { @@ -3412,7 +3412,7 @@ var PDFPageView = (function PDFPageViewClosure() { // one orientation then rotating overall. var textLayerViewport = this.textLayer.viewport; var textRelativeRotation = this.viewport.rotation - - textLayerViewport.rotation; + textLayerViewport.rotation; var textAbsRotation = Math.abs(textRelativeRotation); var scale = width / textLayerViewport.width; if (textAbsRotation === 90 || textAbsRotation === 270) { @@ -3539,8 +3539,8 @@ var PDFPageView = (function PDFPageViewClosure() { } textLayer = this.textLayerFactory.createTextLayerBuilder(textLayerDiv, - this.id - 1, - this.viewport); + this.id - 1, + this.viewport); } this.textLayer = textLayer; @@ -3633,26 +3633,26 @@ var PDFPageView = (function PDFPageViewClosure() { var renderTask = this.renderTask = this.pdfPage.render(renderContext); this.renderTask.promise.then( - function pdfPageRenderCallback() { - pageViewDrawCallback(null); - if (textLayer) { - self.pdfPage.getTextContent().then( - function textContentResolved(textContent) { - textLayer.setTextContent(textContent); - textLayer.render(TEXT_LAYER_RENDER_DELAY); - } - ); + function pdfPageRenderCallback() { + pageViewDrawCallback(null); + if (textLayer) { + self.pdfPage.getTextContent().then( + function textContentResolved(textContent) { + textLayer.setTextContent(textContent); + textLayer.render(TEXT_LAYER_RENDER_DELAY); + } + ); + } + }, + function pdfPageRenderError(error) { + pageViewDrawCallback(error); } - }, - function pdfPageRenderError(error) { - pageViewDrawCallback(error); - } ); if (this.annotationsLayerFactory) { if (!this.annotationLayer) { this.annotationLayer = this.annotationsLayerFactory. - createAnnotationsLayerBuilder(div, this.pdfPage); + createAnnotationsLayerBuilder(div, this.pdfPage); } this.annotationLayer.setupAnnotations(this.viewport); } @@ -3682,7 +3682,7 @@ var PDFPageView = (function PDFPageViewClosure() { canvas.style.height = (PRINT_OUTPUT_SCALE * 100) + '%'; var cssScale = 'scale(' + (1 / PRINT_OUTPUT_SCALE) + ', ' + - (1 / PRINT_OUTPUT_SCALE) + ')'; + (1 / PRINT_OUTPUT_SCALE) + ')'; CustomStyle.setProp('transform' , canvas, cssScale); CustomStyle.setProp('transformOrigin' , canvas, '0% 0%'); @@ -3702,7 +3702,7 @@ var PDFPageView = (function PDFPageViewClosure() { ctx.restore(); // Used by the mozCurrentTransform polyfill in src/display/canvas.js. ctx._transformMatrix = - [PRINT_OUTPUT_SCALE, 0, 0, PRINT_OUTPUT_SCALE, 0, 0]; + [PRINT_OUTPUT_SCALE, 0, 0, PRINT_OUTPUT_SCALE, 0, 0]; ctx.scale(PRINT_OUTPUT_SCALE, PRINT_OUTPUT_SCALE); var renderContext = { @@ -3937,7 +3937,7 @@ var TextLayerBuilder = (function TextLayerBuilderClosure() { var bidiTexts = this.textContent.items; var end = bidiTexts.length - 1; var queryLen = (this.findController === null ? - 0 : this.findController.state.query.length); + 0 : this.findController.state.query.length); var ret = []; for (var m = 0, len = matches.length; m < len; m++) { @@ -3992,11 +3992,11 @@ var TextLayerBuilder = (function TextLayerBuilderClosure() { var prevEnd = null; var pageIdx = this.pageIdx; var isSelectedPage = (this.findController === null ? - false : (pageIdx === this.findController.selected.pageIdx)); + false : (pageIdx === this.findController.selected.pageIdx)); var selectedMatchIdx = (this.findController === null ? - -1 : this.findController.selected.matchIdx); + -1 : this.findController.selected.matchIdx); var highlightAll = (this.findController === null ? - false : this.findController.state.highlightAll); + false : this.findController.state.highlightAll); var infinity = { divIdx: -1, offset: undefined @@ -4040,7 +4040,7 @@ var TextLayerBuilder = (function TextLayerBuilderClosure() { if (this.findController) { this.findController.updateMatchPosition(pageIdx, i, textDivs, - begin.divIdx, end.divIdx); + begin.divIdx, end.divIdx); } // Match inside new div. @@ -4057,10 +4057,10 @@ var TextLayerBuilder = (function TextLayerBuilderClosure() { if (begin.divIdx === end.divIdx) { appendTextToDiv(begin.divIdx, begin.offset, end.offset, - 'highlight' + highlightSuffix); + 'highlight' + highlightSuffix); } else { appendTextToDiv(begin.divIdx, begin.offset, infinity.offset, - 'highlight begin' + highlightSuffix); + 'highlight begin' + highlightSuffix); for (var n0 = begin.divIdx + 1, n1 = end.divIdx; n0 < n1; n0++) { textDivs[n0].className = 'highlight middle' + highlightSuffix; } @@ -4105,7 +4105,7 @@ var TextLayerBuilder = (function TextLayerBuilderClosure() { // Convert the matches on the page controller into the match format // used for the textLayer. this.matches = this.convertMatches(this.findController === null ? - [] : (this.findController.pageMatches[this.pageIdx] || [])); + [] : (this.findController.pageMatches[this.pageIdx] || [])); this.renderMatches(this.matches); } }; @@ -4164,104 +4164,104 @@ var AnnotationsLayerBuilder = (function AnnotationsLayerBuilderClosure() { */ setupAnnotations: function AnnotationsLayerBuilder_setupAnnotations(viewport) { - function bindLink(link, dest) { - link.href = linkService.getDestinationHash(dest); - link.onclick = function annotationsLayerBuilderLinksOnclick() { - if (dest) { - linkService.navigateTo(dest); + function bindLink(link, dest) { + link.href = linkService.getDestinationHash(dest); + link.onclick = function annotationsLayerBuilderLinksOnclick() { + if (dest) { + linkService.navigateTo(dest); + } + return false; + }; + if (dest) { + link.className = 'internalLink'; + } } - return false; - }; - if (dest) { - link.className = 'internalLink'; - } - } - function bindNamedAction(link, action) { - link.href = linkService.getAnchorUrl(''); - link.onclick = function annotationsLayerBuilderNamedActionOnClick() { - linkService.executeNamedAction(action); - return false; - }; - link.className = 'internalLink'; - } + function bindNamedAction(link, action) { + link.href = linkService.getAnchorUrl(''); + link.onclick = function annotationsLayerBuilderNamedActionOnClick() { + linkService.executeNamedAction(action); + return false; + }; + link.className = 'internalLink'; + } - var linkService = this.linkService; - var pdfPage = this.pdfPage; - var self = this; + var linkService = this.linkService; + var pdfPage = this.pdfPage; + var self = this; + + pdfPage.getAnnotations().then(function (annotationsData) { + viewport = viewport.clone({ dontFlip: true }); + var transform = viewport.transform; + var transformStr = 'matrix(' + transform.join(',') + ')'; + var data, element, i, ii; + + if (self.div) { + // If an annotationLayer already exists, refresh its children's + // transformation matrices + for (i = 0, ii = annotationsData.length; i < ii; i++) { + data = annotationsData[i]; + element = self.div.querySelector( + '[data-annotation-id="' + data.id + '"]'); + if (element) { + CustomStyle.setProp('transform', element, transformStr); + } + } + // See PDFPageView.reset() + self.div.removeAttribute('hidden'); + } else { + for (i = 0, ii = annotationsData.length; i < ii; i++) { + data = annotationsData[i]; + if (!data || !data.hasHtml) { + continue; + } - pdfPage.getAnnotations().then(function (annotationsData) { - viewport = viewport.clone({ dontFlip: true }); - var transform = viewport.transform; - var transformStr = 'matrix(' + transform.join(',') + ')'; - var data, element, i, ii; - - if (self.div) { - // If an annotationLayer already exists, refresh its children's - // transformation matrices - for (i = 0, ii = annotationsData.length; i < ii; i++) { - data = annotationsData[i]; - element = self.div.querySelector( - '[data-annotation-id="' + data.id + '"]'); - if (element) { - CustomStyle.setProp('transform', element, transformStr); - } - } - // See PDFPageView.reset() - self.div.removeAttribute('hidden'); - } else { - for (i = 0, ii = annotationsData.length; i < ii; i++) { - data = annotationsData[i]; - if (!data || !data.hasHtml) { - continue; - } + element = PDFJS.AnnotationUtils.getHtmlElement(data, + pdfPage.commonObjs); + element.setAttribute('data-annotation-id', data.id); + if (typeof mozL10n !== 'undefined') { + mozL10n.translate(element); + } - element = PDFJS.AnnotationUtils.getHtmlElement(data, - pdfPage.commonObjs); - element.setAttribute('data-annotation-id', data.id); - if (typeof mozL10n !== 'undefined') { - mozL10n.translate(element); - } + var rect = data.rect; + var view = pdfPage.view; + rect = PDFJS.Util.normalizeRect([ + rect[0], + view[3] - rect[1] + view[1], + rect[2], + view[3] - rect[3] + view[1] + ]); + element.style.left = rect[0] + 'px'; + element.style.top = rect[1] + 'px'; + element.style.position = 'absolute'; + + CustomStyle.setProp('transform', element, transformStr); + var transformOriginStr = -rect[0] + 'px ' + -rect[1] + 'px'; + CustomStyle.setProp('transformOrigin', element, transformOriginStr); + + if (data.subtype === 'Link' && !data.url) { + var link = element.getElementsByTagName('a')[0]; + if (link) { + if (data.action) { + bindNamedAction(link, data.action); + } else { + bindLink(link, ('dest' in data) ? data.dest : null); + } + } + } - var rect = data.rect; - var view = pdfPage.view; - rect = PDFJS.Util.normalizeRect([ - rect[0], - view[3] - rect[1] + view[1], - rect[2], - view[3] - rect[3] + view[1] - ]); - element.style.left = rect[0] + 'px'; - element.style.top = rect[1] + 'px'; - element.style.position = 'absolute'; - - CustomStyle.setProp('transform', element, transformStr); - var transformOriginStr = -rect[0] + 'px ' + -rect[1] + 'px'; - CustomStyle.setProp('transformOrigin', element, transformOriginStr); - - if (data.subtype === 'Link' && !data.url) { - var link = element.getElementsByTagName('a')[0]; - if (link) { - if (data.action) { - bindNamedAction(link, data.action); - } else { - bindLink(link, ('dest' in data) ? data.dest : null); + if (!self.div) { + var annotationLayerDiv = document.createElement('div'); + annotationLayerDiv.className = 'annotationLayer'; + self.pageDiv.appendChild(annotationLayerDiv); + self.div = annotationLayerDiv; } - } - } - if (!self.div) { - var annotationLayerDiv = document.createElement('div'); - annotationLayerDiv.className = 'annotationLayer'; - self.pageDiv.appendChild(annotationLayerDiv); - self.div = annotationLayerDiv; + self.div.appendChild(element); + } } - - self.div.appendChild(element); - } - } - }); - }, + }); + }, hide: function () { if (!this.div) { @@ -4634,7 +4634,7 @@ var PDFViewer = (function pdfViewer() { !(this.isInPresentationMode || this.isChangingPresentationMode)) { page = this._location.pageNumber; dest = [null, { name: 'XYZ' }, this._location.left, - this._location.top, null]; + this._location.top, null]; } this.scrollPageIntoView(page, dest); } @@ -4656,13 +4656,13 @@ var PDFViewer = (function pdfViewer() { return; } var hPadding = (this.isInPresentationMode || this.removePageBorders) ? - 0 : SCROLLBAR_PADDING; + 0 : SCROLLBAR_PADDING; var vPadding = (this.isInPresentationMode || this.removePageBorders) ? - 0 : VERTICAL_PADDING; + 0 : VERTICAL_PADDING; var pageWidthScale = (this.container.clientWidth - hPadding) / - currentPage.width * currentPage.scale; + currentPage.width * currentPage.scale; var pageHeightScale = (this.container.clientHeight - vPadding) / - currentPage.height * currentPage.scale; + currentPage.height * currentPage.scale; switch (value) { case 'page-actual': scale = 1; @@ -4681,12 +4681,12 @@ var PDFViewer = (function pdfViewer() { // For pages in landscape mode, fit the page height to the viewer // *unless* the page would thus become too wide to fit horizontally. var horizontalScale = isLandscape ? - Math.min(pageHeightScale, pageWidthScale) : pageWidthScale; + Math.min(pageHeightScale, pageWidthScale) : pageWidthScale; scale = Math.min(MAX_AUTO_SCALE, horizontalScale); break; default: console.error('pdfViewSetScale: \'' + value + - '\' is an unknown zoom value.'); + '\' is an unknown zoom value.'); return; } this._setScaleUpdatePages(scale, value, noScroll, true); @@ -4722,9 +4722,9 @@ var PDFViewer = (function pdfViewer() { var width = 0, height = 0, widthScale, heightScale; var changeOrientation = (pageView.rotation % 180 === 0 ? false : true); var pageWidth = (changeOrientation ? pageView.height : pageView.width) / - pageView.scale / CSS_UNITS; + pageView.scale / CSS_UNITS; var pageHeight = (changeOrientation ? pageView.width : pageView.height) / - pageView.scale / CSS_UNITS; + pageView.scale / CSS_UNITS; var scale = 0; switch (dest[1].name) { case 'XYZ': @@ -4764,9 +4764,9 @@ var PDFViewer = (function pdfViewer() { var vPadding = this.removePageBorders ? 0 : VERTICAL_PADDING; widthScale = (viewerContainer.clientWidth - hPadding) / - width / CSS_UNITS; + width / CSS_UNITS; heightScale = (viewerContainer.clientHeight - vPadding) / - height / CSS_UNITS; + height / CSS_UNITS; scale = Math.min(Math.abs(widthScale), Math.abs(heightScale)); break; default: @@ -4798,8 +4798,8 @@ var PDFViewer = (function pdfViewer() { var currentScale = this._currentScale; var currentScaleValue = this._currentScaleValue; var normalizedScaleValue = - parseFloat(currentScaleValue) === currentScale ? - Math.round(currentScale * 10000) / 100 : currentScaleValue; + parseFloat(currentScaleValue) === currentScale ? + Math.round(currentScale * 10000) / 100 : currentScaleValue; var pageNumber = firstPage.id; var pdfOpenParams = '#page=' + pageNumber; @@ -4807,8 +4807,8 @@ var PDFViewer = (function pdfViewer() { var currentPageView = this._pages[pageNumber - 1]; var container = this.container; var topLeft = currentPageView.getPagePoint( - (container.scrollLeft - firstPage.x), - (container.scrollTop - firstPage.y)); + (container.scrollLeft - firstPage.x), + (container.scrollTop - firstPage.y)); var intLeft = Math.round(topLeft[0]); var intTop = Math.round(topLeft[1]); pdfOpenParams += ',' + intLeft + ',' + intTop; @@ -4889,7 +4889,7 @@ var PDFViewer = (function pdfViewer() { get isHorizontalScrollbarEnabled() { return (this.isInPresentationMode ? - false : (this.container.scrollWidth > this.container.clientWidth)); + false : (this.container.scrollWidth > this.container.clientWidth)); }, _getVisiblePages: function () { @@ -4929,10 +4929,10 @@ var PDFViewer = (function pdfViewer() { } var promise = this.pdfDocument.getPage(pageNumber).then( function (pdfPage) { - pageView.setPdfPage(pdfPage); - this._pagesRequests[pageNumber] = null; - return pdfPage; - }.bind(this)); + pageView.setPdfPage(pdfPage); + this._pagesRequests[pageNumber] = null; + return pdfPage; + }.bind(this)); this._pagesRequests[pageNumber] = promise; return promise; }, @@ -4940,8 +4940,8 @@ var PDFViewer = (function pdfViewer() { forceRendering: function (currentlyVisiblePages) { var visiblePages = currentlyVisiblePages || this._getVisiblePages(); var pageView = this.renderingQueue.getHighestPriority(visiblePages, - this._pages, - this.scroll.down); + this._pages, + this.scroll.down); if (pageView) { this._ensurePdfPageLoaded(pageView).then(function () { this.renderingQueue.renderView(pageView); @@ -5205,28 +5205,28 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() { */ _getPageDrawContext: function PDFThumbnailView_getPageDrawContext(noCtxScale) { - var canvas = document.createElement('canvas'); - canvas.id = this.renderingId; - - canvas.className = 'thumbnailImage'; - canvas.setAttribute('aria-label', mozL10n.get('thumb_page_canvas', - {page: this.id}, 'Thumbnail of Page {{page}}')); - - this.canvas = canvas; - this.div.setAttribute('data-loaded', true); - this.ring.appendChild(canvas); - - var ctx = canvas.getContext('2d'); - var outputScale = getOutputScale(ctx); - canvas.width = (this.canvasWidth * outputScale.sx) | 0; - canvas.height = (this.canvasHeight * outputScale.sy) | 0; - canvas.style.width = this.canvasWidth + 'px'; - canvas.style.height = this.canvasHeight + 'px'; - if (!noCtxScale && outputScale.scaled) { - ctx.scale(outputScale.sx, outputScale.sy); - } - return ctx; - }, + var canvas = document.createElement('canvas'); + canvas.id = this.renderingId; + + canvas.className = 'thumbnailImage'; + canvas.setAttribute('aria-label', mozL10n.get('thumb_page_canvas', + {page: this.id}, 'Thumbnail of Page {{page}}')); + + this.canvas = canvas; + this.div.setAttribute('data-loaded', true); + this.ring.appendChild(canvas); + + var ctx = canvas.getContext('2d'); + var outputScale = getOutputScale(ctx); + canvas.width = (this.canvasWidth * outputScale.sx) | 0; + canvas.height = (this.canvasHeight * outputScale.sy) | 0; + canvas.style.width = this.canvasWidth + 'px'; + canvas.style.height = this.canvasHeight + 'px'; + if (!noCtxScale && outputScale.scaled) { + ctx.scale(outputScale.sx, outputScale.sy); + } + return ctx; + }, draw: function PDFThumbnailView_draw() { if (this.renderingState !== RenderingStates.INITIAL) { @@ -5287,12 +5287,12 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() { var renderTask = this.renderTask = this.pdfPage.render(renderContext); renderTask.promise.then( - function pdfPageRenderCallback() { - thumbnailDrawCallback(null); - }, - function pdfPageRenderError(error) { - thumbnailDrawCallback(error); - } + function pdfPageRenderCallback() { + thumbnailDrawCallback(null); + }, + function pdfPageRenderError(error) { + thumbnailDrawCallback(error); + } ); return promise; }, @@ -5313,7 +5313,7 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() { if (img.width <= 2 * canvas.width) { ctx.drawImage(img, 0, 0, img.width, img.height, - 0, 0, canvas.width, canvas.height); + 0, 0, canvas.width, canvas.height); return; } // drawImage does an awful job of rescaling the image, doing it gradually. @@ -5328,16 +5328,16 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() { reducedHeight >>= 1; } reducedImageCtx.drawImage(img, 0, 0, img.width, img.height, - 0, 0, reducedWidth, reducedHeight); + 0, 0, reducedWidth, reducedHeight); while (reducedWidth > 2 * canvas.width) { reducedImageCtx.drawImage(reducedImage, - 0, 0, reducedWidth, reducedHeight, - 0, 0, reducedWidth >> 1, reducedHeight >> 1); + 0, 0, reducedWidth, reducedHeight, + 0, 0, reducedWidth >> 1, reducedHeight >> 1); reducedWidth >>= 1; reducedHeight >>= 1; } ctx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight, - 0, 0, canvas.width, canvas.height); + 0, 0, canvas.width, canvas.height); } }; @@ -5395,27 +5395,27 @@ var PDFThumbnailViewer = (function PDFThumbnailViewerClosure() { scrollThumbnailIntoView: function PDFThumbnailViewer_scrollThumbnailIntoView(page) { - var selected = document.querySelector('.thumbnail.selected'); - if (selected) { - selected.classList.remove('selected'); - } - var thumbnail = document.getElementById('thumbnailContainer' + page); - if (thumbnail) { - thumbnail.classList.add('selected'); - } - var visibleThumbs = this._getVisibleThumbs(); - var numVisibleThumbs = visibleThumbs.views.length; - - // If the thumbnail isn't currently visible, scroll it into view. - if (numVisibleThumbs > 0) { - var first = visibleThumbs.first.id; - // Account for only one thumbnail being visible. - var last = (numVisibleThumbs > 1 ? visibleThumbs.last.id : first); - if (page <= first || page >= last) { - scrollIntoView(thumbnail, { top: THUMBNAIL_SCROLL_MARGIN }); - } - } - }, + var selected = document.querySelector('.thumbnail.selected'); + if (selected) { + selected.classList.remove('selected'); + } + var thumbnail = document.getElementById('thumbnailContainer' + page); + if (thumbnail) { + thumbnail.classList.add('selected'); + } + var visibleThumbs = this._getVisibleThumbs(); + var numVisibleThumbs = visibleThumbs.views.length; + + // If the thumbnail isn't currently visible, scroll it into view. + if (numVisibleThumbs > 0) { + var first = visibleThumbs.first.id; + // Account for only one thumbnail being visible. + var last = (numVisibleThumbs > 1 ? visibleThumbs.last.id : first); + if (page <= first || page >= last) { + scrollIntoView(thumbnail, { top: THUMBNAIL_SCROLL_MARGIN }); + } + } + }, get pagesRotation() { return this._pagesRotation; @@ -5487,35 +5487,35 @@ var PDFThumbnailViewer = (function PDFThumbnailViewerClosure() { */ _ensurePdfPageLoaded: function PDFThumbnailViewer_ensurePdfPageLoaded(thumbView) { - if (thumbView.pdfPage) { - return Promise.resolve(thumbView.pdfPage); - } - var pageNumber = thumbView.id; - if (this._pagesRequests[pageNumber]) { - return this._pagesRequests[pageNumber]; - } - var promise = this.pdfDocument.getPage(pageNumber).then( - function (pdfPage) { - thumbView.setPdfPage(pdfPage); - this._pagesRequests[pageNumber] = null; - return pdfPage; - }.bind(this)); - this._pagesRequests[pageNumber] = promise; - return promise; - }, + if (thumbView.pdfPage) { + return Promise.resolve(thumbView.pdfPage); + } + var pageNumber = thumbView.id; + if (this._pagesRequests[pageNumber]) { + return this._pagesRequests[pageNumber]; + } + var promise = this.pdfDocument.getPage(pageNumber).then( + function (pdfPage) { + thumbView.setPdfPage(pdfPage); + this._pagesRequests[pageNumber] = null; + return pdfPage; + }.bind(this)); + this._pagesRequests[pageNumber] = promise; + return promise; + }, ensureThumbnailVisible: function PDFThumbnailViewer_ensureThumbnailVisible(page) { - // Ensure that the thumbnail of the current page is visible - // when switching from another view. - scrollIntoView(document.getElementById('thumbnailContainer' + page)); - }, + // Ensure that the thumbnail of the current page is visible + // when switching from another view. + scrollIntoView(document.getElementById('thumbnailContainer' + page)); + }, forceRendering: function () { var visibleThumbs = this._getVisibleThumbs(); var thumbView = this.renderingQueue.getHighestPriority(visibleThumbs, - this.thumbnails, - this.scroll.down); + this.thumbnails, + this.scroll.down); if (thumbView) { this._ensurePdfPageLoaded(thumbView).then(function () { this.renderingQueue.renderView(thumbView); @@ -5814,7 +5814,7 @@ var PDFViewerApplication = { toolbar: document.getElementById('secondaryToolbar'), toggleButton: document.getElementById('secondaryToolbarToggle'), presentationModeButton: - document.getElementById('secondaryPresentationMode'), + document.getElementById('secondaryPresentationMode'), openFile: document.getElementById('secondaryOpenFile'), print: document.getElementById('secondaryPrint'), download: document.getElementById('secondaryDownload'), @@ -5948,7 +5948,7 @@ var PDFViewerApplication = { get supportsFullscreen() { var doc = document.documentElement; var support = !!(doc.requestFullscreen || doc.mozRequestFullScreen || - doc.webkitRequestFullScreen || doc.msRequestFullscreen); + doc.webkitRequestFullScreen || doc.msRequestFullscreen); if (document.fullscreenEnabled === false || document.mozFullScreenEnabled === false || @@ -6066,35 +6066,35 @@ var PDFViewerApplication = { } PDFJS.getDocument(parameters, pdfDataRangeTransport, passwordNeeded, - getDocumentProgress).then( - function getDocumentCallback(pdfDocument) { - self.load(pdfDocument, scale); - self.loading = false; - }, - function getDocumentError(exception) { - var message = exception && exception.message; - var loadingErrorMessage = mozL10n.get('loading_error', null, - 'An error occurred while loading the PDF.'); - - if (exception instanceof PDFJS.InvalidPDFException) { - // change error message also for other builds - loadingErrorMessage = mozL10n.get('invalid_file_error', null, - 'Invalid or corrupted PDF file.'); - } else if (exception instanceof PDFJS.MissingPDFException) { - // special message for missing PDF's - loadingErrorMessage = mozL10n.get('missing_file_error', null, - 'Missing PDF file.'); - } else if (exception instanceof PDFJS.UnexpectedResponseException) { - loadingErrorMessage = mozL10n.get('unexpected_response_error', null, - 'Unexpected server response.'); - } + getDocumentProgress).then( + function getDocumentCallback(pdfDocument) { + self.load(pdfDocument, scale); + self.loading = false; + }, + function getDocumentError(exception) { + var message = exception && exception.message; + var loadingErrorMessage = mozL10n.get('loading_error', null, + 'An error occurred while loading the PDF.'); + + if (exception instanceof PDFJS.InvalidPDFException) { + // change error message also for other builds + loadingErrorMessage = mozL10n.get('invalid_file_error', null, + 'Invalid or corrupted PDF file.'); + } else if (exception instanceof PDFJS.MissingPDFException) { + // special message for missing PDF's + loadingErrorMessage = mozL10n.get('missing_file_error', null, + 'Missing PDF file.'); + } else if (exception instanceof PDFJS.UnexpectedResponseException) { + loadingErrorMessage = mozL10n.get('unexpected_response_error', null, + 'Unexpected server response.'); + } - var moreInfo = { - message: message - }; - self.error(loadingErrorMessage, moreInfo); - self.loading = false; - } + var moreInfo = { + message: message + }; + self.error(loadingErrorMessage, moreInfo); + self.loading = false; + } ); if (args && args.length) { @@ -6127,11 +6127,11 @@ var PDFViewerApplication = { } this.pdfDocument.getData().then( - function getDataSuccess(data) { - var blob = PDFJS.createBlob(data, 'application/pdf'); - downloadManager.download(blob, url, filename); - }, - downloadByUrl // Error occurred try downloading with just the url. + function getDataSuccess(data) { + var blob = PDFJS.createBlob(data, 'application/pdf'); + downloadManager.download(blob, url, filename); + }, + downloadByUrl // Error occurred try downloading with just the url. ).then(null, downloadByUrl); }, @@ -6146,8 +6146,8 @@ var PDFViewerApplication = { self.pendingRefStr = null; // dest array looks like that: var pageNumber = destRef instanceof Object ? - self.pagesRefMap[destRef.num + ' ' + destRef.gen + ' R'] : - (destRef + 1); + self.pagesRefMap[destRef.num + ' ' + destRef.gen + ' R'] : + (destRef + 1); if (pageNumber) { if (pageNumber > self.pagesCount) { pageNumber = self.pagesCount; @@ -6230,8 +6230,8 @@ var PDFViewerApplication = { if (dest instanceof Array) { var destRef = dest[0]; // see navigateTo method for dest format var pageNumber = destRef instanceof Object ? - this.pagesRefMap[destRef.num + ' ' + destRef.gen + ' R'] : - (destRef + 1); + this.pagesRefMap[destRef.num + ' ' + destRef.gen + ' R'] : + (destRef + 1); if (pageNumber) { var pdfOpenParams = this.getAnchorUrl('#page=' + pageNumber); var destKind = dest[1]; @@ -6271,26 +6271,26 @@ var PDFViewerApplication = { */ error: function pdfViewError(message, moreInfo) { var moreInfoText = mozL10n.get('error_version_info', - {version: PDFJS.version || '?', build: PDFJS.build || '?'}, - 'PDF.js v{{version}} (build: {{build}})') + '\n'; + {version: PDFJS.version || '?', build: PDFJS.build || '?'}, + 'PDF.js v{{version}} (build: {{build}})') + '\n'; if (moreInfo) { moreInfoText += - mozL10n.get('error_message', {message: moreInfo.message}, - 'Message: {{message}}'); + mozL10n.get('error_message', {message: moreInfo.message}, + 'Message: {{message}}'); if (moreInfo.stack) { moreInfoText += '\n' + - mozL10n.get('error_stack', {stack: moreInfo.stack}, - 'Stack: {{stack}}'); + mozL10n.get('error_stack', {stack: moreInfo.stack}, + 'Stack: {{stack}}'); } else { if (moreInfo.filename) { moreInfoText += '\n' + - mozL10n.get('error_file', {file: moreInfo.filename}, - 'File: {{file}}'); + mozL10n.get('error_file', {file: moreInfo.filename}, + 'File: {{file}}'); } if (moreInfo.lineNumber) { moreInfoText += '\n' + - mozL10n.get('error_line', {line: moreInfo.lineNumber}, - 'Line: {{line}}'); + mozL10n.get('error_line', {line: moreInfo.lineNumber}, + 'Line: {{line}}'); } } } @@ -6374,7 +6374,7 @@ var PDFViewerApplication = { var pagesCount = pdfDocument.numPages; document.getElementById('numPages').textContent = - mozL10n.get('page_of', {pageCount: pagesCount}, 'of {{pageCount}}'); + mozL10n.get('page_of', {pageCount: pagesCount}, 'of {{pageCount}}'); document.getElementById('pageNumber').max = pagesCount; var id = this.documentFingerprint = pdfDocument.fingerprint; @@ -6417,12 +6417,12 @@ var PDFViewerApplication = { store.get('exists', false)) { var pageNum = store.get('page', '1'); var zoom = self.preferenceDefaultZoomValue || - store.get('zoom', self.pdfViewer.currentScale); + store.get('zoom', self.pdfViewer.currentScale); var left = store.get('scrollLeft', '0'); var top = store.get('scrollTop', '0'); storedHash = 'page=' + pageNum + '&zoom=' + zoom + ',' + - left + ',' + top; + left + ',' + top; } else if (self.preferenceDefaultZoomValue) { storedHash = 'page=1&zoom=' + self.preferenceDefaultZoomValue; } @@ -6513,7 +6513,7 @@ var PDFViewerApplication = { self.documentInfo = info; self.metadata = metadata; - + var pdfTitle; if (metadata && metadata.has('dc:title')) { @@ -6547,7 +6547,7 @@ var PDFViewerApplication = { // Reset 'currentPageNumber', since otherwise the page's scale will be wrong // if 'currentPageNumber' is larger than the number of pages in the file. document.getElementById('pageNumber').value = - this.pdfViewer.currentPageNumber = 1; + this.pdfViewer.currentPageNumber = 1; if (PDFHistory.initialDestination) { this.navigateTo(PDFHistory.initialDestination); @@ -6613,28 +6613,28 @@ var PDFViewerApplication = { // If the zoomArg is a number, it has to get divided by 100. If it's // a string, it should stay as it is. dest = [null, { name: 'XYZ' }, - zoomArgs.length > 1 ? (zoomArgs[1] | 0) : null, - zoomArgs.length > 2 ? (zoomArgs[2] | 0) : null, - (zoomArgNumber ? zoomArgNumber / 100 : zoomArg)]; + zoomArgs.length > 1 ? (zoomArgs[1] | 0) : null, + zoomArgs.length > 2 ? (zoomArgs[2] | 0) : null, + (zoomArgNumber ? zoomArgNumber / 100 : zoomArg)]; } else { if (zoomArg === 'Fit' || zoomArg === 'FitB') { dest = [null, { name: zoomArg }]; } else if ((zoomArg === 'FitH' || zoomArg === 'FitBH') || - (zoomArg === 'FitV' || zoomArg === 'FitBV')) { + (zoomArg === 'FitV' || zoomArg === 'FitBV')) { dest = [null, { name: zoomArg }, - zoomArgs.length > 1 ? (zoomArgs[1] | 0) : null]; + zoomArgs.length > 1 ? (zoomArgs[1] | 0) : null]; } else if (zoomArg === 'FitR') { if (zoomArgs.length !== 5) { console.error('pdfViewSetHash: ' + - 'Not enough parameters for \'FitR\'.'); + 'Not enough parameters for \'FitR\'.'); } else { dest = [null, { name: zoomArg }, - (zoomArgs[1] | 0), (zoomArgs[2] | 0), - (zoomArgs[3] | 0), (zoomArgs[4] | 0)]; + (zoomArgs[1] | 0), (zoomArgs[2] | 0), + (zoomArgs[3] | 0), (zoomArgs[4] | 0)]; } } else { console.error('pdfViewSetHash: \'' + zoomArg + - '\' is not a valid zoom value.'); + '\' is not a valid zoom value.'); } } } @@ -6647,7 +6647,7 @@ var PDFViewerApplication = { if (params.pagemode === 'thumbs' || params.pagemode === 'bookmarks' || params.pagemode === 'attachments') { this.switchSidebarView((params.pagemode === 'bookmarks' ? - 'outline' : params.pagemode), true); + 'outline' : params.pagemode), true); } else if (params.pagemode === 'none' && this.sidebarOpen) { document.getElementById('sidebarToggle').click(); } @@ -6798,15 +6798,15 @@ var PDFViewerApplication = { this.pageStyleSheet = document.createElement('style'); var pageSize = this.pdfViewer.getPageView(0).pdfPage.getViewport(1); this.pageStyleSheet.textContent = - // "size: " is what we need. But also add "A4" because - // Firefox incorrectly reports support for the other value. - '@supports ((size:A4) and (size:1pt 1pt)) {' + - '@page { size: ' + pageSize.width + 'pt ' + pageSize.height + 'pt;}' + - // The canvas and each ancestor node must have a height of 100% to make - // sure that each canvas is printed on exactly one page. - '#printContainer {height:100%}' + - '#printContainer > div {width:100% !important;height:100% !important;}' + - '}'; + // "size: " is what we need. But also add "A4" because + // Firefox incorrectly reports support for the other value. + '@supports ((size:A4) and (size:1pt 1pt)) {' + + '@page { size: ' + pageSize.width + 'pt ' + pageSize.height + 'pt;}' + + // The canvas and each ancestor node must have a height of 100% to make + // sure that each canvas is printed on exactly one page. + '#printContainer {height:100%}' + + '#printContainer > div {width:100% !important;height:100% !important;}' + + '}'; body.appendChild(this.pageStyleSheet); for (i = 0, ii = this.pagesCount; i < ii; ++i) { @@ -6939,7 +6939,7 @@ function webViewerInitialized() { } if ('ignorecurrentpositiononzoom' in hashParams) { IGNORE_CURRENT_POSITION_ON_ZOOM = - (hashParams['ignorecurrentpositiononzoom'] === 'true'); + (hashParams['ignorecurrentpositiononzoom'] === 'true'); } if ('locale' in hashParams) { locale = hashParams['locale']; @@ -6976,7 +6976,7 @@ function webViewerInitialized() { if (!PDFViewerApplication.supportsFullscreen) { //document.getElementById('presentationMode').classList.add('hidden'); document.getElementById('secondaryPresentationMode'). - classList.add('hidden'); + classList.add('hidden'); } if (PDFViewerApplication.supportsIntegratedFind) { @@ -6985,7 +6985,7 @@ function webViewerInitialized() { // Listen for unsupported features to trigger the fallback UI. PDFJS.UnsupportedManager.listen( - PDFViewerApplication.fallback.bind(PDFViewerApplication)); + PDFViewerApplication.fallback.bind(PDFViewerApplication)); // Suppress context menus for some controls document.getElementById('scaleSelect').oncontextmenu = noContextMenuHandler; @@ -7002,52 +7002,52 @@ function webViewerInitialized() { }, true); document.getElementById('sidebarToggle').addEventListener('click', - function() { - this.classList.toggle('toggled'); - outerContainer.classList.add('sidebarMoving'); - outerContainer.classList.toggle('sidebarOpen'); - PDFViewerApplication.sidebarOpen = - outerContainer.classList.contains('sidebarOpen'); - if (PDFViewerApplication.sidebarOpen) { - PDFViewerApplication.refreshThumbnailViewer(); - } - PDFViewerApplication.forceRendering(); - }); + function() { + this.classList.toggle('toggled'); + outerContainer.classList.add('sidebarMoving'); + outerContainer.classList.toggle('sidebarOpen'); + PDFViewerApplication.sidebarOpen = + outerContainer.classList.contains('sidebarOpen'); + if (PDFViewerApplication.sidebarOpen) { + PDFViewerApplication.refreshThumbnailViewer(); + } + PDFViewerApplication.forceRendering(); + }); document.getElementById('viewThumbnail').addEventListener('click', - function() { - PDFViewerApplication.switchSidebarView('thumbs'); - }); + function() { + PDFViewerApplication.switchSidebarView('thumbs'); + }); document.getElementById('viewOutline').addEventListener('click', - function() { - PDFViewerApplication.switchSidebarView('outline'); - }); + function() { + PDFViewerApplication.switchSidebarView('outline'); + }); document.getElementById('viewAttachments').addEventListener('click', - function() { - PDFViewerApplication.switchSidebarView('attachments'); - }); + function() { + PDFViewerApplication.switchSidebarView('attachments'); + }); document.getElementById('previous').addEventListener('click', - function() { - PDFViewerApplication.page--; - }); + function() { + PDFViewerApplication.page--; + }); document.getElementById('next').addEventListener('click', - function() { - PDFViewerApplication.page++; - }); + function() { + PDFViewerApplication.page++; + }); document.getElementById('zoomIn').addEventListener('click', - function() { - PDFViewerApplication.zoomIn(); - }); + function() { + PDFViewerApplication.zoomIn(); + }); document.getElementById('zoomOut').addEventListener('click', - function() { - PDFViewerApplication.zoomOut(); - }); + function() { + PDFViewerApplication.zoomOut(); + }); document.getElementById('pageNumber').addEventListener('click', function() { this.select(); @@ -7063,21 +7063,21 @@ function webViewerInitialized() { }); document.getElementById('scaleSelect').addEventListener('change', - function() { - PDFViewerApplication.setScale(this.value, false); - }); + function() { + PDFViewerApplication.setScale(this.value, false); + }); document.getElementById('presentationMode').addEventListener('click', - SecondaryToolbar.presentationModeClick.bind(SecondaryToolbar)); + SecondaryToolbar.presentationModeClick.bind(SecondaryToolbar)); /**document.getElementById('openFile').addEventListener('click', - SecondaryToolbar.openFileClick.bind(SecondaryToolbar));*/ + SecondaryToolbar.openFileClick.bind(SecondaryToolbar));*/ - /*document.getElementById('print').addEventListener('click', - SecondaryToolbar.printClick.bind(SecondaryToolbar)); + document.getElementById('print').addEventListener('click', + SecondaryToolbar.printClick.bind(SecondaryToolbar)); - document.getElementById('download').addEventListener('click', - SecondaryToolbar.downloadClick.bind(SecondaryToolbar));*/ + // document.getElementById('download').addEventListener('click', + // SecondaryToolbar.downloadClick.bind(SecondaryToolbar)); if (file && file.lastIndexOf('file:', 0) === 0) { @@ -7095,7 +7095,7 @@ function webViewerInitialized() { xhr.send(); } catch (e) { PDFViewerApplication.error(mozL10n.get('loading_error', null, - 'An error occurred while loading the PDF.'), e); + 'An error occurred while loading the PDF.'), e); } return; } @@ -7114,7 +7114,7 @@ document.addEventListener('pagerendered', function (e) { if (PDFViewerApplication.sidebarOpen) { var thumbnailView = PDFViewerApplication.pdfThumbnailViewer. - getThumbnail(pageIndex); + getThumbnail(pageIndex); thumbnailView.setImage(pageView); } @@ -7124,7 +7124,7 @@ document.addEventListener('pagerendered', function (e) { if (pageView.error) { PDFViewerApplication.error(mozL10n.get('rendering_error', null, - 'An error occurred while rendering the page.'), pageView.error); + 'An error occurred while rendering the page.'), pageView.error); } // If the page is still visible when it has finished rendering, @@ -7146,8 +7146,8 @@ window.addEventListener('presentationmodechanged', function (e) { var active = e.detail.active; var switchInProgress = e.detail.switchInProgress; PDFViewerApplication.pdfViewer.presentationModeState = - switchInProgress ? PresentationModeState.CHANGING : - active ? PresentationModeState.FULLSCREEN : PresentationModeState.NORMAL; + switchInProgress ? PresentationModeState.CHANGING : + active ? PresentationModeState.FULLSCREEN : PresentationModeState.NORMAL; }); function updateViewarea() { @@ -7184,7 +7184,7 @@ window.addEventListener('updateviewarea', function (evt) { // Show/hide the loading indicator in the page number input element. var pageNumberInput = document.getElementById('pageNumber'); var currentPage = - PDFViewerApplication.pdfViewer.getPageView(PDFViewerApplication.page - 1); + PDFViewerApplication.pdfViewer.getPageView(PDFViewerApplication.page - 1); if (currentPage.renderingState === RenderingStates.FINISHED) { pageNumberInput.classList.remove(PAGE_NUMBER_LOADING_INDICATOR); @@ -7196,9 +7196,9 @@ window.addEventListener('updateviewarea', function (evt) { window.addEventListener('resize', function webViewerResize(evt) { if (PDFViewerApplication.initialized && (document.getElementById('pageAutoOption').selected || - /* Note: the scale is constant for |pageActualOption|. */ - document.getElementById('pageFitOption').selected || - document.getElementById('pageWidthOption').selected)) { + /* Note: the scale is constant for |pageActualOption|. */ + document.getElementById('pageFitOption').selected || + document.getElementById('pageWidthOption').selected)) { var selectedScale = document.getElementById('scaleSelect').value; PDFViewerApplication.setScale(selectedScale, false); } @@ -7240,7 +7240,7 @@ window.addEventListener('change', function webViewerChange(evt) { // URL does not reflect proper document location - hiding some icons. document.getElementById('viewBookmark').setAttribute('hidden', 'true'); document.getElementById('secondaryViewBookmark'). - setAttribute('hidden', 'true'); + setAttribute('hidden', 'true'); document.getElementById('download').setAttribute('hidden', 'true'); document.getElementById('secondaryDownload').setAttribute('hidden', 'true'); }, true); @@ -7276,9 +7276,9 @@ window.addEventListener('localized', function localized(evt) { select.setAttribute('style', 'min-width: inherit;'); var width = select.clientWidth + SCALE_SELECT_CONTAINER_PADDING; select.setAttribute('style', 'min-width: ' + - (width + SCALE_SELECT_PADDING) + 'px;'); + (width + SCALE_SELECT_PADDING) + 'px;'); container.setAttribute('style', 'min-width: ' + width + 'px; ' + - 'max-width: ' + width + 'px;'); + 'max-width: ' + width + 'px;'); } // Set the 'max-height' CSS property of the secondary toolbar. @@ -7295,9 +7295,9 @@ window.addEventListener('scalechange', function scalechange(evt) { if (!PDFViewerApplication.updateScaleControls && (document.getElementById('pageAutoOption').selected || - document.getElementById('pageActualOption').selected || - document.getElementById('pageFitOption').selected || - document.getElementById('pageWidthOption').selected)) { + document.getElementById('pageActualOption').selected || + document.getElementById('pageFitOption').selected || + document.getElementById('pageWidthOption').selected)) { updateViewarea(); return; } @@ -7312,7 +7312,7 @@ window.addEventListener('scalechange', function scalechange(evt) { if (!predefinedValueFound) { var customScale = Math.round(evt.scale * 10000) / 100; customScaleOption.textContent = - mozL10n.get('page_scale_percent', { scale: customScale }, '{{scale}}%'); + mozL10n.get('page_scale_percent', { scale: customScale }, '{{scale}}%'); customScaleOption.selected = true; } updateViewarea(); @@ -7356,13 +7356,13 @@ window.addEventListener('pagechange', function pagechange(evt) { function handleMouseWheel(evt) { var MOUSE_WHEEL_DELTA_FACTOR = 40; var ticks = (evt.type === 'DOMMouseScroll') ? -evt.detail : - evt.wheelDelta / MOUSE_WHEEL_DELTA_FACTOR; + evt.wheelDelta / MOUSE_WHEEL_DELTA_FACTOR; var direction = (ticks < 0) ? 'zoomOut' : 'zoomIn'; if (PDFViewerApplication.pdfViewer.isInPresentationMode) { //evt.preventDefault(); PDFViewerApplication.scrollPresentationMode(ticks * - MOUSE_WHEEL_DELTA_FACTOR); + MOUSE_WHEEL_DELTA_FACTOR); } else if (evt.ctrlKey || evt.metaKey) { // Only zoom the pages, not the entire viewer. evt.preventDefault(); @@ -7387,9 +7387,9 @@ window.addEventListener('keydown', function keydown(evt) { var handled = false; var cmd = (evt.ctrlKey ? 1 : 0) | - (evt.altKey ? 2 : 0) | - (evt.shiftKey ? 4 : 0) | - (evt.metaKey ? 8 : 0); + (evt.altKey ? 2 : 0) | + (evt.shiftKey ? 4 : 0) | + (evt.metaKey ? 8 : 0); var pdfViewer = PDFViewerApplication.pdfViewer; var isViewerInPresentationMode = pdfViewer && pdfViewer.isInPresentationMode; @@ -7408,7 +7408,7 @@ window.addEventListener('keydown', function keydown(evt) { case 71: // g if (!PDFViewerApplication.supportsIntegratedFind) { PDFViewerApplication.findBar.dispatchEvent('again', - cmd === 5 || cmd === 12); + cmd === 5 || cmd === 12); handled = true; } break; @@ -7444,14 +7444,14 @@ window.addEventListener('keydown', function keydown(evt) { } // CTRL or META without shift - /* if (cmd === 1 || cmd === 8) { - switch (evt.keyCode) { - case 83: // s - PDFViewerApplication.download(); - handled = true; - break; - } - }*/ + /* if (cmd === 1 || cmd === 8) { + switch (evt.keyCode) { + case 83: // s + PDFViewerApplication.download(); + handled = true; + break; + } + }*/ // CTRL+ALT or Option+Command if (cmd === 3 || cmd === 10) { @@ -7633,8 +7633,8 @@ window.addEventListener('afterprint', function afterPrint(evt) { // Waiting for first animation. PDFViewerApplication.animationStartedPromise = new Promise( function (resolve) { - window.requestAnimationFrame(resolve); - }); + window.requestAnimationFrame(resolve); + }); })();