Commit d7124004ce86eb276f3da3fb22f8fe4d15e0f3b1

Authored by 潘钊
2 parents d2d815f5 d3b6eb98

Merge branch 'minhang' of http://222.66.0.204:8090/panzhaov5/bsth_control into minhang

# Conflicts:
#	src/main/java/com/bsth/data/schedule/late_adjust/LateAdjustHandle.java
#	src/main/java/com/bsth/data/schedule/late_adjust/ScheduleLateThread.java
#	src/main/resources/static/real_control_v2/fragments/north/nav/dataManager/cars_move.html
Showing 30 changed files with 2448 additions and 2272 deletions
src/main/java/com/bsth/controller/forms/ExportController.java
@@ -28,6 +28,7 @@ import com.bsth.entity.mcy_forms.Vehicleloading; @@ -28,6 +28,7 @@ import com.bsth.entity.mcy_forms.Vehicleloading;
28 import com.bsth.entity.mcy_forms.Waybillday; 28 import com.bsth.entity.mcy_forms.Waybillday;
29 import com.bsth.service.forms.ExportService; 29 import com.bsth.service.forms.ExportService;
30 import com.bsth.service.forms.FormsService; 30 import com.bsth.service.forms.FormsService;
  31 +import com.bsth.util.Arith;
31 import com.bsth.util.ReportUtils; 32 import com.bsth.util.ReportUtils;
32 33
33 @RestController 34 @RestController
@@ -167,7 +168,7 @@ public class ExportController { @@ -167,7 +168,7 @@ public class ExportController {
167 } 168 }
168 169
169 // 路单数据报表 170 // 路单数据报表
170 - @RequestMapping(value = "/singledataExport", method = RequestMethod.POST) 171 + @RequestMapping(value = "/singledataExport", method = RequestMethod.GET)
171 public List<Map<String, Object>> singledataExport(@RequestParam Map<String, Object> map) { 172 public List<Map<String, Object>> singledataExport(@RequestParam Map<String, Object> map) {
172 SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"), sdfSimple = new SimpleDateFormat("yyyyMMdd"); 173 SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"), sdfSimple = new SimpleDateFormat("yyyyMMdd");
173 List<Iterator<?>> listI = new ArrayList<Iterator<?>>(); 174 List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
@@ -213,12 +214,12 @@ public class ExportController { @@ -213,12 +214,12 @@ public class ExportController {
213 } 214 }
214 215
215 // 车辆加注 216 // 车辆加注
216 - @RequestMapping(value = "/vehicleloadingExport", method = RequestMethod.POST) 217 + @RequestMapping(value = "/vehicleloadingExport", method = RequestMethod.GET)
217 public List<Map<String, Object>> vehicleloadingExport(@RequestParam Map<String, Object> map) { 218 public List<Map<String, Object>> vehicleloadingExport(@RequestParam Map<String, Object> map) {
218 SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"), sdfSimple = new SimpleDateFormat("yyyyMMdd"); 219 SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"), sdfSimple = new SimpleDateFormat("yyyyMMdd");
219 List<Iterator<?>> listI = new ArrayList<Iterator<?>>(); 220 List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
220 ReportUtils ee = new ReportUtils(); 221 ReportUtils ee = new ReportUtils();
221 - List<Vehicleloading> vehicleloading = formsService.vehicleloading(map.get("gsdmVehic").toString(),map.get("fgsdmVehic").toString(),map.get("line").toString(), 222 + List<Vehicleloading> vehicleloading = formsService.vehicleloading(map.get("line").toString(),
222 map.get("data").toString()); 223 map.get("data").toString());
223 List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>(); 224 List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
224 int i = 1; 225 int i = 1;
@@ -558,17 +559,13 @@ public class ExportController { @@ -558,17 +559,13 @@ public class ExportController {
558 List<Daily> allline = formsService.daily(map); 559 List<Daily> allline = formsService.daily(map);
559 560
560 List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>(); 561 List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
561 - Float zgl=0f;  
562 - Float ks=0f;  
563 - Float yh=0f;  
564 - Float bc=0f; 562 + double zgl=0.0;
  563 + double ks=0.0;
  564 + double yh=0.0;
  565 + int bc=0;
565 Map<String, Object> m ; 566 Map<String, Object> m ;
566 for (Daily d : allline) { 567 for (Daily d : allline) {
567 m = new HashMap<String, Object>(); 568 m = new HashMap<String, Object>();
568 - zgl +=d.getZlc()==""?0f:Float.valueOf(d.getZlc());  
569 - ks +=d.getJzl1()==""?0f:Float.valueOf(d.getJzl1());  
570 - yh +=d.getYh()==""?0f:Float.valueOf(d.getYh());  
571 - bc +=d.getBc()==""?0f:Float.valueOf(d.getBc());  
572 m.put("zbh", d.getZbh()); 569 m.put("zbh", d.getZbh());
573 m.put("jgh",d.getJgh()); 570 m.put("jgh",d.getJgh());
574 m.put("jName", d.getjName()); 571 m.put("jName", d.getjName());
@@ -576,9 +573,13 @@ public class ExportController { @@ -576,9 +573,13 @@ public class ExportController {
576 m.put("jzl1", d.getJzl1()); 573 m.put("jzl1", d.getJzl1());
577 m.put("yh", d.getYh()); 574 m.put("yh", d.getYh());
578 m.put("bc", d.getBc()); 575 m.put("bc", d.getBc());
  576 + zgl =Arith.add(zgl, d.getZlc());
  577 + ks =Arith.add(ks, d.getJzl1());
  578 + yh =Arith.add(yh, d.getYh());
  579 + bc +=Integer.parseInt(d.getBc());
579 580
580 resList.add(m); 581 resList.add(m);
581 - } 582 + }
582 583
583 m=new HashMap<String,Object>(); 584 m=new HashMap<String,Object>();
584 m.put("total_zgl", zgl); 585 m.put("total_zgl", zgl);
src/main/java/com/bsth/controller/forms/MCY_FormsController.java
@@ -73,17 +73,16 @@ public class MCY_FormsController { @@ -73,17 +73,16 @@ public class MCY_FormsController {
73 } 73 }
74 74
75 // 路单数据 75 // 路单数据
76 - @RequestMapping(value = "/singledata", method = RequestMethod.POST) 76 + @RequestMapping(value = "/singledata", method = RequestMethod.GET)
77 public List<Singledata> singledata(@RequestParam Map<String, Object> map) { 77 public List<Singledata> singledata(@RequestParam Map<String, Object> map) {
78 78
79 return formsService.singledata(map); 79 return formsService.singledata(map);
80 } 80 }
81 81
82 // 车辆加注 82 // 车辆加注
83 - @RequestMapping(value = "/vehicleloading", method = RequestMethod.POST)  
84 - public List<Vehicleloading> vehicleloading(@RequestParam String gsdmVehic, @RequestParam String fgsdmVehic,  
85 - @RequestParam String line, @RequestParam String data) {  
86 - return formsService.vehicleloading(gsdmVehic, fgsdmVehic, line, data); 83 + @RequestMapping(value = "/vehicleloading", method = RequestMethod.GET)
  84 + public List<Vehicleloading> vehicleloading(@RequestParam String line, @RequestParam String data) {
  85 + return formsService.vehicleloading(line, data);
87 } 86 }
88 87
89 // 运营服务阶段报表 88 // 运营服务阶段报表
src/main/java/com/bsth/controller/oil/YlbController.java
@@ -238,9 +238,11 @@ public class YlbController extends BaseController&lt;Ylb, Integer&gt;{ @@ -238,9 +238,11 @@ public class YlbController extends BaseController&lt;Ylb, Integer&gt;{
238 Map<String, Object> m = new HashMap<String, Object>(); 238 Map<String, Object> m = new HashMap<String, Object>();
239 m.put("rq", y.getRq()); 239 m.put("rq", y.getRq());
240 m.put("gsname",y.getGsname() ); 240 m.put("gsname",y.getGsname() );
  241 + m.put("fgsname", y.getFgsname());
241 m.put("xlname", y.getXlname()); 242 m.put("xlname", y.getXlname());
242 m.put("nbbm", y.getNbbm()); 243 m.put("nbbm", y.getNbbm());
243 m.put("jsy", y.getJsy()); 244 m.put("jsy", y.getJsy());
  245 + m.put("name", y.getName());
244 m.put("jzl", y.getJzl()); 246 m.put("jzl", y.getJzl());
245 m.put("czlc", y.getCzlc()); 247 m.put("czlc", y.getCzlc());
246 m.put("jzlc", y.getJzlc()); 248 m.put("jzlc", y.getJzlc());
src/main/java/com/bsth/controller/realcontrol/DataManagerController.java
1 -package com.bsth.controller.realcontrol;  
2 -  
3 -import com.bsth.service.realcontrol.DataManagerService;  
4 -import org.apache.commons.lang3.StringEscapeUtils;  
5 -import org.springframework.beans.factory.annotation.Autowired;  
6 -import org.springframework.web.bind.annotation.RequestMapping;  
7 -import org.springframework.web.bind.annotation.RequestParam;  
8 -import org.springframework.web.bind.annotation.RestController;  
9 -  
10 -import java.util.Map;  
11 -  
12 -/**  
13 - * 数据管理,包括从老系统的数据迁移。新系统的数据校验等  
14 - * Created by panzhao on 2017/4/17.  
15 - */  
16 -@RestController  
17 -@RequestMapping("dataManager")  
18 -public class DataManagerController {  
19 -  
20 - @Autowired  
21 - DataManagerService dataManagerService;  
22 -  
23 - @RequestMapping("cars/old_now")  
24 - public Map<String, Object> carInfos(@RequestParam Integer lineId){  
25 - return dataManagerService.carInfos(lineId);  
26 - }  
27 -  
28 - @RequestMapping("car/updateDevices")  
29 - public Map<String, Object> updateDevices(@RequestParam String jsonStr){  
30 - jsonStr = StringEscapeUtils.unescapeHtml4(jsonStr);  
31 - return dataManagerService.updateDevices(jsonStr);  
32 - }  
33 -} 1 +package com.bsth.controller.realcontrol;
  2 +
  3 +import com.bsth.service.realcontrol.DataManagerService;
  4 +import org.apache.commons.lang3.StringEscapeUtils;
  5 +import org.springframework.beans.factory.annotation.Autowired;
  6 +import org.springframework.web.bind.annotation.RequestMapping;
  7 +import org.springframework.web.bind.annotation.RequestParam;
  8 +import org.springframework.web.bind.annotation.RestController;
  9 +
  10 +import java.util.Map;
  11 +
  12 +/**
  13 + * 数据管理,包括从老系统的数据迁移。新系统的数据校验等
  14 + * Created by panzhao on 2017/4/17.
  15 + */
  16 +@RestController
  17 +@RequestMapping("dataManager")
  18 +public class DataManagerController {
  19 +
  20 + @Autowired
  21 + DataManagerService dataManagerService;
  22 +
  23 + @RequestMapping("cars/old_now")
  24 + public Map<String, Object> carInfos(@RequestParam Integer lineId){
  25 + return dataManagerService.carInfos(lineId);
  26 + }
  27 +
  28 + @RequestMapping("car/updateDevices")
  29 + public Map<String, Object> updateDevices(@RequestParam String jsonStr){
  30 + jsonStr = StringEscapeUtils.unescapeHtml4(jsonStr);
  31 + return dataManagerService.updateDevices(jsonStr);
  32 + }
  33 +}
src/main/java/com/bsth/data/BasicData.java
@@ -332,7 +332,8 @@ public class BasicData implements CommandLineRunner { @@ -332,7 +332,8 @@ public class BasicData implements CommandLineRunner {
332 } 332 }
333 333
334 perTempMap.put(jobCode, p); 334 perTempMap.put(jobCode, p);
335 - allPersonMap.put(jobCode, p.getPersonnelName()); 335 +
  336 + allPersonMap.put(jobCode.substring(jobCode.indexOf("-")+1), p.getPersonnelName());
336 } 337 }
337 338
338 jsyMap = jsyTempMap; 339 jsyMap = jsyTempMap;
src/main/java/com/bsth/data/schedule/late_adjust/LateAdjustHandle.java
@@ -136,4 +136,4 @@ public class LateAdjustHandle implements ApplicationContextAware{ @@ -136,4 +136,4 @@ public class LateAdjustHandle implements ApplicationContextAware{
136 lineConfigData = applicationContext.getBean(LineConfigData.class); 136 lineConfigData = applicationContext.getBean(LineConfigData.class);
137 sendUtils = applicationContext.getBean(SendUtils.class); 137 sendUtils = applicationContext.getBean(SendUtils.class);
138 } 138 }
139 -} 139 -}
  140 +}
140 \ No newline at end of file 141 \ No newline at end of file
src/main/java/com/bsth/data/schedule/late_adjust/ScheduleLateThread.java
@@ -15,10 +15,10 @@ import java.util.Comparator; @@ -15,10 +15,10 @@ import java.util.Comparator;
15 import java.util.List; 15 import java.util.List;
16 16
17 /** 17 /**
18 - *  
19 - * @ClassName: ScheduleLateThread  
20 - * @Description: TODO(班次误点扫描线程)  
21 - * @author PanZhao 18 + *
  19 + * @ClassName: ScheduleLateThread
  20 + * @Description: TODO(班次误点扫描线程)
  21 + * @author PanZhao
22 * @date 2016年8月31日 下午3:09:02 22 * @date 2016年8月31日 下午3:09:02
23 * 23 *
24 */ 24 */
@@ -27,20 +27,20 @@ public class ScheduleLateThread extends Thread{ @@ -27,20 +27,20 @@ public class ScheduleLateThread extends Thread{
27 27
28 @Autowired 28 @Autowired
29 DayOfSchedule dayOfSchedule; 29 DayOfSchedule dayOfSchedule;
30 - 30 +
31 @Autowired 31 @Autowired
32 SendUtils sendUtils; 32 SendUtils sendUtils;
33 - 33 +
34 private static Comparator<ScheduleRealInfo> cpm = new ScheduleComparator.FCSJ(); 34 private static Comparator<ScheduleRealInfo> cpm = new ScheduleComparator.FCSJ();
35 - 35 +
36 @Override 36 @Override
37 public void run() { 37 public void run() {
38 List<ScheduleRealInfo> all = new ArrayList<>(dayOfSchedule.findAll()); 38 List<ScheduleRealInfo> all = new ArrayList<>(dayOfSchedule.findAll());
39 Collections.sort(all, cpm); 39 Collections.sort(all, cpm);
40 - 40 +
41 long t = System.currentTimeMillis(); 41 long t = System.currentTimeMillis();
42 int size = all.size(); 42 int size = all.size();
43 - 43 +
44 ScheduleRealInfo sch; 44 ScheduleRealInfo sch;
45 for(int i = 0; i < size; i ++){ 45 for(int i = 0; i < size; i ++){
46 sch = all.get(i); 46 sch = all.get(i);
@@ -67,4 +67,4 @@ public class ScheduleLateThread extends Thread{ @@ -67,4 +67,4 @@ public class ScheduleLateThread extends Thread{
67 } 67 }
68 } 68 }
69 } 69 }
70 -} 70 -}
  71 +}
71 \ No newline at end of file 72 \ No newline at end of file
src/main/java/com/bsth/entity/oil/Ylb.java
@@ -63,6 +63,11 @@ public class Ylb { @@ -63,6 +63,11 @@ public class Ylb {
63 @Transient 63 @Transient
64 private String gsname; 64 private String gsname;
65 65
  66 + @Transient
  67 + private String fgsname;
  68 +
  69 + @Transient
  70 + private String name;
66 71
67 public Integer getId() { 72 public Integer getId() {
68 return id; 73 return id;
@@ -299,6 +304,22 @@ public class Ylb { @@ -299,6 +304,22 @@ public class Ylb {
299 } 304 }
300 305
301 306
  307 + public String getFgsname() {
  308 + return BasicData.businessFgsCodeNameMap.get(this.fgsdm+"_"+this.ssgsdm);
  309 + }
  310 +
  311 + public void setFgsname(String fgsname) {
  312 + this.fgsname = fgsname;
  313 + }
  314 +
  315 + public String getName() {
  316 + return BasicData.allPerson.get(this.jsy);
  317 + }
  318 +
  319 + public void setName(String name) {
  320 + this.name = name;
  321 + }
  322 +
302 323
303 324
304 325
src/main/java/com/bsth/service/excep/impl/OfflineServiceImpl.java
@@ -56,7 +56,7 @@ public class OfflineServiceImpl implements OfflineService { @@ -56,7 +56,7 @@ public class OfflineServiceImpl implements OfflineService {
56 Object date=map.get("date"); 56 Object date=map.get("date");
57 57
58 if(line!=null){ 58 if(line!=null){
59 - sql +=" and line like'%"+line.toString()+"%'"; 59 + sql +=" and line like'%"+line.toString().trim()+"%'";
60 } 60 }
61 61
62 if(nbbm!=null){ 62 if(nbbm!=null){
@@ -131,6 +131,7 @@ public class OfflineServiceImpl implements OfflineService { @@ -131,6 +131,7 @@ public class OfflineServiceImpl implements OfflineService {
131 @SuppressWarnings("unchecked") 131 @SuppressWarnings("unchecked")
132 public PageObject <Offline> Pagequery(Map<String, Object> map) { 132 public PageObject <Offline> Pagequery(Map<String, Object> map) {
133 // TODO Auto-generated method stub 133 // TODO Auto-generated method stub
  134 +
134 String sql="select count(*) record from bsth_c_offline where 1=1 "; 135 String sql="select count(*) record from bsth_c_offline where 1=1 ";
135 136
136 Object line=map.get("line"); 137 Object line=map.get("line");
@@ -140,7 +141,7 @@ public class OfflineServiceImpl implements OfflineService { @@ -140,7 +141,7 @@ public class OfflineServiceImpl implements OfflineService {
140 Object date=map.get("date"); 141 Object date=map.get("date");
141 142
142 if(line!=null){ 143 if(line!=null){
143 - sql +=" and line like'%"+line.toString()+"%'"; 144 + sql +=" and line like'%"+line.toString().trim()+"%'";
144 } 145 }
145 146
146 if(nbbm!=null){ 147 if(nbbm!=null){
@@ -194,10 +195,9 @@ public class OfflineServiceImpl implements OfflineService { @@ -194,10 +195,9 @@ public class OfflineServiceImpl implements OfflineService {
194 Date datess = new Date(d1); 195 Date datess = new Date(d1);
195 String dates=new SimpleDateFormat("yyyy-MM-dd").format(datess); 196 String dates=new SimpleDateFormat("yyyy-MM-dd").format(datess);
196 String sk=new SimpleDateFormat("HH:mm").format(datess); 197 String sk=new SimpleDateFormat("HH:mm").format(datess);
197 - String sqlPbb="select * from bsth_c_s_sp_info_real where cl_zbh='"+nbbm2+"' and"  
198 - + " real_exec_date='"+dates+"' ";  
199 -// + "and fcsj_actual > '"+sk+"' ";  
200 -// + "and '"+sk+"' <dfsj"; 198 + String sqlPbb="SELECT * FROM ( select lp_name,cl_zbh,j_gh,j_name,MIN(fcsj) as fcsj,MAX(zdsj) as ddsj"
  199 + + " from bsth_c_s_sp_info_real where cl_zbh='"+nbbm2+"' and"
  200 + + " real_exec_date='"+dates+"' GROUP BY cl_zbh,lp_name,j_gh,j_name ) t WHERE t.fcsj<='"+sk+"' AND t.ddsj>='"+sk+"' " ;
201 List<ScheduleRealInfo> pbb =jdbcTemplate.query(sqlPbb, 201 List<ScheduleRealInfo> pbb =jdbcTemplate.query(sqlPbb,
202 new RowMapper<ScheduleRealInfo>(){ 202 new RowMapper<ScheduleRealInfo>(){
203 @Override 203 @Override
@@ -208,20 +208,15 @@ public class OfflineServiceImpl implements OfflineService { @@ -208,20 +208,15 @@ public class OfflineServiceImpl implements OfflineService {
208 s.setLpName(rs.getString("lp_name")); 208 s.setLpName(rs.getString("lp_name"));
209 return s; 209 return s;
210 } 210 }
211 - });  
212 - if(pbb.size()>0){  
213 - list.get(i).setJsy(pbb.get(0).getjGh()+"/"+pbb.get(0).getjName());  
214 - list.get(i).setLpname(pbb.get(0).getLpName());  
215 -  
216 - }  
217 - 211 + });
  212 + if(pbb.size()>0){
  213 + list.get(i).setJsy(pbb.get(0).getjGh()+"/"+pbb.get(0).getjName());
  214 + list.get(i).setLpname(pbb.get(0).getLpName());
  215 + }
218 } 216 }
  217 +
219 PageObject<Offline> pageObject = pageHelper.getPageObject(); 218 PageObject<Offline> pageObject = pageHelper.getPageObject();
220 -// for (int i = 0; i < list.size(); i++) {  
221 -// if(list.get(i).getLpname()!=null){  
222 pageObject.setDataList(list); 219 pageObject.setDataList(list);
223 -// }  
224 -// }  
225 220
226 return pageObject; 221 return pageObject;
227 } 222 }
src/main/java/com/bsth/service/excep/impl/OutboundServiceImpl.java
@@ -43,7 +43,7 @@ public class OutboundServiceImpl implements OutboundService{ @@ -43,7 +43,7 @@ public class OutboundServiceImpl implements OutboundService{
43 Object updown=map.get("updown"); 43 Object updown=map.get("updown");
44 Object date=map.get("date"); 44 Object date=map.get("date");
45 if(line!=null){ 45 if(line!=null){
46 - sql +=" and line like'%"+line.toString()+"%'"; 46 + sql +=" and line like'%"+line.toString().trim()+"%'";
47 } 47 }
48 48
49 if(nbbm!=null){ 49 if(nbbm!=null){
@@ -105,7 +105,7 @@ public class OutboundServiceImpl implements OutboundService{ @@ -105,7 +105,7 @@ public class OutboundServiceImpl implements OutboundService{
105 outbound.setTimestampDate(sdf.format(new Date(outbound.getTimestamp()))); 105 outbound.setTimestampDate(sdf.format(new Date(outbound.getTimestamp())));
106 outbound.setUpDown(Integer.valueOf(rs.getObject("up_down").toString())); 106 outbound.setUpDown(Integer.valueOf(rs.getObject("up_down").toString()));
107 outbound.setVehicle(BasicData.deviceId2NbbmMap.get(rs.getObject("vehicle").toString())); 107 outbound.setVehicle(BasicData.deviceId2NbbmMap.get(rs.getObject("vehicle").toString()));
108 - outbound.setLocation(rs.getObject("location")==null?"":rs.getObject("location").toString()); 108 +// outbound.setLocation(rs.getObject("location")==null?"":rs.getObject("location").toString());
109 list.add(outbound); 109 list.add(outbound);
110 } 110 }
111 return list; 111 return list;
@@ -120,7 +120,7 @@ public class OutboundServiceImpl implements OutboundService{ @@ -120,7 +120,7 @@ public class OutboundServiceImpl implements OutboundService{
120 Object updown=map.get("updown"); 120 Object updown=map.get("updown");
121 Object date=map.get("date"); 121 Object date=map.get("date");
122 if(line!=null){ 122 if(line!=null){
123 - sql +=" and line like '%"+line.toString()+"%'"; 123 + sql +=" and line like '%"+line.toString().trim()+"%'";
124 124
125 } 125 }
126 126
@@ -174,10 +174,9 @@ public class OutboundServiceImpl implements OutboundService{ @@ -174,10 +174,9 @@ public class OutboundServiceImpl implements OutboundService{
174 Date datess = new Date(d1); 174 Date datess = new Date(d1);
175 String dates=new SimpleDateFormat("yyyy-MM-dd").format(datess); 175 String dates=new SimpleDateFormat("yyyy-MM-dd").format(datess);
176 String sk=new SimpleDateFormat("HH:mm").format(datess); 176 String sk=new SimpleDateFormat("HH:mm").format(datess);
177 - String sqlPbb="select * from bsth_c_s_sp_info_real where cl_zbh='"+nbbm2+"' and"  
178 - + " real_exec_date='"+dates+"' ";  
179 -// + "and fcsj_actual > '"+sk+"' ";  
180 -// + "and '"+sk+"' <dfsj"; 177 + String sqlPbb="SELECT * FROM ( select lp_name,cl_zbh,j_gh,j_name,MIN(fcsj) as fcsj,MAX(zdsj) as ddsj"
  178 + + " from bsth_c_s_sp_info_real where cl_zbh='"+nbbm2+"' and"
  179 + + " real_exec_date='"+dates+"' GROUP BY cl_zbh,lp_name,j_gh,j_name ) t WHERE t.fcsj<='"+sk+"' AND t.ddsj>='"+sk+"' " ;
181 List<ScheduleRealInfo> pbb =jdbcTemplate.query(sqlPbb, 180 List<ScheduleRealInfo> pbb =jdbcTemplate.query(sqlPbb,
182 new RowMapper<ScheduleRealInfo>(){ 181 new RowMapper<ScheduleRealInfo>(){
183 @Override 182 @Override
src/main/java/com/bsth/service/excep/impl/SpeedingServiceImpl.java
@@ -46,7 +46,7 @@ public class SpeedingServiceImpl implements SpeedingService { @@ -46,7 +46,7 @@ public class SpeedingServiceImpl implements SpeedingService {
46 Object date=map.get("date"); 46 Object date=map.get("date");
47 47
48 if(line!=null){ 48 if(line!=null){
49 - sql +=" and line like'%"+line.toString()+"%'"; 49 + sql +=" and line like'%"+line.toString().trim()+"%'";
50 } 50 }
51 51
52 if(nbbm!=null){ 52 if(nbbm!=null){
@@ -125,7 +125,7 @@ public class SpeedingServiceImpl implements SpeedingService { @@ -125,7 +125,7 @@ public class SpeedingServiceImpl implements SpeedingService {
125 Object date=map.get("date"); 125 Object date=map.get("date");
126 126
127 if(line!=null){ 127 if(line!=null){
128 - sql +=" and line like'%"+line.toString()+"%'"; 128 + sql +=" and line like'%"+line.toString().trim()+"%'";
129 } 129 }
130 130
131 if(nbbm!=null){ 131 if(nbbm!=null){
@@ -177,10 +177,9 @@ public class SpeedingServiceImpl implements SpeedingService { @@ -177,10 +177,9 @@ public class SpeedingServiceImpl implements SpeedingService {
177 Date datess = new Date(d1); 177 Date datess = new Date(d1);
178 String dates=new SimpleDateFormat("yyyy-MM-dd").format(datess); 178 String dates=new SimpleDateFormat("yyyy-MM-dd").format(datess);
179 String sk=new SimpleDateFormat("HH:mm").format(datess); 179 String sk=new SimpleDateFormat("HH:mm").format(datess);
180 - String sqlPbb="select * from bsth_c_s_sp_info_real where cl_zbh='"+nbbm2+"' and"  
181 - + " real_exec_date='"+dates+"' ";  
182 -// + "and fcsj_actual > '"+sk+"' ";  
183 -// + "and '"+sk+"' <dfsj"; 180 + String sqlPbb="SELECT * FROM ( select lp_name,cl_zbh,j_gh,j_name,MIN(fcsj) as fcsj,MAX(zdsj) as ddsj"
  181 + + " from bsth_c_s_sp_info_real where cl_zbh='"+nbbm2+"' and"
  182 + + " real_exec_date='"+dates+"' GROUP BY cl_zbh,lp_name,j_gh,j_name ) t WHERE t.fcsj<='"+sk+"' AND t.ddsj>='"+sk+"' " ;
184 List<ScheduleRealInfo> pbb =jdbcTemplate.query(sqlPbb, 183 List<ScheduleRealInfo> pbb =jdbcTemplate.query(sqlPbb,
185 new RowMapper<ScheduleRealInfo>(){ 184 new RowMapper<ScheduleRealInfo>(){
186 @Override 185 @Override
src/main/java/com/bsth/service/forms/FormsService.java
@@ -31,7 +31,7 @@ public interface FormsService { @@ -31,7 +31,7 @@ public interface FormsService {
31 31
32 public List<Singledata> singledata(Map<String, Object> map); 32 public List<Singledata> singledata(Map<String, Object> map);
33 33
34 - public List<Vehicleloading> vehicleloading(String gsdmVehic,String fgsdmVehic,String line,String data); 34 + public List<Vehicleloading> vehicleloading(String line,String data);
35 35
36 public List<Operationservice> operationservice(Map<String, Object> map); 36 public List<Operationservice> operationservice(Map<String, Object> map);
37 37
src/main/java/com/bsth/service/forms/impl/FormsServiceImpl.java
@@ -25,7 +25,9 @@ import com.bsth.entity.mcy_forms.Singledata; @@ -25,7 +25,9 @@ import com.bsth.entity.mcy_forms.Singledata;
25 import com.bsth.entity.mcy_forms.Turnoutrate; 25 import com.bsth.entity.mcy_forms.Turnoutrate;
26 import com.bsth.entity.mcy_forms.Vehicleloading; 26 import com.bsth.entity.mcy_forms.Vehicleloading;
27 import com.bsth.entity.mcy_forms.Waybillday; 27 import com.bsth.entity.mcy_forms.Waybillday;
  28 +import com.bsth.entity.oil.Ylb;
28 import com.bsth.entity.realcontrol.ScheduleRealInfo; 29 import com.bsth.entity.realcontrol.ScheduleRealInfo;
  30 +import com.bsth.repository.oil.YlbRepository;
29 import com.bsth.repository.realcontrol.ScheduleRealInfoRepository; 31 import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;
30 import com.bsth.data.BasicData; 32 import com.bsth.data.BasicData;
31 import com.bsth.entity.mcy_forms.Allline; 33 import com.bsth.entity.mcy_forms.Allline;
@@ -55,6 +57,9 @@ public class FormsServiceImpl implements FormsService { @@ -55,6 +57,9 @@ public class FormsServiceImpl implements FormsService {
55 57
56 @Autowired 58 @Autowired
57 CulateMileageService culateMileageService; 59 CulateMileageService culateMileageService;
  60 +
  61 + @Autowired
  62 + YlbRepository ylbRepository;
58 63
59 // 行车路单日报表 64 // 行车路单日报表
60 @Override 65 @Override
@@ -417,7 +422,19 @@ public class FormsServiceImpl implements FormsService { @@ -417,7 +422,19 @@ public class FormsServiceImpl implements FormsService {
417 // 路单数据 422 // 路单数据
418 @Override 423 @Override
419 public List<Singledata> singledata(Map<String, Object> map) { 424 public List<Singledata> singledata(Map<String, Object> map) {
420 - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 425 +
  426 + String gsdm="";
  427 + if(map.get("gsdmSing")!=null){
  428 + gsdm=map.get("gsdmSing").toString();
  429 + }
  430 + String fgsdm="";
  431 + if(map.get("fgsdmSing")!=null){
  432 + fgsdm=map.get("fgsdmSing").toString();
  433 + }
  434 +
  435 + String xlbm=map.get("line").toString().trim();
  436 +
  437 + /*SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
421 SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日"); 438 SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日");
422 Date d = null; 439 Date d = null;
423 Date d1 = null; 440 Date d1 = null;
@@ -429,60 +446,92 @@ public class FormsServiceImpl implements FormsService { @@ -429,60 +446,92 @@ public class FormsServiceImpl implements FormsService {
429 e.printStackTrace(); 446 e.printStackTrace();
430 } 447 }
431 String rq2 = sdf1.format(d); 448 String rq2 = sdf1.format(d);
432 - String rq3 = sdf1.format(d1); 449 + String rq3 = sdf1.format(d1);*/
433 450
434 - rq = rq2 + "-" + rq3; 451 +// rq = rq2 + "-" + rq3;
435 startDate = map.get("startDate").toString(); 452 startDate = map.get("startDate").toString();
436 - endDate = map.get("endDate").toString();  
437 - String sql = "select t.*,y.yh,y.jzl from ("  
438 - + " select r.xl_bm,r.xl_name,r.cl_zbh,r.j_gh,r.j_name,r.gs_bm,r.fgs_bm"  
439 - + " from bsth_c_s_sp_info_real r where r.schedule_date_str "  
440 - + " BETWEEN '"+startDate+"' and '"+endDate+"' and r.xl_bm='"+map.get("line").toString()+"' "  
441 - + " AND r.gs_bm is not null and r.gs_bm='"+map.get("gsdmSing").toString()+"' "  
442 - + " and r.fgs_bm='"+map.get("fgsdmSing").toString()+"' "  
443 - + " group by r.xl_bm,r.xl_name,r.cl_zbh,r.j_gh,r.j_name,r.gs_bm,r.fgs_bm) t "  
444 - + " LEFT JOIN (select a.nbbm,a.jsy,SUM(a.yh) as yh,SUM(a.jzl) as jzl "  
445 - + " from bsth_c_ylb a where a.rq BETWEEN '"+startDate+"' and '"+endDate+"'and "  
446 - + " a.ssgsdm='"+map.get("gsdmSing").toString()+"' and a.fgsdm='"+map.get("fgsdmSing").toString()+"' "  
447 - + "group by a.nbbm,a.jsy) y"  
448 - + " on y.nbbm=t.cl_zbh and y.jsy= t.j_gh"; 453 +// endDate = map.get("endDate").toString();
  454 +// String sql = "select t.*,y.yh,y.jzl from ("
  455 +// + " select r.xl_bm,r.xl_name,r.cl_zbh,r.j_gh,r.j_name,r.gs_bm,r.fgs_bm"
  456 +// + " from bsth_c_s_sp_info_real r where r.schedule_date_str "
  457 +// + " BETWEEN '"+startDate+"' and '"+endDate+"' and r.xl_bm='"+map.get("line").toString()+"' "
  458 +// + " AND r.gs_bm is not null and r.gs_bm='"+map.get("gsdmSing").toString()+"' "
  459 +// + " and r.fgs_bm='"+map.get("fgsdmSing").toString()+"' "
  460 +// + " group by r.xl_bm,r.xl_name,r.cl_zbh,r.j_gh,r.j_name,r.gs_bm,r.fgs_bm) t "
  461 +// + " LEFT JOIN (select a.nbbm,a.jsy,SUM(a.yh) as yh,SUM(a.jzl) as jzl "
  462 +// + " from bsth_c_ylb a where a.rq BETWEEN '"+startDate+"' and '"+endDate+"'and "
  463 +// + " a.ssgsdm='"+map.get("gsdmSing").toString()+"' and a.fgsdm='"+map.get("fgsdmSing").toString()+"' "
  464 +// + "group by a.nbbm,a.jsy) y"
  465 +// + " on y.nbbm=t.cl_zbh and y.jsy= t.j_gh";
449 466
  467 + String sql="select r.s_gh,r.s_name, "
  468 + + " r.xl_bm,r.xl_name,r.cl_zbh,r.j_gh,r.j_name,r.gs_bm,r.fgs_bm"
  469 + + " from bsth_c_s_sp_info_real r where r.schedule_date_str = '"+startDate+"'";
  470 + if(xlbm.equals("")){
  471 + sql +="and r.gs_bm='"+gsdm+"' "
  472 + + " and r.fgs_bm='"+fgsdm+"'";
  473 + }else{
  474 + sql += " and r.xl_bm = '"+xlbm+"'";
  475 + }
  476 + sql += " group by r.s_gh,r.s_name,"
  477 + + " r.xl_bm,r.xl_name,r.cl_zbh,r.j_gh,r.j_name,r.gs_bm,r.fgs_bm";
  478 +
450 List<Singledata> list = jdbcTemplate.query(sql, new RowMapper<Singledata>() { 479 List<Singledata> list = jdbcTemplate.query(sql, new RowMapper<Singledata>() {
451 //SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 480 //SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
452 @Override 481 @Override
453 public Singledata mapRow(ResultSet arg0, int arg1) throws SQLException { 482 public Singledata mapRow(ResultSet arg0, int arg1) throws SQLException {
454 Singledata sin = new Singledata(); 483 Singledata sin = new Singledata();
455 - sin.setrQ(rq);  
456 - sin.setgS(arg0.getString("gs_bm")); 484 + sin.setrQ(startDate);
457 sin.setxL(arg0.getString("xl_name")); 485 sin.setxL(arg0.getString("xl_name"));
458 sin.setClzbh(arg0.getString("cl_zbh")); 486 sin.setClzbh(arg0.getString("cl_zbh"));
459 sin.setJsy(arg0.getString("j_gh")); 487 sin.setJsy(arg0.getString("j_gh"));
460 sin.setjName(arg0.getString("j_name")); 488 sin.setjName(arg0.getString("j_name"));
461 - sin.setHyl(arg0.getString("YH"));  
462 - sin.setJzl(arg0.getString("JZL"));  
463 - // sin.setJzl(arg0.getString(""));//非营业性用油  
464 - sin.setJhjl(arg0.getString("JZL")); 489 + sin.setSgh(arg0.getString("s_gh"));
  490 + sin.setsName(arg0.getString("s_name"));
  491 + sin.setgS(BasicData.businessFgsCodeNameMap.get(arg0.getString("fgs_bm")+"_"+arg0.getString("gs_bm")));
465 492
466 return sin; 493 return sin;
467 } 494 }
468 }); 495 });
469 - DecimalFormat df = new DecimalFormat("0.00");  
470 - for(int i=0;i<list.size();i++){  
471 -  
472 - Singledata si=list.get(i);  
473 - si.setgS(BasicData.businessCodeNameMap.get(si.getgS()));  
474 - si.setJzl(df.format(Double.parseDouble(si.getJzl())));  
475 - si.setHyl(df.format(Double.parseDouble(si.getHyl())));  
476 - Map<String, Object> maps = new HashMap<>();  
477 - maps = commonService.findKMBC1(si.getjName(),si.getClzbh(), startDate,  
478 - endDate);  
479 - //sin.setjName(maps.get("j_name") == null ? "" : maps.get("j_name").toString());  
480 - si.setSgh(maps.get("s_gh") == null ? "" : maps.get("s_gh").toString());  
481 - si.setsName(maps.get("s_name") == null ? "" : maps.get("s_name").toString());  
482 - si.setJhlc(maps.get("yygl") == null ? "" : maps.get("yygl").toString());  
483 - si.setEmptMileage(maps.get("ksgl") == null ? "" : maps.get("ksgl").toString());  
484 - si.setJhjl(maps.get("jhlc") == null ? "" : maps.get("jhlc").toString());  
485 496
  497 + List<Ylb> listYlb= ylbRepository.obtainYl(startDate, gsdm, fgsdm, xlbm, "", "xlbm");
  498 + List<ScheduleRealInfo> listReal=scheduleRealInfoRepository.scheduleByDateAndLineTjrb(xlbm, startDate);
  499 + for (int i = 0; i < list.size(); i++) {
  500 + List<ScheduleRealInfo> newList=new ArrayList<ScheduleRealInfo>();
  501 + Singledata sin=list.get(i);
  502 + String jsy=sin.getJsy();
  503 + String clzbh=sin.getClzbh();
  504 + for (int j = 0; j < listReal.size(); j++) {
  505 + ScheduleRealInfo s=listReal.get(j);
  506 + if(s.getjGh().equals(jsy) && s.getClZbh().equals(clzbh)){
  507 + newList.add(s);
  508 + }
  509 + }
  510 +
  511 + double jhgl=culateMileageService.culateJhgl(newList);
  512 + double yygl=culateMileageService.culateSjgl(newList);
  513 + double ljgl=culateMileageService.culateLjgl(newList);
  514 + double ksgl=culateMileageService.culateKsgl(newList);
  515 + double jcgl=culateMileageService.culateJccgl(newList);
  516 + double zyygl=Arith.add(yygl, ljgl);
  517 + double zksgl=Arith.add(ksgl, jcgl);
  518 + sin.setJhlc(String.valueOf(Arith.add(zyygl,zksgl)));
  519 + sin.setEmptMileage(String.valueOf(zksgl));
  520 + sin.setJhjl(String.valueOf(jhgl));
  521 + double yhl=0.0;
  522 + double jzl=0.0;
  523 + double fyy=0.0;
  524 + for (int j = 0; j < listYlb.size(); j++) {
  525 + Ylb y=listYlb.get(j);
  526 + if(y.getJsy().equals(jsy) && y.getNbbm().equals(clzbh)){
  527 + yhl=Arith.add(yhl, y.getYh()==null?0:y.getYh());
  528 + jzl=Arith.add(jzl, y.getJzl()==null?0:y.getJzl());
  529 + fyy=Arith.add(fyy, y.getSh()==null?0:y.getSh());
  530 + }
  531 + }
  532 + sin.setHyl(String.valueOf(yhl));
  533 + sin.setJzl(String.valueOf(jzl));
  534 + sin.setUnyyyl(String.valueOf(fyy));
486 } 535 }
487 return list; 536 return list;
488 } 537 }
@@ -545,50 +594,72 @@ public class FormsServiceImpl implements FormsService { @@ -545,50 +594,72 @@ public class FormsServiceImpl implements FormsService {
545 594
546 // 车辆加注 595 // 车辆加注
547 @Override 596 @Override
548 - public List<Vehicleloading> vehicleloading(String gsdmVehic,String fgsdmVehic,String line, String date) { 597 + public List<Vehicleloading> vehicleloading(String line, String date) {
549 598
550 - String sql = " SELECT r.schedule_date_str,r.xl_bm,r.xl_name,r.cl_zbh,r.j_name,y.YH,y.JZL,r.j_gh,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name,r.bc_type "  
551 - + " FROM bsth_c_s_sp_info_real r "  
552 - + " INNER join ( select y.RQ,y.XLBM,y.NBBM,y.JSY,y.JZL,y.YH from bsth_c_ylb y "  
553 - + " where to_days(y.RQ)=to_days('" + date + "') and y.XLBM= '" + line + "' GROUP BY y.RQ,y.XLBM,y.NBBM,y.JSY,y.JZL,y.YH) y "  
554 - + " on r.cl_zbh=y.nbbm "  
555 - + " where to_days(r.schedule_date_str)=to_days('" + date + "')"  
556 - + " and r.xl_bm='" + line + "' "  
557 - + " AND r.gs_bm is not null"  
558 - + " and r.bc_type not in('in','out')";  
559 - if(gsdmVehic.toString()!=""){  
560 - sql+=" and r.gs_bm='"+gsdmVehic+"'";  
561 - }  
562 - if(fgsdmVehic.toString()!=""){  
563 - sql+=" and r.fgs_bm='"+fgsdmVehic +"'";  
564 - }  
565 - sql += " GROUP BY r.schedule_date_str,r.xl_bm,r.xl_name,r.cl_zbh,r.j_name,y.YH,y.JZL,r.j_gh,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name "; 599 + String sql="select r.s_gh,r.s_name, "
  600 + + " r.xl_bm,r.xl_name,r.cl_zbh,r.j_gh,r.j_name,r.gs_bm,r.fgs_bm"
  601 + + " from bsth_c_s_sp_info_real r where r.schedule_date_str = '"+date+"' "
  602 + + " and r.xl_bm = '"+line+"' group by r.s_gh,r.s_name,"
  603 + + " r.xl_bm,r.xl_name,r.cl_zbh,r.j_gh,r.j_name,r.gs_bm,r.fgs_bm";
  604 +
566 List<Vehicleloading> list = jdbcTemplate.query(sql, new RowMapper<Vehicleloading>() { 605 List<Vehicleloading> list = jdbcTemplate.query(sql, new RowMapper<Vehicleloading>() {
567 @Override 606 @Override
568 public Vehicleloading mapRow(ResultSet arg0, int arg1) throws SQLException { 607 public Vehicleloading mapRow(ResultSet arg0, int arg1) throws SQLException {
569 Vehicleloading ve = new Vehicleloading(); 608 Vehicleloading ve = new Vehicleloading();
570 - ve.setrQ(arg0.getString("schedule_date_str"));  
571 - ve.setgS(arg0.getString("gs_name")); 609 + ve.setgS(BasicData.businessFgsCodeNameMap.get(arg0.getString("fgs_bm")+"_"+arg0.getString("gs_bm")));
572 ve.setxL(arg0.getString("xl_name")); 610 ve.setxL(arg0.getString("xl_name"));
573 ve.setClzbh(arg0.getString("cl_zbh")); 611 ve.setClzbh(arg0.getString("cl_zbh"));
574 - ve.setJzl(arg0.getString("JZL"));  
575 - ve.setHyl(arg0.getString("YH"));  
576 - // ve.setLs(arg0.getString("").toString());//尿素  
577 ve.setJgh(arg0.getString("j_gh").toString()); 612 ve.setJgh(arg0.getString("j_gh").toString());
578 return ve; 613 return ve;
579 } 614 }
580 }); 615 });
581 616
582 - for(int i=0;i<list.size();i++){  
583 - Vehicleloading v=list.get(i);  
584 - Map<String, Object> maps = new HashMap<>();  
585 - maps = commonService.findKMBC2(v.getJgh(), v.getClzbh(),  
586 - v.getrQ());  
587 - v.setJhlc(maps.get("jhlc") == null ? "" : maps.get("jhlc").toString());  
588 - v.setJhbc(maps.get("jhbc").toString() == null ? "" : maps.get("jhbc").toString());// 计划班次  
589 - v.setSjbc(maps.get("sjbc").toString() == null ? "" : maps.get("sjbc").toString());// 实际班次  
590 - }  
591 617
  618 + List<Ylb> listYlb= ylbRepository.obtainYl(startDate, "", "", line, "", "xlbm");
  619 + List<ScheduleRealInfo> listReal=scheduleRealInfoRepository.scheduleByDateAndLineTjrb(line, date);
  620 + for (int i = 0; i < list.size(); i++) {
  621 + List<ScheduleRealInfo> newList=new ArrayList<ScheduleRealInfo>();
  622 + Vehicleloading sin=list.get(i);
  623 + sin.setrQ(date);
  624 + String jsy=sin.getJgh();
  625 + String clzbh=sin.getClzbh();
  626 + for (int j = 0; j < listReal.size(); j++) {
  627 + ScheduleRealInfo s=listReal.get(j);
  628 + if(s.getjGh().equals(jsy) && s.getClZbh().equals(clzbh)){
  629 + newList.add(s);
  630 + }
  631 + }
  632 +
  633 + int jhbc=culateMileageService.culateJhbc(newList, "");
  634 + int sjbc=culateMileageService.culateSjbc(newList, "");
  635 + int ljbc=culateMileageService.culateLjbc(newList, "");
  636 + double yygl=culateMileageService.culateSjgl(newList);
  637 + double ljgl=culateMileageService.culateLjgl(newList);
  638 + double ksgl=culateMileageService.culateKsgl(newList);
  639 + double jcgl=culateMileageService.culateJccgl(newList);
  640 + double zyygl=Arith.add(yygl, ljgl);
  641 + double zksgl=Arith.add(ksgl, jcgl);
  642 + sin.setJhlc(String.valueOf(Arith.add(zyygl,zksgl)));
  643 + sin.setJhbc(String.valueOf(jhbc));
  644 + sin.setSjbc(String.valueOf(sjbc+ljbc));
  645 + double yhl=0.0;
  646 + double jzl=0.0;
  647 + double fyy=0.0;
  648 + double ns=0.0;
  649 + for (int j = 0; j < listYlb.size(); j++) {
  650 + Ylb y=listYlb.get(j);
  651 + if(y.getJsy().equals(jsy) && y.getNbbm().equals(clzbh)){
  652 + yhl=Arith.add(yhl, y.getYh()==null?0:y.getYh());
  653 + jzl=Arith.add(jzl, y.getJzl()==null?0:y.getJzl());
  654 + fyy=Arith.add(fyy, y.getSh()==null?0:y.getSh());
  655 + ns =Arith.add(ns, y.getNs()==null?0:y.getNs());
  656 + }
  657 + }
  658 + sin.setHyl(String.valueOf(yhl));
  659 + sin.setJzl(String.valueOf(jzl));
  660 + sin.setUnyyyl(String.valueOf(fyy));
  661 + sin.setLs(String.valueOf(ns));
  662 + }
592 return list; 663 return list;
593 } 664 }
594 665
@@ -816,7 +887,7 @@ public class FormsServiceImpl implements FormsService { @@ -816,7 +887,7 @@ public class FormsServiceImpl implements FormsService {
816 } 887 }
817 888
818 String fgsbm=""; 889 String fgsbm="";
819 - if(map.get("fgsdmDaily").toString()!=null){ 890 + if(map.get("fgsdmDaily")!=null){
820 fgsbm=map.get("fgsdmDaily").toString(); 891 fgsbm=map.get("fgsdmDaily").toString();
821 } 892 }
822 893
@@ -853,6 +924,12 @@ public class FormsServiceImpl implements FormsService { @@ -853,6 +924,12 @@ public class FormsServiceImpl implements FormsService {
853 for(int i=0;i<list.size();i++){ 924 for(int i=0;i<list.size();i++){
854 sList =new ArrayList<ScheduleRealInfo>(); 925 sList =new ArrayList<ScheduleRealInfo>();
855 Daily d=list.get(i); 926 Daily d=list.get(i);
  927 + if(d.getYh()==null){
  928 + d.setYh("0");
  929 + }else{
  930 + if(d.getYh().equals(""))
  931 + d.setYh("0");
  932 + }
856 for (int j = 0; j < lists.size(); j++) { 933 for (int j = 0; j < lists.size(); j++) {
857 ScheduleRealInfo s=lists.get(j); 934 ScheduleRealInfo s=lists.get(j);
858 if(d.getJgh().equals(s.getjGh()) && d.getZbh().equals(s.getClZbh())){ 935 if(d.getJgh().equals(s.getjGh()) && d.getZbh().equals(s.getClZbh())){
src/main/java/com/bsth/service/realcontrol/DataManagerService.java
1 -package com.bsth.service.realcontrol;  
2 -  
3 -import java.util.Map;  
4 -  
5 -/**  
6 - * Created by panzhao on 2017/4/18.  
7 - */  
8 -public interface DataManagerService {  
9 -  
10 - Map<String, Object> carInfos(Integer lineId);  
11 -  
12 - Map<String,Object> updateDevices(String jsonStr);  
13 -} 1 +package com.bsth.service.realcontrol;
  2 +
  3 +import java.util.Map;
  4 +
  5 +/**
  6 + * Created by panzhao on 2017/4/18.
  7 + */
  8 +public interface DataManagerService {
  9 +
  10 + Map<String, Object> carInfos(Integer lineId);
  11 +
  12 + Map<String,Object> updateDevices(String jsonStr);
  13 +}
src/main/java/com/bsth/service/realcontrol/impl/DataManagerServiceImpl.java
1 -package com.bsth.service.realcontrol.impl;  
2 -  
3 -import com.alibaba.fastjson.JSONArray;  
4 -import com.alibaba.fastjson.JSONObject;  
5 -import com.bsth.common.ResponseCode;  
6 -import com.bsth.data.BasicData;  
7 -import com.bsth.entity.Cars;  
8 -import com.bsth.repository.CarsRepository;  
9 -import com.bsth.service.realcontrol.DataManagerService;  
10 -import com.bsth.util.db.DBUtils_oldSystem;  
11 -import org.slf4j.Logger;  
12 -import org.slf4j.LoggerFactory;  
13 -import org.springframework.beans.factory.annotation.Autowired;  
14 -import org.springframework.jdbc.core.JdbcTemplate;  
15 -import org.springframework.stereotype.Service;  
16 -  
17 -import java.util.ArrayList;  
18 -import java.util.HashMap;  
19 -import java.util.List;  
20 -import java.util.Map;  
21 -  
22 -/**  
23 - * Created by panzhao on 2017/4/18.  
24 - */  
25 -@Service  
26 -public class DataManagerServiceImpl implements DataManagerService{  
27 -  
28 - @Autowired  
29 - CarsRepository carsRepository;  
30 -  
31 - @Autowired  
32 - JdbcTemplate controlJdbcTemp;  
33 -  
34 - @Autowired  
35 - BasicData.BasicDataLoader dataLoader;  
36 -  
37 - Logger logger = LoggerFactory.getLogger(this.getClass());  
38 -  
39 - @Override  
40 - public Map<String, Object> carInfos(Integer lineId) {  
41 -  
42 - Map<String, Object> rs = new HashMap<>();  
43 - try {  
44 - List<Map<String, String>> nowData = new ArrayList<>();  
45 - List<Map<String, String>> oldData = new ArrayList<>();  
46 - Map<String, String> map;  
47 -  
48 - //查询新系统车辆信息  
49 - List<Cars> list = carsRepository.findCarsByLineId(lineId);  
50 - for(Cars c : list){  
51 - map = new HashMap<>();  
52 - map.put("nbbm", c.getInsideCode());  
53 - map.put("device", c.getEquipmentCode());  
54 - nowData.add(map);  
55 - }  
56 -  
57 - //获取老系统数据  
58 - JdbcTemplate jdbcTemplate = new JdbcTemplate(DBUtils_oldSystem.getDataSource());  
59 - List<Map<String, Object>> oyList = jdbcTemplate.queryForList("select NBBM,SBBH from JJWGPS_T_CLXXB t where xlbm=?", BasicData.lineId2CodeMap.get(lineId));  
60 - for(Map<String, Object> tempMap : oyList){  
61 - map = new HashMap<>();  
62 - map.put("nbbm", tempMap.get("NBBM").toString());  
63 - map.put("device", tempMap.get("SBBH").toString());  
64 - oldData.add(map);  
65 - }  
66 -  
67 - rs.put("status", ResponseCode.SUCCESS);  
68 - rs.put("nows", nowData);  
69 - rs.put("olds", oldData);  
70 - }catch (Exception e){  
71 - logger.error("", e);  
72 - rs.put("status", ResponseCode.ERROR);  
73 - rs.put("msg", e.getMessage());  
74 - }  
75 -  
76 - return rs;  
77 - }  
78 -  
79 - /**  
80 - * 更新设备号  
81 - * @param jsonStr  
82 - * @return  
83 - */  
84 - @Override  
85 - public Map<String, Object> updateDevices(String jsonStr) {  
86 - Map<String, Object> rs = new HashMap<>();  
87 - try {  
88 - int count=0;  
89 - JSONArray array = JSONArray.parseArray(jsonStr);  
90 - JSONObject jObj;  
91 - for(int i = 0; i < array.size(); i ++){  
92 - jObj = array.getJSONObject(i);  
93 - count += controlJdbcTemp.update("update bsth_c_cars set equipment_code=? where inside_code=?"  
94 - , jObj.getString("device"), jObj.getString("nbbm"));  
95 - }  
96 -  
97 - //刷新缓存  
98 - dataLoader.loadDeviceInfo();  
99 - rs.put("status", ResponseCode.SUCCESS);  
100 - rs.put("count", count);  
101 - }catch (Exception e){  
102 - logger.error("", e);  
103 - rs.put("status", ResponseCode.ERROR);  
104 - rs.put("msg", e.getMessage());  
105 - }  
106 - return rs;  
107 - }  
108 -} 1 +package com.bsth.service.realcontrol.impl;
  2 +
  3 +import com.alibaba.fastjson.JSONArray;
  4 +import com.alibaba.fastjson.JSONObject;
  5 +import com.bsth.common.ResponseCode;
  6 +import com.bsth.data.BasicData;
  7 +import com.bsth.entity.Cars;
  8 +import com.bsth.repository.CarsRepository;
  9 +import com.bsth.service.realcontrol.DataManagerService;
  10 +import com.bsth.util.db.DBUtils_oldSystem;
  11 +import org.slf4j.Logger;
  12 +import org.slf4j.LoggerFactory;
  13 +import org.springframework.beans.factory.annotation.Autowired;
  14 +import org.springframework.jdbc.core.JdbcTemplate;
  15 +import org.springframework.stereotype.Service;
  16 +
  17 +import java.util.ArrayList;
  18 +import java.util.HashMap;
  19 +import java.util.List;
  20 +import java.util.Map;
  21 +
  22 +/**
  23 + * Created by panzhao on 2017/4/18.
  24 + */
  25 +@Service
  26 +public class DataManagerServiceImpl implements DataManagerService{
  27 +
  28 + @Autowired
  29 + CarsRepository carsRepository;
  30 +
  31 + @Autowired
  32 + JdbcTemplate controlJdbcTemp;
  33 +
  34 + @Autowired
  35 + BasicData.BasicDataLoader dataLoader;
  36 +
  37 + Logger logger = LoggerFactory.getLogger(this.getClass());
  38 +
  39 + @Override
  40 + public Map<String, Object> carInfos(Integer lineId) {
  41 +
  42 + Map<String, Object> rs = new HashMap<>();
  43 + try {
  44 + List<Map<String, String>> nowData = new ArrayList<>();
  45 + List<Map<String, String>> oldData = new ArrayList<>();
  46 + Map<String, String> map;
  47 +
  48 + //查询新系统车辆信息
  49 + List<Cars> list = carsRepository.findCarsByLineId(lineId);
  50 + for(Cars c : list){
  51 + map = new HashMap<>();
  52 + map.put("nbbm", c.getInsideCode());
  53 + map.put("device", c.getEquipmentCode());
  54 + nowData.add(map);
  55 + }
  56 +
  57 + //获取老系统数据
  58 + JdbcTemplate jdbcTemplate = new JdbcTemplate(DBUtils_oldSystem.getDataSource());
  59 + List<Map<String, Object>> oyList = jdbcTemplate.queryForList("select NBBM,SBBH from JJWGPS_T_CLXXB t where xlbm=?", BasicData.lineId2CodeMap.get(lineId));
  60 + for(Map<String, Object> tempMap : oyList){
  61 + map = new HashMap<>();
  62 + map.put("nbbm", tempMap.get("NBBM").toString());
  63 + map.put("device", tempMap.get("SBBH").toString());
  64 + oldData.add(map);
  65 + }
  66 +
  67 + rs.put("status", ResponseCode.SUCCESS);
  68 + rs.put("nows", nowData);
  69 + rs.put("olds", oldData);
  70 + }catch (Exception e){
  71 + logger.error("", e);
  72 + rs.put("status", ResponseCode.ERROR);
  73 + rs.put("msg", e.getMessage());
  74 + }
  75 +
  76 + return rs;
  77 + }
  78 +
  79 + /**
  80 + * 更新设备号
  81 + * @param jsonStr
  82 + * @return
  83 + */
  84 + @Override
  85 + public Map<String, Object> updateDevices(String jsonStr) {
  86 + Map<String, Object> rs = new HashMap<>();
  87 + try {
  88 + int count=0;
  89 + JSONArray array = JSONArray.parseArray(jsonStr);
  90 + JSONObject jObj;
  91 + for(int i = 0; i < array.size(); i ++){
  92 + jObj = array.getJSONObject(i);
  93 + count += controlJdbcTemp.update("update bsth_c_cars set equipment_code=? where inside_code=?"
  94 + , jObj.getString("device"), jObj.getString("nbbm"));
  95 + }
  96 +
  97 + //刷新缓存
  98 + dataLoader.loadDeviceInfo();
  99 + rs.put("status", ResponseCode.SUCCESS);
  100 + rs.put("count", count);
  101 + }catch (Exception e){
  102 + logger.error("", e);
  103 + rs.put("status", ResponseCode.ERROR);
  104 + rs.put("msg", e.getMessage());
  105 + }
  106 + return rs;
  107 + }
  108 +}
src/main/java/com/bsth/util/db/DBUtils_oldSystem.java
1 -package com.bsth.util.db;  
2 -  
3 -import com.mchange.v2.c3p0.DataSources;  
4 -import org.apache.log4j.Logger;  
5 -  
6 -import javax.sql.DataSource;  
7 -import java.sql.Connection;  
8 -import java.sql.ResultSet;  
9 -import java.sql.SQLException;  
10 -import java.sql.Statement;  
11 -import java.util.HashMap;  
12 -import java.util.Map;  
13 -  
14 -/**  
15 - * 老系统数据库连接池(保持少量的连接,不会对老系统有什么影响)  
16 - * @author PanZhao  
17 - *  
18 - */  
19 -//@Component  
20 -public class DBUtils_oldSystem {  
21 -  
22 - private static String url = null;  
23 -  
24 - private static String username = null;  
25 -  
26 - private static String pwd = null;  
27 -  
28 - private static DataSource ds_pooled;  
29 -  
30 - static Logger logger = Logger.getLogger(DBUtils_oldSystem.class);  
31 -  
32 - static {  
33 -  
34 - try {  
35 - // 1. 加载驱动类  
36 - Class.forName("oracle.jdbc.driver.OracleDriver");  
37 -  
38 - url = "jdbc:oracle:thin:@10.10.200.225:1521:orcl";  
39 - username = "jjwgps";  
40 - pwd = "jjwgps";  
41 -  
42 - // 设置连接数据库的配置信息  
43 - DataSource ds_unpooled = DataSources.unpooledDataSource(url,  
44 - username, pwd);  
45 -  
46 - Map<String, Object> pool_conf = new HashMap<String, Object>();  
47 - // 设置最大连接数  
48 - pool_conf.put("maxPoolSize", 5);  
49 -  
50 - pool_conf.put("testConnectionOnCheckout", false);  
51 - //异步检测连接的有效性  
52 - pool_conf.put("testConnectionOnCheckin", true);  
53 - //10分钟检测一次  
54 - pool_conf.put("idleConnectionTestPeriod", 60 * 10);  
55 - ds_pooled = DataSources.pooledDataSource(ds_unpooled, pool_conf);  
56 - } catch (ClassNotFoundException e) {  
57 - logger.error(e.toString());  
58 - e.printStackTrace();  
59 - } catch (SQLException e) {  
60 - logger.error("初始化老系统连接池失败,非正式环境请忽略这个问题!");  
61 - logger.error(e.toString());  
62 - e.printStackTrace();  
63 - }  
64 - }  
65 -  
66 - /**  
67 - * 获取连接对象  
68 - */  
69 - public static Connection getConnection() throws SQLException {  
70 - return ds_pooled.getConnection();  
71 - }  
72 -  
73 - /**  
74 - * 释放连接池资源  
75 - */  
76 - public static void clearup() {  
77 - if (ds_pooled != null) {  
78 - try {  
79 - DataSources.destroy(ds_pooled);  
80 - } catch (SQLException e) {  
81 - logger.error(e.toString());  
82 - e.printStackTrace();  
83 - }  
84 - }  
85 - }  
86 -  
87 - /**  
88 - * 资源关闭  
89 - *  
90 - * @param rs  
91 - * @param stmt  
92 - * @param conn  
93 - */  
94 - public static void close(ResultSet rs, Statement stmt, Connection conn) {  
95 - if (rs != null) {  
96 - try {  
97 - rs.close();  
98 - } catch (SQLException e) {  
99 - logger.error(e.toString());  
100 - e.printStackTrace();  
101 - }  
102 - }  
103 -  
104 - if (stmt != null) {  
105 - try {  
106 - stmt.close();  
107 - } catch (SQLException e) {  
108 - logger.error(e.toString());  
109 - e.printStackTrace();  
110 - }  
111 - }  
112 -  
113 - if (conn != null) {  
114 - try {  
115 - conn.close();  
116 - } catch (SQLException e) {  
117 - logger.error(e.toString());  
118 - e.printStackTrace();  
119 - }  
120 - }  
121 - }  
122 -  
123 - public static DataSource getDataSource(){  
124 - return ds_pooled;  
125 - }  
126 -} 1 +package com.bsth.util.db;
  2 +
  3 +import com.mchange.v2.c3p0.DataSources;
  4 +import org.apache.log4j.Logger;
  5 +
  6 +import javax.sql.DataSource;
  7 +import java.sql.Connection;
  8 +import java.sql.ResultSet;
  9 +import java.sql.SQLException;
  10 +import java.sql.Statement;
  11 +import java.util.HashMap;
  12 +import java.util.Map;
  13 +
  14 +/**
  15 + * 老系统数据库连接池(保持少量的连接,不会对老系统有什么影响)
  16 + * @author PanZhao
  17 + *
  18 + */
  19 +//@Component
  20 +public class DBUtils_oldSystem {
  21 +
  22 + private static String url = null;
  23 +
  24 + private static String username = null;
  25 +
  26 + private static String pwd = null;
  27 +
  28 + private static DataSource ds_pooled;
  29 +
  30 + static Logger logger = Logger.getLogger(DBUtils_oldSystem.class);
  31 +
  32 + static {
  33 +
  34 + try {
  35 + // 1. 加载驱动类
  36 + Class.forName("oracle.jdbc.driver.OracleDriver");
  37 +
  38 + url = "jdbc:oracle:thin:@10.10.200.225:1521:orcl";
  39 + username = "jjwgps";
  40 + pwd = "jjwgps";
  41 +
  42 + // 设置连接数据库的配置信息
  43 + DataSource ds_unpooled = DataSources.unpooledDataSource(url,
  44 + username, pwd);
  45 +
  46 + Map<String, Object> pool_conf = new HashMap<String, Object>();
  47 + // 设置最大连接数
  48 + pool_conf.put("maxPoolSize", 5);
  49 +
  50 + pool_conf.put("testConnectionOnCheckout", false);
  51 + //异步检测连接的有效性
  52 + pool_conf.put("testConnectionOnCheckin", true);
  53 + //10分钟检测一次
  54 + pool_conf.put("idleConnectionTestPeriod", 60 * 10);
  55 + ds_pooled = DataSources.pooledDataSource(ds_unpooled, pool_conf);
  56 + } catch (ClassNotFoundException e) {
  57 + logger.error(e.toString());
  58 + e.printStackTrace();
  59 + } catch (SQLException e) {
  60 + logger.error("初始化老系统连接池失败,非正式环境请忽略这个问题!");
  61 + logger.error(e.toString());
  62 + e.printStackTrace();
  63 + }
  64 + }
  65 +
  66 + /**
  67 + * 获取连接对象
  68 + */
  69 + public static Connection getConnection() throws SQLException {
  70 + return ds_pooled.getConnection();
  71 + }
  72 +
  73 + /**
  74 + * 释放连接池资源
  75 + */
  76 + public static void clearup() {
  77 + if (ds_pooled != null) {
  78 + try {
  79 + DataSources.destroy(ds_pooled);
  80 + } catch (SQLException e) {
  81 + logger.error(e.toString());
  82 + e.printStackTrace();
  83 + }
  84 + }
  85 + }
  86 +
  87 + /**
  88 + * 资源关闭
  89 + *
  90 + * @param rs
  91 + * @param stmt
  92 + * @param conn
  93 + */
  94 + public static void close(ResultSet rs, Statement stmt, Connection conn) {
  95 + if (rs != null) {
  96 + try {
  97 + rs.close();
  98 + } catch (SQLException e) {
  99 + logger.error(e.toString());
  100 + e.printStackTrace();
  101 + }
  102 + }
  103 +
  104 + if (stmt != null) {
  105 + try {
  106 + stmt.close();
  107 + } catch (SQLException e) {
  108 + logger.error(e.toString());
  109 + e.printStackTrace();
  110 + }
  111 + }
  112 +
  113 + if (conn != null) {
  114 + try {
  115 + conn.close();
  116 + } catch (SQLException e) {
  117 + logger.error(e.toString());
  118 + e.printStackTrace();
  119 + }
  120 + }
  121 + }
  122 +
  123 + public static DataSource getDataSource(){
  124 + return ds_pooled;
  125 + }
  126 +}
src/main/resources/static/pages/forms/mould/list.xls
No preview for this file type
src/main/resources/static/pages/forms/mould/vehicleloading.xls
No preview for this file type
src/main/resources/static/pages/forms/statement/daily.html
@@ -92,8 +92,7 @@ @@ -92,8 +92,7 @@
92 92
93 <script> 93 <script>
94 $(function(){ 94 $(function(){
95 - var reqCodeMap = {"0xA1": '请求恢复运营', "0xA2": '申请调档', "0xA3": '出场请求', "0xA5": '进场请求', "0xA7": '加油请求', "0x50": '车辆故障', "0x70": '路阻报告', "0x60": '事故报告', "0x11": '扣证纠纷', "0x12" : '报警'};  
96 - var fage=false; 95 +
97 // 关闭左侧栏 96 // 关闭左侧栏
98 if (!$('body').hasClass('page-sidebar-closed')) 97 if (!$('body').hasClass('page-sidebar-closed'))
99 $('.menu-toggler.sidebar-toggler').click(); 98 $('.menu-toggler.sidebar-toggler').click();
@@ -102,6 +101,7 @@ @@ -102,6 +101,7 @@
102 format : 'YYYY-MM-DD', 101 format : 'YYYY-MM-DD',
103 locale : 'zh-cn' 102 locale : 'zh-cn'
104 }); 103 });
  104 + var fage=false;
105 var xlList; 105 var xlList;
106 var obj = []; 106 var obj = [];
107 107
src/main/resources/static/pages/forms/statement/scheduleDaily.html
@@ -551,7 +551,7 @@ letter-spacing: 20px; @@ -551,7 +551,7 @@ letter-spacing: 20px;
551 <td>{{obj.fast}}</td> 551 <td>{{obj.fast}}</td>
552 <td>{{obj.slow}}</td> 552 <td>{{obj.slow}}</td>
553 <td>{{obj.fcsj}}</td> 553 <td>{{obj.fcsj}}</td>
554 - <td style="word-break: keep-all;white-space:nowrap;">{{obj.fcsjActual}} 554 + <td>{{obj.fcsjActual}}
555 {{if obj.bcType== "in"}} 555 {{if obj.bcType== "in"}}
556 (进) 556 (进)
557 {{/if}} 557 {{/if}}
src/main/resources/static/pages/mforms/operationservices/operationservice.html
@@ -42,19 +42,20 @@ @@ -42,19 +42,20 @@
42 class="form-control" name="subCompany" id="fgsdmOperat" 42 class="form-control" name="subCompany" id="fgsdmOperat"
43 style="width: 140px;"></select> 43 style="width: 140px;"></select>
44 </div> 44 </div>
45 - <div style="display: inline-block;"> 45 + <div style="margin-top: 2px"></div>
  46 + <div style="display: inline-block;margin-left: 33px;">
46 <span class="item-label" style="width: 80px;">线路: </span> <select 47 <span class="item-label" style="width: 80px;">线路: </span> <select
47 - class="form-control" name="line" id="line" style="width: 180px;"></select> 48 + class="form-control" name="line" id="line" style="width: 140px;"></select>
48 </div> 49 </div>
49 <div style="display: inline-block; margin-left: 15px;"> 50 <div style="display: inline-block; margin-left: 15px;">
50 <span class="item-label" style="width: 80px;">开始时间: </span> <input 51 <span class="item-label" style="width: 80px;">开始时间: </span> <input
51 class="form-control" type="text" id="startDate" 52 class="form-control" type="text" id="startDate"
52 - style="width: 120px;" /> 53 + style="width: 140px;" />
53 </div> 54 </div>
54 <div style="display: inline-block; margin-left: 15px;"> 55 <div style="display: inline-block; margin-left: 15px;">
55 <span class="item-label" style="width: 80px;">结束时间: </span> <input 56 <span class="item-label" style="width: 80px;">结束时间: </span> <input
56 class="form-control" type="text" id="endDate" 57 class="form-control" type="text" id="endDate"
57 - style="width: 120px;" /> 58 + style="width: 140px;" />
58 </div> 59 </div>
59 <div style="display: inline-block; margin-left: 15px"> 60 <div style="display: inline-block; margin-left: 15px">
60 <span class="item-label" style="width: 150px;">统计: </span> 61 <span class="item-label" style="width: 150px;">统计: </span>
@@ -102,69 +103,94 @@ @@ -102,69 +103,94 @@
102 format : 'YYYY-MM-DD', 103 format : 'YYYY-MM-DD',
103 locale : 'zh-cn' 104 locale : 'zh-cn'
104 }); 105 });
  106 +
  107 + var d = new Date();
  108 + var year = d.getFullYear();
  109 + var month = d.getMonth() + 1;
  110 + var day = d.getDate();
  111 + if(month < 10)
  112 + month = "0" + month;
  113 + if(day < 10)
  114 + day = "0" + day;
  115 + $("#startDate").val(year + "-" + month + "-" + day);
  116 + $("#endDate").val(year + "-" + month + "-" + day);
105 117
106 - $.get('/basic/lineCode2Name', function(result) {  
107 - var data = [];  
108 -  
109 - for ( var code in result) {  
110 - data.push({  
111 - id : code,  
112 - text : result[code]  
113 - });  
114 - }  
115 - initPinYinSelect2('#line', data, '');  
116 -  
117 - })  
118 - 118 + var fage=false;
  119 + var xlList;
119 var obj = []; 120 var obj = [];
120 - $.get('/user/companyData', function(result) {  
121 - obj = result;  
122 - var options = '';  
123 - for (var i = 0; i < obj.length; i++) {  
124 - options += '<option value="'+obj[i].companyCode+'">'  
125 - + obj[i].companyName + '</option>';  
126 - }  
127 -  
128 - if (obj.length == 0) {  
129 - $("#gsdmDiv_operat").css('display', 'none');  
130 - $('#fgsdmDiv_operat').css('display', 'none');  
131 - } else if (obj.length == 1) {  
132 - $("#gsdmDiv_operat").css('display', 'none');  
133 - if (obj[0].children.length == 1 || obj[0].children.length == 0)  
134 - $('#fgsdmDiv_operat').css('display', 'none');  
135 - }  
136 - $('#gsdmOperat').html(options);  
137 - updateCompany();  
138 - });  
139 -  
140 - $("#gsdmOperat").on("change", updateCompany);  
141 - function updateCompany() { 121 +
  122 +
  123 + $.get('/report/lineList',function(result){
  124 + xlList=result;
  125 + $.get('/user/companyData', function(result){
  126 + obj = result;
  127 + var options = '';
  128 + for(var i = 0; i < obj.length; i++){
  129 + options += '<option value="'+obj[i].companyCode+'">'+obj[i].companyName+'</option>';
  130 + }
  131 +
  132 + if(obj.length ==0){
  133 + $("#gsdmDiv_operat").css('display','none');
  134 + }else if(obj.length ==1){
  135 + $("#gsdmDiv_operat").css('display','none');
  136 + if(obj[0].children.length == 1 || obj[0].children.length ==0)
  137 + $('#fgsdmDiv_operat').css('display','none');
  138 + }
  139 + $('#gsdmOperat').html(options);
  140 + updateCompany();
  141 + });
  142 + })
  143 + $("#gsdmOperat").on("change",updateCompany);
  144 + function updateCompany(){
142 var company = $('#gsdmOperat').val(); 145 var company = $('#gsdmOperat').val();
143 var options = ''; 146 var options = '';
144 - for (var i = 0; i < obj.length; i++) {  
145 - if (obj[i].companyCode == company) { 147 + for(var i = 0; i < obj.length; i++){
  148 + if(obj[i].companyCode == company){
146 var children = obj[i].children; 149 var children = obj[i].children;
147 - for (var j = 0; j < children.length; j++) {  
148 - options += '<option value="'+children[j].code+'">'  
149 - + children[j].name + '</option>'; 150 + for(var j = 0; j < children.length; j++){
  151 + options += '<option value="'+children[j].code+'">'+children[j].name+'</option>';
150 } 152 }
151 } 153 }
152 } 154 }
153 $('#fgsdmOperat').html(options); 155 $('#fgsdmOperat').html(options);
  156 + initXl();
154 } 157 }
155 158
156 - $.get('/basic/lineCode2Name', function(result) {  
157 - var data = [];  
158 -  
159 - for ( var code in result) {  
160 - data.push({  
161 - id : code,  
162 - text : result[code]  
163 - }); 159 + /* $.get('/basic/lineCode2Name',function(result){
  160 + var data=[];
  161 +
  162 + for(var code in result){
  163 + data.push({id: code, text: result[code]});
164 } 164 }
165 - initPinYinSelect2('#line', data, '');  
166 -  
167 - }) 165 + initPinYinSelect2('#line',data,'');
  166 +
  167 + }) */
  168 +
  169 + $("#fgsdmOperat").on("change",initXl);
  170 + function initXl(){
  171 + var data=[];
  172 + if(fage){
  173 + $("#line").select2("destroy").html('');
  174 + }
  175 + var fgs=$('#fgsdmOperat').val();
  176 + var gs=$('#gsdmOperat').val();
  177 + for(var i=0;i<xlList.length;i++){
  178 + if(gs!=""){
  179 + if(fgs!=""){
  180 + if(xlList[i]["fgsbm"]==fgs && xlList[i]["gsbm"]==gs){
  181 + data.push({id: xlList[i]["xlbm"], text: xlList[i]["xlname"]});
  182 + }
  183 + }else{
  184 + if(xlList[i]["gsbm"]==gs){
  185 + data.push({id: xlList[i]["xlbm"], text: xlList[i]["xlname"]});
  186 + }
  187 + }
  188 + }
  189 + }
  190 + initPinYinSelect2('#line',data,'');
  191 + fage=true;
  192 + }
  193 +
168 194
169 $("#query").on( 195 $("#query").on(
170 "click", 196 "click",
src/main/resources/static/pages/mforms/singledatas/singledata.html
@@ -37,18 +37,14 @@ @@ -37,18 +37,14 @@
37 <select class="form-control" name="subCompany" id="fgsdmSing" style="width: 140px;"></select> 37 <select class="form-control" name="subCompany" id="fgsdmSing" style="width: 140px;"></select>
38 </div> 38 </div>
39 <div style="display: inline-block;"> 39 <div style="display: inline-block;">
40 - <span class="item-label" style="width: 80px;">线路: </span>  
41 - <select class="form-control" name="line" id="line" style="width: 136px;"></select> 40 + <span class="item-label" style="width: 80px;">&nbsp;线路: </span>
  41 + <select class="form-control" name="line" id="line" style="width: 140px;"></select>
42 </div> 42 </div>
43 - <div style="margin-top: 10px"></div>  
44 <div style="display: inline-block;margin-left: 15px;"> 43 <div style="display: inline-block;margin-left: 15px;">
45 - <span class="item-label" style="width: 80px;">开始时间: </span>  
46 - <input class="form-control" type="text" id="startDate" style="width: 120px;"/>  
47 - </div>  
48 - <div style="display: inline-block;margin-left: 15px;">  
49 - <span class="item-label" style="width: 80px;">结束时间: </span>  
50 - <input class="form-control" type="text" id="endDate" style="width: 120px;"/> 44 + <span class="item-label" style="width: 140px;">时间: </span>
  45 + <input class="form-control" type="text" id="startDate" style="width: 140px;"/>
51 </div> 46 </div>
  47 +
52 <div style="display: inline-block;margin-left: 15px"> 48 <div style="display: inline-block;margin-left: 15px">
53 <span class="item-label" style="width: 150px;">统计: </span> 49 <span class="item-label" style="width: 150px;">统计: </span>
54 </div> 50 </div>
@@ -101,26 +97,31 @@ @@ -101,26 +97,31 @@
101 locale : 'zh-cn' 97 locale : 'zh-cn'
102 }); 98 });
103 99
  100 + var fage=false;
  101 + var xlList;
104 var obj = []; 102 var obj = [];
105 - $.get('/user/companyData', function(result){  
106 - obj = result;  
107 - var options = '';  
108 - for(var i = 0; i < obj.length; i++){  
109 - options += '<option value="'+obj[i].companyCode+'">'+obj[i].companyName+'</option>';  
110 - }  
111 -  
112 - if(obj.length ==0){  
113 - $("#gsdmDiv_sing").css('display','none');  
114 - $('#fgsdmDiv_sing').css('display','none');  
115 - }else if(obj.length ==1){  
116 - $("#gsdmDiv_sing").css('display','none');  
117 - if(obj[0].children.length == 1 || obj[0].children.length ==0)  
118 - $('#fgsdmDiv_sing').css('display','none');  
119 - }  
120 - $('#gsdmSing').html(options);  
121 - updateCompany();  
122 - });  
123 - 103 +
  104 +
  105 + $.get('/report/lineList',function(result){
  106 + xlList=result;
  107 + $.get('/user/companyData', function(result){
  108 + obj = result;
  109 + var options = '';
  110 + for(var i = 0; i < obj.length; i++){
  111 + options += '<option value="'+obj[i].companyCode+'">'+obj[i].companyName+'</option>';
  112 + }
  113 +
  114 + if(obj.length ==0){
  115 + $("#gsdmDiv_sing").css('display','none');
  116 + }else if(obj.length ==1){
  117 + $("#gsdmDiv_sing").css('display','none');
  118 + if(obj[0].children.length == 1 || obj[0].children.length ==0)
  119 + $('#fgsdmDiv_sing').css('display','none');
  120 + }
  121 + $('#gsdmSing').html(options);
  122 + updateCompany();
  123 + });
  124 + })
124 $("#gsdmSing").on("change",updateCompany); 125 $("#gsdmSing").on("change",updateCompany);
125 function updateCompany(){ 126 function updateCompany(){
126 var company = $('#gsdmSing').val(); 127 var company = $('#gsdmSing').val();
@@ -134,10 +135,10 @@ @@ -134,10 +135,10 @@
134 } 135 }
135 } 136 }
136 $('#fgsdmSing').html(options); 137 $('#fgsdmSing').html(options);
  138 + initXl();
137 } 139 }
138 140
139 -  
140 - $.get('/basic/lineCode2Name',function(result){ 141 + /* $.get('/basic/lineCode2Name',function(result){
141 var data=[]; 142 var data=[];
142 143
143 for(var code in result){ 144 for(var code in result){
@@ -145,19 +146,41 @@ @@ -145,19 +146,41 @@
145 } 146 }
146 initPinYinSelect2('#line',data,''); 147 initPinYinSelect2('#line',data,'');
147 148
148 - }) 149 + }) */
  150 +
  151 + $("#fgsdmSing").on("change",initXl);
  152 + function initXl(){
  153 + var data=[];
  154 + if(fage){
  155 + $("#line").select2("destroy").html('');
  156 + }
  157 + var fgs=$('#fgsdmSing').val();
  158 + var gs=$('#gsdmSing').val();
  159 + for(var i=0;i<xlList.length;i++){
  160 + if(gs!=""){
  161 + if(fgs!=""){
  162 + if(xlList[i]["fgsbm"]==fgs && xlList[i]["gsbm"]==gs){
  163 + data.push({id: xlList[i]["xlbm"], text: xlList[i]["xlname"]});
  164 + }
  165 + }else{
  166 + if(xlList[i]["gsbm"]==gs){
  167 + data.push({id: xlList[i]["xlbm"], text: xlList[i]["xlname"]});
  168 + }
  169 + }
  170 + }
  171 + }
  172 + initPinYinSelect2('#line',data,'');
  173 + fage=true;
  174 + }
149 175
150 176
151 $("#query").on("click",function(){ 177 $("#query").on("click",function(){
152 var line = $("#line").val(); 178 var line = $("#line").val();
153 var startDate = $("#startDate").val(); 179 var startDate = $("#startDate").val();
154 - var endDate = $("#endDate").val();  
155 var lpName = $("#lpName").val(); 180 var lpName = $("#lpName").val();
156 var gsdmSing = $("#gsdmSing").val(); 181 var gsdmSing = $("#gsdmSing").val();
157 - var fgsdmSing = $("#fgsdmSing").val();  
158 - $post("/mcy_forms/singledata",{ gsdmSing:gsdmSing,fgsdmSing:fgsdmSing, line:line,startDate:startDate,endDate:endDate ,lpName:lpName},function(result){  
159 - $("#sDate").text(startDate);  
160 - $("#eDate").text(endDate); 182 + var fgsdmSing = $("#fgsdmSing").val(); var params = {};
  183 + $get("/mcy_forms/singledata",{ gsdmSing:gsdmSing,fgsdmSing:fgsdmSing, line:line,startDate:startDate,lpName:lpName},function(result){
161 var temp = {}; 184 var temp = {};
162 var today_account = 0; 185 var today_account = 0;
163 temp["line"] = $("#line").text(); 186 temp["line"] = $("#line").text();
@@ -181,7 +204,7 @@ @@ -181,7 +204,7 @@
181 var lpName = $("#lpName").val(); 204 var lpName = $("#lpName").val();
182 var gsdmSing = $("#gsdmSing").val(); 205 var gsdmSing = $("#gsdmSing").val();
183 var fgsdmSing = $("#fgsdmSing").val(); 206 var fgsdmSing = $("#fgsdmSing").val();
184 - $post('/mcy_export/singledataExport',{gsdmSing:gsdmSing,fgsdmSing:fgsdmSing,line:line,startDate:startDate,endDate:endDate,type:'export'},function(result){ 207 + $get('/mcy_export/singledataExport',{gsdmSing:gsdmSing,fgsdmSing:fgsdmSing,line:line,startDate:startDate,endDate:endDate,type:'export'},function(result){
185 window.open("/downloadFile/download?fileName=路单数据"+moment(startDate).format("YYYYMMDD")); 208 window.open("/downloadFile/download?fileName=路单数据"+moment(startDate).format("YYYYMMDD"));
186 }); 209 });
187 }); 210 });
@@ -203,7 +226,7 @@ @@ -203,7 +226,7 @@
203 <td>{{obj.emptMileage}}</td> 226 <td>{{obj.emptMileage}}</td>
204 <td>{{obj.hyl}}</td> 227 <td>{{obj.hyl}}</td>
205 <td>{{obj.jzl}}</td> 228 <td>{{obj.jzl}}</td>
206 - <td> </td> 229 + <td>{{obj.unyyyl}}</td>
207 <td>{{obj.jhjl}}</td> 230 <td>{{obj.jhjl}}</td>
208 </tr> 231 </tr>
209 {{/each}} 232 {{/each}}
src/main/resources/static/pages/mforms/vehicleloadings/vehicleloading.html
@@ -64,7 +64,7 @@ @@ -64,7 +64,7 @@
64 <th>耗油量(不含非营业性用油)</th> 64 <th>耗油量(不含非营业性用油)</th>
65 <th>尿素</th> 65 <th>尿素</th>
66 <th>实际公里(含空放公里)</th> 66 <th>实际公里(含空放公里)</th>
67 - <th>非业性用油</th> 67 + <th>非业性用油</th>
68 <th>计划班次</th> 68 <th>计划班次</th>
69 <th>实际班次</th> 69 <th>实际班次</th>
70 </tr> 70 </tr>
@@ -89,26 +89,31 @@ @@ -89,26 +89,31 @@
89 format : 'YYYY-MM-DD', 89 format : 'YYYY-MM-DD',
90 locale : 'zh-cn' 90 locale : 'zh-cn'
91 }); 91 });
  92 + var fage=false;
  93 + var xlList;
  94 + var obj = [];
92 95
93 - $.get('/user/companyData', function(result){  
94 - obj = result;  
95 - var options = '';  
96 - for(var i = 0; i < obj.length; i++){  
97 - options += '<option value="'+obj[i].companyCode+'">'+obj[i].companyName+'</option>';  
98 - }  
99 -  
100 - if(obj.length ==0){  
101 - $("#gsdmDiv_vehic").css('display','none');  
102 - $('#fgsdmDiv_vehic').css('display','none');  
103 - }else if(obj.length ==1){  
104 - $("#gsdmDiv_vehic").css('display','none');  
105 - if(obj[0].children.length == 1 || obj[0].children.length ==0)  
106 - $('#fgsdmDiv_vehic').css('display','none');  
107 - }  
108 - $('#gsdmVehic').html(options);  
109 - updateCompany();  
110 - });  
111 - 96 +
  97 + $.get('/report/lineList',function(result){
  98 + xlList=result;
  99 + $.get('/user/companyData', function(result){
  100 + obj = result;
  101 + var options = '';
  102 + for(var i = 0; i < obj.length; i++){
  103 + options += '<option value="'+obj[i].companyCode+'">'+obj[i].companyName+'</option>';
  104 + }
  105 +
  106 + if(obj.length ==0){
  107 + $("#gsdmDiv_vehic").css('display','none');
  108 + }else if(obj.length ==1){
  109 + $("#gsdmDiv_vehic").css('display','none');
  110 + if(obj[0].children.length == 1 || obj[0].children.length ==0)
  111 + $('#fgsdmDiv_vehic').css('display','none');
  112 + }
  113 + $('#gsdmVehic').html(options);
  114 + updateCompany();
  115 + });
  116 + })
112 $("#gsdmVehic").on("change",updateCompany); 117 $("#gsdmVehic").on("change",updateCompany);
113 function updateCompany(){ 118 function updateCompany(){
114 var company = $('#gsdmVehic').val(); 119 var company = $('#gsdmVehic').val();
@@ -122,9 +127,10 @@ @@ -122,9 +127,10 @@
122 } 127 }
123 } 128 }
124 $('#fgsdmVehic').html(options); 129 $('#fgsdmVehic').html(options);
  130 + initXl();
125 } 131 }
126 -  
127 - $.get('/basic/lineCode2Name',function(result){ 132 +
  133 + /* $.get('/basic/lineCode2Name',function(result){
128 var data=[]; 134 var data=[];
129 135
130 for(var code in result){ 136 for(var code in result){
@@ -132,9 +138,33 @@ @@ -132,9 +138,33 @@
132 } 138 }
133 initPinYinSelect2('#line',data,''); 139 initPinYinSelect2('#line',data,'');
134 140
135 - }) 141 + }) */
  142 +
  143 + $("#fgsdmVehic").on("change",initXl);
  144 + function initXl(){
  145 + var data=[];
  146 + if(fage){
  147 + $("#line").select2("destroy").html('');
  148 + }
  149 + var fgs=$('#fgsdmVehic').val();
  150 + var gs=$('#gsdmVehic').val();
  151 + for(var i=0;i<xlList.length;i++){
  152 + if(gs!=""){
  153 + if(fgs!=""){
  154 + if(xlList[i]["fgsbm"]==fgs && xlList[i]["gsbm"]==gs){
  155 + data.push({id: xlList[i]["xlbm"], text: xlList[i]["xlname"]});
  156 + }
  157 + }else{
  158 + if(xlList[i]["gsbm"]==gs){
  159 + data.push({id: xlList[i]["xlbm"], text: xlList[i]["xlname"]});
  160 + }
  161 + }
  162 + }
  163 + }
  164 + initPinYinSelect2('#line',data,'');
  165 + fage=true;
  166 + }
136 167
137 -  
138 var line ; 168 var line ;
139 var date ; 169 var date ;
140 var gsdmVehic ; 170 var gsdmVehic ;
@@ -142,9 +172,9 @@ @@ -142,9 +172,9 @@
142 $("#query").on("click",function(){ 172 $("#query").on("click",function(){
143 line = $("#line").val(); 173 line = $("#line").val();
144 date = $("#date").val(); 174 date = $("#date").val();
145 - gsdmVehic = $("#gsdmVehic").val();  
146 - fgsdmVehic = $("#fgsdmVehic").val();  
147 - $post('/mcy_forms/vehicleloading',{line:line,data:date, gsdmVehic: gsdmVehic,fgsdmVehic:fgsdmVehic},function(result){ 175 +// gsdmVehic = $("#gsdmVehic").val();
  176 +// fgsdmVehic = $("#fgsdmVehic").val();
  177 + $get('/mcy_forms/vehicleloading',{line:line,data:date},function(result){
148 // 把数据填充到模版中 178 // 把数据填充到模版中
149 var tbodyHtml = template('vehicleloading',{list:result}); 179 var tbodyHtml = template('vehicleloading',{list:result});
150 // 把渲染好的模版html文本追加到表格中 180 // 把渲染好的模版html文本追加到表格中
@@ -157,7 +187,7 @@ @@ -157,7 +187,7 @@
157 date = $("#date").val(); 187 date = $("#date").val();
158 gsdmVehic = $("#gsdmVehic").val(); 188 gsdmVehic = $("#gsdmVehic").val();
159 fgsdmVehic = $("#fgsdmVehic").val(); 189 fgsdmVehic = $("#fgsdmVehic").val();
160 - $post('/mcy_export/vehicleloadingExport',{line:line,data:date,gsdmVehic: gsdmVehic,fgsdmVehic:fgsdmVehic,type:'export'},function(result){ 190 + $get('/mcy_export/vehicleloadingExport',{line:line,data:date,gsdmVehic: gsdmVehic,fgsdmVehic:fgsdmVehic,type:'export'},function(result){
161 window.open("/downloadFile/download?fileName=车辆加注"+moment(date).format("YYYYMMDD")); 191 window.open("/downloadFile/download?fileName=车辆加注"+moment(date).format("YYYYMMDD"));
162 }); 192 });
163 }); 193 });
@@ -173,9 +203,9 @@ @@ -173,9 +203,9 @@
173 <td>{{obj.clzbh}}</td> 203 <td>{{obj.clzbh}}</td>
174 <td>{{obj.jzl}}</td> 204 <td>{{obj.jzl}}</td>
175 <td>{{obj.hyl}}</td> 205 <td>{{obj.hyl}}</td>
176 - <td> </td> 206 + <td>{{obj.ls}}</td>
177 <td>{{obj.jhlc}}</td> 207 <td>{{obj.jhlc}}</td>
178 - <td> </td> 208 + <td>{{obj.unyyyl}}</td>
179 <td>{{obj.jhbc}}</td> 209 <td>{{obj.jhbc}}</td>
180 <td>{{obj.sjbc}}</td> 210 <td>{{obj.sjbc}}</td>
181 </tr> 211 </tr>
src/main/resources/static/pages/oil/list_ph.html
@@ -199,7 +199,7 @@ @@ -199,7 +199,7 @@
199 {{obj.rq}} 199 {{obj.rq}}
200 </td> 200 </td>
201 <td> 201 <td>
202 - {{obj.gsname}} 202 + {{obj.fgsname}}
203 </td> 203 </td>
204 <td> 204 <td>
205 {{obj.xlname}} 205 {{obj.xlname}}
src/main/resources/static/real_control_v2/assets/plugins/perfect-scrollbar/perfect-scrollbar.css
1 -/* perfect-scrollbar v0.6.16 */  
2 -.ps-container {  
3 - -ms-touch-action: auto;  
4 - touch-action: auto;  
5 - overflow: hidden !important;  
6 - -ms-overflow-style: none; }  
7 - @supports (-ms-overflow-style: none) {  
8 - .ps-container {  
9 - overflow: auto !important; } }  
10 - @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {  
11 - .ps-container {  
12 - overflow: auto !important; } }  
13 - .ps-container.ps-active-x > .ps-scrollbar-x-rail,  
14 - .ps-container.ps-active-y > .ps-scrollbar-y-rail {  
15 - display: block;  
16 - background-color: transparent; }  
17 - .ps-container.ps-in-scrolling.ps-x > .ps-scrollbar-x-rail {  
18 - background-color: #eee;  
19 - opacity: 0.9; }  
20 - .ps-container.ps-in-scrolling.ps-x > .ps-scrollbar-x-rail > .ps-scrollbar-x {  
21 - background-color: #999;  
22 - height: 11px; }  
23 - .ps-container.ps-in-scrolling.ps-y > .ps-scrollbar-y-rail {  
24 - background-color: #eee;  
25 - opacity: 0.9; }  
26 - .ps-container.ps-in-scrolling.ps-y > .ps-scrollbar-y-rail > .ps-scrollbar-y {  
27 - background-color: #999;  
28 - width: 11px; }  
29 - .ps-container > .ps-scrollbar-x-rail {  
30 - display: none;  
31 - position: absolute;  
32 - /* please don't change 'position' */  
33 - opacity: 0;  
34 - -webkit-transition: background-color .2s linear, opacity .2s linear;  
35 - -o-transition: background-color .2s linear, opacity .2s linear;  
36 - -moz-transition: background-color .2s linear, opacity .2s linear;  
37 - transition: background-color .2s linear, opacity .2s linear;  
38 - bottom: 0px;  
39 - /* there must be 'bottom' for ps-scrollbar-x-rail */  
40 - height: 15px; }  
41 - .ps-container > .ps-scrollbar-x-rail > .ps-scrollbar-x {  
42 - position: absolute;  
43 - /* please don't change 'position' */  
44 - background-color: #aaa;  
45 - -webkit-border-radius: 6px;  
46 - -moz-border-radius: 6px;  
47 - border-radius: 6px;  
48 - -webkit-transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, -webkit-border-radius .2s ease-in-out;  
49 - transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, -webkit-border-radius .2s ease-in-out;  
50 - -o-transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out;  
51 - -moz-transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out, -moz-border-radius .2s ease-in-out;  
52 - transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out;  
53 - transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out, -webkit-border-radius .2s ease-in-out, -moz-border-radius .2s ease-in-out;  
54 - bottom: 2px;  
55 - /* there must be 'bottom' for ps-scrollbar-x */  
56 - height: 6px; }  
57 - .ps-container > .ps-scrollbar-x-rail:hover > .ps-scrollbar-x, .ps-container > .ps-scrollbar-x-rail:active > .ps-scrollbar-x {  
58 - height: 11px; }  
59 - .ps-container > .ps-scrollbar-y-rail {  
60 - display: none;  
61 - position: absolute;  
62 - /* please don't change 'position' */  
63 - opacity: 0;  
64 - -webkit-transition: background-color .2s linear, opacity .2s linear;  
65 - -o-transition: background-color .2s linear, opacity .2s linear;  
66 - -moz-transition: background-color .2s linear, opacity .2s linear;  
67 - transition: background-color .2s linear, opacity .2s linear;  
68 - right: 0;  
69 - /* there must be 'right' for ps-scrollbar-y-rail */  
70 - width: 15px; }  
71 - .ps-container > .ps-scrollbar-y-rail > .ps-scrollbar-y {  
72 - position: absolute;  
73 - /* please don't change 'position' */  
74 - background-color: #aaa;  
75 - -webkit-border-radius: 6px;  
76 - -moz-border-radius: 6px;  
77 - border-radius: 6px;  
78 - -webkit-transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, -webkit-border-radius .2s ease-in-out;  
79 - transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, -webkit-border-radius .2s ease-in-out;  
80 - -o-transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out;  
81 - -moz-transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out, -moz-border-radius .2s ease-in-out;  
82 - transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out;  
83 - transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out, -webkit-border-radius .2s ease-in-out, -moz-border-radius .2s ease-in-out;  
84 - right: 2px;  
85 - /* there must be 'right' for ps-scrollbar-y */  
86 - width: 6px; }  
87 - .ps-container > .ps-scrollbar-y-rail:hover > .ps-scrollbar-y, .ps-container > .ps-scrollbar-y-rail:active > .ps-scrollbar-y {  
88 - width: 11px; }  
89 - .ps-container:hover.ps-in-scrolling.ps-x > .ps-scrollbar-x-rail {  
90 - background-color: #eee;  
91 - opacity: 0.9; }  
92 - .ps-container:hover.ps-in-scrolling.ps-x > .ps-scrollbar-x-rail > .ps-scrollbar-x {  
93 - background-color: #999;  
94 - height: 11px; }  
95 - .ps-container:hover.ps-in-scrolling.ps-y > .ps-scrollbar-y-rail {  
96 - background-color: #eee;  
97 - opacity: 0.9; }  
98 - .ps-container:hover.ps-in-scrolling.ps-y > .ps-scrollbar-y-rail > .ps-scrollbar-y {  
99 - background-color: #999;  
100 - width: 11px; }  
101 - .ps-container:hover > .ps-scrollbar-x-rail,  
102 - .ps-container:hover > .ps-scrollbar-y-rail {  
103 - opacity: 0.6; }  
104 - .ps-container:hover > .ps-scrollbar-x-rail:hover {  
105 - background-color: #eee;  
106 - opacity: 0.9; }  
107 - .ps-container:hover > .ps-scrollbar-x-rail:hover > .ps-scrollbar-x {  
108 - background-color: #999; }  
109 - .ps-container:hover > .ps-scrollbar-y-rail:hover {  
110 - background-color: #eee;  
111 - opacity: 0.9; }  
112 - .ps-container:hover > .ps-scrollbar-y-rail:hover > .ps-scrollbar-y {  
113 - background-color: #999; } 1 +/* perfect-scrollbar v0.6.16 */
  2 +.ps-container {
  3 + -ms-touch-action: auto;
  4 + touch-action: auto;
  5 + overflow: hidden !important;
  6 + -ms-overflow-style: none; }
  7 + @supports (-ms-overflow-style: none) {
  8 + .ps-container {
  9 + overflow: auto !important; } }
  10 + @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
  11 + .ps-container {
  12 + overflow: auto !important; } }
  13 + .ps-container.ps-active-x > .ps-scrollbar-x-rail,
  14 + .ps-container.ps-active-y > .ps-scrollbar-y-rail {
  15 + display: block;
  16 + background-color: transparent; }
  17 + .ps-container.ps-in-scrolling.ps-x > .ps-scrollbar-x-rail {
  18 + background-color: #eee;
  19 + opacity: 0.9; }
  20 + .ps-container.ps-in-scrolling.ps-x > .ps-scrollbar-x-rail > .ps-scrollbar-x {
  21 + background-color: #999;
  22 + height: 11px; }
  23 + .ps-container.ps-in-scrolling.ps-y > .ps-scrollbar-y-rail {
  24 + background-color: #eee;
  25 + opacity: 0.9; }
  26 + .ps-container.ps-in-scrolling.ps-y > .ps-scrollbar-y-rail > .ps-scrollbar-y {
  27 + background-color: #999;
  28 + width: 11px; }
  29 + .ps-container > .ps-scrollbar-x-rail {
  30 + display: none;
  31 + position: absolute;
  32 + /* please don't change 'position' */
  33 + opacity: 0;
  34 + -webkit-transition: background-color .2s linear, opacity .2s linear;
  35 + -o-transition: background-color .2s linear, opacity .2s linear;
  36 + -moz-transition: background-color .2s linear, opacity .2s linear;
  37 + transition: background-color .2s linear, opacity .2s linear;
  38 + bottom: 0px;
  39 + /* there must be 'bottom' for ps-scrollbar-x-rail */
  40 + height: 15px; }
  41 + .ps-container > .ps-scrollbar-x-rail > .ps-scrollbar-x {
  42 + position: absolute;
  43 + /* please don't change 'position' */
  44 + background-color: #aaa;
  45 + -webkit-border-radius: 6px;
  46 + -moz-border-radius: 6px;
  47 + border-radius: 6px;
  48 + -webkit-transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, -webkit-border-radius .2s ease-in-out;
  49 + transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, -webkit-border-radius .2s ease-in-out;
  50 + -o-transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out;
  51 + -moz-transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out, -moz-border-radius .2s ease-in-out;
  52 + transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out;
  53 + transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out, -webkit-border-radius .2s ease-in-out, -moz-border-radius .2s ease-in-out;
  54 + bottom: 2px;
  55 + /* there must be 'bottom' for ps-scrollbar-x */
  56 + height: 6px; }
  57 + .ps-container > .ps-scrollbar-x-rail:hover > .ps-scrollbar-x, .ps-container > .ps-scrollbar-x-rail:active > .ps-scrollbar-x {
  58 + height: 11px; }
  59 + .ps-container > .ps-scrollbar-y-rail {
  60 + display: none;
  61 + position: absolute;
  62 + /* please don't change 'position' */
  63 + opacity: 0;
  64 + -webkit-transition: background-color .2s linear, opacity .2s linear;
  65 + -o-transition: background-color .2s linear, opacity .2s linear;
  66 + -moz-transition: background-color .2s linear, opacity .2s linear;
  67 + transition: background-color .2s linear, opacity .2s linear;
  68 + right: 0;
  69 + /* there must be 'right' for ps-scrollbar-y-rail */
  70 + width: 15px; }
  71 + .ps-container > .ps-scrollbar-y-rail > .ps-scrollbar-y {
  72 + position: absolute;
  73 + /* please don't change 'position' */
  74 + background-color: #aaa;
  75 + -webkit-border-radius: 6px;
  76 + -moz-border-radius: 6px;
  77 + border-radius: 6px;
  78 + -webkit-transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, -webkit-border-radius .2s ease-in-out;
  79 + transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, -webkit-border-radius .2s ease-in-out;
  80 + -o-transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out;
  81 + -moz-transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out, -moz-border-radius .2s ease-in-out;
  82 + transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out;
  83 + transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out, -webkit-border-radius .2s ease-in-out, -moz-border-radius .2s ease-in-out;
  84 + right: 2px;
  85 + /* there must be 'right' for ps-scrollbar-y */
  86 + width: 6px; }
  87 + .ps-container > .ps-scrollbar-y-rail:hover > .ps-scrollbar-y, .ps-container > .ps-scrollbar-y-rail:active > .ps-scrollbar-y {
  88 + width: 11px; }
  89 + .ps-container:hover.ps-in-scrolling.ps-x > .ps-scrollbar-x-rail {
  90 + background-color: #eee;
  91 + opacity: 0.9; }
  92 + .ps-container:hover.ps-in-scrolling.ps-x > .ps-scrollbar-x-rail > .ps-scrollbar-x {
  93 + background-color: #999;
  94 + height: 11px; }
  95 + .ps-container:hover.ps-in-scrolling.ps-y > .ps-scrollbar-y-rail {
  96 + background-color: #eee;
  97 + opacity: 0.9; }
  98 + .ps-container:hover.ps-in-scrolling.ps-y > .ps-scrollbar-y-rail > .ps-scrollbar-y {
  99 + background-color: #999;
  100 + width: 11px; }
  101 + .ps-container:hover > .ps-scrollbar-x-rail,
  102 + .ps-container:hover > .ps-scrollbar-y-rail {
  103 + opacity: 0.6; }
  104 + .ps-container:hover > .ps-scrollbar-x-rail:hover {
  105 + background-color: #eee;
  106 + opacity: 0.9; }
  107 + .ps-container:hover > .ps-scrollbar-x-rail:hover > .ps-scrollbar-x {
  108 + background-color: #999; }
  109 + .ps-container:hover > .ps-scrollbar-y-rail:hover {
  110 + background-color: #eee;
  111 + opacity: 0.9; }
  112 + .ps-container:hover > .ps-scrollbar-y-rail:hover > .ps-scrollbar-y {
  113 + background-color: #999; }
src/main/resources/static/real_control_v2/assets/plugins/perfect-scrollbar/perfect-scrollbar.jquery.js
1 -/* perfect-scrollbar v0.6.16 */  
2 -(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){  
3 -'use strict';  
4 -  
5 -var ps = require('../main');  
6 -var psInstances = require('../plugin/instances');  
7 -  
8 -function mountJQuery(jQuery) {  
9 - jQuery.fn.perfectScrollbar = function (settingOrCommand) {  
10 - return this.each(function () {  
11 - if (typeof settingOrCommand === 'object' ||  
12 - typeof settingOrCommand === 'undefined') {  
13 - // If it's an object or none, initialize.  
14 - var settings = settingOrCommand;  
15 -  
16 - if (!psInstances.get(this)) {  
17 - ps.initialize(this, settings);  
18 - }  
19 - } else {  
20 - // Unless, it may be a command.  
21 - var command = settingOrCommand;  
22 -  
23 - if (command === 'update') {  
24 - ps.update(this);  
25 - } else if (command === 'destroy') {  
26 - ps.destroy(this);  
27 - }  
28 - }  
29 - });  
30 - };  
31 -}  
32 -  
33 -if (typeof define === 'function' && define.amd) {  
34 - // AMD. Register as an anonymous module.  
35 - define(['jquery'], mountJQuery);  
36 -} else {  
37 - var jq = window.jQuery ? window.jQuery : window.$;  
38 - if (typeof jq !== 'undefined') {  
39 - mountJQuery(jq);  
40 - }  
41 -}  
42 -  
43 -module.exports = mountJQuery;  
44 -  
45 -},{"../main":7,"../plugin/instances":18}],2:[function(require,module,exports){  
46 -'use strict';  
47 -  
48 -function oldAdd(element, className) {  
49 - var classes = element.className.split(' ');  
50 - if (classes.indexOf(className) < 0) {  
51 - classes.push(className);  
52 - }  
53 - element.className = classes.join(' ');  
54 -}  
55 -  
56 -function oldRemove(element, className) {  
57 - var classes = element.className.split(' ');  
58 - var idx = classes.indexOf(className);  
59 - if (idx >= 0) {  
60 - classes.splice(idx, 1);  
61 - }  
62 - element.className = classes.join(' ');  
63 -}  
64 -  
65 -exports.add = function (element, className) {  
66 - if (element.classList) {  
67 - element.classList.add(className);  
68 - } else {  
69 - oldAdd(element, className);  
70 - }  
71 -};  
72 -  
73 -exports.remove = function (element, className) {  
74 - if (element.classList) {  
75 - element.classList.remove(className);  
76 - } else {  
77 - oldRemove(element, className);  
78 - }  
79 -};  
80 -  
81 -exports.list = function (element) {  
82 - if (element.classList) {  
83 - return Array.prototype.slice.apply(element.classList);  
84 - } else {  
85 - return element.className.split(' ');  
86 - }  
87 -};  
88 -  
89 -},{}],3:[function(require,module,exports){  
90 -'use strict';  
91 -  
92 -var DOM = {};  
93 -  
94 -DOM.e = function (tagName, className) {  
95 - var element = document.createElement(tagName);  
96 - element.className = className;  
97 - return element;  
98 -};  
99 -  
100 -DOM.appendTo = function (child, parent) {  
101 - parent.appendChild(child);  
102 - return child;  
103 -};  
104 -  
105 -function cssGet(element, styleName) {  
106 - return window.getComputedStyle(element)[styleName];  
107 -}  
108 -  
109 -function cssSet(element, styleName, styleValue) {  
110 - if (typeof styleValue === 'number') {  
111 - styleValue = styleValue.toString() + 'px';  
112 - }  
113 - element.style[styleName] = styleValue;  
114 - return element;  
115 -}  
116 -  
117 -function cssMultiSet(element, obj) {  
118 - for (var key in obj) {  
119 - var val = obj[key];  
120 - if (typeof val === 'number') {  
121 - val = val.toString() + 'px';  
122 - }  
123 - element.style[key] = val;  
124 - }  
125 - return element;  
126 -}  
127 -  
128 -DOM.css = function (element, styleNameOrObject, styleValue) {  
129 - if (typeof styleNameOrObject === 'object') {  
130 - // multiple set with object  
131 - return cssMultiSet(element, styleNameOrObject);  
132 - } else {  
133 - if (typeof styleValue === 'undefined') {  
134 - return cssGet(element, styleNameOrObject);  
135 - } else {  
136 - return cssSet(element, styleNameOrObject, styleValue);  
137 - }  
138 - }  
139 -};  
140 -  
141 -DOM.matches = function (element, query) {  
142 - if (typeof element.matches !== 'undefined') {  
143 - return element.matches(query);  
144 - } else {  
145 - if (typeof element.matchesSelector !== 'undefined') {  
146 - return element.matchesSelector(query);  
147 - } else if (typeof element.webkitMatchesSelector !== 'undefined') {  
148 - return element.webkitMatchesSelector(query);  
149 - } else if (typeof element.mozMatchesSelector !== 'undefined') {  
150 - return element.mozMatchesSelector(query);  
151 - } else if (typeof element.msMatchesSelector !== 'undefined') {  
152 - return element.msMatchesSelector(query);  
153 - }  
154 - }  
155 -};  
156 -  
157 -DOM.remove = function (element) {  
158 - if (typeof element.remove !== 'undefined') {  
159 - element.remove();  
160 - } else {  
161 - if (element.parentNode) {  
162 - element.parentNode.removeChild(element);  
163 - }  
164 - }  
165 -};  
166 -  
167 -DOM.queryChildren = function (element, selector) {  
168 - return Array.prototype.filter.call(element.childNodes, function (child) {  
169 - return DOM.matches(child, selector);  
170 - });  
171 -};  
172 -  
173 -module.exports = DOM;  
174 -  
175 -},{}],4:[function(require,module,exports){  
176 -'use strict';  
177 -  
178 -var EventElement = function (element) {  
179 - this.element = element;  
180 - this.events = {};  
181 -};  
182 -  
183 -EventElement.prototype.bind = function (eventName, handler) {  
184 - if (typeof this.events[eventName] === 'undefined') {  
185 - this.events[eventName] = [];  
186 - }  
187 - this.events[eventName].push(handler);  
188 - this.element.addEventListener(eventName, handler, false);  
189 -};  
190 -  
191 -EventElement.prototype.unbind = function (eventName, handler) {  
192 - var isHandlerProvided = (typeof handler !== 'undefined');  
193 - this.events[eventName] = this.events[eventName].filter(function (hdlr) {  
194 - if (isHandlerProvided && hdlr !== handler) {  
195 - return true;  
196 - }  
197 - this.element.removeEventListener(eventName, hdlr, false);  
198 - return false;  
199 - }, this);  
200 -};  
201 -  
202 -EventElement.prototype.unbindAll = function () {  
203 - for (var name in this.events) {  
204 - this.unbind(name);  
205 - }  
206 -};  
207 -  
208 -var EventManager = function () {  
209 - this.eventElements = [];  
210 -};  
211 -  
212 -EventManager.prototype.eventElement = function (element) {  
213 - var ee = this.eventElements.filter(function (eventElement) {  
214 - return eventElement.element === element;  
215 - })[0];  
216 - if (typeof ee === 'undefined') {  
217 - ee = new EventElement(element);  
218 - this.eventElements.push(ee);  
219 - }  
220 - return ee;  
221 -};  
222 -  
223 -EventManager.prototype.bind = function (element, eventName, handler) {  
224 - this.eventElement(element).bind(eventName, handler);  
225 -};  
226 -  
227 -EventManager.prototype.unbind = function (element, eventName, handler) {  
228 - this.eventElement(element).unbind(eventName, handler);  
229 -};  
230 -  
231 -EventManager.prototype.unbindAll = function () {  
232 - for (var i = 0; i < this.eventElements.length; i++) {  
233 - this.eventElements[i].unbindAll();  
234 - }  
235 -};  
236 -  
237 -EventManager.prototype.once = function (element, eventName, handler) {  
238 - var ee = this.eventElement(element);  
239 - var onceHandler = function (e) {  
240 - ee.unbind(eventName, onceHandler);  
241 - handler(e);  
242 - };  
243 - ee.bind(eventName, onceHandler);  
244 -};  
245 -  
246 -module.exports = EventManager;  
247 -  
248 -},{}],5:[function(require,module,exports){  
249 -'use strict';  
250 -  
251 -module.exports = (function () {  
252 - function s4() {  
253 - return Math.floor((1 + Math.random()) * 0x10000)  
254 - .toString(16)  
255 - .substring(1);  
256 - }  
257 - return function () {  
258 - return s4() + s4() + '-' + s4() + '-' + s4() + '-' +  
259 - s4() + '-' + s4() + s4() + s4();  
260 - };  
261 -})();  
262 -  
263 -},{}],6:[function(require,module,exports){  
264 -'use strict';  
265 -  
266 -var cls = require('./class');  
267 -var dom = require('./dom');  
268 -  
269 -var toInt = exports.toInt = function (x) {  
270 - return parseInt(x, 10) || 0;  
271 -};  
272 -  
273 -var clone = exports.clone = function (obj) {  
274 - if (!obj) {  
275 - return null;  
276 - } else if (obj.constructor === Array) {  
277 - return obj.map(clone);  
278 - } else if (typeof obj === 'object') {  
279 - var result = {};  
280 - for (var key in obj) {  
281 - result[key] = clone(obj[key]);  
282 - }  
283 - return result;  
284 - } else {  
285 - return obj;  
286 - }  
287 -};  
288 -  
289 -exports.extend = function (original, source) {  
290 - var result = clone(original);  
291 - for (var key in source) {  
292 - result[key] = clone(source[key]);  
293 - }  
294 - return result;  
295 -};  
296 -  
297 -exports.isEditable = function (el) {  
298 - return dom.matches(el, "input,[contenteditable]") ||  
299 - dom.matches(el, "select,[contenteditable]") ||  
300 - dom.matches(el, "textarea,[contenteditable]") ||  
301 - dom.matches(el, "button,[contenteditable]");  
302 -};  
303 -  
304 -exports.removePsClasses = function (element) {  
305 - var clsList = cls.list(element);  
306 - for (var i = 0; i < clsList.length; i++) {  
307 - var className = clsList[i];  
308 - if (className.indexOf('ps-') === 0) {  
309 - cls.remove(element, className);  
310 - }  
311 - }  
312 -};  
313 -  
314 -exports.outerWidth = function (element) {  
315 - return toInt(dom.css(element, 'width')) +  
316 - toInt(dom.css(element, 'paddingLeft')) +  
317 - toInt(dom.css(element, 'paddingRight')) +  
318 - toInt(dom.css(element, 'borderLeftWidth')) +  
319 - toInt(dom.css(element, 'borderRightWidth'));  
320 -};  
321 -  
322 -exports.startScrolling = function (element, axis) {  
323 - cls.add(element, 'ps-in-scrolling');  
324 - if (typeof axis !== 'undefined') {  
325 - cls.add(element, 'ps-' + axis);  
326 - } else {  
327 - cls.add(element, 'ps-x');  
328 - cls.add(element, 'ps-y');  
329 - }  
330 -};  
331 -  
332 -exports.stopScrolling = function (element, axis) {  
333 - cls.remove(element, 'ps-in-scrolling');  
334 - if (typeof axis !== 'undefined') {  
335 - cls.remove(element, 'ps-' + axis);  
336 - } else {  
337 - cls.remove(element, 'ps-x');  
338 - cls.remove(element, 'ps-y');  
339 - }  
340 -};  
341 -  
342 -exports.env = {  
343 - isWebKit: 'WebkitAppearance' in document.documentElement.style,  
344 - supportsTouch: (('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch),  
345 - supportsIePointer: window.navigator.msMaxTouchPoints !== null  
346 -};  
347 -  
348 -},{"./class":2,"./dom":3}],7:[function(require,module,exports){  
349 -'use strict';  
350 -  
351 -var destroy = require('./plugin/destroy');  
352 -var initialize = require('./plugin/initialize');  
353 -var update = require('./plugin/update');  
354 -  
355 -module.exports = {  
356 - initialize: initialize,  
357 - update: update,  
358 - destroy: destroy  
359 -};  
360 -  
361 -},{"./plugin/destroy":9,"./plugin/initialize":17,"./plugin/update":21}],8:[function(require,module,exports){  
362 -'use strict';  
363 -  
364 -module.exports = {  
365 - handlers: ['click-rail', 'drag-scrollbar', 'keyboard', 'wheel', 'touch'],  
366 - maxScrollbarLength: null,  
367 - minScrollbarLength: null,  
368 - scrollXMarginOffset: 0,  
369 - scrollYMarginOffset: 0,  
370 - suppressScrollX: false,  
371 - suppressScrollY: false,  
372 - swipePropagation: true,  
373 - useBothWheelAxes: false,  
374 - wheelPropagation: false,  
375 - wheelSpeed: 1,  
376 - theme: 'default'  
377 -};  
378 -  
379 -},{}],9:[function(require,module,exports){  
380 -'use strict';  
381 -  
382 -var _ = require('../lib/helper');  
383 -var dom = require('../lib/dom');  
384 -var instances = require('./instances');  
385 -  
386 -module.exports = function (element) {  
387 - var i = instances.get(element);  
388 -  
389 - if (!i) {  
390 - return;  
391 - }  
392 -  
393 - i.event.unbindAll();  
394 - dom.remove(i.scrollbarX);  
395 - dom.remove(i.scrollbarY);  
396 - dom.remove(i.scrollbarXRail);  
397 - dom.remove(i.scrollbarYRail);  
398 - _.removePsClasses(element);  
399 -  
400 - instances.remove(element);  
401 -};  
402 -  
403 -},{"../lib/dom":3,"../lib/helper":6,"./instances":18}],10:[function(require,module,exports){  
404 -'use strict';  
405 -  
406 -var instances = require('../instances');  
407 -var updateGeometry = require('../update-geometry');  
408 -var updateScroll = require('../update-scroll');  
409 -  
410 -function bindClickRailHandler(element, i) {  
411 - function pageOffset(el) {  
412 - return el.getBoundingClientRect();  
413 - }  
414 - var stopPropagation = function (e) { e.stopPropagation(); };  
415 -  
416 - i.event.bind(i.scrollbarY, 'click', stopPropagation);  
417 - i.event.bind(i.scrollbarYRail, 'click', function (e) {  
418 - var positionTop = e.pageY - window.pageYOffset - pageOffset(i.scrollbarYRail).top;  
419 - var direction = positionTop > i.scrollbarYTop ? 1 : -1;  
420 -  
421 - updateScroll(element, 'top', element.scrollTop + direction * i.containerHeight);  
422 - updateGeometry(element);  
423 -  
424 - e.stopPropagation();  
425 - });  
426 -  
427 - i.event.bind(i.scrollbarX, 'click', stopPropagation);  
428 - i.event.bind(i.scrollbarXRail, 'click', function (e) {  
429 - var positionLeft = e.pageX - window.pageXOffset - pageOffset(i.scrollbarXRail).left;  
430 - var direction = positionLeft > i.scrollbarXLeft ? 1 : -1;  
431 -  
432 - updateScroll(element, 'left', element.scrollLeft + direction * i.containerWidth);  
433 - updateGeometry(element);  
434 -  
435 - e.stopPropagation();  
436 - });  
437 -}  
438 -  
439 -module.exports = function (element) {  
440 - var i = instances.get(element);  
441 - bindClickRailHandler(element, i);  
442 -};  
443 -  
444 -},{"../instances":18,"../update-geometry":19,"../update-scroll":20}],11:[function(require,module,exports){  
445 -'use strict';  
446 -  
447 -var _ = require('../../lib/helper');  
448 -var dom = require('../../lib/dom');  
449 -var instances = require('../instances');  
450 -var updateGeometry = require('../update-geometry');  
451 -var updateScroll = require('../update-scroll');  
452 -  
453 -function bindMouseScrollXHandler(element, i) {  
454 - var currentLeft = null;  
455 - var currentPageX = null;  
456 -  
457 - function updateScrollLeft(deltaX) {  
458 - var newLeft = currentLeft + (deltaX * i.railXRatio);  
459 - var maxLeft = Math.max(0, i.scrollbarXRail.getBoundingClientRect().left) + (i.railXRatio * (i.railXWidth - i.scrollbarXWidth));  
460 -  
461 - if (newLeft < 0) {  
462 - i.scrollbarXLeft = 0;  
463 - } else if (newLeft > maxLeft) {  
464 - i.scrollbarXLeft = maxLeft;  
465 - } else {  
466 - i.scrollbarXLeft = newLeft;  
467 - }  
468 -  
469 - var scrollLeft = _.toInt(i.scrollbarXLeft * (i.contentWidth - i.containerWidth) / (i.containerWidth - (i.railXRatio * i.scrollbarXWidth))) - i.negativeScrollAdjustment;  
470 - updateScroll(element, 'left', scrollLeft);  
471 - }  
472 -  
473 - var mouseMoveHandler = function (e) {  
474 - updateScrollLeft(e.pageX - currentPageX);  
475 - updateGeometry(element);  
476 - e.stopPropagation();  
477 - e.preventDefault();  
478 - };  
479 -  
480 - var mouseUpHandler = function () {  
481 - _.stopScrolling(element, 'x');  
482 - i.event.unbind(i.ownerDocument, 'mousemove', mouseMoveHandler);  
483 - };  
484 -  
485 - i.event.bind(i.scrollbarX, 'mousedown', function (e) {  
486 - currentPageX = e.pageX;  
487 - currentLeft = _.toInt(dom.css(i.scrollbarX, 'left')) * i.railXRatio;  
488 - _.startScrolling(element, 'x');  
489 -  
490 - i.event.bind(i.ownerDocument, 'mousemove', mouseMoveHandler);  
491 - i.event.once(i.ownerDocument, 'mouseup', mouseUpHandler);  
492 -  
493 - e.stopPropagation();  
494 - e.preventDefault();  
495 - });  
496 -}  
497 -  
498 -function bindMouseScrollYHandler(element, i) {  
499 - var currentTop = null;  
500 - var currentPageY = null;  
501 -  
502 - function updateScrollTop(deltaY) {  
503 - var newTop = currentTop + (deltaY * i.railYRatio);  
504 - var maxTop = Math.max(0, i.scrollbarYRail.getBoundingClientRect().top) + (i.railYRatio * (i.railYHeight - i.scrollbarYHeight));  
505 -  
506 - if (newTop < 0) {  
507 - i.scrollbarYTop = 0;  
508 - } else if (newTop > maxTop) {  
509 - i.scrollbarYTop = maxTop;  
510 - } else {  
511 - i.scrollbarYTop = newTop;  
512 - }  
513 -  
514 - var scrollTop = _.toInt(i.scrollbarYTop * (i.contentHeight - i.containerHeight) / (i.containerHeight - (i.railYRatio * i.scrollbarYHeight)));  
515 - updateScroll(element, 'top', scrollTop);  
516 - }  
517 -  
518 - var mouseMoveHandler = function (e) {  
519 - updateScrollTop(e.pageY - currentPageY);  
520 - updateGeometry(element);  
521 - e.stopPropagation();  
522 - e.preventDefault();  
523 - };  
524 -  
525 - var mouseUpHandler = function () {  
526 - _.stopScrolling(element, 'y');  
527 - i.event.unbind(i.ownerDocument, 'mousemove', mouseMoveHandler);  
528 - };  
529 -  
530 - i.event.bind(i.scrollbarY, 'mousedown', function (e) {  
531 - currentPageY = e.pageY;  
532 - currentTop = _.toInt(dom.css(i.scrollbarY, 'top')) * i.railYRatio;  
533 - _.startScrolling(element, 'y');  
534 -  
535 - i.event.bind(i.ownerDocument, 'mousemove', mouseMoveHandler);  
536 - i.event.once(i.ownerDocument, 'mouseup', mouseUpHandler);  
537 -  
538 - e.stopPropagation();  
539 - e.preventDefault();  
540 - });  
541 -}  
542 -  
543 -module.exports = function (element) {  
544 - var i = instances.get(element);  
545 - bindMouseScrollXHandler(element, i);  
546 - bindMouseScrollYHandler(element, i);  
547 -};  
548 -  
549 -},{"../../lib/dom":3,"../../lib/helper":6,"../instances":18,"../update-geometry":19,"../update-scroll":20}],12:[function(require,module,exports){  
550 -'use strict';  
551 -  
552 -var _ = require('../../lib/helper');  
553 -var dom = require('../../lib/dom');  
554 -var instances = require('../instances');  
555 -var updateGeometry = require('../update-geometry');  
556 -var updateScroll = require('../update-scroll');  
557 -  
558 -function bindKeyboardHandler(element, i) {  
559 - var hovered = false;  
560 - i.event.bind(element, 'mouseenter', function () {  
561 - hovered = true;  
562 - });  
563 - i.event.bind(element, 'mouseleave', function () {  
564 - hovered = false;  
565 - });  
566 -  
567 - var shouldPrevent = false;  
568 - function shouldPreventDefault(deltaX, deltaY) {  
569 - var scrollTop = element.scrollTop;  
570 - if (deltaX === 0) {  
571 - if (!i.scrollbarYActive) {  
572 - return false;  
573 - }  
574 - if ((scrollTop === 0 && deltaY > 0) || (scrollTop >= i.contentHeight - i.containerHeight && deltaY < 0)) {  
575 - return !i.settings.wheelPropagation;  
576 - }  
577 - }  
578 -  
579 - var scrollLeft = element.scrollLeft;  
580 - if (deltaY === 0) {  
581 - if (!i.scrollbarXActive) {  
582 - return false;  
583 - }  
584 - if ((scrollLeft === 0 && deltaX < 0) || (scrollLeft >= i.contentWidth - i.containerWidth && deltaX > 0)) {  
585 - return !i.settings.wheelPropagation;  
586 - }  
587 - }  
588 - return true;  
589 - }  
590 -  
591 - i.event.bind(i.ownerDocument, 'keydown', function (e) {  
592 - if ((e.isDefaultPrevented && e.isDefaultPrevented()) || e.defaultPrevented) {  
593 - return;  
594 - }  
595 -  
596 - var focused = dom.matches(i.scrollbarX, ':focus') ||  
597 - dom.matches(i.scrollbarY, ':focus');  
598 -  
599 - if (!hovered && !focused) {  
600 - return;  
601 - }  
602 -  
603 - var activeElement = document.activeElement ? document.activeElement : i.ownerDocument.activeElement;  
604 - if (activeElement) {  
605 - if (activeElement.tagName === 'IFRAME') {  
606 - activeElement = activeElement.contentDocument.activeElement;  
607 - } else {  
608 - // go deeper if element is a webcomponent  
609 - while (activeElement.shadowRoot) {  
610 - activeElement = activeElement.shadowRoot.activeElement;  
611 - }  
612 - }  
613 - if (_.isEditable(activeElement)) {  
614 - return;  
615 - }  
616 - }  
617 -  
618 - var deltaX = 0;  
619 - var deltaY = 0;  
620 -  
621 - switch (e.which) {  
622 - case 37: // left  
623 - if (e.metaKey) {  
624 - deltaX = -i.contentWidth;  
625 - } else if (e.altKey) {  
626 - deltaX = -i.containerWidth;  
627 - } else {  
628 - deltaX = -30;  
629 - }  
630 - break;  
631 - case 38: // up  
632 - if (e.metaKey) {  
633 - deltaY = i.contentHeight;  
634 - } else if (e.altKey) {  
635 - deltaY = i.containerHeight;  
636 - } else {  
637 - deltaY = 30;  
638 - }  
639 - break;  
640 - case 39: // right  
641 - if (e.metaKey) {  
642 - deltaX = i.contentWidth;  
643 - } else if (e.altKey) {  
644 - deltaX = i.containerWidth;  
645 - } else {  
646 - deltaX = 30;  
647 - }  
648 - break;  
649 - case 40: // down  
650 - if (e.metaKey) {  
651 - deltaY = -i.contentHeight;  
652 - } else if (e.altKey) {  
653 - deltaY = -i.containerHeight;  
654 - } else {  
655 - deltaY = -30;  
656 - }  
657 - break;  
658 - case 33: // page up  
659 - deltaY = 90;  
660 - break;  
661 - case 32: // space bar  
662 - if (e.shiftKey) {  
663 - deltaY = 90;  
664 - } else {  
665 - deltaY = -90;  
666 - }  
667 - break;  
668 - case 34: // page down  
669 - deltaY = -90;  
670 - break;  
671 - case 35: // end  
672 - if (e.ctrlKey) {  
673 - deltaY = -i.contentHeight;  
674 - } else {  
675 - deltaY = -i.containerHeight;  
676 - }  
677 - break;  
678 - case 36: // home  
679 - if (e.ctrlKey) {  
680 - deltaY = element.scrollTop;  
681 - } else {  
682 - deltaY = i.containerHeight;  
683 - }  
684 - break;  
685 - default:  
686 - return;  
687 - }  
688 -  
689 - updateScroll(element, 'top', element.scrollTop - deltaY);  
690 - updateScroll(element, 'left', element.scrollLeft + deltaX);  
691 - updateGeometry(element);  
692 -  
693 - shouldPrevent = shouldPreventDefault(deltaX, deltaY);  
694 - if (shouldPrevent) {  
695 - e.preventDefault();  
696 - }  
697 - });  
698 -}  
699 -  
700 -module.exports = function (element) {  
701 - var i = instances.get(element);  
702 - bindKeyboardHandler(element, i);  
703 -};  
704 -  
705 -},{"../../lib/dom":3,"../../lib/helper":6,"../instances":18,"../update-geometry":19,"../update-scroll":20}],13:[function(require,module,exports){  
706 -'use strict';  
707 -  
708 -var instances = require('../instances');  
709 -var updateGeometry = require('../update-geometry');  
710 -var updateScroll = require('../update-scroll');  
711 -  
712 -function bindMouseWheelHandler(element, i) {  
713 - var shouldPrevent = false;  
714 -  
715 - function shouldPreventDefault(deltaX, deltaY) {  
716 - var scrollTop = element.scrollTop;  
717 - if (deltaX === 0) {  
718 - if (!i.scrollbarYActive) {  
719 - return false;  
720 - }  
721 - if ((scrollTop === 0 && deltaY > 0) || (scrollTop >= i.contentHeight - i.containerHeight && deltaY < 0)) {  
722 - return !i.settings.wheelPropagation;  
723 - }  
724 - }  
725 -  
726 - var scrollLeft = element.scrollLeft;  
727 - if (deltaY === 0) {  
728 - if (!i.scrollbarXActive) {  
729 - return false;  
730 - }  
731 - if ((scrollLeft === 0 && deltaX < 0) || (scrollLeft >= i.contentWidth - i.containerWidth && deltaX > 0)) {  
732 - return !i.settings.wheelPropagation;  
733 - }  
734 - }  
735 - return true;  
736 - }  
737 -  
738 - function getDeltaFromEvent(e) {  
739 - var deltaX = e.deltaX;  
740 - var deltaY = -1 * e.deltaY;  
741 -  
742 - if (typeof deltaX === "undefined" || typeof deltaY === "undefined") {  
743 - // OS X Safari  
744 - deltaX = -1 * e.wheelDeltaX / 6;  
745 - deltaY = e.wheelDeltaY / 6;  
746 - }  
747 -  
748 - if (e.deltaMode && e.deltaMode === 1) {  
749 - // Firefox in deltaMode 1: Line scrolling  
750 - deltaX *= 10;  
751 - deltaY *= 10;  
752 - }  
753 -  
754 - if (deltaX !== deltaX && deltaY !== deltaY/* NaN checks */) {  
755 - // IE in some mouse drivers  
756 - deltaX = 0;  
757 - deltaY = e.wheelDelta;  
758 - }  
759 -  
760 - if (e.shiftKey) {  
761 - // reverse axis with shift key  
762 - return [-deltaY, -deltaX];  
763 - }  
764 - return [deltaX, deltaY];  
765 - }  
766 -  
767 - function shouldBeConsumedByChild(deltaX, deltaY) {  
768 - var child = element.querySelector('textarea:hover, select[multiple]:hover, .ps-child:hover');  
769 - if (child) {  
770 - if (!window.getComputedStyle(child).overflow.match(/(scroll|auto)/)) {  
771 - // if not scrollable  
772 - return false;  
773 - }  
774 -  
775 - var maxScrollTop = child.scrollHeight - child.clientHeight;  
776 - if (maxScrollTop > 0) {  
777 - if (!(child.scrollTop === 0 && deltaY > 0) && !(child.scrollTop === maxScrollTop && deltaY < 0)) {  
778 - return true;  
779 - }  
780 - }  
781 - var maxScrollLeft = child.scrollLeft - child.clientWidth;  
782 - if (maxScrollLeft > 0) {  
783 - if (!(child.scrollLeft === 0 && deltaX < 0) && !(child.scrollLeft === maxScrollLeft && deltaX > 0)) {  
784 - return true;  
785 - }  
786 - }  
787 - }  
788 - return false;  
789 - }  
790 -  
791 - function mousewheelHandler(e) {  
792 - var delta = getDeltaFromEvent(e);  
793 -  
794 - var deltaX = delta[0];  
795 - var deltaY = delta[1];  
796 -  
797 - if (shouldBeConsumedByChild(deltaX, deltaY)) {  
798 - return;  
799 - }  
800 -  
801 - shouldPrevent = false;  
802 - if (!i.settings.useBothWheelAxes) {  
803 - // deltaX will only be used for horizontal scrolling and deltaY will  
804 - // only be used for vertical scrolling - this is the default  
805 - updateScroll(element, 'top', element.scrollTop - (deltaY * i.settings.wheelSpeed));  
806 - updateScroll(element, 'left', element.scrollLeft + (deltaX * i.settings.wheelSpeed));  
807 - } else if (i.scrollbarYActive && !i.scrollbarXActive) {  
808 - // only vertical scrollbar is active and useBothWheelAxes option is  
809 - // active, so let's scroll vertical bar using both mouse wheel axes  
810 - if (deltaY) {  
811 - updateScroll(element, 'top', element.scrollTop - (deltaY * i.settings.wheelSpeed));  
812 - } else {  
813 - updateScroll(element, 'top', element.scrollTop + (deltaX * i.settings.wheelSpeed));  
814 - }  
815 - shouldPrevent = true;  
816 - } else if (i.scrollbarXActive && !i.scrollbarYActive) {  
817 - // useBothWheelAxes and only horizontal bar is active, so use both  
818 - // wheel axes for horizontal bar  
819 - if (deltaX) {  
820 - updateScroll(element, 'left', element.scrollLeft + (deltaX * i.settings.wheelSpeed));  
821 - } else {  
822 - updateScroll(element, 'left', element.scrollLeft - (deltaY * i.settings.wheelSpeed));  
823 - }  
824 - shouldPrevent = true;  
825 - }  
826 -  
827 - updateGeometry(element);  
828 -  
829 - shouldPrevent = (shouldPrevent || shouldPreventDefault(deltaX, deltaY));  
830 - if (shouldPrevent) {  
831 - e.stopPropagation();  
832 - e.preventDefault();  
833 - }  
834 - }  
835 -  
836 - if (typeof window.onwheel !== "undefined") {  
837 - i.event.bind(element, 'wheel', mousewheelHandler);  
838 - } else if (typeof window.onmousewheel !== "undefined") {  
839 - i.event.bind(element, 'mousewheel', mousewheelHandler);  
840 - }  
841 -}  
842 -  
843 -module.exports = function (element) {  
844 - var i = instances.get(element);  
845 - bindMouseWheelHandler(element, i);  
846 -};  
847 -  
848 -},{"../instances":18,"../update-geometry":19,"../update-scroll":20}],14:[function(require,module,exports){  
849 -'use strict';  
850 -  
851 -var instances = require('../instances');  
852 -var updateGeometry = require('../update-geometry');  
853 -  
854 -function bindNativeScrollHandler(element, i) {  
855 - i.event.bind(element, 'scroll', function () {  
856 - updateGeometry(element);  
857 - });  
858 -}  
859 -  
860 -module.exports = function (element) {  
861 - var i = instances.get(element);  
862 - bindNativeScrollHandler(element, i);  
863 -};  
864 -  
865 -},{"../instances":18,"../update-geometry":19}],15:[function(require,module,exports){  
866 -'use strict';  
867 -  
868 -var _ = require('../../lib/helper');  
869 -var instances = require('../instances');  
870 -var updateGeometry = require('../update-geometry');  
871 -var updateScroll = require('../update-scroll');  
872 -  
873 -function bindSelectionHandler(element, i) {  
874 - function getRangeNode() {  
875 - var selection = window.getSelection ? window.getSelection() :  
876 - document.getSelection ? document.getSelection() : '';  
877 - if (selection.toString().length === 0) {  
878 - return null;  
879 - } else {  
880 - return selection.getRangeAt(0).commonAncestorContainer;  
881 - }  
882 - }  
883 -  
884 - var scrollingLoop = null;  
885 - var scrollDiff = {top: 0, left: 0};  
886 - function startScrolling() {  
887 - if (!scrollingLoop) {  
888 - scrollingLoop = setInterval(function () {  
889 - if (!instances.get(element)) {  
890 - clearInterval(scrollingLoop);  
891 - return;  
892 - }  
893 -  
894 - updateScroll(element, 'top', element.scrollTop + scrollDiff.top);  
895 - updateScroll(element, 'left', element.scrollLeft + scrollDiff.left);  
896 - updateGeometry(element);  
897 - }, 50); // every .1 sec  
898 - }  
899 - }  
900 - function stopScrolling() {  
901 - if (scrollingLoop) {  
902 - clearInterval(scrollingLoop);  
903 - scrollingLoop = null;  
904 - }  
905 - _.stopScrolling(element);  
906 - }  
907 -  
908 - var isSelected = false;  
909 - i.event.bind(i.ownerDocument, 'selectionchange', function () {  
910 - if (element.contains(getRangeNode())) {  
911 - isSelected = true;  
912 - } else {  
913 - isSelected = false;  
914 - stopScrolling();  
915 - }  
916 - });  
917 - i.event.bind(window, 'mouseup', function () {  
918 - if (isSelected) {  
919 - isSelected = false;  
920 - stopScrolling();  
921 - }  
922 - });  
923 - i.event.bind(window, 'keyup', function () {  
924 - if (isSelected) {  
925 - isSelected = false;  
926 - stopScrolling();  
927 - }  
928 - });  
929 -  
930 - i.event.bind(window, 'mousemove', function (e) {  
931 - if (isSelected) {  
932 - var mousePosition = {x: e.pageX, y: e.pageY};  
933 - var containerGeometry = {  
934 - left: element.offsetLeft,  
935 - right: element.offsetLeft + element.offsetWidth,  
936 - top: element.offsetTop,  
937 - bottom: element.offsetTop + element.offsetHeight  
938 - };  
939 -  
940 - if (mousePosition.x < containerGeometry.left + 3) {  
941 - scrollDiff.left = -5;  
942 - _.startScrolling(element, 'x');  
943 - } else if (mousePosition.x > containerGeometry.right - 3) {  
944 - scrollDiff.left = 5;  
945 - _.startScrolling(element, 'x');  
946 - } else {  
947 - scrollDiff.left = 0;  
948 - }  
949 -  
950 - if (mousePosition.y < containerGeometry.top + 3) {  
951 - if (containerGeometry.top + 3 - mousePosition.y < 5) {  
952 - scrollDiff.top = -5;  
953 - } else {  
954 - scrollDiff.top = -20;  
955 - }  
956 - _.startScrolling(element, 'y');  
957 - } else if (mousePosition.y > containerGeometry.bottom - 3) {  
958 - if (mousePosition.y - containerGeometry.bottom + 3 < 5) {  
959 - scrollDiff.top = 5;  
960 - } else {  
961 - scrollDiff.top = 20;  
962 - }  
963 - _.startScrolling(element, 'y');  
964 - } else {  
965 - scrollDiff.top = 0;  
966 - }  
967 -  
968 - if (scrollDiff.top === 0 && scrollDiff.left === 0) {  
969 - stopScrolling();  
970 - } else {  
971 - startScrolling();  
972 - }  
973 - }  
974 - });  
975 -}  
976 -  
977 -module.exports = function (element) {  
978 - var i = instances.get(element);  
979 - bindSelectionHandler(element, i);  
980 -};  
981 -  
982 -},{"../../lib/helper":6,"../instances":18,"../update-geometry":19,"../update-scroll":20}],16:[function(require,module,exports){  
983 -'use strict';  
984 -  
985 -var _ = require('../../lib/helper');  
986 -var instances = require('../instances');  
987 -var updateGeometry = require('../update-geometry');  
988 -var updateScroll = require('../update-scroll');  
989 -  
990 -function bindTouchHandler(element, i, supportsTouch, supportsIePointer) {  
991 - function shouldPreventDefault(deltaX, deltaY) {  
992 - var scrollTop = element.scrollTop;  
993 - var scrollLeft = element.scrollLeft;  
994 - var magnitudeX = Math.abs(deltaX);  
995 - var magnitudeY = Math.abs(deltaY);  
996 -  
997 - if (magnitudeY > magnitudeX) {  
998 - // user is perhaps trying to swipe up/down the page  
999 -  
1000 - if (((deltaY < 0) && (scrollTop === i.contentHeight - i.containerHeight)) ||  
1001 - ((deltaY > 0) && (scrollTop === 0))) {  
1002 - return !i.settings.swipePropagation;  
1003 - }  
1004 - } else if (magnitudeX > magnitudeY) {  
1005 - // user is perhaps trying to swipe left/right across the page  
1006 -  
1007 - if (((deltaX < 0) && (scrollLeft === i.contentWidth - i.containerWidth)) ||  
1008 - ((deltaX > 0) && (scrollLeft === 0))) {  
1009 - return !i.settings.swipePropagation;  
1010 - }  
1011 - }  
1012 -  
1013 - return true;  
1014 - }  
1015 -  
1016 - function applyTouchMove(differenceX, differenceY) {  
1017 - updateScroll(element, 'top', element.scrollTop - differenceY);  
1018 - updateScroll(element, 'left', element.scrollLeft - differenceX);  
1019 -  
1020 - updateGeometry(element);  
1021 - }  
1022 -  
1023 - var startOffset = {};  
1024 - var startTime = 0;  
1025 - var speed = {};  
1026 - var easingLoop = null;  
1027 - var inGlobalTouch = false;  
1028 - var inLocalTouch = false;  
1029 -  
1030 - function globalTouchStart() {  
1031 - inGlobalTouch = true;  
1032 - }  
1033 - function globalTouchEnd() {  
1034 - inGlobalTouch = false;  
1035 - }  
1036 -  
1037 - function getTouch(e) {  
1038 - if (e.targetTouches) {  
1039 - return e.targetTouches[0];  
1040 - } else {  
1041 - // Maybe IE pointer  
1042 - return e;  
1043 - }  
1044 - }  
1045 - function shouldHandle(e) {  
1046 - if (e.targetTouches && e.targetTouches.length === 1) {  
1047 - return true;  
1048 - }  
1049 - if (e.pointerType && e.pointerType !== 'mouse' && e.pointerType !== e.MSPOINTER_TYPE_MOUSE) {  
1050 - return true;  
1051 - }  
1052 - return false;  
1053 - }  
1054 - function touchStart(e) {  
1055 - if (shouldHandle(e)) {  
1056 - inLocalTouch = true;  
1057 -  
1058 - var touch = getTouch(e);  
1059 -  
1060 - startOffset.pageX = touch.pageX;  
1061 - startOffset.pageY = touch.pageY;  
1062 -  
1063 - startTime = (new Date()).getTime();  
1064 -  
1065 - if (easingLoop !== null) {  
1066 - clearInterval(easingLoop);  
1067 - }  
1068 -  
1069 - e.stopPropagation();  
1070 - }  
1071 - }  
1072 - function touchMove(e) {  
1073 - if (!inLocalTouch && i.settings.swipePropagation) {  
1074 - touchStart(e);  
1075 - }  
1076 - if (!inGlobalTouch && inLocalTouch && shouldHandle(e)) {  
1077 - var touch = getTouch(e);  
1078 -  
1079 - var currentOffset = {pageX: touch.pageX, pageY: touch.pageY};  
1080 -  
1081 - var differenceX = currentOffset.pageX - startOffset.pageX;  
1082 - var differenceY = currentOffset.pageY - startOffset.pageY;  
1083 -  
1084 - applyTouchMove(differenceX, differenceY);  
1085 - startOffset = currentOffset;  
1086 -  
1087 - var currentTime = (new Date()).getTime();  
1088 -  
1089 - var timeGap = currentTime - startTime;  
1090 - if (timeGap > 0) {  
1091 - speed.x = differenceX / timeGap;  
1092 - speed.y = differenceY / timeGap;  
1093 - startTime = currentTime;  
1094 - }  
1095 -  
1096 - if (shouldPreventDefault(differenceX, differenceY)) {  
1097 - e.stopPropagation();  
1098 - e.preventDefault();  
1099 - }  
1100 - }  
1101 - }  
1102 - function touchEnd() {  
1103 - if (!inGlobalTouch && inLocalTouch) {  
1104 - inLocalTouch = false;  
1105 -  
1106 - clearInterval(easingLoop);  
1107 - easingLoop = setInterval(function () {  
1108 - if (!instances.get(element)) {  
1109 - clearInterval(easingLoop);  
1110 - return;  
1111 - }  
1112 -  
1113 - if (!speed.x && !speed.y) {  
1114 - clearInterval(easingLoop);  
1115 - return;  
1116 - }  
1117 -  
1118 - if (Math.abs(speed.x) < 0.01 && Math.abs(speed.y) < 0.01) {  
1119 - clearInterval(easingLoop);  
1120 - return;  
1121 - }  
1122 -  
1123 - applyTouchMove(speed.x * 30, speed.y * 30);  
1124 -  
1125 - speed.x *= 0.8;  
1126 - speed.y *= 0.8;  
1127 - }, 10);  
1128 - }  
1129 - }  
1130 -  
1131 - if (supportsTouch) {  
1132 - i.event.bind(window, 'touchstart', globalTouchStart);  
1133 - i.event.bind(window, 'touchend', globalTouchEnd);  
1134 - i.event.bind(element, 'touchstart', touchStart);  
1135 - i.event.bind(element, 'touchmove', touchMove);  
1136 - i.event.bind(element, 'touchend', touchEnd);  
1137 - } else if (supportsIePointer) {  
1138 - if (window.PointerEvent) {  
1139 - i.event.bind(window, 'pointerdown', globalTouchStart);  
1140 - i.event.bind(window, 'pointerup', globalTouchEnd);  
1141 - i.event.bind(element, 'pointerdown', touchStart);  
1142 - i.event.bind(element, 'pointermove', touchMove);  
1143 - i.event.bind(element, 'pointerup', touchEnd);  
1144 - } else if (window.MSPointerEvent) {  
1145 - i.event.bind(window, 'MSPointerDown', globalTouchStart);  
1146 - i.event.bind(window, 'MSPointerUp', globalTouchEnd);  
1147 - i.event.bind(element, 'MSPointerDown', touchStart);  
1148 - i.event.bind(element, 'MSPointerMove', touchMove);  
1149 - i.event.bind(element, 'MSPointerUp', touchEnd);  
1150 - }  
1151 - }  
1152 -}  
1153 -  
1154 -module.exports = function (element) {  
1155 - if (!_.env.supportsTouch && !_.env.supportsIePointer) {  
1156 - return;  
1157 - }  
1158 -  
1159 - var i = instances.get(element);  
1160 - bindTouchHandler(element, i, _.env.supportsTouch, _.env.supportsIePointer);  
1161 -};  
1162 -  
1163 -},{"../../lib/helper":6,"../instances":18,"../update-geometry":19,"../update-scroll":20}],17:[function(require,module,exports){  
1164 -'use strict';  
1165 -  
1166 -var _ = require('../lib/helper');  
1167 -var cls = require('../lib/class');  
1168 -var instances = require('./instances');  
1169 -var updateGeometry = require('./update-geometry');  
1170 -  
1171 -// Handlers  
1172 -var handlers = {  
1173 - 'click-rail': require('./handler/click-rail'),  
1174 - 'drag-scrollbar': require('./handler/drag-scrollbar'),  
1175 - 'keyboard': require('./handler/keyboard'),  
1176 - 'wheel': require('./handler/mouse-wheel'),  
1177 - 'touch': require('./handler/touch'),  
1178 - 'selection': require('./handler/selection')  
1179 -};  
1180 -var nativeScrollHandler = require('./handler/native-scroll');  
1181 -  
1182 -module.exports = function (element, userSettings) {  
1183 - userSettings = typeof userSettings === 'object' ? userSettings : {};  
1184 -  
1185 - cls.add(element, 'ps-container');  
1186 -  
1187 - // Create a plugin instance.  
1188 - var i = instances.add(element);  
1189 -  
1190 - i.settings = _.extend(i.settings, userSettings);  
1191 - cls.add(element, 'ps-theme-' + i.settings.theme);  
1192 -  
1193 - i.settings.handlers.forEach(function (handlerName) {  
1194 - handlers[handlerName](element);  
1195 - });  
1196 -  
1197 - nativeScrollHandler(element);  
1198 -  
1199 - updateGeometry(element);  
1200 -};  
1201 -  
1202 -},{"../lib/class":2,"../lib/helper":6,"./handler/click-rail":10,"./handler/drag-scrollbar":11,"./handler/keyboard":12,"./handler/mouse-wheel":13,"./handler/native-scroll":14,"./handler/selection":15,"./handler/touch":16,"./instances":18,"./update-geometry":19}],18:[function(require,module,exports){  
1203 -'use strict';  
1204 -  
1205 -var _ = require('../lib/helper');  
1206 -var cls = require('../lib/class');  
1207 -var defaultSettings = require('./default-setting');  
1208 -var dom = require('../lib/dom');  
1209 -var EventManager = require('../lib/event-manager');  
1210 -var guid = require('../lib/guid');  
1211 -  
1212 -var instances = {};  
1213 -  
1214 -function Instance(element) {  
1215 - var i = this;  
1216 -  
1217 - i.settings = _.clone(defaultSettings);  
1218 - i.containerWidth = null;  
1219 - i.containerHeight = null;  
1220 - i.contentWidth = null;  
1221 - i.contentHeight = null;  
1222 -  
1223 - i.isRtl = dom.css(element, 'direction') === "rtl";  
1224 - i.isNegativeScroll = (function () {  
1225 - var originalScrollLeft = element.scrollLeft;  
1226 - var result = null;  
1227 - element.scrollLeft = -1;  
1228 - result = element.scrollLeft < 0;  
1229 - element.scrollLeft = originalScrollLeft;  
1230 - return result;  
1231 - })();  
1232 - i.negativeScrollAdjustment = i.isNegativeScroll ? element.scrollWidth - element.clientWidth : 0;  
1233 - i.event = new EventManager();  
1234 - i.ownerDocument = element.ownerDocument || document;  
1235 -  
1236 - function focus() {  
1237 - cls.add(element, 'ps-focus');  
1238 - }  
1239 -  
1240 - function blur() {  
1241 - cls.remove(element, 'ps-focus');  
1242 - }  
1243 -  
1244 - i.scrollbarXRail = dom.appendTo(dom.e('div', 'ps-scrollbar-x-rail'), element);  
1245 - i.scrollbarX = dom.appendTo(dom.e('div', 'ps-scrollbar-x'), i.scrollbarXRail);  
1246 - i.scrollbarX.setAttribute('tabindex', 0);  
1247 - i.event.bind(i.scrollbarX, 'focus', focus);  
1248 - i.event.bind(i.scrollbarX, 'blur', blur);  
1249 - i.scrollbarXActive = null;  
1250 - i.scrollbarXWidth = null;  
1251 - i.scrollbarXLeft = null;  
1252 - i.scrollbarXBottom = _.toInt(dom.css(i.scrollbarXRail, 'bottom'));  
1253 - i.isScrollbarXUsingBottom = i.scrollbarXBottom === i.scrollbarXBottom; // !isNaN  
1254 - i.scrollbarXTop = i.isScrollbarXUsingBottom ? null : _.toInt(dom.css(i.scrollbarXRail, 'top'));  
1255 - i.railBorderXWidth = _.toInt(dom.css(i.scrollbarXRail, 'borderLeftWidth')) + _.toInt(dom.css(i.scrollbarXRail, 'borderRightWidth'));  
1256 - // Set rail to display:block to calculate margins  
1257 - dom.css(i.scrollbarXRail, 'display', 'block');  
1258 - i.railXMarginWidth = _.toInt(dom.css(i.scrollbarXRail, 'marginLeft')) + _.toInt(dom.css(i.scrollbarXRail, 'marginRight'));  
1259 - dom.css(i.scrollbarXRail, 'display', '');  
1260 - i.railXWidth = null;  
1261 - i.railXRatio = null;  
1262 -  
1263 - i.scrollbarYRail = dom.appendTo(dom.e('div', 'ps-scrollbar-y-rail'), element);  
1264 - i.scrollbarY = dom.appendTo(dom.e('div', 'ps-scrollbar-y'), i.scrollbarYRail);  
1265 - i.scrollbarY.setAttribute('tabindex', 0);  
1266 - i.event.bind(i.scrollbarY, 'focus', focus);  
1267 - i.event.bind(i.scrollbarY, 'blur', blur);  
1268 - i.scrollbarYActive = null;  
1269 - i.scrollbarYHeight = null;  
1270 - i.scrollbarYTop = null;  
1271 - i.scrollbarYRight = _.toInt(dom.css(i.scrollbarYRail, 'right'));  
1272 - i.isScrollbarYUsingRight = i.scrollbarYRight === i.scrollbarYRight; // !isNaN  
1273 - i.scrollbarYLeft = i.isScrollbarYUsingRight ? null : _.toInt(dom.css(i.scrollbarYRail, 'left'));  
1274 - i.scrollbarYOuterWidth = i.isRtl ? _.outerWidth(i.scrollbarY) : null;  
1275 - i.railBorderYWidth = _.toInt(dom.css(i.scrollbarYRail, 'borderTopWidth')) + _.toInt(dom.css(i.scrollbarYRail, 'borderBottomWidth'));  
1276 - dom.css(i.scrollbarYRail, 'display', 'block');  
1277 - i.railYMarginHeight = _.toInt(dom.css(i.scrollbarYRail, 'marginTop')) + _.toInt(dom.css(i.scrollbarYRail, 'marginBottom'));  
1278 - dom.css(i.scrollbarYRail, 'display', '');  
1279 - i.railYHeight = null;  
1280 - i.railYRatio = null;  
1281 -}  
1282 -  
1283 -function getId(element) {  
1284 - return element.getAttribute('data-ps-id');  
1285 -}  
1286 -  
1287 -function setId(element, id) {  
1288 - element.setAttribute('data-ps-id', id);  
1289 -}  
1290 -  
1291 -function removeId(element) {  
1292 - element.removeAttribute('data-ps-id');  
1293 -}  
1294 -  
1295 -exports.add = function (element) {  
1296 - var newId = guid();  
1297 - setId(element, newId);  
1298 - instances[newId] = new Instance(element);  
1299 - return instances[newId];  
1300 -};  
1301 -  
1302 -exports.remove = function (element) {  
1303 - delete instances[getId(element)];  
1304 - removeId(element);  
1305 -};  
1306 -  
1307 -exports.get = function (element) {  
1308 - return instances[getId(element)];  
1309 -};  
1310 -  
1311 -},{"../lib/class":2,"../lib/dom":3,"../lib/event-manager":4,"../lib/guid":5,"../lib/helper":6,"./default-setting":8}],19:[function(require,module,exports){  
1312 -'use strict';  
1313 -  
1314 -var _ = require('../lib/helper');  
1315 -var cls = require('../lib/class');  
1316 -var dom = require('../lib/dom');  
1317 -var instances = require('./instances');  
1318 -var updateScroll = require('./update-scroll');  
1319 -  
1320 -function getThumbSize(i, thumbSize) {  
1321 - if (i.settings.minScrollbarLength) {  
1322 - thumbSize = Math.max(thumbSize, i.settings.minScrollbarLength);  
1323 - }  
1324 - if (i.settings.maxScrollbarLength) {  
1325 - thumbSize = Math.min(thumbSize, i.settings.maxScrollbarLength);  
1326 - }  
1327 - return thumbSize;  
1328 -}  
1329 -  
1330 -function updateCss(element, i) {  
1331 - var xRailOffset = {width: i.railXWidth};  
1332 - if (i.isRtl) {  
1333 - xRailOffset.left = i.negativeScrollAdjustment + element.scrollLeft + i.containerWidth - i.contentWidth;  
1334 - } else {  
1335 - xRailOffset.left = element.scrollLeft;  
1336 - }  
1337 - if (i.isScrollbarXUsingBottom) {  
1338 - xRailOffset.bottom = i.scrollbarXBottom - element.scrollTop;  
1339 - } else {  
1340 - xRailOffset.top = i.scrollbarXTop + element.scrollTop;  
1341 - }  
1342 - dom.css(i.scrollbarXRail, xRailOffset);  
1343 -  
1344 - var yRailOffset = {top: element.scrollTop, height: i.railYHeight};  
1345 - if (i.isScrollbarYUsingRight) {  
1346 - if (i.isRtl) {  
1347 - yRailOffset.right = i.contentWidth - (i.negativeScrollAdjustment + element.scrollLeft) - i.scrollbarYRight - i.scrollbarYOuterWidth;  
1348 - } else {  
1349 - yRailOffset.right = i.scrollbarYRight - element.scrollLeft;  
1350 - }  
1351 - } else {  
1352 - if (i.isRtl) {  
1353 - yRailOffset.left = i.negativeScrollAdjustment + element.scrollLeft + i.containerWidth * 2 - i.contentWidth - i.scrollbarYLeft - i.scrollbarYOuterWidth;  
1354 - } else {  
1355 - yRailOffset.left = i.scrollbarYLeft + element.scrollLeft;  
1356 - }  
1357 - }  
1358 - dom.css(i.scrollbarYRail, yRailOffset);  
1359 -  
1360 - dom.css(i.scrollbarX, {left: i.scrollbarXLeft, width: i.scrollbarXWidth - i.railBorderXWidth});  
1361 - dom.css(i.scrollbarY, {top: i.scrollbarYTop, height: i.scrollbarYHeight - i.railBorderYWidth});  
1362 -}  
1363 -  
1364 -module.exports = function (element) {  
1365 - var i = instances.get(element);  
1366 -  
1367 - i.containerWidth = element.clientWidth;  
1368 - i.containerHeight = element.clientHeight;  
1369 - i.contentWidth = element.scrollWidth;  
1370 - i.contentHeight = element.scrollHeight;  
1371 -  
1372 - var existingRails;  
1373 - if (!element.contains(i.scrollbarXRail)) {  
1374 - existingRails = dom.queryChildren(element, '.ps-scrollbar-x-rail');  
1375 - if (existingRails.length > 0) {  
1376 - existingRails.forEach(function (rail) {  
1377 - dom.remove(rail);  
1378 - });  
1379 - }  
1380 - dom.appendTo(i.scrollbarXRail, element);  
1381 - }  
1382 - if (!element.contains(i.scrollbarYRail)) {  
1383 - existingRails = dom.queryChildren(element, '.ps-scrollbar-y-rail');  
1384 - if (existingRails.length > 0) {  
1385 - existingRails.forEach(function (rail) {  
1386 - dom.remove(rail);  
1387 - });  
1388 - }  
1389 - dom.appendTo(i.scrollbarYRail, element);  
1390 - }  
1391 -  
1392 - if (!i.settings.suppressScrollX && i.containerWidth + i.settings.scrollXMarginOffset < i.contentWidth) {  
1393 - i.scrollbarXActive = true;  
1394 - i.railXWidth = i.containerWidth - i.railXMarginWidth;  
1395 - i.railXRatio = i.containerWidth / i.railXWidth;  
1396 - i.scrollbarXWidth = getThumbSize(i, _.toInt(i.railXWidth * i.containerWidth / i.contentWidth));  
1397 - i.scrollbarXLeft = _.toInt((i.negativeScrollAdjustment + element.scrollLeft) * (i.railXWidth - i.scrollbarXWidth) / (i.contentWidth - i.containerWidth));  
1398 - } else {  
1399 - i.scrollbarXActive = false;  
1400 - }  
1401 -  
1402 - if (!i.settings.suppressScrollY && i.containerHeight + i.settings.scrollYMarginOffset < i.contentHeight) {  
1403 - i.scrollbarYActive = true;  
1404 - i.railYHeight = i.containerHeight - i.railYMarginHeight;  
1405 - i.railYRatio = i.containerHeight / i.railYHeight;  
1406 - i.scrollbarYHeight = getThumbSize(i, _.toInt(i.railYHeight * i.containerHeight / i.contentHeight));  
1407 - i.scrollbarYTop = _.toInt(element.scrollTop * (i.railYHeight - i.scrollbarYHeight) / (i.contentHeight - i.containerHeight));  
1408 - } else {  
1409 - i.scrollbarYActive = false;  
1410 - }  
1411 -  
1412 - if (i.scrollbarXLeft >= i.railXWidth - i.scrollbarXWidth) {  
1413 - i.scrollbarXLeft = i.railXWidth - i.scrollbarXWidth;  
1414 - }  
1415 - if (i.scrollbarYTop >= i.railYHeight - i.scrollbarYHeight) {  
1416 - i.scrollbarYTop = i.railYHeight - i.scrollbarYHeight;  
1417 - }  
1418 -  
1419 - updateCss(element, i);  
1420 -  
1421 - if (i.scrollbarXActive) {  
1422 - cls.add(element, 'ps-active-x');  
1423 - } else {  
1424 - cls.remove(element, 'ps-active-x');  
1425 - i.scrollbarXWidth = 0;  
1426 - i.scrollbarXLeft = 0;  
1427 - updateScroll(element, 'left', 0);  
1428 - }  
1429 - if (i.scrollbarYActive) {  
1430 - cls.add(element, 'ps-active-y');  
1431 - } else {  
1432 - cls.remove(element, 'ps-active-y');  
1433 - i.scrollbarYHeight = 0;  
1434 - i.scrollbarYTop = 0;  
1435 - updateScroll(element, 'top', 0);  
1436 - }  
1437 -};  
1438 -  
1439 -},{"../lib/class":2,"../lib/dom":3,"../lib/helper":6,"./instances":18,"./update-scroll":20}],20:[function(require,module,exports){  
1440 -'use strict';  
1441 -  
1442 -var instances = require('./instances');  
1443 -  
1444 -var lastTop;  
1445 -var lastLeft;  
1446 -  
1447 -var createDOMEvent = function (name) {  
1448 - var event = document.createEvent("Event");  
1449 - event.initEvent(name, true, true);  
1450 - return event;  
1451 -};  
1452 -  
1453 -module.exports = function (element, axis, value) {  
1454 - if (typeof element === 'undefined') {  
1455 - throw 'You must provide an element to the update-scroll function';  
1456 - }  
1457 -  
1458 - if (typeof axis === 'undefined') {  
1459 - throw 'You must provide an axis to the update-scroll function';  
1460 - }  
1461 -  
1462 - if (typeof value === 'undefined') {  
1463 - throw 'You must provide a value to the update-scroll function';  
1464 - }  
1465 -  
1466 - if (axis === 'top' && value <= 0) {  
1467 - element.scrollTop = value = 0; // don't allow negative scroll  
1468 - element.dispatchEvent(createDOMEvent('ps-y-reach-start'));  
1469 - }  
1470 -  
1471 - if (axis === 'left' && value <= 0) {  
1472 - element.scrollLeft = value = 0; // don't allow negative scroll  
1473 - element.dispatchEvent(createDOMEvent('ps-x-reach-start'));  
1474 - }  
1475 -  
1476 - var i = instances.get(element);  
1477 -  
1478 - if (axis === 'top' && value >= i.contentHeight - i.containerHeight) {  
1479 - // don't allow scroll past container  
1480 - value = i.contentHeight - i.containerHeight;  
1481 - if (value - element.scrollTop <= 1) {  
1482 - // mitigates rounding errors on non-subpixel scroll values  
1483 - value = element.scrollTop;  
1484 - } else {  
1485 - element.scrollTop = value;  
1486 - }  
1487 - element.dispatchEvent(createDOMEvent('ps-y-reach-end'));  
1488 - }  
1489 -  
1490 - if (axis === 'left' && value >= i.contentWidth - i.containerWidth) {  
1491 - // don't allow scroll past container  
1492 - value = i.contentWidth - i.containerWidth;  
1493 - if (value - element.scrollLeft <= 1) {  
1494 - // mitigates rounding errors on non-subpixel scroll values  
1495 - value = element.scrollLeft;  
1496 - } else {  
1497 - element.scrollLeft = value;  
1498 - }  
1499 - element.dispatchEvent(createDOMEvent('ps-x-reach-end'));  
1500 - }  
1501 -  
1502 - if (!lastTop) {  
1503 - lastTop = element.scrollTop;  
1504 - }  
1505 -  
1506 - if (!lastLeft) {  
1507 - lastLeft = element.scrollLeft;  
1508 - }  
1509 -  
1510 - if (axis === 'top' && value < lastTop) {  
1511 - element.dispatchEvent(createDOMEvent('ps-scroll-up'));  
1512 - }  
1513 -  
1514 - if (axis === 'top' && value > lastTop) {  
1515 - element.dispatchEvent(createDOMEvent('ps-scroll-down'));  
1516 - }  
1517 -  
1518 - if (axis === 'left' && value < lastLeft) {  
1519 - element.dispatchEvent(createDOMEvent('ps-scroll-left'));  
1520 - }  
1521 -  
1522 - if (axis === 'left' && value > lastLeft) {  
1523 - element.dispatchEvent(createDOMEvent('ps-scroll-right'));  
1524 - }  
1525 -  
1526 - if (axis === 'top') {  
1527 - element.scrollTop = lastTop = value;  
1528 - element.dispatchEvent(createDOMEvent('ps-scroll-y'));  
1529 - }  
1530 -  
1531 - if (axis === 'left') {  
1532 - element.scrollLeft = lastLeft = value;  
1533 - element.dispatchEvent(createDOMEvent('ps-scroll-x'));  
1534 - }  
1535 -  
1536 -};  
1537 -  
1538 -},{"./instances":18}],21:[function(require,module,exports){  
1539 -'use strict';  
1540 -  
1541 -var _ = require('../lib/helper');  
1542 -var dom = require('../lib/dom');  
1543 -var instances = require('./instances');  
1544 -var updateGeometry = require('./update-geometry');  
1545 -var updateScroll = require('./update-scroll');  
1546 -  
1547 -module.exports = function (element) {  
1548 - var i = instances.get(element);  
1549 -  
1550 - if (!i) {  
1551 - return;  
1552 - }  
1553 -  
1554 - // Recalcuate negative scrollLeft adjustment  
1555 - i.negativeScrollAdjustment = i.isNegativeScroll ? element.scrollWidth - element.clientWidth : 0;  
1556 -  
1557 - // Recalculate rail margins  
1558 - dom.css(i.scrollbarXRail, 'display', 'block');  
1559 - dom.css(i.scrollbarYRail, 'display', 'block');  
1560 - i.railXMarginWidth = _.toInt(dom.css(i.scrollbarXRail, 'marginLeft')) + _.toInt(dom.css(i.scrollbarXRail, 'marginRight'));  
1561 - i.railYMarginHeight = _.toInt(dom.css(i.scrollbarYRail, 'marginTop')) + _.toInt(dom.css(i.scrollbarYRail, 'marginBottom'));  
1562 -  
1563 - // Hide scrollbars not to affect scrollWidth and scrollHeight  
1564 - dom.css(i.scrollbarXRail, 'display', 'none');  
1565 - dom.css(i.scrollbarYRail, 'display', 'none');  
1566 -  
1567 - updateGeometry(element);  
1568 -  
1569 - // Update top/left scroll to trigger events  
1570 - updateScroll(element, 'top', element.scrollTop);  
1571 - updateScroll(element, 'left', element.scrollLeft);  
1572 -  
1573 - dom.css(i.scrollbarXRail, 'display', '');  
1574 - dom.css(i.scrollbarYRail, 'display', '');  
1575 -};  
1576 -  
1577 -},{"../lib/dom":3,"../lib/helper":6,"./instances":18,"./update-geometry":19,"./update-scroll":20}]},{},[1]); 1 +/* perfect-scrollbar v0.6.16 */
  2 +(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
  3 +'use strict';
  4 +
  5 +var ps = require('../main');
  6 +var psInstances = require('../plugin/instances');
  7 +
  8 +function mountJQuery(jQuery) {
  9 + jQuery.fn.perfectScrollbar = function (settingOrCommand) {
  10 + return this.each(function () {
  11 + if (typeof settingOrCommand === 'object' ||
  12 + typeof settingOrCommand === 'undefined') {
  13 + // If it's an object or none, initialize.
  14 + var settings = settingOrCommand;
  15 +
  16 + if (!psInstances.get(this)) {
  17 + ps.initialize(this, settings);
  18 + }
  19 + } else {
  20 + // Unless, it may be a command.
  21 + var command = settingOrCommand;
  22 +
  23 + if (command === 'update') {
  24 + ps.update(this);
  25 + } else if (command === 'destroy') {
  26 + ps.destroy(this);
  27 + }
  28 + }
  29 + });
  30 + };
  31 +}
  32 +
  33 +if (typeof define === 'function' && define.amd) {
  34 + // AMD. Register as an anonymous module.
  35 + define(['jquery'], mountJQuery);
  36 +} else {
  37 + var jq = window.jQuery ? window.jQuery : window.$;
  38 + if (typeof jq !== 'undefined') {
  39 + mountJQuery(jq);
  40 + }
  41 +}
  42 +
  43 +module.exports = mountJQuery;
  44 +
  45 +},{"../main":7,"../plugin/instances":18}],2:[function(require,module,exports){
  46 +'use strict';
  47 +
  48 +function oldAdd(element, className) {
  49 + var classes = element.className.split(' ');
  50 + if (classes.indexOf(className) < 0) {
  51 + classes.push(className);
  52 + }
  53 + element.className = classes.join(' ');
  54 +}
  55 +
  56 +function oldRemove(element, className) {
  57 + var classes = element.className.split(' ');
  58 + var idx = classes.indexOf(className);
  59 + if (idx >= 0) {
  60 + classes.splice(idx, 1);
  61 + }
  62 + element.className = classes.join(' ');
  63 +}
  64 +
  65 +exports.add = function (element, className) {
  66 + if (element.classList) {
  67 + element.classList.add(className);
  68 + } else {
  69 + oldAdd(element, className);
  70 + }
  71 +};
  72 +
  73 +exports.remove = function (element, className) {
  74 + if (element.classList) {
  75 + element.classList.remove(className);
  76 + } else {
  77 + oldRemove(element, className);
  78 + }
  79 +};
  80 +
  81 +exports.list = function (element) {
  82 + if (element.classList) {
  83 + return Array.prototype.slice.apply(element.classList);
  84 + } else {
  85 + return element.className.split(' ');
  86 + }
  87 +};
  88 +
  89 +},{}],3:[function(require,module,exports){
  90 +'use strict';
  91 +
  92 +var DOM = {};
  93 +
  94 +DOM.e = function (tagName, className) {
  95 + var element = document.createElement(tagName);
  96 + element.className = className;
  97 + return element;
  98 +};
  99 +
  100 +DOM.appendTo = function (child, parent) {
  101 + parent.appendChild(child);
  102 + return child;
  103 +};
  104 +
  105 +function cssGet(element, styleName) {
  106 + return window.getComputedStyle(element)[styleName];
  107 +}
  108 +
  109 +function cssSet(element, styleName, styleValue) {
  110 + if (typeof styleValue === 'number') {
  111 + styleValue = styleValue.toString() + 'px';
  112 + }
  113 + element.style[styleName] = styleValue;
  114 + return element;
  115 +}
  116 +
  117 +function cssMultiSet(element, obj) {
  118 + for (var key in obj) {
  119 + var val = obj[key];
  120 + if (typeof val === 'number') {
  121 + val = val.toString() + 'px';
  122 + }
  123 + element.style[key] = val;
  124 + }
  125 + return element;
  126 +}
  127 +
  128 +DOM.css = function (element, styleNameOrObject, styleValue) {
  129 + if (typeof styleNameOrObject === 'object') {
  130 + // multiple set with object
  131 + return cssMultiSet(element, styleNameOrObject);
  132 + } else {
  133 + if (typeof styleValue === 'undefined') {
  134 + return cssGet(element, styleNameOrObject);
  135 + } else {
  136 + return cssSet(element, styleNameOrObject, styleValue);
  137 + }
  138 + }
  139 +};
  140 +
  141 +DOM.matches = function (element, query) {
  142 + if (typeof element.matches !== 'undefined') {
  143 + return element.matches(query);
  144 + } else {
  145 + if (typeof element.matchesSelector !== 'undefined') {
  146 + return element.matchesSelector(query);
  147 + } else if (typeof element.webkitMatchesSelector !== 'undefined') {
  148 + return element.webkitMatchesSelector(query);
  149 + } else if (typeof element.mozMatchesSelector !== 'undefined') {
  150 + return element.mozMatchesSelector(query);
  151 + } else if (typeof element.msMatchesSelector !== 'undefined') {
  152 + return element.msMatchesSelector(query);
  153 + }
  154 + }
  155 +};
  156 +
  157 +DOM.remove = function (element) {
  158 + if (typeof element.remove !== 'undefined') {
  159 + element.remove();
  160 + } else {
  161 + if (element.parentNode) {
  162 + element.parentNode.removeChild(element);
  163 + }
  164 + }
  165 +};
  166 +
  167 +DOM.queryChildren = function (element, selector) {
  168 + return Array.prototype.filter.call(element.childNodes, function (child) {
  169 + return DOM.matches(child, selector);
  170 + });
  171 +};
  172 +
  173 +module.exports = DOM;
  174 +
  175 +},{}],4:[function(require,module,exports){
  176 +'use strict';
  177 +
  178 +var EventElement = function (element) {
  179 + this.element = element;
  180 + this.events = {};
  181 +};
  182 +
  183 +EventElement.prototype.bind = function (eventName, handler) {
  184 + if (typeof this.events[eventName] === 'undefined') {
  185 + this.events[eventName] = [];
  186 + }
  187 + this.events[eventName].push(handler);
  188 + this.element.addEventListener(eventName, handler, false);
  189 +};
  190 +
  191 +EventElement.prototype.unbind = function (eventName, handler) {
  192 + var isHandlerProvided = (typeof handler !== 'undefined');
  193 + this.events[eventName] = this.events[eventName].filter(function (hdlr) {
  194 + if (isHandlerProvided && hdlr !== handler) {
  195 + return true;
  196 + }
  197 + this.element.removeEventListener(eventName, hdlr, false);
  198 + return false;
  199 + }, this);
  200 +};
  201 +
  202 +EventElement.prototype.unbindAll = function () {
  203 + for (var name in this.events) {
  204 + this.unbind(name);
  205 + }
  206 +};
  207 +
  208 +var EventManager = function () {
  209 + this.eventElements = [];
  210 +};
  211 +
  212 +EventManager.prototype.eventElement = function (element) {
  213 + var ee = this.eventElements.filter(function (eventElement) {
  214 + return eventElement.element === element;
  215 + })[0];
  216 + if (typeof ee === 'undefined') {
  217 + ee = new EventElement(element);
  218 + this.eventElements.push(ee);
  219 + }
  220 + return ee;
  221 +};
  222 +
  223 +EventManager.prototype.bind = function (element, eventName, handler) {
  224 + this.eventElement(element).bind(eventName, handler);
  225 +};
  226 +
  227 +EventManager.prototype.unbind = function (element, eventName, handler) {
  228 + this.eventElement(element).unbind(eventName, handler);
  229 +};
  230 +
  231 +EventManager.prototype.unbindAll = function () {
  232 + for (var i = 0; i < this.eventElements.length; i++) {
  233 + this.eventElements[i].unbindAll();
  234 + }
  235 +};
  236 +
  237 +EventManager.prototype.once = function (element, eventName, handler) {
  238 + var ee = this.eventElement(element);
  239 + var onceHandler = function (e) {
  240 + ee.unbind(eventName, onceHandler);
  241 + handler(e);
  242 + };
  243 + ee.bind(eventName, onceHandler);
  244 +};
  245 +
  246 +module.exports = EventManager;
  247 +
  248 +},{}],5:[function(require,module,exports){
  249 +'use strict';
  250 +
  251 +module.exports = (function () {
  252 + function s4() {
  253 + return Math.floor((1 + Math.random()) * 0x10000)
  254 + .toString(16)
  255 + .substring(1);
  256 + }
  257 + return function () {
  258 + return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
  259 + s4() + '-' + s4() + s4() + s4();
  260 + };
  261 +})();
  262 +
  263 +},{}],6:[function(require,module,exports){
  264 +'use strict';
  265 +
  266 +var cls = require('./class');
  267 +var dom = require('./dom');
  268 +
  269 +var toInt = exports.toInt = function (x) {
  270 + return parseInt(x, 10) || 0;
  271 +};
  272 +
  273 +var clone = exports.clone = function (obj) {
  274 + if (!obj) {
  275 + return null;
  276 + } else if (obj.constructor === Array) {
  277 + return obj.map(clone);
  278 + } else if (typeof obj === 'object') {
  279 + var result = {};
  280 + for (var key in obj) {
  281 + result[key] = clone(obj[key]);
  282 + }
  283 + return result;
  284 + } else {
  285 + return obj;
  286 + }
  287 +};
  288 +
  289 +exports.extend = function (original, source) {
  290 + var result = clone(original);
  291 + for (var key in source) {
  292 + result[key] = clone(source[key]);
  293 + }
  294 + return result;
  295 +};
  296 +
  297 +exports.isEditable = function (el) {
  298 + return dom.matches(el, "input,[contenteditable]") ||
  299 + dom.matches(el, "select,[contenteditable]") ||
  300 + dom.matches(el, "textarea,[contenteditable]") ||
  301 + dom.matches(el, "button,[contenteditable]");
  302 +};
  303 +
  304 +exports.removePsClasses = function (element) {
  305 + var clsList = cls.list(element);
  306 + for (var i = 0; i < clsList.length; i++) {
  307 + var className = clsList[i];
  308 + if (className.indexOf('ps-') === 0) {
  309 + cls.remove(element, className);
  310 + }
  311 + }
  312 +};
  313 +
  314 +exports.outerWidth = function (element) {
  315 + return toInt(dom.css(element, 'width')) +
  316 + toInt(dom.css(element, 'paddingLeft')) +
  317 + toInt(dom.css(element, 'paddingRight')) +
  318 + toInt(dom.css(element, 'borderLeftWidth')) +
  319 + toInt(dom.css(element, 'borderRightWidth'));
  320 +};
  321 +
  322 +exports.startScrolling = function (element, axis) {
  323 + cls.add(element, 'ps-in-scrolling');
  324 + if (typeof axis !== 'undefined') {
  325 + cls.add(element, 'ps-' + axis);
  326 + } else {
  327 + cls.add(element, 'ps-x');
  328 + cls.add(element, 'ps-y');
  329 + }
  330 +};
  331 +
  332 +exports.stopScrolling = function (element, axis) {
  333 + cls.remove(element, 'ps-in-scrolling');
  334 + if (typeof axis !== 'undefined') {
  335 + cls.remove(element, 'ps-' + axis);
  336 + } else {
  337 + cls.remove(element, 'ps-x');
  338 + cls.remove(element, 'ps-y');
  339 + }
  340 +};
  341 +
  342 +exports.env = {
  343 + isWebKit: 'WebkitAppearance' in document.documentElement.style,
  344 + supportsTouch: (('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch),
  345 + supportsIePointer: window.navigator.msMaxTouchPoints !== null
  346 +};
  347 +
  348 +},{"./class":2,"./dom":3}],7:[function(require,module,exports){
  349 +'use strict';
  350 +
  351 +var destroy = require('./plugin/destroy');
  352 +var initialize = require('./plugin/initialize');
  353 +var update = require('./plugin/update');
  354 +
  355 +module.exports = {
  356 + initialize: initialize,
  357 + update: update,
  358 + destroy: destroy
  359 +};
  360 +
  361 +},{"./plugin/destroy":9,"./plugin/initialize":17,"./plugin/update":21}],8:[function(require,module,exports){
  362 +'use strict';
  363 +
  364 +module.exports = {
  365 + handlers: ['click-rail', 'drag-scrollbar', 'keyboard', 'wheel', 'touch'],
  366 + maxScrollbarLength: null,
  367 + minScrollbarLength: null,
  368 + scrollXMarginOffset: 0,
  369 + scrollYMarginOffset: 0,
  370 + suppressScrollX: false,
  371 + suppressScrollY: false,
  372 + swipePropagation: true,
  373 + useBothWheelAxes: false,
  374 + wheelPropagation: false,
  375 + wheelSpeed: 1,
  376 + theme: 'default'
  377 +};
  378 +
  379 +},{}],9:[function(require,module,exports){
  380 +'use strict';
  381 +
  382 +var _ = require('../lib/helper');
  383 +var dom = require('../lib/dom');
  384 +var instances = require('./instances');
  385 +
  386 +module.exports = function (element) {
  387 + var i = instances.get(element);
  388 +
  389 + if (!i) {
  390 + return;
  391 + }
  392 +
  393 + i.event.unbindAll();
  394 + dom.remove(i.scrollbarX);
  395 + dom.remove(i.scrollbarY);
  396 + dom.remove(i.scrollbarXRail);
  397 + dom.remove(i.scrollbarYRail);
  398 + _.removePsClasses(element);
  399 +
  400 + instances.remove(element);
  401 +};
  402 +
  403 +},{"../lib/dom":3,"../lib/helper":6,"./instances":18}],10:[function(require,module,exports){
  404 +'use strict';
  405 +
  406 +var instances = require('../instances');
  407 +var updateGeometry = require('../update-geometry');
  408 +var updateScroll = require('../update-scroll');
  409 +
  410 +function bindClickRailHandler(element, i) {
  411 + function pageOffset(el) {
  412 + return el.getBoundingClientRect();
  413 + }
  414 + var stopPropagation = function (e) { e.stopPropagation(); };
  415 +
  416 + i.event.bind(i.scrollbarY, 'click', stopPropagation);
  417 + i.event.bind(i.scrollbarYRail, 'click', function (e) {
  418 + var positionTop = e.pageY - window.pageYOffset - pageOffset(i.scrollbarYRail).top;
  419 + var direction = positionTop > i.scrollbarYTop ? 1 : -1;
  420 +
  421 + updateScroll(element, 'top', element.scrollTop + direction * i.containerHeight);
  422 + updateGeometry(element);
  423 +
  424 + e.stopPropagation();
  425 + });
  426 +
  427 + i.event.bind(i.scrollbarX, 'click', stopPropagation);
  428 + i.event.bind(i.scrollbarXRail, 'click', function (e) {
  429 + var positionLeft = e.pageX - window.pageXOffset - pageOffset(i.scrollbarXRail).left;
  430 + var direction = positionLeft > i.scrollbarXLeft ? 1 : -1;
  431 +
  432 + updateScroll(element, 'left', element.scrollLeft + direction * i.containerWidth);
  433 + updateGeometry(element);
  434 +
  435 + e.stopPropagation();
  436 + });
  437 +}
  438 +
  439 +module.exports = function (element) {
  440 + var i = instances.get(element);
  441 + bindClickRailHandler(element, i);
  442 +};
  443 +
  444 +},{"../instances":18,"../update-geometry":19,"../update-scroll":20}],11:[function(require,module,exports){
  445 +'use strict';
  446 +
  447 +var _ = require('../../lib/helper');
  448 +var dom = require('../../lib/dom');
  449 +var instances = require('../instances');
  450 +var updateGeometry = require('../update-geometry');
  451 +var updateScroll = require('../update-scroll');
  452 +
  453 +function bindMouseScrollXHandler(element, i) {
  454 + var currentLeft = null;
  455 + var currentPageX = null;
  456 +
  457 + function updateScrollLeft(deltaX) {
  458 + var newLeft = currentLeft + (deltaX * i.railXRatio);
  459 + var maxLeft = Math.max(0, i.scrollbarXRail.getBoundingClientRect().left) + (i.railXRatio * (i.railXWidth - i.scrollbarXWidth));
  460 +
  461 + if (newLeft < 0) {
  462 + i.scrollbarXLeft = 0;
  463 + } else if (newLeft > maxLeft) {
  464 + i.scrollbarXLeft = maxLeft;
  465 + } else {
  466 + i.scrollbarXLeft = newLeft;
  467 + }
  468 +
  469 + var scrollLeft = _.toInt(i.scrollbarXLeft * (i.contentWidth - i.containerWidth) / (i.containerWidth - (i.railXRatio * i.scrollbarXWidth))) - i.negativeScrollAdjustment;
  470 + updateScroll(element, 'left', scrollLeft);
  471 + }
  472 +
  473 + var mouseMoveHandler = function (e) {
  474 + updateScrollLeft(e.pageX - currentPageX);
  475 + updateGeometry(element);
  476 + e.stopPropagation();
  477 + e.preventDefault();
  478 + };
  479 +
  480 + var mouseUpHandler = function () {
  481 + _.stopScrolling(element, 'x');
  482 + i.event.unbind(i.ownerDocument, 'mousemove', mouseMoveHandler);
  483 + };
  484 +
  485 + i.event.bind(i.scrollbarX, 'mousedown', function (e) {
  486 + currentPageX = e.pageX;
  487 + currentLeft = _.toInt(dom.css(i.scrollbarX, 'left')) * i.railXRatio;
  488 + _.startScrolling(element, 'x');
  489 +
  490 + i.event.bind(i.ownerDocument, 'mousemove', mouseMoveHandler);
  491 + i.event.once(i.ownerDocument, 'mouseup', mouseUpHandler);
  492 +
  493 + e.stopPropagation();
  494 + e.preventDefault();
  495 + });
  496 +}
  497 +
  498 +function bindMouseScrollYHandler(element, i) {
  499 + var currentTop = null;
  500 + var currentPageY = null;
  501 +
  502 + function updateScrollTop(deltaY) {
  503 + var newTop = currentTop + (deltaY * i.railYRatio);
  504 + var maxTop = Math.max(0, i.scrollbarYRail.getBoundingClientRect().top) + (i.railYRatio * (i.railYHeight - i.scrollbarYHeight));
  505 +
  506 + if (newTop < 0) {
  507 + i.scrollbarYTop = 0;
  508 + } else if (newTop > maxTop) {
  509 + i.scrollbarYTop = maxTop;
  510 + } else {
  511 + i.scrollbarYTop = newTop;
  512 + }
  513 +
  514 + var scrollTop = _.toInt(i.scrollbarYTop * (i.contentHeight - i.containerHeight) / (i.containerHeight - (i.railYRatio * i.scrollbarYHeight)));
  515 + updateScroll(element, 'top', scrollTop);
  516 + }
  517 +
  518 + var mouseMoveHandler = function (e) {
  519 + updateScrollTop(e.pageY - currentPageY);
  520 + updateGeometry(element);
  521 + e.stopPropagation();
  522 + e.preventDefault();
  523 + };
  524 +
  525 + var mouseUpHandler = function () {
  526 + _.stopScrolling(element, 'y');
  527 + i.event.unbind(i.ownerDocument, 'mousemove', mouseMoveHandler);
  528 + };
  529 +
  530 + i.event.bind(i.scrollbarY, 'mousedown', function (e) {
  531 + currentPageY = e.pageY;
  532 + currentTop = _.toInt(dom.css(i.scrollbarY, 'top')) * i.railYRatio;
  533 + _.startScrolling(element, 'y');
  534 +
  535 + i.event.bind(i.ownerDocument, 'mousemove', mouseMoveHandler);
  536 + i.event.once(i.ownerDocument, 'mouseup', mouseUpHandler);
  537 +
  538 + e.stopPropagation();
  539 + e.preventDefault();
  540 + });
  541 +}
  542 +
  543 +module.exports = function (element) {
  544 + var i = instances.get(element);
  545 + bindMouseScrollXHandler(element, i);
  546 + bindMouseScrollYHandler(element, i);
  547 +};
  548 +
  549 +},{"../../lib/dom":3,"../../lib/helper":6,"../instances":18,"../update-geometry":19,"../update-scroll":20}],12:[function(require,module,exports){
  550 +'use strict';
  551 +
  552 +var _ = require('../../lib/helper');
  553 +var dom = require('../../lib/dom');
  554 +var instances = require('../instances');
  555 +var updateGeometry = require('../update-geometry');
  556 +var updateScroll = require('../update-scroll');
  557 +
  558 +function bindKeyboardHandler(element, i) {
  559 + var hovered = false;
  560 + i.event.bind(element, 'mouseenter', function () {
  561 + hovered = true;
  562 + });
  563 + i.event.bind(element, 'mouseleave', function () {
  564 + hovered = false;
  565 + });
  566 +
  567 + var shouldPrevent = false;
  568 + function shouldPreventDefault(deltaX, deltaY) {
  569 + var scrollTop = element.scrollTop;
  570 + if (deltaX === 0) {
  571 + if (!i.scrollbarYActive) {
  572 + return false;
  573 + }
  574 + if ((scrollTop === 0 && deltaY > 0) || (scrollTop >= i.contentHeight - i.containerHeight && deltaY < 0)) {
  575 + return !i.settings.wheelPropagation;
  576 + }
  577 + }
  578 +
  579 + var scrollLeft = element.scrollLeft;
  580 + if (deltaY === 0) {
  581 + if (!i.scrollbarXActive) {
  582 + return false;
  583 + }
  584 + if ((scrollLeft === 0 && deltaX < 0) || (scrollLeft >= i.contentWidth - i.containerWidth && deltaX > 0)) {
  585 + return !i.settings.wheelPropagation;
  586 + }
  587 + }
  588 + return true;
  589 + }
  590 +
  591 + i.event.bind(i.ownerDocument, 'keydown', function (e) {
  592 + if ((e.isDefaultPrevented && e.isDefaultPrevented()) || e.defaultPrevented) {
  593 + return;
  594 + }
  595 +
  596 + var focused = dom.matches(i.scrollbarX, ':focus') ||
  597 + dom.matches(i.scrollbarY, ':focus');
  598 +
  599 + if (!hovered && !focused) {
  600 + return;
  601 + }
  602 +
  603 + var activeElement = document.activeElement ? document.activeElement : i.ownerDocument.activeElement;
  604 + if (activeElement) {
  605 + if (activeElement.tagName === 'IFRAME') {
  606 + activeElement = activeElement.contentDocument.activeElement;
  607 + } else {
  608 + // go deeper if element is a webcomponent
  609 + while (activeElement.shadowRoot) {
  610 + activeElement = activeElement.shadowRoot.activeElement;
  611 + }
  612 + }
  613 + if (_.isEditable(activeElement)) {
  614 + return;
  615 + }
  616 + }
  617 +
  618 + var deltaX = 0;
  619 + var deltaY = 0;
  620 +
  621 + switch (e.which) {
  622 + case 37: // left
  623 + if (e.metaKey) {
  624 + deltaX = -i.contentWidth;
  625 + } else if (e.altKey) {
  626 + deltaX = -i.containerWidth;
  627 + } else {
  628 + deltaX = -30;
  629 + }
  630 + break;
  631 + case 38: // up
  632 + if (e.metaKey) {
  633 + deltaY = i.contentHeight;
  634 + } else if (e.altKey) {
  635 + deltaY = i.containerHeight;
  636 + } else {
  637 + deltaY = 30;
  638 + }
  639 + break;
  640 + case 39: // right
  641 + if (e.metaKey) {
  642 + deltaX = i.contentWidth;
  643 + } else if (e.altKey) {
  644 + deltaX = i.containerWidth;
  645 + } else {
  646 + deltaX = 30;
  647 + }
  648 + break;
  649 + case 40: // down
  650 + if (e.metaKey) {
  651 + deltaY = -i.contentHeight;
  652 + } else if (e.altKey) {
  653 + deltaY = -i.containerHeight;
  654 + } else {
  655 + deltaY = -30;
  656 + }
  657 + break;
  658 + case 33: // page up
  659 + deltaY = 90;
  660 + break;
  661 + case 32: // space bar
  662 + if (e.shiftKey) {
  663 + deltaY = 90;
  664 + } else {
  665 + deltaY = -90;
  666 + }
  667 + break;
  668 + case 34: // page down
  669 + deltaY = -90;
  670 + break;
  671 + case 35: // end
  672 + if (e.ctrlKey) {
  673 + deltaY = -i.contentHeight;
  674 + } else {
  675 + deltaY = -i.containerHeight;
  676 + }
  677 + break;
  678 + case 36: // home
  679 + if (e.ctrlKey) {
  680 + deltaY = element.scrollTop;
  681 + } else {
  682 + deltaY = i.containerHeight;
  683 + }
  684 + break;
  685 + default:
  686 + return;
  687 + }
  688 +
  689 + updateScroll(element, 'top', element.scrollTop - deltaY);
  690 + updateScroll(element, 'left', element.scrollLeft + deltaX);
  691 + updateGeometry(element);
  692 +
  693 + shouldPrevent = shouldPreventDefault(deltaX, deltaY);
  694 + if (shouldPrevent) {
  695 + e.preventDefault();
  696 + }
  697 + });
  698 +}
  699 +
  700 +module.exports = function (element) {
  701 + var i = instances.get(element);
  702 + bindKeyboardHandler(element, i);
  703 +};
  704 +
  705 +},{"../../lib/dom":3,"../../lib/helper":6,"../instances":18,"../update-geometry":19,"../update-scroll":20}],13:[function(require,module,exports){
  706 +'use strict';
  707 +
  708 +var instances = require('../instances');
  709 +var updateGeometry = require('../update-geometry');
  710 +var updateScroll = require('../update-scroll');
  711 +
  712 +function bindMouseWheelHandler(element, i) {
  713 + var shouldPrevent = false;
  714 +
  715 + function shouldPreventDefault(deltaX, deltaY) {
  716 + var scrollTop = element.scrollTop;
  717 + if (deltaX === 0) {
  718 + if (!i.scrollbarYActive) {
  719 + return false;
  720 + }
  721 + if ((scrollTop === 0 && deltaY > 0) || (scrollTop >= i.contentHeight - i.containerHeight && deltaY < 0)) {
  722 + return !i.settings.wheelPropagation;
  723 + }
  724 + }
  725 +
  726 + var scrollLeft = element.scrollLeft;
  727 + if (deltaY === 0) {
  728 + if (!i.scrollbarXActive) {
  729 + return false;
  730 + }
  731 + if ((scrollLeft === 0 && deltaX < 0) || (scrollLeft >= i.contentWidth - i.containerWidth && deltaX > 0)) {
  732 + return !i.settings.wheelPropagation;
  733 + }
  734 + }
  735 + return true;
  736 + }
  737 +
  738 + function getDeltaFromEvent(e) {
  739 + var deltaX = e.deltaX;
  740 + var deltaY = -1 * e.deltaY;
  741 +
  742 + if (typeof deltaX === "undefined" || typeof deltaY === "undefined") {
  743 + // OS X Safari
  744 + deltaX = -1 * e.wheelDeltaX / 6;
  745 + deltaY = e.wheelDeltaY / 6;
  746 + }
  747 +
  748 + if (e.deltaMode && e.deltaMode === 1) {
  749 + // Firefox in deltaMode 1: Line scrolling
  750 + deltaX *= 10;
  751 + deltaY *= 10;
  752 + }
  753 +
  754 + if (deltaX !== deltaX && deltaY !== deltaY/* NaN checks */) {
  755 + // IE in some mouse drivers
  756 + deltaX = 0;
  757 + deltaY = e.wheelDelta;
  758 + }
  759 +
  760 + if (e.shiftKey) {
  761 + // reverse axis with shift key
  762 + return [-deltaY, -deltaX];
  763 + }
  764 + return [deltaX, deltaY];
  765 + }
  766 +
  767 + function shouldBeConsumedByChild(deltaX, deltaY) {
  768 + var child = element.querySelector('textarea:hover, select[multiple]:hover, .ps-child:hover');
  769 + if (child) {
  770 + if (!window.getComputedStyle(child).overflow.match(/(scroll|auto)/)) {
  771 + // if not scrollable
  772 + return false;
  773 + }
  774 +
  775 + var maxScrollTop = child.scrollHeight - child.clientHeight;
  776 + if (maxScrollTop > 0) {
  777 + if (!(child.scrollTop === 0 && deltaY > 0) && !(child.scrollTop === maxScrollTop && deltaY < 0)) {
  778 + return true;
  779 + }
  780 + }
  781 + var maxScrollLeft = child.scrollLeft - child.clientWidth;
  782 + if (maxScrollLeft > 0) {
  783 + if (!(child.scrollLeft === 0 && deltaX < 0) && !(child.scrollLeft === maxScrollLeft && deltaX > 0)) {
  784 + return true;
  785 + }
  786 + }
  787 + }
  788 + return false;
  789 + }
  790 +
  791 + function mousewheelHandler(e) {
  792 + var delta = getDeltaFromEvent(e);
  793 +
  794 + var deltaX = delta[0];
  795 + var deltaY = delta[1];
  796 +
  797 + if (shouldBeConsumedByChild(deltaX, deltaY)) {
  798 + return;
  799 + }
  800 +
  801 + shouldPrevent = false;
  802 + if (!i.settings.useBothWheelAxes) {
  803 + // deltaX will only be used for horizontal scrolling and deltaY will
  804 + // only be used for vertical scrolling - this is the default
  805 + updateScroll(element, 'top', element.scrollTop - (deltaY * i.settings.wheelSpeed));
  806 + updateScroll(element, 'left', element.scrollLeft + (deltaX * i.settings.wheelSpeed));
  807 + } else if (i.scrollbarYActive && !i.scrollbarXActive) {
  808 + // only vertical scrollbar is active and useBothWheelAxes option is
  809 + // active, so let's scroll vertical bar using both mouse wheel axes
  810 + if (deltaY) {
  811 + updateScroll(element, 'top', element.scrollTop - (deltaY * i.settings.wheelSpeed));
  812 + } else {
  813 + updateScroll(element, 'top', element.scrollTop + (deltaX * i.settings.wheelSpeed));
  814 + }
  815 + shouldPrevent = true;
  816 + } else if (i.scrollbarXActive && !i.scrollbarYActive) {
  817 + // useBothWheelAxes and only horizontal bar is active, so use both
  818 + // wheel axes for horizontal bar
  819 + if (deltaX) {
  820 + updateScroll(element, 'left', element.scrollLeft + (deltaX * i.settings.wheelSpeed));
  821 + } else {
  822 + updateScroll(element, 'left', element.scrollLeft - (deltaY * i.settings.wheelSpeed));
  823 + }
  824 + shouldPrevent = true;
  825 + }
  826 +
  827 + updateGeometry(element);
  828 +
  829 + shouldPrevent = (shouldPrevent || shouldPreventDefault(deltaX, deltaY));
  830 + if (shouldPrevent) {
  831 + e.stopPropagation();
  832 + e.preventDefault();
  833 + }
  834 + }
  835 +
  836 + if (typeof window.onwheel !== "undefined") {
  837 + i.event.bind(element, 'wheel', mousewheelHandler);
  838 + } else if (typeof window.onmousewheel !== "undefined") {
  839 + i.event.bind(element, 'mousewheel', mousewheelHandler);
  840 + }
  841 +}
  842 +
  843 +module.exports = function (element) {
  844 + var i = instances.get(element);
  845 + bindMouseWheelHandler(element, i);
  846 +};
  847 +
  848 +},{"../instances":18,"../update-geometry":19,"../update-scroll":20}],14:[function(require,module,exports){
  849 +'use strict';
  850 +
  851 +var instances = require('../instances');
  852 +var updateGeometry = require('../update-geometry');
  853 +
  854 +function bindNativeScrollHandler(element, i) {
  855 + i.event.bind(element, 'scroll', function () {
  856 + updateGeometry(element);
  857 + });
  858 +}
  859 +
  860 +module.exports = function (element) {
  861 + var i = instances.get(element);
  862 + bindNativeScrollHandler(element, i);
  863 +};
  864 +
  865 +},{"../instances":18,"../update-geometry":19}],15:[function(require,module,exports){
  866 +'use strict';
  867 +
  868 +var _ = require('../../lib/helper');
  869 +var instances = require('../instances');
  870 +var updateGeometry = require('../update-geometry');
  871 +var updateScroll = require('../update-scroll');
  872 +
  873 +function bindSelectionHandler(element, i) {
  874 + function getRangeNode() {
  875 + var selection = window.getSelection ? window.getSelection() :
  876 + document.getSelection ? document.getSelection() : '';
  877 + if (selection.toString().length === 0) {
  878 + return null;
  879 + } else {
  880 + return selection.getRangeAt(0).commonAncestorContainer;
  881 + }
  882 + }
  883 +
  884 + var scrollingLoop = null;
  885 + var scrollDiff = {top: 0, left: 0};
  886 + function startScrolling() {
  887 + if (!scrollingLoop) {
  888 + scrollingLoop = setInterval(function () {
  889 + if (!instances.get(element)) {
  890 + clearInterval(scrollingLoop);
  891 + return;
  892 + }
  893 +
  894 + updateScroll(element, 'top', element.scrollTop + scrollDiff.top);
  895 + updateScroll(element, 'left', element.scrollLeft + scrollDiff.left);
  896 + updateGeometry(element);
  897 + }, 50); // every .1 sec
  898 + }
  899 + }
  900 + function stopScrolling() {
  901 + if (scrollingLoop) {
  902 + clearInterval(scrollingLoop);
  903 + scrollingLoop = null;
  904 + }
  905 + _.stopScrolling(element);
  906 + }
  907 +
  908 + var isSelected = false;
  909 + i.event.bind(i.ownerDocument, 'selectionchange', function () {
  910 + if (element.contains(getRangeNode())) {
  911 + isSelected = true;
  912 + } else {
  913 + isSelected = false;
  914 + stopScrolling();
  915 + }
  916 + });
  917 + i.event.bind(window, 'mouseup', function () {
  918 + if (isSelected) {
  919 + isSelected = false;
  920 + stopScrolling();
  921 + }
  922 + });
  923 + i.event.bind(window, 'keyup', function () {
  924 + if (isSelected) {
  925 + isSelected = false;
  926 + stopScrolling();
  927 + }
  928 + });
  929 +
  930 + i.event.bind(window, 'mousemove', function (e) {
  931 + if (isSelected) {
  932 + var mousePosition = {x: e.pageX, y: e.pageY};
  933 + var containerGeometry = {
  934 + left: element.offsetLeft,
  935 + right: element.offsetLeft + element.offsetWidth,
  936 + top: element.offsetTop,
  937 + bottom: element.offsetTop + element.offsetHeight
  938 + };
  939 +
  940 + if (mousePosition.x < containerGeometry.left + 3) {
  941 + scrollDiff.left = -5;
  942 + _.startScrolling(element, 'x');
  943 + } else if (mousePosition.x > containerGeometry.right - 3) {
  944 + scrollDiff.left = 5;
  945 + _.startScrolling(element, 'x');
  946 + } else {
  947 + scrollDiff.left = 0;
  948 + }
  949 +
  950 + if (mousePosition.y < containerGeometry.top + 3) {
  951 + if (containerGeometry.top + 3 - mousePosition.y < 5) {
  952 + scrollDiff.top = -5;
  953 + } else {
  954 + scrollDiff.top = -20;
  955 + }
  956 + _.startScrolling(element, 'y');
  957 + } else if (mousePosition.y > containerGeometry.bottom - 3) {
  958 + if (mousePosition.y - containerGeometry.bottom + 3 < 5) {
  959 + scrollDiff.top = 5;
  960 + } else {
  961 + scrollDiff.top = 20;
  962 + }
  963 + _.startScrolling(element, 'y');
  964 + } else {
  965 + scrollDiff.top = 0;
  966 + }
  967 +
  968 + if (scrollDiff.top === 0 && scrollDiff.left === 0) {
  969 + stopScrolling();
  970 + } else {
  971 + startScrolling();
  972 + }
  973 + }
  974 + });
  975 +}
  976 +
  977 +module.exports = function (element) {
  978 + var i = instances.get(element);
  979 + bindSelectionHandler(element, i);
  980 +};
  981 +
  982 +},{"../../lib/helper":6,"../instances":18,"../update-geometry":19,"../update-scroll":20}],16:[function(require,module,exports){
  983 +'use strict';
  984 +
  985 +var _ = require('../../lib/helper');
  986 +var instances = require('../instances');
  987 +var updateGeometry = require('../update-geometry');
  988 +var updateScroll = require('../update-scroll');
  989 +
  990 +function bindTouchHandler(element, i, supportsTouch, supportsIePointer) {
  991 + function shouldPreventDefault(deltaX, deltaY) {
  992 + var scrollTop = element.scrollTop;
  993 + var scrollLeft = element.scrollLeft;
  994 + var magnitudeX = Math.abs(deltaX);
  995 + var magnitudeY = Math.abs(deltaY);
  996 +
  997 + if (magnitudeY > magnitudeX) {
  998 + // user is perhaps trying to swipe up/down the page
  999 +
  1000 + if (((deltaY < 0) && (scrollTop === i.contentHeight - i.containerHeight)) ||
  1001 + ((deltaY > 0) && (scrollTop === 0))) {
  1002 + return !i.settings.swipePropagation;
  1003 + }
  1004 + } else if (magnitudeX > magnitudeY) {
  1005 + // user is perhaps trying to swipe left/right across the page
  1006 +
  1007 + if (((deltaX < 0) && (scrollLeft === i.contentWidth - i.containerWidth)) ||
  1008 + ((deltaX > 0) && (scrollLeft === 0))) {
  1009 + return !i.settings.swipePropagation;
  1010 + }
  1011 + }
  1012 +
  1013 + return true;
  1014 + }
  1015 +
  1016 + function applyTouchMove(differenceX, differenceY) {
  1017 + updateScroll(element, 'top', element.scrollTop - differenceY);
  1018 + updateScroll(element, 'left', element.scrollLeft - differenceX);
  1019 +
  1020 + updateGeometry(element);
  1021 + }
  1022 +
  1023 + var startOffset = {};
  1024 + var startTime = 0;
  1025 + var speed = {};
  1026 + var easingLoop = null;
  1027 + var inGlobalTouch = false;
  1028 + var inLocalTouch = false;
  1029 +
  1030 + function globalTouchStart() {
  1031 + inGlobalTouch = true;
  1032 + }
  1033 + function globalTouchEnd() {
  1034 + inGlobalTouch = false;
  1035 + }
  1036 +
  1037 + function getTouch(e) {
  1038 + if (e.targetTouches) {
  1039 + return e.targetTouches[0];
  1040 + } else {
  1041 + // Maybe IE pointer
  1042 + return e;
  1043 + }
  1044 + }
  1045 + function shouldHandle(e) {
  1046 + if (e.targetTouches && e.targetTouches.length === 1) {
  1047 + return true;
  1048 + }
  1049 + if (e.pointerType && e.pointerType !== 'mouse' && e.pointerType !== e.MSPOINTER_TYPE_MOUSE) {
  1050 + return true;
  1051 + }
  1052 + return false;
  1053 + }
  1054 + function touchStart(e) {
  1055 + if (shouldHandle(e)) {
  1056 + inLocalTouch = true;
  1057 +
  1058 + var touch = getTouch(e);
  1059 +
  1060 + startOffset.pageX = touch.pageX;
  1061 + startOffset.pageY = touch.pageY;
  1062 +
  1063 + startTime = (new Date()).getTime();
  1064 +
  1065 + if (easingLoop !== null) {
  1066 + clearInterval(easingLoop);
  1067 + }
  1068 +
  1069 + e.stopPropagation();
  1070 + }
  1071 + }
  1072 + function touchMove(e) {
  1073 + if (!inLocalTouch && i.settings.swipePropagation) {
  1074 + touchStart(e);
  1075 + }
  1076 + if (!inGlobalTouch && inLocalTouch && shouldHandle(e)) {
  1077 + var touch = getTouch(e);
  1078 +
  1079 + var currentOffset = {pageX: touch.pageX, pageY: touch.pageY};
  1080 +
  1081 + var differenceX = currentOffset.pageX - startOffset.pageX;
  1082 + var differenceY = currentOffset.pageY - startOffset.pageY;
  1083 +
  1084 + applyTouchMove(differenceX, differenceY);
  1085 + startOffset = currentOffset;
  1086 +
  1087 + var currentTime = (new Date()).getTime();
  1088 +
  1089 + var timeGap = currentTime - startTime;
  1090 + if (timeGap > 0) {
  1091 + speed.x = differenceX / timeGap;
  1092 + speed.y = differenceY / timeGap;
  1093 + startTime = currentTime;
  1094 + }
  1095 +
  1096 + if (shouldPreventDefault(differenceX, differenceY)) {
  1097 + e.stopPropagation();
  1098 + e.preventDefault();
  1099 + }
  1100 + }
  1101 + }
  1102 + function touchEnd() {
  1103 + if (!inGlobalTouch && inLocalTouch) {
  1104 + inLocalTouch = false;
  1105 +
  1106 + clearInterval(easingLoop);
  1107 + easingLoop = setInterval(function () {
  1108 + if (!instances.get(element)) {
  1109 + clearInterval(easingLoop);
  1110 + return;
  1111 + }
  1112 +
  1113 + if (!speed.x && !speed.y) {
  1114 + clearInterval(easingLoop);
  1115 + return;
  1116 + }
  1117 +
  1118 + if (Math.abs(speed.x) < 0.01 && Math.abs(speed.y) < 0.01) {
  1119 + clearInterval(easingLoop);
  1120 + return;
  1121 + }
  1122 +
  1123 + applyTouchMove(speed.x * 30, speed.y * 30);
  1124 +
  1125 + speed.x *= 0.8;
  1126 + speed.y *= 0.8;
  1127 + }, 10);
  1128 + }
  1129 + }
  1130 +
  1131 + if (supportsTouch) {
  1132 + i.event.bind(window, 'touchstart', globalTouchStart);
  1133 + i.event.bind(window, 'touchend', globalTouchEnd);
  1134 + i.event.bind(element, 'touchstart', touchStart);
  1135 + i.event.bind(element, 'touchmove', touchMove);
  1136 + i.event.bind(element, 'touchend', touchEnd);
  1137 + } else if (supportsIePointer) {
  1138 + if (window.PointerEvent) {
  1139 + i.event.bind(window, 'pointerdown', globalTouchStart);
  1140 + i.event.bind(window, 'pointerup', globalTouchEnd);
  1141 + i.event.bind(element, 'pointerdown', touchStart);
  1142 + i.event.bind(element, 'pointermove', touchMove);
  1143 + i.event.bind(element, 'pointerup', touchEnd);
  1144 + } else if (window.MSPointerEvent) {
  1145 + i.event.bind(window, 'MSPointerDown', globalTouchStart);
  1146 + i.event.bind(window, 'MSPointerUp', globalTouchEnd);
  1147 + i.event.bind(element, 'MSPointerDown', touchStart);
  1148 + i.event.bind(element, 'MSPointerMove', touchMove);
  1149 + i.event.bind(element, 'MSPointerUp', touchEnd);
  1150 + }
  1151 + }
  1152 +}
  1153 +
  1154 +module.exports = function (element) {
  1155 + if (!_.env.supportsTouch && !_.env.supportsIePointer) {
  1156 + return;
  1157 + }
  1158 +
  1159 + var i = instances.get(element);
  1160 + bindTouchHandler(element, i, _.env.supportsTouch, _.env.supportsIePointer);
  1161 +};
  1162 +
  1163 +},{"../../lib/helper":6,"../instances":18,"../update-geometry":19,"../update-scroll":20}],17:[function(require,module,exports){
  1164 +'use strict';
  1165 +
  1166 +var _ = require('../lib/helper');
  1167 +var cls = require('../lib/class');
  1168 +var instances = require('./instances');
  1169 +var updateGeometry = require('./update-geometry');
  1170 +
  1171 +// Handlers
  1172 +var handlers = {
  1173 + 'click-rail': require('./handler/click-rail'),
  1174 + 'drag-scrollbar': require('./handler/drag-scrollbar'),
  1175 + 'keyboard': require('./handler/keyboard'),
  1176 + 'wheel': require('./handler/mouse-wheel'),
  1177 + 'touch': require('./handler/touch'),
  1178 + 'selection': require('./handler/selection')
  1179 +};
  1180 +var nativeScrollHandler = require('./handler/native-scroll');
  1181 +
  1182 +module.exports = function (element, userSettings) {
  1183 + userSettings = typeof userSettings === 'object' ? userSettings : {};
  1184 +
  1185 + cls.add(element, 'ps-container');
  1186 +
  1187 + // Create a plugin instance.
  1188 + var i = instances.add(element);
  1189 +
  1190 + i.settings = _.extend(i.settings, userSettings);
  1191 + cls.add(element, 'ps-theme-' + i.settings.theme);
  1192 +
  1193 + i.settings.handlers.forEach(function (handlerName) {
  1194 + handlers[handlerName](element);
  1195 + });
  1196 +
  1197 + nativeScrollHandler(element);
  1198 +
  1199 + updateGeometry(element);
  1200 +};
  1201 +
  1202 +},{"../lib/class":2,"../lib/helper":6,"./handler/click-rail":10,"./handler/drag-scrollbar":11,"./handler/keyboard":12,"./handler/mouse-wheel":13,"./handler/native-scroll":14,"./handler/selection":15,"./handler/touch":16,"./instances":18,"./update-geometry":19}],18:[function(require,module,exports){
  1203 +'use strict';
  1204 +
  1205 +var _ = require('../lib/helper');
  1206 +var cls = require('../lib/class');
  1207 +var defaultSettings = require('./default-setting');
  1208 +var dom = require('../lib/dom');
  1209 +var EventManager = require('../lib/event-manager');
  1210 +var guid = require('../lib/guid');
  1211 +
  1212 +var instances = {};
  1213 +
  1214 +function Instance(element) {
  1215 + var i = this;
  1216 +
  1217 + i.settings = _.clone(defaultSettings);
  1218 + i.containerWidth = null;
  1219 + i.containerHeight = null;
  1220 + i.contentWidth = null;
  1221 + i.contentHeight = null;
  1222 +
  1223 + i.isRtl = dom.css(element, 'direction') === "rtl";
  1224 + i.isNegativeScroll = (function () {
  1225 + var originalScrollLeft = element.scrollLeft;
  1226 + var result = null;
  1227 + element.scrollLeft = -1;
  1228 + result = element.scrollLeft < 0;
  1229 + element.scrollLeft = originalScrollLeft;
  1230 + return result;
  1231 + })();
  1232 + i.negativeScrollAdjustment = i.isNegativeScroll ? element.scrollWidth - element.clientWidth : 0;
  1233 + i.event = new EventManager();
  1234 + i.ownerDocument = element.ownerDocument || document;
  1235 +
  1236 + function focus() {
  1237 + cls.add(element, 'ps-focus');
  1238 + }
  1239 +
  1240 + function blur() {
  1241 + cls.remove(element, 'ps-focus');
  1242 + }
  1243 +
  1244 + i.scrollbarXRail = dom.appendTo(dom.e('div', 'ps-scrollbar-x-rail'), element);
  1245 + i.scrollbarX = dom.appendTo(dom.e('div', 'ps-scrollbar-x'), i.scrollbarXRail);
  1246 + i.scrollbarX.setAttribute('tabindex', 0);
  1247 + i.event.bind(i.scrollbarX, 'focus', focus);
  1248 + i.event.bind(i.scrollbarX, 'blur', blur);
  1249 + i.scrollbarXActive = null;
  1250 + i.scrollbarXWidth = null;
  1251 + i.scrollbarXLeft = null;
  1252 + i.scrollbarXBottom = _.toInt(dom.css(i.scrollbarXRail, 'bottom'));
  1253 + i.isScrollbarXUsingBottom = i.scrollbarXBottom === i.scrollbarXBottom; // !isNaN
  1254 + i.scrollbarXTop = i.isScrollbarXUsingBottom ? null : _.toInt(dom.css(i.scrollbarXRail, 'top'));
  1255 + i.railBorderXWidth = _.toInt(dom.css(i.scrollbarXRail, 'borderLeftWidth')) + _.toInt(dom.css(i.scrollbarXRail, 'borderRightWidth'));
  1256 + // Set rail to display:block to calculate margins
  1257 + dom.css(i.scrollbarXRail, 'display', 'block');
  1258 + i.railXMarginWidth = _.toInt(dom.css(i.scrollbarXRail, 'marginLeft')) + _.toInt(dom.css(i.scrollbarXRail, 'marginRight'));
  1259 + dom.css(i.scrollbarXRail, 'display', '');
  1260 + i.railXWidth = null;
  1261 + i.railXRatio = null;
  1262 +
  1263 + i.scrollbarYRail = dom.appendTo(dom.e('div', 'ps-scrollbar-y-rail'), element);
  1264 + i.scrollbarY = dom.appendTo(dom.e('div', 'ps-scrollbar-y'), i.scrollbarYRail);
  1265 + i.scrollbarY.setAttribute('tabindex', 0);
  1266 + i.event.bind(i.scrollbarY, 'focus', focus);
  1267 + i.event.bind(i.scrollbarY, 'blur', blur);
  1268 + i.scrollbarYActive = null;
  1269 + i.scrollbarYHeight = null;
  1270 + i.scrollbarYTop = null;
  1271 + i.scrollbarYRight = _.toInt(dom.css(i.scrollbarYRail, 'right'));
  1272 + i.isScrollbarYUsingRight = i.scrollbarYRight === i.scrollbarYRight; // !isNaN
  1273 + i.scrollbarYLeft = i.isScrollbarYUsingRight ? null : _.toInt(dom.css(i.scrollbarYRail, 'left'));
  1274 + i.scrollbarYOuterWidth = i.isRtl ? _.outerWidth(i.scrollbarY) : null;
  1275 + i.railBorderYWidth = _.toInt(dom.css(i.scrollbarYRail, 'borderTopWidth')) + _.toInt(dom.css(i.scrollbarYRail, 'borderBottomWidth'));
  1276 + dom.css(i.scrollbarYRail, 'display', 'block');
  1277 + i.railYMarginHeight = _.toInt(dom.css(i.scrollbarYRail, 'marginTop')) + _.toInt(dom.css(i.scrollbarYRail, 'marginBottom'));
  1278 + dom.css(i.scrollbarYRail, 'display', '');
  1279 + i.railYHeight = null;
  1280 + i.railYRatio = null;
  1281 +}
  1282 +
  1283 +function getId(element) {
  1284 + return element.getAttribute('data-ps-id');
  1285 +}
  1286 +
  1287 +function setId(element, id) {
  1288 + element.setAttribute('data-ps-id', id);
  1289 +}
  1290 +
  1291 +function removeId(element) {
  1292 + element.removeAttribute('data-ps-id');
  1293 +}
  1294 +
  1295 +exports.add = function (element) {
  1296 + var newId = guid();
  1297 + setId(element, newId);
  1298 + instances[newId] = new Instance(element);
  1299 + return instances[newId];
  1300 +};
  1301 +
  1302 +exports.remove = function (element) {
  1303 + delete instances[getId(element)];
  1304 + removeId(element);
  1305 +};
  1306 +
  1307 +exports.get = function (element) {
  1308 + return instances[getId(element)];
  1309 +};
  1310 +
  1311 +},{"../lib/class":2,"../lib/dom":3,"../lib/event-manager":4,"../lib/guid":5,"../lib/helper":6,"./default-setting":8}],19:[function(require,module,exports){
  1312 +'use strict';
  1313 +
  1314 +var _ = require('../lib/helper');
  1315 +var cls = require('../lib/class');
  1316 +var dom = require('../lib/dom');
  1317 +var instances = require('./instances');
  1318 +var updateScroll = require('./update-scroll');
  1319 +
  1320 +function getThumbSize(i, thumbSize) {
  1321 + if (i.settings.minScrollbarLength) {
  1322 + thumbSize = Math.max(thumbSize, i.settings.minScrollbarLength);
  1323 + }
  1324 + if (i.settings.maxScrollbarLength) {
  1325 + thumbSize = Math.min(thumbSize, i.settings.maxScrollbarLength);
  1326 + }
  1327 + return thumbSize;
  1328 +}
  1329 +
  1330 +function updateCss(element, i) {
  1331 + var xRailOffset = {width: i.railXWidth};
  1332 + if (i.isRtl) {
  1333 + xRailOffset.left = i.negativeScrollAdjustment + element.scrollLeft + i.containerWidth - i.contentWidth;
  1334 + } else {
  1335 + xRailOffset.left = element.scrollLeft;
  1336 + }
  1337 + if (i.isScrollbarXUsingBottom) {
  1338 + xRailOffset.bottom = i.scrollbarXBottom - element.scrollTop;
  1339 + } else {
  1340 + xRailOffset.top = i.scrollbarXTop + element.scrollTop;
  1341 + }
  1342 + dom.css(i.scrollbarXRail, xRailOffset);
  1343 +
  1344 + var yRailOffset = {top: element.scrollTop, height: i.railYHeight};
  1345 + if (i.isScrollbarYUsingRight) {
  1346 + if (i.isRtl) {
  1347 + yRailOffset.right = i.contentWidth - (i.negativeScrollAdjustment + element.scrollLeft) - i.scrollbarYRight - i.scrollbarYOuterWidth;
  1348 + } else {
  1349 + yRailOffset.right = i.scrollbarYRight - element.scrollLeft;
  1350 + }
  1351 + } else {
  1352 + if (i.isRtl) {
  1353 + yRailOffset.left = i.negativeScrollAdjustment + element.scrollLeft + i.containerWidth * 2 - i.contentWidth - i.scrollbarYLeft - i.scrollbarYOuterWidth;
  1354 + } else {
  1355 + yRailOffset.left = i.scrollbarYLeft + element.scrollLeft;
  1356 + }
  1357 + }
  1358 + dom.css(i.scrollbarYRail, yRailOffset);
  1359 +
  1360 + dom.css(i.scrollbarX, {left: i.scrollbarXLeft, width: i.scrollbarXWidth - i.railBorderXWidth});
  1361 + dom.css(i.scrollbarY, {top: i.scrollbarYTop, height: i.scrollbarYHeight - i.railBorderYWidth});
  1362 +}
  1363 +
  1364 +module.exports = function (element) {
  1365 + var i = instances.get(element);
  1366 +
  1367 + i.containerWidth = element.clientWidth;
  1368 + i.containerHeight = element.clientHeight;
  1369 + i.contentWidth = element.scrollWidth;
  1370 + i.contentHeight = element.scrollHeight;
  1371 +
  1372 + var existingRails;
  1373 + if (!element.contains(i.scrollbarXRail)) {
  1374 + existingRails = dom.queryChildren(element, '.ps-scrollbar-x-rail');
  1375 + if (existingRails.length > 0) {
  1376 + existingRails.forEach(function (rail) {
  1377 + dom.remove(rail);
  1378 + });
  1379 + }
  1380 + dom.appendTo(i.scrollbarXRail, element);
  1381 + }
  1382 + if (!element.contains(i.scrollbarYRail)) {
  1383 + existingRails = dom.queryChildren(element, '.ps-scrollbar-y-rail');
  1384 + if (existingRails.length > 0) {
  1385 + existingRails.forEach(function (rail) {
  1386 + dom.remove(rail);
  1387 + });
  1388 + }
  1389 + dom.appendTo(i.scrollbarYRail, element);
  1390 + }
  1391 +
  1392 + if (!i.settings.suppressScrollX && i.containerWidth + i.settings.scrollXMarginOffset < i.contentWidth) {
  1393 + i.scrollbarXActive = true;
  1394 + i.railXWidth = i.containerWidth - i.railXMarginWidth;
  1395 + i.railXRatio = i.containerWidth / i.railXWidth;
  1396 + i.scrollbarXWidth = getThumbSize(i, _.toInt(i.railXWidth * i.containerWidth / i.contentWidth));
  1397 + i.scrollbarXLeft = _.toInt((i.negativeScrollAdjustment + element.scrollLeft) * (i.railXWidth - i.scrollbarXWidth) / (i.contentWidth - i.containerWidth));
  1398 + } else {
  1399 + i.scrollbarXActive = false;
  1400 + }
  1401 +
  1402 + if (!i.settings.suppressScrollY && i.containerHeight + i.settings.scrollYMarginOffset < i.contentHeight) {
  1403 + i.scrollbarYActive = true;
  1404 + i.railYHeight = i.containerHeight - i.railYMarginHeight;
  1405 + i.railYRatio = i.containerHeight / i.railYHeight;
  1406 + i.scrollbarYHeight = getThumbSize(i, _.toInt(i.railYHeight * i.containerHeight / i.contentHeight));
  1407 + i.scrollbarYTop = _.toInt(element.scrollTop * (i.railYHeight - i.scrollbarYHeight) / (i.contentHeight - i.containerHeight));
  1408 + } else {
  1409 + i.scrollbarYActive = false;
  1410 + }
  1411 +
  1412 + if (i.scrollbarXLeft >= i.railXWidth - i.scrollbarXWidth) {
  1413 + i.scrollbarXLeft = i.railXWidth - i.scrollbarXWidth;
  1414 + }
  1415 + if (i.scrollbarYTop >= i.railYHeight - i.scrollbarYHeight) {
  1416 + i.scrollbarYTop = i.railYHeight - i.scrollbarYHeight;
  1417 + }
  1418 +
  1419 + updateCss(element, i);
  1420 +
  1421 + if (i.scrollbarXActive) {
  1422 + cls.add(element, 'ps-active-x');
  1423 + } else {
  1424 + cls.remove(element, 'ps-active-x');
  1425 + i.scrollbarXWidth = 0;
  1426 + i.scrollbarXLeft = 0;
  1427 + updateScroll(element, 'left', 0);
  1428 + }
  1429 + if (i.scrollbarYActive) {
  1430 + cls.add(element, 'ps-active-y');
  1431 + } else {
  1432 + cls.remove(element, 'ps-active-y');
  1433 + i.scrollbarYHeight = 0;
  1434 + i.scrollbarYTop = 0;
  1435 + updateScroll(element, 'top', 0);
  1436 + }
  1437 +};
  1438 +
  1439 +},{"../lib/class":2,"../lib/dom":3,"../lib/helper":6,"./instances":18,"./update-scroll":20}],20:[function(require,module,exports){
  1440 +'use strict';
  1441 +
  1442 +var instances = require('./instances');
  1443 +
  1444 +var lastTop;
  1445 +var lastLeft;
  1446 +
  1447 +var createDOMEvent = function (name) {
  1448 + var event = document.createEvent("Event");
  1449 + event.initEvent(name, true, true);
  1450 + return event;
  1451 +};
  1452 +
  1453 +module.exports = function (element, axis, value) {
  1454 + if (typeof element === 'undefined') {
  1455 + throw 'You must provide an element to the update-scroll function';
  1456 + }
  1457 +
  1458 + if (typeof axis === 'undefined') {
  1459 + throw 'You must provide an axis to the update-scroll function';
  1460 + }
  1461 +
  1462 + if (typeof value === 'undefined') {
  1463 + throw 'You must provide a value to the update-scroll function';
  1464 + }
  1465 +
  1466 + if (axis === 'top' && value <= 0) {
  1467 + element.scrollTop = value = 0; // don't allow negative scroll
  1468 + element.dispatchEvent(createDOMEvent('ps-y-reach-start'));
  1469 + }
  1470 +
  1471 + if (axis === 'left' && value <= 0) {
  1472 + element.scrollLeft = value = 0; // don't allow negative scroll
  1473 + element.dispatchEvent(createDOMEvent('ps-x-reach-start'));
  1474 + }
  1475 +
  1476 + var i = instances.get(element);
  1477 +
  1478 + if (axis === 'top' && value >= i.contentHeight - i.containerHeight) {
  1479 + // don't allow scroll past container
  1480 + value = i.contentHeight - i.containerHeight;
  1481 + if (value - element.scrollTop <= 1) {
  1482 + // mitigates rounding errors on non-subpixel scroll values
  1483 + value = element.scrollTop;
  1484 + } else {
  1485 + element.scrollTop = value;
  1486 + }
  1487 + element.dispatchEvent(createDOMEvent('ps-y-reach-end'));
  1488 + }
  1489 +
  1490 + if (axis === 'left' && value >= i.contentWidth - i.containerWidth) {
  1491 + // don't allow scroll past container
  1492 + value = i.contentWidth - i.containerWidth;
  1493 + if (value - element.scrollLeft <= 1) {
  1494 + // mitigates rounding errors on non-subpixel scroll values
  1495 + value = element.scrollLeft;
  1496 + } else {
  1497 + element.scrollLeft = value;
  1498 + }
  1499 + element.dispatchEvent(createDOMEvent('ps-x-reach-end'));
  1500 + }
  1501 +
  1502 + if (!lastTop) {
  1503 + lastTop = element.scrollTop;
  1504 + }
  1505 +
  1506 + if (!lastLeft) {
  1507 + lastLeft = element.scrollLeft;
  1508 + }
  1509 +
  1510 + if (axis === 'top' && value < lastTop) {
  1511 + element.dispatchEvent(createDOMEvent('ps-scroll-up'));
  1512 + }
  1513 +
  1514 + if (axis === 'top' && value > lastTop) {
  1515 + element.dispatchEvent(createDOMEvent('ps-scroll-down'));
  1516 + }
  1517 +
  1518 + if (axis === 'left' && value < lastLeft) {
  1519 + element.dispatchEvent(createDOMEvent('ps-scroll-left'));
  1520 + }
  1521 +
  1522 + if (axis === 'left' && value > lastLeft) {
  1523 + element.dispatchEvent(createDOMEvent('ps-scroll-right'));
  1524 + }
  1525 +
  1526 + if (axis === 'top') {
  1527 + element.scrollTop = lastTop = value;
  1528 + element.dispatchEvent(createDOMEvent('ps-scroll-y'));
  1529 + }
  1530 +
  1531 + if (axis === 'left') {
  1532 + element.scrollLeft = lastLeft = value;
  1533 + element.dispatchEvent(createDOMEvent('ps-scroll-x'));
  1534 + }
  1535 +
  1536 +};
  1537 +
  1538 +},{"./instances":18}],21:[function(require,module,exports){
  1539 +'use strict';
  1540 +
  1541 +var _ = require('../lib/helper');
  1542 +var dom = require('../lib/dom');
  1543 +var instances = require('./instances');
  1544 +var updateGeometry = require('./update-geometry');
  1545 +var updateScroll = require('./update-scroll');
  1546 +
  1547 +module.exports = function (element) {
  1548 + var i = instances.get(element);
  1549 +
  1550 + if (!i) {
  1551 + return;
  1552 + }
  1553 +
  1554 + // Recalcuate negative scrollLeft adjustment
  1555 + i.negativeScrollAdjustment = i.isNegativeScroll ? element.scrollWidth - element.clientWidth : 0;
  1556 +
  1557 + // Recalculate rail margins
  1558 + dom.css(i.scrollbarXRail, 'display', 'block');
  1559 + dom.css(i.scrollbarYRail, 'display', 'block');
  1560 + i.railXMarginWidth = _.toInt(dom.css(i.scrollbarXRail, 'marginLeft')) + _.toInt(dom.css(i.scrollbarXRail, 'marginRight'));
  1561 + i.railYMarginHeight = _.toInt(dom.css(i.scrollbarYRail, 'marginTop')) + _.toInt(dom.css(i.scrollbarYRail, 'marginBottom'));
  1562 +
  1563 + // Hide scrollbars not to affect scrollWidth and scrollHeight
  1564 + dom.css(i.scrollbarXRail, 'display', 'none');
  1565 + dom.css(i.scrollbarYRail, 'display', 'none');
  1566 +
  1567 + updateGeometry(element);
  1568 +
  1569 + // Update top/left scroll to trigger events
  1570 + updateScroll(element, 'top', element.scrollTop);
  1571 + updateScroll(element, 'left', element.scrollLeft);
  1572 +
  1573 + dom.css(i.scrollbarXRail, 'display', '');
  1574 + dom.css(i.scrollbarYRail, 'display', '');
  1575 +};
  1576 +
  1577 +},{"../lib/dom":3,"../lib/helper":6,"./instances":18,"./update-geometry":19,"./update-scroll":20}]},{},[1]);
src/main/resources/static/real_control_v2/assets/plugins/uikit-2.27.1/components/sticky.gradient.min.css
1 -/*! UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ 1 +/*! UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
2 [data-uk-sticky].uk-active{z-index:980;box-sizing:border-box;-webkit-backface-visibility:hidden}[data-uk-sticky][class*=uk-animation-]{-webkit-animation-duration:.2s;animation-duration:.2s}[data-uk-sticky].uk-animation-reverse{-webkit-animation-duration:.2s;animation-duration:.2s} 2 [data-uk-sticky].uk-active{z-index:980;box-sizing:border-box;-webkit-backface-visibility:hidden}[data-uk-sticky][class*=uk-animation-]{-webkit-animation-duration:.2s;animation-duration:.2s}[data-uk-sticky].uk-animation-reverse{-webkit-animation-duration:.2s;animation-duration:.2s}
3 \ No newline at end of file 3 \ No newline at end of file
src/main/resources/static/real_control_v2/assets/plugins/uikit-2.27.1/components/sticky.min.js
1 -/*! UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ 1 +/*! UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
2 !function(t){var i;window.UIkit&&(i=t(UIkit)),"function"==typeof define&&define.amd&&define("uikit-sticky",["uikit"],function(){return i||t(UIkit)})}(function(t){"use strict";function i(){var i=arguments.length?arguments:n;if(i.length&&!(e.scrollTop()<0))for(var o,a,r,h,p=e.scrollTop(),c=s.height(),l=e.height(),m=c-l,d=p>m?m-p:0,u=0;u<i.length;u++)if(h=i[u],h.element.is(":visible")&&!h.animate){if(h.check()){if(h.top<0?o=0:(r=h.element.outerHeight(),o=c-r-h.top-h.options.bottom-p-d,o=0>o?o+h.top:h.top),h.boundary&&h.boundary.length){var f=h.boundary.offset().top;a=h.boundtoparent?c-(f+h.boundary.outerHeight())+parseInt(h.boundary.css("padding-bottom")):c-f,o=p+r>c-a-(h.top<0?0:h.top)?c-a-(p+r):o}if(h.currentTop!=o){if(h.element.css({position:"fixed",top:o,width:h.getWidthFrom.length?h.getWidthFrom.width():h.element.width()}),!h.init&&(h.element.addClass(h.options.clsinit),location.hash&&p>0&&h.options.target)){var g=t.$(location.hash);g.length&&setTimeout(function(t,i){return function(){i.element.width();var e=t.offset(),s=e.top+t.outerHeight(),n=i.element.offset(),o=i.element.outerHeight(),a=n.top+o;n.top<s&&e.top<a&&(p=e.top-o-i.options.target,window.scrollTo(0,p))}}(g,h),0)}h.element.addClass(h.options.clsactive).removeClass(h.options.clsinactive),h.element.trigger("active.uk.sticky"),h.element.css("margin",""),h.options.animation&&h.init&&!t.Utils.isInView(h.wrapper)&&h.element.addClass(h.options.animation),h.currentTop=o}}else null!==h.currentTop&&h.reset();h.init=!0}}var e=t.$win,s=t.$doc,n=[],o=1;return t.component("sticky",{defaults:{top:0,bottom:0,animation:"",clsinit:"uk-sticky-init",clsactive:"uk-active",clsinactive:"",getWidthFrom:"",showup:!1,boundary:!1,media:!1,target:!1,disabled:!1},boot:function(){t.$doc.on("scrolling.uk.document",function(t,e){e&&e.dir&&(o=e.dir.y,i())}),t.$win.on("resize orientationchange",t.Utils.debounce(function(){if(n.length){for(var t=0;t<n.length;t++)n[t].reset(!0),n[t].self.computeWrapper();i()}},100)),t.ready(function(e){setTimeout(function(){t.$("[data-uk-sticky]",e).each(function(){var i=t.$(this);i.data("sticky")||t.sticky(i,t.Utils.options(i.attr("data-uk-sticky")))}),i()},0)})},init:function(){var i,a=this.options.boundary;this.wrapper=this.element.wrap('<div class="uk-sticky-placeholder"></div>').parent(),this.computeWrapper(),this.wrapper.css({"margin-top":this.element.css("margin-top"),"margin-bottom":this.element.css("margin-bottom"),"margin-left":this.element.css("margin-left"),"margin-right":this.element.css("margin-right")}),this.element.css("margin",0),a&&(a===!0||"!"===a[0]?(a=a===!0?this.wrapper.parent():this.wrapper.closest(a.substr(1)),i=!0):"string"==typeof a&&(a=t.$(a))),this.sticky={self:this,options:this.options,element:this.element,currentTop:null,wrapper:this.wrapper,init:!1,getWidthFrom:t.$(this.options.getWidthFrom||this.wrapper),boundary:a,boundtoparent:i,top:0,calcTop:function(){var i=this.options.top;if(this.options.top&&"string"==typeof this.options.top)if(this.options.top.match(/^(-|)(\d+)vh$/))i=window.innerHeight*parseInt(this.options.top,10)/100;else{var e=t.$(this.options.top).first();e.length&&e.is(":visible")&&(i=-1*(e.offset().top+e.outerHeight()-this.wrapper.offset().top))}this.top=i},reset:function(i){this.calcTop();var e=function(){this.element.css({position:"",top:"",width:"",left:"",margin:"0"}),this.element.removeClass([this.options.animation,"uk-animation-reverse",this.options.clsactive].join(" ")),this.element.addClass(this.options.clsinactive),this.element.trigger("inactive.uk.sticky"),this.currentTop=null,this.animate=!1}.bind(this);!i&&this.options.animation&&t.support.animation&&!t.Utils.isInView(this.wrapper)?(this.animate=!0,this.element.removeClass(this.options.animation).one(t.support.animation.end,function(){e()}).width(),this.element.addClass(this.options.animation+" uk-animation-reverse")):e()},check:function(){if(this.options.disabled)return!1;if(this.options.media)switch(typeof this.options.media){case"number":if(window.innerWidth<this.options.media)return!1;break;case"string":if(window.matchMedia&&!window.matchMedia(this.options.media).matches)return!1}var i=e.scrollTop(),n=s.height(),a=n-window.innerHeight,r=i>a?a-i:0,h=this.wrapper.offset().top,p=h-this.top-r,c=i>=p;return c&&this.options.showup&&(1==o&&(c=!1),-1==o&&!this.element.hasClass(this.options.clsactive)&&t.Utils.isInView(this.wrapper)&&(c=!1)),c}},this.sticky.calcTop(),n.push(this.sticky)},update:function(){i(this.sticky)},enable:function(){this.options.disabled=!1,this.update()},disable:function(t){this.options.disabled=!0,this.sticky.reset(t)},computeWrapper:function(){this.wrapper.css({height:-1==["absolute","fixed"].indexOf(this.element.css("position"))?this.element.outerHeight():"","float":"none"!=this.element.css("float")?this.element.css("float"):""}),"fixed"==this.element.css("position")&&this.element.css({width:this.sticky.getWidthFrom.length?this.sticky.getWidthFrom.width():this.element.width()})}}),t.sticky}); 2 !function(t){var i;window.UIkit&&(i=t(UIkit)),"function"==typeof define&&define.amd&&define("uikit-sticky",["uikit"],function(){return i||t(UIkit)})}(function(t){"use strict";function i(){var i=arguments.length?arguments:n;if(i.length&&!(e.scrollTop()<0))for(var o,a,r,h,p=e.scrollTop(),c=s.height(),l=e.height(),m=c-l,d=p>m?m-p:0,u=0;u<i.length;u++)if(h=i[u],h.element.is(":visible")&&!h.animate){if(h.check()){if(h.top<0?o=0:(r=h.element.outerHeight(),o=c-r-h.top-h.options.bottom-p-d,o=0>o?o+h.top:h.top),h.boundary&&h.boundary.length){var f=h.boundary.offset().top;a=h.boundtoparent?c-(f+h.boundary.outerHeight())+parseInt(h.boundary.css("padding-bottom")):c-f,o=p+r>c-a-(h.top<0?0:h.top)?c-a-(p+r):o}if(h.currentTop!=o){if(h.element.css({position:"fixed",top:o,width:h.getWidthFrom.length?h.getWidthFrom.width():h.element.width()}),!h.init&&(h.element.addClass(h.options.clsinit),location.hash&&p>0&&h.options.target)){var g=t.$(location.hash);g.length&&setTimeout(function(t,i){return function(){i.element.width();var e=t.offset(),s=e.top+t.outerHeight(),n=i.element.offset(),o=i.element.outerHeight(),a=n.top+o;n.top<s&&e.top<a&&(p=e.top-o-i.options.target,window.scrollTo(0,p))}}(g,h),0)}h.element.addClass(h.options.clsactive).removeClass(h.options.clsinactive),h.element.trigger("active.uk.sticky"),h.element.css("margin",""),h.options.animation&&h.init&&!t.Utils.isInView(h.wrapper)&&h.element.addClass(h.options.animation),h.currentTop=o}}else null!==h.currentTop&&h.reset();h.init=!0}}var e=t.$win,s=t.$doc,n=[],o=1;return t.component("sticky",{defaults:{top:0,bottom:0,animation:"",clsinit:"uk-sticky-init",clsactive:"uk-active",clsinactive:"",getWidthFrom:"",showup:!1,boundary:!1,media:!1,target:!1,disabled:!1},boot:function(){t.$doc.on("scrolling.uk.document",function(t,e){e&&e.dir&&(o=e.dir.y,i())}),t.$win.on("resize orientationchange",t.Utils.debounce(function(){if(n.length){for(var t=0;t<n.length;t++)n[t].reset(!0),n[t].self.computeWrapper();i()}},100)),t.ready(function(e){setTimeout(function(){t.$("[data-uk-sticky]",e).each(function(){var i=t.$(this);i.data("sticky")||t.sticky(i,t.Utils.options(i.attr("data-uk-sticky")))}),i()},0)})},init:function(){var i,a=this.options.boundary;this.wrapper=this.element.wrap('<div class="uk-sticky-placeholder"></div>').parent(),this.computeWrapper(),this.wrapper.css({"margin-top":this.element.css("margin-top"),"margin-bottom":this.element.css("margin-bottom"),"margin-left":this.element.css("margin-left"),"margin-right":this.element.css("margin-right")}),this.element.css("margin",0),a&&(a===!0||"!"===a[0]?(a=a===!0?this.wrapper.parent():this.wrapper.closest(a.substr(1)),i=!0):"string"==typeof a&&(a=t.$(a))),this.sticky={self:this,options:this.options,element:this.element,currentTop:null,wrapper:this.wrapper,init:!1,getWidthFrom:t.$(this.options.getWidthFrom||this.wrapper),boundary:a,boundtoparent:i,top:0,calcTop:function(){var i=this.options.top;if(this.options.top&&"string"==typeof this.options.top)if(this.options.top.match(/^(-|)(\d+)vh$/))i=window.innerHeight*parseInt(this.options.top,10)/100;else{var e=t.$(this.options.top).first();e.length&&e.is(":visible")&&(i=-1*(e.offset().top+e.outerHeight()-this.wrapper.offset().top))}this.top=i},reset:function(i){this.calcTop();var e=function(){this.element.css({position:"",top:"",width:"",left:"",margin:"0"}),this.element.removeClass([this.options.animation,"uk-animation-reverse",this.options.clsactive].join(" ")),this.element.addClass(this.options.clsinactive),this.element.trigger("inactive.uk.sticky"),this.currentTop=null,this.animate=!1}.bind(this);!i&&this.options.animation&&t.support.animation&&!t.Utils.isInView(this.wrapper)?(this.animate=!0,this.element.removeClass(this.options.animation).one(t.support.animation.end,function(){e()}).width(),this.element.addClass(this.options.animation+" uk-animation-reverse")):e()},check:function(){if(this.options.disabled)return!1;if(this.options.media)switch(typeof this.options.media){case"number":if(window.innerWidth<this.options.media)return!1;break;case"string":if(window.matchMedia&&!window.matchMedia(this.options.media).matches)return!1}var i=e.scrollTop(),n=s.height(),a=n-window.innerHeight,r=i>a?a-i:0,h=this.wrapper.offset().top,p=h-this.top-r,c=i>=p;return c&&this.options.showup&&(1==o&&(c=!1),-1==o&&!this.element.hasClass(this.options.clsactive)&&t.Utils.isInView(this.wrapper)&&(c=!1)),c}},this.sticky.calcTop(),n.push(this.sticky)},update:function(){i(this.sticky)},enable:function(){this.options.disabled=!1,this.update()},disable:function(t){this.options.disabled=!0,this.sticky.reset(t)},computeWrapper:function(){this.wrapper.css({height:-1==["absolute","fixed"].indexOf(this.element.css("position"))?this.element.outerHeight():"","float":"none"!=this.element.css("float")?this.element.css("float"):""}),"fixed"==this.element.css("position")&&this.element.css({width:this.sticky.getWidthFrom.length?this.sticky.getWidthFrom.width():this.element.width()})}}),t.sticky});
3 \ No newline at end of file 3 \ No newline at end of file
src/main/resources/static/real_control_v2/fragments/north/nav/dataManager/cars_move.html
@@ -183,4 +183,4 @@ @@ -183,4 +183,4 @@
183 }); 183 });
184 })(); 184 })();
185 </script> 185 </script>
186 -</div> 186 -</div>
  187 +</div>
187 \ No newline at end of file 188 \ No newline at end of file
src/main/resources/static/real_control_v2/fragments/north/nav/dataManager/dataMoveAndVerification.html
1 -<div class="uk-modal" id="data-move-verification-modal">  
2 - <div class="uk-modal-dialog" style="width: 650px;">  
3 - <a href="" class="uk-modal-close uk-close"></a>  
4 - <h2>数据迁移和校验</h2>  
5 -  
6 - <div class="uk-grid" data-uk-grid-margin>  
7 - <div class="uk-width-medium-1-3">  
8 - <a class="uk-panel uk-panel-hover detail_panel" data-href="/real_control_v2/fragments/north/nav/dataManager/cars_move.html">  
9 - <h3 class="uk-panel-title">车辆数据</h3>  
10 - 对照老系统的车辆设备信息,并增量更新到新系统  
11 - </a>  
12 - </div>  
13 - <div class="uk-width-medium-1-3">  
14 - <a class="uk-panel uk-panel-hover" >  
15 - <h3 class="uk-panel-title">人员数据</h3>  
16 - 对照老系统的人员信息,并增量更新到新系统 <code>不可用</code>  
17 - </a>  
18 - </div>  
19 - <div class="uk-width-medium-1-3">  
20 - <a class="uk-panel uk-panel-hover">  
21 - <h3 class="uk-panel-title">路单数据</h3>  
22 - 将老系统指定日期的路单同步到新系统,全量覆盖 <code>不可用</code>  
23 - </a>  
24 - </div>  
25 - </div>  
26 -  
27 - </div>  
28 -  
29 -  
30 - <script>  
31 - (function () {  
32 - var modal = '#data-move-verification-modal';  
33 - $(modal).on('init', function (e, data) {  
34 - e.stopPropagation();  
35 -  
36 - $('.detail_panel', modal).on('click', function () {  
37 - var href = $(this).data('href');  
38 - if(!href)  
39 - return;  
40 -  
41 - open_modal(href, {}, {center: false, bgclose: false, modal: false});  
42 - });  
43 - });  
44 - })();  
45 - </script> 1 +<div class="uk-modal" id="data-move-verification-modal">
  2 + <div class="uk-modal-dialog" style="width: 650px;">
  3 + <a href="" class="uk-modal-close uk-close"></a>
  4 + <h2>数据迁移和校验</h2>
  5 +
  6 + <div class="uk-grid" data-uk-grid-margin>
  7 + <div class="uk-width-medium-1-3">
  8 + <a class="uk-panel uk-panel-hover detail_panel" data-href="/real_control_v2/fragments/north/nav/dataManager/cars_move.html">
  9 + <h3 class="uk-panel-title">车辆数据</h3>
  10 + 对照老系统的车辆设备信息,并增量更新到新系统
  11 + </a>
  12 + </div>
  13 + <div class="uk-width-medium-1-3">
  14 + <a class="uk-panel uk-panel-hover" >
  15 + <h3 class="uk-panel-title">人员数据</h3>
  16 + 对照老系统的人员信息,并增量更新到新系统 <code>不可用</code>
  17 + </a>
  18 + </div>
  19 + <div class="uk-width-medium-1-3">
  20 + <a class="uk-panel uk-panel-hover">
  21 + <h3 class="uk-panel-title">路单数据</h3>
  22 + 将老系统指定日期的路单同步到新系统,全量覆盖 <code>不可用</code>
  23 + </a>
  24 + </div>
  25 + </div>
  26 +
  27 + </div>
  28 +
  29 +
  30 + <script>
  31 + (function () {
  32 + var modal = '#data-move-verification-modal';
  33 + $(modal).on('init', function (e, data) {
  34 + e.stopPropagation();
  35 +
  36 + $('.detail_panel', modal).on('click', function () {
  37 + var href = $(this).data('href');
  38 + if(!href)
  39 + return;
  40 +
  41 + open_modal(href, {}, {center: false, bgclose: false, modal: false});
  42 + });
  43 + });
  44 + })();
  45 + </script>
46 </div> 46 </div>
47 \ No newline at end of file 47 \ No newline at end of file