Commit 35a45502901c2b12e1354f870370a5906405fb36

Authored by 潘钊
2 parents 676e47d5 fa962ba4

Merge branch 'master' of 192.168.168.201:panzhaov5/bsth_control

Showing 40 changed files with 4532 additions and 129 deletions

Too many changes to show.

To preserve performance only 40 of 72 files are displayed.

... ... @@ -71,7 +71,11 @@
71 71 <groupId>commons-dbcp</groupId>
72 72 <artifactId>commons-dbcp</artifactId>
73 73 </dependency>
74   -
  74 + <dependency>
  75 + <groupId>commons-lang</groupId>
  76 + <artifactId>commons-lang</artifactId>
  77 + <version>2.6</version>
  78 + </dependency>
75 79 <dependency>
76 80 <groupId>org.apache.commons</groupId>
77 81 <artifactId>commons-lang3</artifactId>
... ... @@ -122,6 +126,33 @@
122 126 <version>0.9.1.2</version>
123 127 </dependency>
124 128  
  129 + <!-- pentaho kettle 依赖 -->
  130 + <dependency>
  131 + <groupId>com.pentaho.kettle</groupId>
  132 + <artifactId>kettle-core</artifactId>
  133 + <version>6.0.1.0-386</version>
  134 + </dependency>
  135 + <dependency>
  136 + <groupId>com.pentaho.kettle</groupId>
  137 + <artifactId>kettle-engine</artifactId>
  138 + <version>6.0.1.0-386</version>
  139 + </dependency>
  140 + <dependency>
  141 + <groupId>com.pentaho.kettle</groupId>
  142 + <artifactId>metastore</artifactId>
  143 + <version>6.0.1.0-386</version>
  144 + </dependency>
  145 + <dependency>
  146 + <groupId>com.pentaho.kettle</groupId>
  147 + <artifactId>vfs2</artifactId>
  148 + <version>2.1-20150824</version>
  149 + </dependency>
  150 + <dependency>
  151 + <groupId>net.sourceforge.jexcelapi</groupId>
  152 + <artifactId>jxl</artifactId>
  153 + <version>2.6.12</version>
  154 + </dependency>
  155 +
125 156 </dependencies>
126 157  
127 158 <dependencyManagement>
... ...
src/main/java/com/bsth/controller/CarsController.java
1 1 package com.bsth.controller;
2 2  
  3 +import com.bsth.common.ResponseCode;
3 4 import com.bsth.entity.Cars;
4   -import org.springframework.web.bind.annotation.RequestBody;
5   -import org.springframework.web.bind.annotation.RequestMapping;
6   -import org.springframework.web.bind.annotation.RequestMethod;
7   -import org.springframework.web.bind.annotation.RestController;
  5 +import com.bsth.service.schedule.utils.DataImportExportService;
  6 +import com.bsth.service.schedule.utils.DataToolsProperties;
  7 +import org.springframework.beans.factory.annotation.Autowired;
  8 +import org.springframework.boot.context.properties.EnableConfigurationProperties;
  9 +import org.springframework.web.bind.annotation.*;
  10 +import org.springframework.web.multipart.MultipartFile;
8 11  
  12 +import java.io.File;
  13 +import java.util.HashMap;
9 14 import java.util.Map;
10 15  
11 16 /**
... ... @@ -13,8 +18,13 @@ import java.util.Map;
13 18 */
14 19 @RestController
15 20 @RequestMapping("cars")
  21 +@EnableConfigurationProperties(DataToolsProperties.class)
16 22 public class CarsController extends BaseController<Cars, Integer> {
17 23  
  24 + @Autowired
  25 + private DataImportExportService dataImportExportService;
  26 + @Autowired
  27 + private DataToolsProperties dataToolsProperties;
18 28  
19 29 /**
20 30 * 覆写方法,因为form提交的方式参数不全,改用 json形式提交 @RequestBody
... ... @@ -29,4 +39,40 @@ public class CarsController extends BaseController&lt;Cars, Integer&gt; {
29 39 public Map<String, Object> save(@RequestBody Cars t){
30 40 return baseService.save(t);
31 41 }
  42 +
  43 + /**
  44 + * 验证。
  45 + * @param map
  46 + * @return
  47 + */
  48 + @RequestMapping(value = "/validate/equale", method = RequestMethod.GET)
  49 + public Map<String, Object> validateData(@RequestParam Map<String, Object> map) {
  50 + // 一般比较自编号是否重复
  51 + return baseService.validateEquale(map);
  52 + }
  53 +
  54 + // 上传图片
  55 + @RequestMapping(value = "/dataImport", method = RequestMethod.POST)
  56 + public Map<String, Object> uploadPic(MultipartFile file) throws Exception {
  57 + Map<String, Object> resultMap = new HashMap<>();
  58 +
  59 + try {
  60 + // 获取ktr转换文件绝对路径
  61 + File ktrfile = new File(this.getClass().getResource(
  62 + dataToolsProperties.getCarsDatainputktr()).toURI());
  63 + System.out.println(ktrfile.getAbsolutePath());
  64 + // 导入数据
  65 + dataImportExportService.fileDataImport(file, ktrfile);
  66 +
  67 + resultMap.put("status", ResponseCode.SUCCESS);
  68 + resultMap.put("msg", "导入成功");
  69 + } catch (Exception exp) {
  70 + exp.printStackTrace();
  71 + resultMap.put("status", ResponseCode.ERROR);
  72 + resultMap.put("msg", exp.getLocalizedMessage());
  73 + }
  74 +
  75 + return resultMap;
  76 + }
  77 +
32 78 }
... ...
src/main/java/com/bsth/controller/PersonnelController.java
1 1 package com.bsth.controller;
2 2  
3 3 import com.bsth.entity.Personnel;
4   -import org.springframework.web.bind.annotation.RequestBody;
5   -import org.springframework.web.bind.annotation.RequestMapping;
6   -import org.springframework.web.bind.annotation.RequestMethod;
7   -import org.springframework.web.bind.annotation.RestController;
  4 +import org.springframework.web.bind.annotation.*;
8 5  
9 6 import java.util.Map;
10 7  
... ... @@ -27,4 +24,15 @@ public class PersonnelController extends BaseController&lt;Personnel, Integer&gt; {
27 24 public Map<String, Object> save(@RequestBody Personnel t){
28 25 return baseService.save(t);
29 26 }
  27 +
  28 + /**
  29 + * 验证。
  30 + * @param map
  31 + * @return
  32 + */
  33 + @RequestMapping(value = "/validate/equale", method = RequestMethod.GET)
  34 + public Map<String, Object> validateData(@RequestParam Map<String, Object> map) {
  35 + // 一般比较相同公司下工号是否相同
  36 + return baseService.validateEquale(map);
  37 + }
30 38 }
... ...
src/main/java/com/bsth/entity/Line.java
... ... @@ -29,12 +29,12 @@ public class Line implements Serializable {
29 29 @Id
30 30 @GeneratedValue(strategy = GenerationType.IDENTITY)
31 31 private Integer id;
32   -
33   - // 线路代码
34   - private String lineCode;
35   -
  32 +
36 33 // 线路名称
37 34 private String name;
  35 +
  36 + // 线路代码
  37 + private String lineCode;
38 38  
39 39 // 英文名
40 40 private String es;
... ... @@ -42,16 +42,16 @@ public class Line implements Serializable {
42 42 // 简称
43 43 private String shortName;
44 44  
45   - // 配置车辆总数
  45 + /** 配置车辆总数 老版本系统字段, 新版本系统业务需求暂时没用到该字段 ,这里暂时留着 */
46 46 private Integer carSumNumber;
47 47  
48   - // 空调车辆数量
  48 + /** 空调车辆数量 老版本系统字段, 新版本系统业务需求暂时没用到该字段 ,这里暂时留着 */
49 49 private Integer hvacCarNumber;
50 50  
51   - // 普通车辆数量
  51 + /** 普通车辆数量 老版本系统字段, 新版本系统业务需求暂时没用到该字段 ,这里暂时留着 */
52 52 private Integer ordCarNumber;
53 53  
54   - // 停车场编码
  54 + /** 停车场编码 老版本系统字段, 新版本系统业务需求暂时没用到该字段 ,这里暂时留着 */
55 55 private String carParkCode;
56 56  
57 57 // 起始站名称
... ... @@ -61,7 +61,7 @@ public class Line implements Serializable {
61 61 private String startStationFirstTime;
62 62  
63 63 // 起始站末班车时间 00:00
64   - private String StartStationEndTime;
  64 + private String startStationEndTime;
65 65  
66 66 // 终点站名称
67 67 private String endStationName;
... ... @@ -94,10 +94,10 @@ public class Line implements Serializable {
94 94 private String telephone;
95 95  
96 96 // 是否撤销
97   - private boolean destroy;
  97 + private Integer destroy;
98 98  
99 99 // 是否夜宵线
100   - private boolean supperLine;
  100 + private Integer supperLine;
101 101  
102 102 // 起始调度电话
103 103 private String startPhone;
... ... @@ -224,11 +224,11 @@ public class Line implements Serializable {
224 224 }
225 225  
226 226 public String getStartStationEndTime() {
227   - return StartStationEndTime;
  227 + return startStationEndTime;
228 228 }
229 229  
230 230 public void setStartStationEndTime(String startStationEndTime) {
231   - StartStationEndTime = startStationEndTime;
  231 + this.startStationEndTime = startStationEndTime;
232 232 }
233 233  
234 234 public String getEndStationName() {
... ... @@ -311,19 +311,19 @@ public class Line implements Serializable {
311 311 this.telephone = telephone;
312 312 }
313 313  
314   - public boolean isDestroy() {
  314 + public Integer getDestroy() {
315 315 return destroy;
316 316 }
317 317  
318   - public void setDestroy(boolean destroy) {
  318 + public void setDestroy(Integer destroy) {
319 319 this.destroy = destroy;
320 320 }
321 321  
322   - public boolean isSupperLine() {
  322 + public Integer getSupperLine() {
323 323 return supperLine;
324 324 }
325 325  
326   - public void setSupperLine(boolean supperLine) {
  326 + public void setSupperLine(Integer supperLine) {
327 327 this.supperLine = supperLine;
328 328 }
329 329  
... ...
src/main/java/com/bsth/entity/LineInformation.java
... ... @@ -131,7 +131,7 @@ public class LineInformation {
131 131 private Integer lagStation;
132 132  
133 133 // 越站
134   - private Integer Skip;
  134 + private Integer skip;
135 135  
136 136 // 超速
137 137 private Integer speeding;
... ... @@ -435,11 +435,11 @@ public class LineInformation {
435 435 }
436 436  
437 437 public Integer getSkip() {
438   - return Skip;
  438 + return skip;
439 439 }
440 440  
441 441 public void setSkip(Integer skip) {
442   - Skip = skip;
  442 + this.skip = skip;
443 443 }
444 444  
445 445 public Integer getSpeeding() {
... ...
src/main/java/com/bsth/entity/Personnel.java
... ... @@ -39,7 +39,7 @@ public class Personnel {
39 39 /** 分公司编码 */
40 40 private String brancheCompanyCode;
41 41 /** 工号 */
42   - @Column(nullable = false, unique = true)
  42 + @Column(nullable = false)
43 43 private String jobCode;
44 44 /** 姓名 */
45 45 @Column(nullable = false)
... ... @@ -49,9 +49,9 @@ public class Personnel {
49 49 private String papersCode;
50 50 /** 一卡通工作卡号 */
51 51 private String icCardCode;
52   - /** 性别(TODO:暂时使用男/女,不使用字典) */
  52 + /** 性别(字典类型sexType) */
53 53 private String personnelType;
54   - /** 所属岗位/工种(TODO:暂时不使用字典) */
  54 + /** 所属岗位/工种(字典类型gzType) */
55 55 private String posts;
56 56  
57 57  
... ...
src/main/java/com/bsth/service/BaseService.java
1 1 package com.bsth.service;
2 2  
3   -import java.io.Serializable;
4   -import java.util.Map;
5   -
6 3 import org.springframework.data.domain.Page;
7 4 import org.springframework.data.domain.Pageable;
8 5  
  6 +import java.io.Serializable;
  7 +import java.util.Map;
  8 +
9 9 /**
10 10 *
11 11 * @ClassName: BaseService
... ... @@ -63,4 +63,11 @@ public interface BaseService&lt;T, ID extends Serializable&gt; {
63 63 * @throws
64 64 */
65 65 Map<String, Object> delete(ID id);
  66 +
  67 + /**
  68 + * 后端验证查询数据是否重复。
  69 + * @param params 查询条件
  70 + * @return {status:状态编码,msg:错误描述},状态编码 @see com.bsth.common.ResponseCode
  71 + */
  72 + Map<String, Object> validateEquale(Map<String, Object> params);
66 73 }
... ...
src/main/java/com/bsth/service/impl/BaseServiceImpl.java
1 1 package com.bsth.service.impl;
2 2  
3   -import java.io.Serializable;
4   -import java.util.HashMap;
5   -import java.util.Map;
6   -
  3 +import com.bsth.common.ResponseCode;
  4 +import com.bsth.entity.search.CustomerSpecs;
  5 +import com.bsth.repository.BaseRepository;
  6 +import com.bsth.service.BaseService;
7 7 import org.slf4j.Logger;
8 8 import org.slf4j.LoggerFactory;
9 9 import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -11,10 +11,9 @@ import org.springframework.dao.DataIntegrityViolationException;
11 11 import org.springframework.data.domain.Page;
12 12 import org.springframework.data.domain.Pageable;
13 13  
14   -import com.bsth.common.ResponseCode;
15   -import com.bsth.entity.search.CustomerSpecs;
16   -import com.bsth.repository.BaseRepository;
17   -import com.bsth.service.BaseService;
  14 +import java.io.Serializable;
  15 +import java.util.HashMap;
  16 +import java.util.Map;
18 17  
19 18 public class BaseServiceImpl<T, ID extends Serializable> implements BaseService<T, ID>{
20 19  
... ... @@ -70,4 +69,31 @@ public class BaseServiceImpl&lt;T, ID extends Serializable&gt; implements BaseService&lt;
70 69 }
71 70 return map;
72 71 }
  72 +
  73 + @Override
  74 + public Map<String, Object> validateEquale(Map<String, Object> params) {
  75 + Map<String, Object> returnMap = new HashMap<>();
  76 +
  77 + try {
  78 + if (params == null || params.size() == 0) {
  79 + returnMap.put("status", ResponseCode.SUCCESS);
  80 + returnMap.put("msg", "此时没有重复");
  81 + } else {
  82 + Iterable<T> iterable = list(params);
  83 + if (iterable.iterator().hasNext()) {
  84 + returnMap.put("status", ResponseCode.ERROR);
  85 + returnMap.put("msg", "数据重复");
  86 + } else {
  87 + returnMap.put("status", ResponseCode.SUCCESS);
  88 + returnMap.put("msg", "没有重复");
  89 + }
  90 + }
  91 + } catch (Exception exp) {
  92 + logger.error("validateEquale error", exp);
  93 + returnMap.put("status", ResponseCode.ERROR);
  94 + returnMap.put("msg", exp.getLocalizedMessage());
  95 + }
  96 +
  97 + return returnMap;
  98 + }
73 99 }
... ...
src/main/java/com/bsth/service/schedule/utils/DataImportExportService.java 0 → 100644
  1 +package com.bsth.service.schedule.utils;
  2 +
  3 +import org.springframework.web.multipart.MultipartFile;
  4 +
  5 +import java.io.File;
  6 +
  7 +/**
  8 + * 数据导入导出服务。
  9 + */
  10 +public interface DataImportExportService {
  11 + /**
  12 + * 上传文件。
  13 + * @param file mutipartFile
  14 + * @return 上传后的文件路径
  15 + * @throws Exception
  16 + */
  17 + File uploadFile(MultipartFile file) throws Exception;
  18 +
  19 + /**
  20 + * 上传文件,并导入文件数据。
  21 + * @param datafile 上传的文件
  22 + * @param ktrFile 导入的逻辑ktr文件
  23 + * @throws Exception
  24 + */
  25 + void fileDataImport(MultipartFile datafile, File ktrFile) throws Exception;
  26 +}
... ...
src/main/java/com/bsth/service/schedule/utils/DataImportExportServiceImpl.java 0 → 100644
  1 +package com.bsth.service.schedule.utils;
  2 +
  3 +import com.google.common.io.Files;
  4 +import org.pentaho.di.core.KettleEnvironment;
  5 +import org.pentaho.di.core.util.EnvUtil;
  6 +import org.pentaho.di.trans.Trans;
  7 +import org.pentaho.di.trans.TransMeta;
  8 +import org.springframework.beans.factory.annotation.Autowired;
  9 +import org.springframework.boot.context.properties.EnableConfigurationProperties;
  10 +import org.springframework.stereotype.Service;
  11 +import org.springframework.web.multipart.MultipartFile;
  12 +
  13 +import java.io.File;
  14 +
  15 +/**
  16 + * Created by xu on 16/6/23.
  17 + */
  18 +@Service
  19 +@EnableConfigurationProperties(DataToolsProperties.class)
  20 +public class DataImportExportServiceImpl implements DataImportExportService {
  21 +
  22 + @Autowired
  23 + private DataToolsProperties dataToolsProperties;
  24 +
  25 + @Override
  26 + public File uploadFile(MultipartFile file) throws Exception {
  27 + // TODO:以后的文件名要加时间戳
  28 + File newFile = new File(
  29 + dataToolsProperties.getFileuploadDir() + File.separator +
  30 + file.getOriginalFilename());
  31 + Files.write(file.getBytes(), newFile);
  32 + return newFile;
  33 + }
  34 +
  35 + @Override
  36 + public void fileDataImport(MultipartFile datafile, File ktrFile) throws Exception {
  37 + // 1、上传数据文件
  38 + File uploadFile = uploadFile(datafile);
  39 +
  40 + // 2、使用kettle运行封装数据导入逻辑的ktr转换文件
  41 + // 2.1、初始化kettle
  42 + EnvUtil.environmentInit();
  43 + KettleEnvironment.init();
  44 + // 2.2、创建转换元数据,转换
  45 + TransMeta transMeta = new TransMeta(ktrFile.getAbsolutePath());
  46 + Trans trans = new Trans(transMeta);
  47 + // 2.3、设定命名参数,用于指定数据文件,注意每个ktr必须都有以下指定的命名参数
  48 + trans.setParameterValue("filepath", uploadFile.getAbsolutePath()); // 指定导入数据文件的位置
  49 + trans.setParameterValue("erroroutputdir", dataToolsProperties.getTransErrordir()); // ktr转换错误输出目录
  50 + // TODO:可以考虑设定日志输出
  51 + // 2.4、执行转换
  52 + trans.execute(null);
  53 + // 2.5、等待转换结束
  54 + trans.waitUntilFinished();
  55 +
  56 + // 3、判定ktr错误数,注意这种错误代表部分数据错误,不会终止转换执行,一般设计ktr的时候,会有错误输出文件,TODO:以后考虑使用日志实时输出
  57 + if (trans.getErrors() > 0) {
  58 + throw new Exception("转换数据部分错误,请查看相关错误输出文件!");
  59 + }
  60 + }
  61 +}
... ...
src/main/java/com/bsth/service/schedule/utils/DataToolsProperties.java 0 → 100644
  1 +package com.bsth.service.schedule.utils;
  2 +
  3 +import org.springframework.boot.context.properties.ConfigurationProperties;
  4 +
  5 +import javax.validation.constraints.NotNull;
  6 +
  7 +/**
  8 + * 配置数据导入导出用到的配置信息
  9 + */
  10 +@ConfigurationProperties(
  11 + locations = "classpath:datatools/config.properties",
  12 + ignoreInvalidFields = true,
  13 + prefix = "datatools"
  14 +)
  15 +public class DataToolsProperties {
  16 +
  17 + /** 上传文件目录配置(根据不同的环境需要修正) */
  18 + @NotNull
  19 + private String fileuploadDir;
  20 +
  21 + /** ktr转换文件,中配置的错误输出目录(根据不同的环境需要修正) */
  22 + @NotNull
  23 + private String transErrordir;
  24 +
  25 + /** 测试temp的ktr转换文件 */
  26 + @NotNull
  27 + private String tempDatainputktr;
  28 + /** 车辆信息导入ktr转换 */
  29 + @NotNull
  30 + private String carsDatainputktr;
  31 +
  32 + public String getFileuploadDir() {
  33 + return fileuploadDir;
  34 + }
  35 +
  36 + public void setFileuploadDir(String fileuploadDir) {
  37 + this.fileuploadDir = fileuploadDir;
  38 + }
  39 +
  40 + public String getTransErrordir() {
  41 + return transErrordir;
  42 + }
  43 +
  44 + public void setTransErrordir(String transErrordir) {
  45 + this.transErrordir = transErrordir;
  46 + }
  47 +
  48 + public String getTempDatainputktr() {
  49 + return tempDatainputktr;
  50 + }
  51 +
  52 + public void setTempDatainputktr(String tempDatainputktr) {
  53 + this.tempDatainputktr = tempDatainputktr;
  54 + }
  55 +
  56 + public String getCarsDatainputktr() {
  57 + return carsDatainputktr;
  58 + }
  59 +
  60 + public void setCarsDatainputktr(String carsDatainputktr) {
  61 + this.carsDatainputktr = carsDatainputktr;
  62 + }
  63 +}
... ...
src/main/resources/application.properties
... ... @@ -25,6 +25,12 @@ server.session-timeout=-1
25 25  
26 26 security.basic.enabled=false
27 27  
  28 +# 上传文件大小限制配置
  29 +# File size limit
  30 +multipart.maxFileSize = -1
  31 +# Total request size for a multipart/form-data
  32 +multipart.maxRequestSize = -1
  33 +
28 34 ##
29 35 #222.66.0.204:5555
30 36 ##\u5B9E\u65F6gps
... ...
src/main/resources/datatools/config.properties 0 → 100644
  1 +# 配置数据导入导出用到的配置信息
  2 +
  3 +# 上传文件目录配置(根据不同的环境需要修正)
  4 +datatools.fileupload_dir=/Users/xu/resource/project/bsth_control_u_d_files
  5 +# ktr转换文件,中配置的错误输出目录(根据不同的环境需要修正)
  6 +datatools.trans_errordir=/Users/xu/resource/project/bsth_control_u_d_files/erroroutput
  7 +
  8 +# 以下是封装数据导入导出逻辑的ktr转换文件,类路径,以后考虑放到数据库中
  9 +# 测试temp的ktr转换文件
  10 +datatools.temp_datainputktr=/datatools/ktrs/test.ktr
  11 +# 车辆信息导入ktr转换
  12 +datatools.cars_datainputktr=/datatools/ktrs/carsDataInput.ktr
  13 +# 人员信息导入
  14 +
  15 +# 时刻表基础信息导入
  16 +
  17 +# 时刻明细信息导入
  18 +
  19 +# 车辆配置信息导入
  20 +
  21 +# 人员配置信息导入
  22 +
  23 +# 排班规则信息导入**
0 24 \ No newline at end of file
... ...
src/main/resources/datatools/ktrs/carsDataInput.ktr 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<transformation>
  3 + <info>
  4 + <name>carsDataInput</name>
  5 + <description>&#x8f66;&#x8f86;&#x4fe1;&#x606f;&#x5bfc;&#x5165;</description>
  6 + <extended_description>&#x8f66;&#x8f86;&#x57fa;&#x7840;&#x4fe1;&#x606f;</extended_description>
  7 + <trans_version/>
  8 + <trans_type>Normal</trans_type>
  9 + <trans_status>0</trans_status>
  10 + <directory>&#x2f;</directory>
  11 + <parameters>
  12 + <parameter>
  13 + <name>erroroutputdir</name>
  14 + <default_value/>
  15 + <description>ktr&#x914d;&#x7f6e;&#x7684;&#x9519;&#x8bef;&#x8f93;&#x51fa;&#x76ee;&#x5f55;</description>
  16 + </parameter>
  17 + <parameter>
  18 + <name>filepath</name>
  19 + <default_value/>
  20 + <description>&#x5f85;&#x5904;&#x7406;&#x5bfc;&#x5165;&#x7684;excel&#x6587;&#x4ef6;</description>
  21 + </parameter>
  22 + </parameters>
  23 + <log>
  24 +<trans-log-table><connection/>
  25 +<schema/>
  26 +<table/>
  27 +<size_limit_lines/>
  28 +<interval/>
  29 +<timeout_days/>
  30 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STATUS</id><enabled>Y</enabled><name>STATUS</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name><subject/></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name><subject/></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name><subject/></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name><subject/></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name><subject/></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name><subject/></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>STARTDATE</id><enabled>Y</enabled><name>STARTDATE</name></field><field><id>ENDDATE</id><enabled>Y</enabled><name>ENDDATE</name></field><field><id>LOGDATE</id><enabled>Y</enabled><name>LOGDATE</name></field><field><id>DEPDATE</id><enabled>Y</enabled><name>DEPDATE</name></field><field><id>REPLAYDATE</id><enabled>Y</enabled><name>REPLAYDATE</name></field><field><id>LOG_FIELD</id><enabled>Y</enabled><name>LOG_FIELD</name></field><field><id>EXECUTING_SERVER</id><enabled>N</enabled><name>EXECUTING_SERVER</name></field><field><id>EXECUTING_USER</id><enabled>N</enabled><name>EXECUTING_USER</name></field><field><id>CLIENT</id><enabled>N</enabled><name>CLIENT</name></field></trans-log-table>
  31 +<perf-log-table><connection/>
  32 +<schema/>
  33 +<table/>
  34 +<interval/>
  35 +<timeout_days/>
  36 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>SEQ_NR</id><enabled>Y</enabled><name>SEQ_NR</name></field><field><id>LOGDATE</id><enabled>Y</enabled><name>LOGDATE</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STEPNAME</id><enabled>Y</enabled><name>STEPNAME</name></field><field><id>STEP_COPY</id><enabled>Y</enabled><name>STEP_COPY</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>INPUT_BUFFER_ROWS</id><enabled>Y</enabled><name>INPUT_BUFFER_ROWS</name></field><field><id>OUTPUT_BUFFER_ROWS</id><enabled>Y</enabled><name>OUTPUT_BUFFER_ROWS</name></field></perf-log-table>
  37 +<channel-log-table><connection/>
  38 +<schema/>
  39 +<table/>
  40 +<timeout_days/>
  41 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>LOGGING_OBJECT_TYPE</id><enabled>Y</enabled><name>LOGGING_OBJECT_TYPE</name></field><field><id>OBJECT_NAME</id><enabled>Y</enabled><name>OBJECT_NAME</name></field><field><id>OBJECT_COPY</id><enabled>Y</enabled><name>OBJECT_COPY</name></field><field><id>REPOSITORY_DIRECTORY</id><enabled>Y</enabled><name>REPOSITORY_DIRECTORY</name></field><field><id>FILENAME</id><enabled>Y</enabled><name>FILENAME</name></field><field><id>OBJECT_ID</id><enabled>Y</enabled><name>OBJECT_ID</name></field><field><id>OBJECT_REVISION</id><enabled>Y</enabled><name>OBJECT_REVISION</name></field><field><id>PARENT_CHANNEL_ID</id><enabled>Y</enabled><name>PARENT_CHANNEL_ID</name></field><field><id>ROOT_CHANNEL_ID</id><enabled>Y</enabled><name>ROOT_CHANNEL_ID</name></field></channel-log-table>
  42 +<step-log-table><connection/>
  43 +<schema/>
  44 +<table/>
  45 +<timeout_days/>
  46 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STEPNAME</id><enabled>Y</enabled><name>STEPNAME</name></field><field><id>STEP_COPY</id><enabled>Y</enabled><name>STEP_COPY</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>LOG_FIELD</id><enabled>N</enabled><name>LOG_FIELD</name></field></step-log-table>
  47 +<metrics-log-table><connection/>
  48 +<schema/>
  49 +<table/>
  50 +<timeout_days/>
  51 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>METRICS_DATE</id><enabled>Y</enabled><name>METRICS_DATE</name></field><field><id>METRICS_CODE</id><enabled>Y</enabled><name>METRICS_CODE</name></field><field><id>METRICS_DESCRIPTION</id><enabled>Y</enabled><name>METRICS_DESCRIPTION</name></field><field><id>METRICS_SUBJECT</id><enabled>Y</enabled><name>METRICS_SUBJECT</name></field><field><id>METRICS_TYPE</id><enabled>Y</enabled><name>METRICS_TYPE</name></field><field><id>METRICS_VALUE</id><enabled>Y</enabled><name>METRICS_VALUE</name></field></metrics-log-table>
  52 + </log>
  53 + <maxdate>
  54 + <connection/>
  55 + <table/>
  56 + <field/>
  57 + <offset>0.0</offset>
  58 + <maxdiff>0.0</maxdiff>
  59 + </maxdate>
  60 + <size_rowset>10000</size_rowset>
  61 + <sleep_time_empty>50</sleep_time_empty>
  62 + <sleep_time_full>50</sleep_time_full>
  63 + <unique_connections>N</unique_connections>
  64 + <feedback_shown>Y</feedback_shown>
  65 + <feedback_size>50000</feedback_size>
  66 + <using_thread_priorities>Y</using_thread_priorities>
  67 + <shared_objects_file/>
  68 + <capture_step_performance>N</capture_step_performance>
  69 + <step_performance_capturing_delay>1000</step_performance_capturing_delay>
  70 + <step_performance_capturing_size_limit>100</step_performance_capturing_size_limit>
  71 + <dependencies>
  72 + </dependencies>
  73 + <partitionschemas>
  74 + </partitionschemas>
  75 + <slaveservers>
  76 + </slaveservers>
  77 + <clusterschemas>
  78 + </clusterschemas>
  79 + <created_user>-</created_user>
  80 + <created_date>2016&#x2f;06&#x2f;23 17&#x3a;44&#x3a;46.781</created_date>
  81 + <modified_user>-</modified_user>
  82 + <modified_date>2016&#x2f;06&#x2f;23 17&#x3a;44&#x3a;46.781</modified_date>
  83 + <key_for_session_key/>
  84 + <is_key_private>N</is_key_private>
  85 + </info>
  86 + <notepads>
  87 + <notepad>
  88 + <note>&#x539f;&#x7cfb;&#x7edf;&#x7684;&#x5bfc;&#x51fa;&#x8868;&#xff0c;&#x6709;&#x4e9b;&#x6570;&#x636e;&#x662f;&#x6ca1;&#x6709;&#x7684;&#xff0c;&#x6709;&#x4e9b;&#x6570;&#x636e;&#x4e5f;&#x6709;&#x95ee;&#x9898;&#xff0c;&#x5982;&#x4e0b;&#xa;&#x62a5;&#x5e9f;&#x65e5;&#x671f;&#x53bb;&#x6389;&#xa;&#x8f66;&#x8f86;&#x7f16;&#x7801;&#xff0c;&#x6682;&#x65f6;&#x7528;1&#x4ee3;&#x66ff;&#xa;&#x662f;&#x5426;&#x7535;&#x8f66; &#x6ca1;&#x6709;&#xa;&#x8f66;&#x8f86;&#x5e8f;&#x53f7; &#x6ca1;&#x6709;&#xa;&#x662f;&#x5426;&#x5207;&#x6362; &#x6ca1;&#x6709;&#xa;&#x7ebf;&#x8def;&#x540d;&#x79f0;&#xff08;&#x8fd9;&#x91cc;&#x4e0d;&#x505a;&#x5173;&#x8054;&#xff0c;&#x53ea;&#x662f;&#x767b;&#x8bb0;&#x7684;&#x65f6;&#x5019;&#x4f7f;&#x7528;&#xff09; &#x54a9;&#x6709;</note>
  89 + <xloc>365</xloc>
  90 + <yloc>136</yloc>
  91 + <width>346</width>
  92 + <heigth>122</heigth>
  93 + <fontname>YaHei Consolas Hybrid</fontname>
  94 + <fontsize>12</fontsize>
  95 + <fontbold>N</fontbold>
  96 + <fontitalic>N</fontitalic>
  97 + <fontcolorred>0</fontcolorred>
  98 + <fontcolorgreen>0</fontcolorgreen>
  99 + <fontcolorblue>0</fontcolorblue>
  100 + <backgroundcolorred>255</backgroundcolorred>
  101 + <backgroundcolorgreen>205</backgroundcolorgreen>
  102 + <backgroundcolorblue>112</backgroundcolorblue>
  103 + <bordercolorred>100</bordercolorred>
  104 + <bordercolorgreen>100</bordercolorgreen>
  105 + <bordercolorblue>100</bordercolorblue>
  106 + <drawshadow>Y</drawshadow>
  107 + </notepad>
  108 + </notepads>
  109 + <connection>
  110 + <name>bus_control_&#x516c;&#x53f8;_201</name>
  111 + <server>192.168.168.201</server>
  112 + <type>MYSQL</type>
  113 + <access>Native</access>
  114 + <database>control</database>
  115 + <port>3306</port>
  116 + <username>root</username>
  117 + <password>Encrypted 2be98afc86aa7f2e4cb79ff228dc6fa8c</password>
  118 + <servername/>
  119 + <data_tablespace/>
  120 + <index_tablespace/>
  121 + <attributes>
  122 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  123 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  124 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  125 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  126 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  127 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  128 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  129 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  130 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  131 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  132 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  133 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  134 + </attributes>
  135 + </connection>
  136 + <connection>
  137 + <name>xlab_mysql_youle</name>
  138 + <server>101.231.124.8</server>
  139 + <type>MYSQL</type>
  140 + <access>Native</access>
  141 + <database>xlab_youle</database>
  142 + <port>45687</port>
  143 + <username>xlab-youle</username>
  144 + <password>Encrypted 2be98afc86aa78a88aa1be369d187a3df</password>
  145 + <servername/>
  146 + <data_tablespace/>
  147 + <index_tablespace/>
  148 + <attributes>
  149 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  150 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  151 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  152 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  153 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  154 + <attribute><code>PORT_NUMBER</code><attribute>45687</attribute></attribute>
  155 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  156 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  157 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  158 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
  159 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
  160 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  161 + </attributes>
  162 + </connection>
  163 + <connection>
  164 + <name>xlab_mysql_youle&#xff08;&#x672c;&#x673a;&#xff09;</name>
  165 + <server>localhost</server>
  166 + <type>MYSQL</type>
  167 + <access>Native</access>
  168 + <database>xlab_youle</database>
  169 + <port>3306</port>
  170 + <username>root</username>
  171 + <password>Encrypted </password>
  172 + <servername/>
  173 + <data_tablespace/>
  174 + <index_tablespace/>
  175 + <attributes>
  176 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  177 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  178 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  179 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  180 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  181 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  182 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  183 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  184 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  185 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
  186 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
  187 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  188 + </attributes>
  189 + </connection>
  190 + <connection>
  191 + <name>xlab_youle</name>
  192 + <server/>
  193 + <type>MYSQL</type>
  194 + <access>JNDI</access>
  195 + <database>xlab_youle</database>
  196 + <port>1521</port>
  197 + <username/>
  198 + <password>Encrypted </password>
  199 + <servername/>
  200 + <data_tablespace/>
  201 + <index_tablespace/>
  202 + <attributes>
  203 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  204 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  205 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  206 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  207 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  208 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  209 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  210 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  211 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  212 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  213 + </attributes>
  214 + </connection>
  215 + <order>
  216 + <hop> <from>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</from><to>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</to><enabled>Y</enabled> </hop>
  217 + <hop> <from>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</from><to>&#x662f;&#x5426;&#x7a7a;&#x8c03;&#x8f66;</to><enabled>Y</enabled> </hop>
  218 + <hop> <from>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_cars</from><to>&#x9519;&#x8bef;&#x8f93;&#x51fa;</to><enabled>Y</enabled> </hop>
  219 + <hop> <from>&#x662f;&#x5426;&#x6709;LED&#x670d;&#x52a1;&#x5c4f;</from><to>&#x662f;&#x5426;&#x6709;TV&#x89c6;&#x9891;</to><enabled>Y</enabled> </hop>
  220 + <hop> <from>&#x662f;&#x5426;&#x6709;TV&#x89c6;&#x9891;</from><to>&#x662f;&#x5426;&#x7684;&#x53d8;&#x6210;&#x6570;&#x5b57;&#x578b;</to><enabled>Y</enabled> </hop>
  221 + <hop> <from>&#x662f;&#x5426;&#x7684;&#x53d8;&#x6210;&#x6570;&#x5b57;&#x578b;</from><to>&#x516c;&#x4ea4;&#x4f01;&#x4e1a;&#x4ee3;&#x7801;</to><enabled>Y</enabled> </hop>
  222 + <hop> <from>&#x662f;&#x5426;&#x7a7a;&#x8c03;&#x8f66;</from><to>&#x6709;&#x65e0;&#x4eba;&#x552e;&#x7968;</to><enabled>Y</enabled> </hop>
  223 + <hop> <from>&#x6709;&#x65e0;&#x4eba;&#x552e;&#x7968;</from><to>&#x662f;&#x5426;&#x6709;LED&#x670d;&#x52a1;&#x5c4f;</to><enabled>Y</enabled> </hop>
  224 + <hop> <from>&#x516c;&#x4ea4;&#x4f01;&#x4e1a;&#x4ee3;&#x7801;</from><to>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_cars</to><enabled>Y</enabled> </hop>
  225 + <hop> <from>&#x83b7;&#x53d6;&#x53d8;&#x91cf;</from><to>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</to><enabled>Y</enabled> </hop>
  226 + </order>
  227 + <step>
  228 + <name>&#x516c;&#x4ea4;&#x4f01;&#x4e1a;&#x4ee3;&#x7801;</name>
  229 + <type>ValueMapper</type>
  230 + <description/>
  231 + <distribute>Y</distribute>
  232 + <custom_distribution/>
  233 + <copies>1</copies>
  234 + <partitioning>
  235 + <method>none</method>
  236 + <schema_name/>
  237 + </partitioning>
  238 + <field_to_use>company</field_to_use>
  239 + <target_field>businessCode</target_field>
  240 + <non_match_default/>
  241 + <fields>
  242 + <field>
  243 + <source_value>&#x4e0a;&#x5357;&#x516c;&#x53f8;</source_value>
  244 + <target_value>55</target_value>
  245 + </field>
  246 + <field>
  247 + <source_value>&#x91d1;&#x9ad8;&#x516c;&#x53f8;</source_value>
  248 + <target_value>22</target_value>
  249 + </field>
  250 + <field>
  251 + <source_value>&#x6768;&#x9ad8;&#x516c;&#x53f8;</source_value>
  252 + <target_value>05</target_value>
  253 + </field>
  254 + <field>
  255 + <source_value>&#x5357;&#x6c47;&#x516c;&#x53f8;</source_value>
  256 + <target_value>26</target_value>
  257 + </field>
  258 + <field>
  259 + <source_value>&#x516c;&#x4ea4;&#x516c;&#x53f8;</source_value>
  260 + <target_value>88</target_value>
  261 + </field>
  262 + <field>
  263 + <source_value>&#x95f5;&#x884c;&#x516c;&#x4ea4;</source_value>
  264 + <target_value>77</target_value>
  265 + </field>
  266 + </fields>
  267 + <cluster_schema/>
  268 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  269 + <xloc>841</xloc>
  270 + <yloc>166</yloc>
  271 + <draw>Y</draw>
  272 + </GUI>
  273 + </step>
  274 +
  275 + <step>
  276 + <name>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</name>
  277 + <type>ExcelInput</type>
  278 + <description/>
  279 + <distribute>Y</distribute>
  280 + <custom_distribution/>
  281 + <copies>1</copies>
  282 + <partitioning>
  283 + <method>none</method>
  284 + <schema_name/>
  285 + </partitioning>
  286 + <header>Y</header>
  287 + <noempty>Y</noempty>
  288 + <stoponempty>N</stoponempty>
  289 + <filefield/>
  290 + <sheetfield/>
  291 + <sheetrownumfield/>
  292 + <rownumfield/>
  293 + <sheetfield/>
  294 + <filefield/>
  295 + <limit>0</limit>
  296 + <encoding/>
  297 + <add_to_result_filenames>Y</add_to_result_filenames>
  298 + <accept_filenames>Y</accept_filenames>
  299 + <accept_field>filepath_</accept_field>
  300 + <accept_stepname>&#x83b7;&#x53d6;&#x53d8;&#x91cf;</accept_stepname>
  301 + <file>
  302 + <name/>
  303 + <filemask/>
  304 + <exclude_filemask/>
  305 + <file_required>N</file_required>
  306 + <include_subfolders>N</include_subfolders>
  307 + </file>
  308 + <fields>
  309 + <field>
  310 + <name>&#x8f66;&#x724c;&#x53f7;</name>
  311 + <type>String</type>
  312 + <length>-1</length>
  313 + <precision>-1</precision>
  314 + <trim_type>none</trim_type>
  315 + <repeat>N</repeat>
  316 + <format/>
  317 + <currency/>
  318 + <decimal/>
  319 + <group/>
  320 + </field>
  321 + <field>
  322 + <name>&#x5185;&#x90e8;&#x7f16;&#x7801;</name>
  323 + <type>String</type>
  324 + <length>-1</length>
  325 + <precision>-1</precision>
  326 + <trim_type>none</trim_type>
  327 + <repeat>N</repeat>
  328 + <format/>
  329 + <currency/>
  330 + <decimal/>
  331 + <group/>
  332 + </field>
  333 + <field>
  334 + <name>&#x8f66;&#x8f86;&#x7f16;&#x7801;</name>
  335 + <type>String</type>
  336 + <length>-1</length>
  337 + <precision>-1</precision>
  338 + <trim_type>none</trim_type>
  339 + <repeat>N</repeat>
  340 + <format/>
  341 + <currency/>
  342 + <decimal/>
  343 + <group/>
  344 + </field>
  345 + <field>
  346 + <name>&#x8f66;&#x578b;&#x7c7b;&#x522b;</name>
  347 + <type>String</type>
  348 + <length>-1</length>
  349 + <precision>-1</precision>
  350 + <trim_type>none</trim_type>
  351 + <repeat>N</repeat>
  352 + <format/>
  353 + <currency/>
  354 + <decimal/>
  355 + <group/>
  356 + </field>
  357 + <field>
  358 + <name>&#x5ea7;&#x4f4d;&#x6570;</name>
  359 + <type>String</type>
  360 + <length>-1</length>
  361 + <precision>-1</precision>
  362 + <trim_type>none</trim_type>
  363 + <repeat>N</repeat>
  364 + <format/>
  365 + <currency/>
  366 + <decimal/>
  367 + <group/>
  368 + </field>
  369 + <field>
  370 + <name>&#x8f7d;&#x5ba2;&#x6807;&#x51c6;</name>
  371 + <type>String</type>
  372 + <length>-1</length>
  373 + <precision>-1</precision>
  374 + <trim_type>none</trim_type>
  375 + <repeat>N</repeat>
  376 + <format/>
  377 + <currency/>
  378 + <decimal/>
  379 + <group/>
  380 + </field>
  381 + <field>
  382 + <name>&#x6280;&#x672f;&#x901f;&#x5ea6;</name>
  383 + <type>String</type>
  384 + <length>-1</length>
  385 + <precision>-1</precision>
  386 + <trim_type>none</trim_type>
  387 + <repeat>N</repeat>
  388 + <format/>
  389 + <currency/>
  390 + <decimal/>
  391 + <group/>
  392 + </field>
  393 + <field>
  394 + <name>&#x662f;&#x5426;&#x7a7a;&#x8c03;</name>
  395 + <type>String</type>
  396 + <length>-1</length>
  397 + <precision>-1</precision>
  398 + <trim_type>none</trim_type>
  399 + <repeat>N</repeat>
  400 + <format/>
  401 + <currency/>
  402 + <decimal/>
  403 + <group/>
  404 + </field>
  405 + <field>
  406 + <name>&#x6807;&#x51c6;&#x6cb9;&#x8017;&#x28;&#x5f00;&#x7a7a;&#x8c03;&#x29;</name>
  407 + <type>String</type>
  408 + <length>-1</length>
  409 + <precision>-1</precision>
  410 + <trim_type>none</trim_type>
  411 + <repeat>N</repeat>
  412 + <format/>
  413 + <currency/>
  414 + <decimal/>
  415 + <group/>
  416 + </field>
  417 + <field>
  418 + <name>&#x6807;&#x51c6;&#x6cb9;&#x8017;&#x28;&#x5173;&#x7a7a;&#x8c03;&#x29;</name>
  419 + <type>String</type>
  420 + <length>-1</length>
  421 + <precision>-1</precision>
  422 + <trim_type>none</trim_type>
  423 + <repeat>N</repeat>
  424 + <format/>
  425 + <currency/>
  426 + <decimal/>
  427 + <group/>
  428 + </field>
  429 + <field>
  430 + <name>&#x6709;&#x65e0;&#x4eba;&#x552e;&#x7968;</name>
  431 + <type>String</type>
  432 + <length>-1</length>
  433 + <precision>-1</precision>
  434 + <trim_type>none</trim_type>
  435 + <repeat>N</repeat>
  436 + <format/>
  437 + <currency/>
  438 + <decimal/>
  439 + <group/>
  440 + </field>
  441 + <field>
  442 + <name>&#x662f;&#x5426;&#x6709;TV&#x89c6;&#x9891;</name>
  443 + <type>String</type>
  444 + <length>-1</length>
  445 + <precision>-1</precision>
  446 + <trim_type>none</trim_type>
  447 + <repeat>N</repeat>
  448 + <format/>
  449 + <currency/>
  450 + <decimal/>
  451 + <group/>
  452 + </field>
  453 + <field>
  454 + <name>&#x662f;&#x5426;&#x6709;LED&#x670d;&#x52a1;&#x5c4f;</name>
  455 + <type>String</type>
  456 + <length>-1</length>
  457 + <precision>-1</precision>
  458 + <trim_type>none</trim_type>
  459 + <repeat>N</repeat>
  460 + <format/>
  461 + <currency/>
  462 + <decimal/>
  463 + <group/>
  464 + </field>
  465 + <field>
  466 + <name>&#x8fd0;&#x8425;&#x72b6;&#x6001;</name>
  467 + <type>String</type>
  468 + <length>-1</length>
  469 + <precision>-1</precision>
  470 + <trim_type>none</trim_type>
  471 + <repeat>N</repeat>
  472 + <format/>
  473 + <currency/>
  474 + <decimal/>
  475 + <group/>
  476 + </field>
  477 + <field>
  478 + <name>&#x542f;&#x7528;&#x65e5;&#x671f;</name>
  479 + <type>String</type>
  480 + <length>-1</length>
  481 + <precision>-1</precision>
  482 + <trim_type>none</trim_type>
  483 + <repeat>N</repeat>
  484 + <format/>
  485 + <currency/>
  486 + <decimal/>
  487 + <group/>
  488 + </field>
  489 + <field>
  490 + <name>&#x53d6;&#x6d88;&#x65e5;&#x671f;</name>
  491 + <type>String</type>
  492 + <length>-1</length>
  493 + <precision>-1</precision>
  494 + <trim_type>none</trim_type>
  495 + <repeat>N</repeat>
  496 + <format/>
  497 + <currency/>
  498 + <decimal/>
  499 + <group/>
  500 + </field>
  501 + <field>
  502 + <name>&#x62a5;&#x5e9f;&#x53f7;</name>
  503 + <type>String</type>
  504 + <length>-1</length>
  505 + <precision>-1</precision>
  506 + <trim_type>none</trim_type>
  507 + <repeat>N</repeat>
  508 + <format/>
  509 + <currency/>
  510 + <decimal/>
  511 + <group/>
  512 + </field>
  513 + <field>
  514 + <name>&#x62a5;&#x5e9f;&#x65e5;&#x671f;</name>
  515 + <type>String</type>
  516 + <length>-1</length>
  517 + <precision>-1</precision>
  518 + <trim_type>none</trim_type>
  519 + <repeat>N</repeat>
  520 + <format/>
  521 + <currency/>
  522 + <decimal/>
  523 + <group/>
  524 + </field>
  525 + <field>
  526 + <name>&#x5907;&#x6ce8;</name>
  527 + <type>String</type>
  528 + <length>-1</length>
  529 + <precision>-1</precision>
  530 + <trim_type>none</trim_type>
  531 + <repeat>N</repeat>
  532 + <format/>
  533 + <currency/>
  534 + <decimal/>
  535 + <group/>
  536 + </field>
  537 + <field>
  538 + <name>&#x8bbe;&#x5907;&#x7f16;&#x53f7;</name>
  539 + <type>String</type>
  540 + <length>-1</length>
  541 + <precision>-1</precision>
  542 + <trim_type>none</trim_type>
  543 + <repeat>N</repeat>
  544 + <format/>
  545 + <currency/>
  546 + <decimal/>
  547 + <group/>
  548 + </field>
  549 + <field>
  550 + <name>&#x5382;&#x724c;&#x578b;&#x53f7;</name>
  551 + <type>String</type>
  552 + <length>-1</length>
  553 + <precision>-1</precision>
  554 + <trim_type>none</trim_type>
  555 + <repeat>N</repeat>
  556 + <format/>
  557 + <currency/>
  558 + <decimal/>
  559 + <group/>
  560 + </field>
  561 + <field>
  562 + <name>&#x5382;&#x724c;&#x578b;&#x53f7;2</name>
  563 + <type>String</type>
  564 + <length>-1</length>
  565 + <precision>-1</precision>
  566 + <trim_type>none</trim_type>
  567 + <repeat>N</repeat>
  568 + <format/>
  569 + <currency/>
  570 + <decimal/>
  571 + <group/>
  572 + </field>
  573 + <field>
  574 + <name>&#x8f66;&#x8f86;&#x7b49;&#x7ea7;&#x6807;&#x51c6;</name>
  575 + <type>String</type>
  576 + <length>-1</length>
  577 + <precision>-1</precision>
  578 + <trim_type>none</trim_type>
  579 + <repeat>N</repeat>
  580 + <format/>
  581 + <currency/>
  582 + <decimal/>
  583 + <group/>
  584 + </field>
  585 + <field>
  586 + <name>&#x51fa;&#x5382;&#x6392;&#x653e;&#x6807;&#x51c6;</name>
  587 + <type>String</type>
  588 + <length>-1</length>
  589 + <precision>-1</precision>
  590 + <trim_type>none</trim_type>
  591 + <repeat>N</repeat>
  592 + <format/>
  593 + <currency/>
  594 + <decimal/>
  595 + <group/>
  596 + </field>
  597 + <field>
  598 + <name>&#x53d1;&#x52a8;&#x673a;&#x53f7;&#x7801;1</name>
  599 + <type>String</type>
  600 + <length>-1</length>
  601 + <precision>-1</precision>
  602 + <trim_type>none</trim_type>
  603 + <repeat>N</repeat>
  604 + <format/>
  605 + <currency/>
  606 + <decimal/>
  607 + <group/>
  608 + </field>
  609 + <field>
  610 + <name>&#x53d1;&#x52a8;&#x673a;&#x53f7;&#x7801;2</name>
  611 + <type>String</type>
  612 + <length>-1</length>
  613 + <precision>-1</precision>
  614 + <trim_type>none</trim_type>
  615 + <repeat>N</repeat>
  616 + <format/>
  617 + <currency/>
  618 + <decimal/>
  619 + <group/>
  620 + </field>
  621 + <field>
  622 + <name>&#x8f66;&#x67b6;&#x53f7;&#x7801;1</name>
  623 + <type>String</type>
  624 + <length>-1</length>
  625 + <precision>-1</precision>
  626 + <trim_type>none</trim_type>
  627 + <repeat>N</repeat>
  628 + <format/>
  629 + <currency/>
  630 + <decimal/>
  631 + <group/>
  632 + </field>
  633 + <field>
  634 + <name>&#x8f66;&#x67b6;&#x53f7;&#x7801;2</name>
  635 + <type>String</type>
  636 + <length>-1</length>
  637 + <precision>-1</precision>
  638 + <trim_type>none</trim_type>
  639 + <repeat>N</repeat>
  640 + <format/>
  641 + <currency/>
  642 + <decimal/>
  643 + <group/>
  644 + </field>
  645 + <field>
  646 + <name>&#x8f66;&#x8f86;&#x7c7b;&#x578b;</name>
  647 + <type>String</type>
  648 + <length>-1</length>
  649 + <precision>-1</precision>
  650 + <trim_type>none</trim_type>
  651 + <repeat>N</repeat>
  652 + <format/>
  653 + <currency/>
  654 + <decimal/>
  655 + <group/>
  656 + </field>
  657 + <field>
  658 + <name>&#x6240;&#x5c5e;&#x516c;&#x53f8;</name>
  659 + <type>String</type>
  660 + <length>-1</length>
  661 + <precision>-1</precision>
  662 + <trim_type>none</trim_type>
  663 + <repeat>N</repeat>
  664 + <format/>
  665 + <currency/>
  666 + <decimal/>
  667 + <group/>
  668 + </field>
  669 + <field>
  670 + <name>&#x4fee;&#x6539;&#x65e5;&#x671f;</name>
  671 + <type>String</type>
  672 + <length>-1</length>
  673 + <precision>-1</precision>
  674 + <trim_type>none</trim_type>
  675 + <repeat>N</repeat>
  676 + <format/>
  677 + <currency/>
  678 + <decimal/>
  679 + <group/>
  680 + </field>
  681 + <field>
  682 + <name>&#x662f;&#x5426;&#x673a;&#x52a8;&#x8f66;</name>
  683 + <type>String</type>
  684 + <length>-1</length>
  685 + <precision>-1</precision>
  686 + <trim_type>none</trim_type>
  687 + <repeat>N</repeat>
  688 + <format/>
  689 + <currency/>
  690 + <decimal/>
  691 + <group/>
  692 + </field>
  693 + <field>
  694 + <name>&#x89c6;&#x9891;&#x7f16;&#x53f7;</name>
  695 + <type>String</type>
  696 + <length>-1</length>
  697 + <precision>-1</precision>
  698 + <trim_type>none</trim_type>
  699 + <repeat>N</repeat>
  700 + <format/>
  701 + <currency/>
  702 + <decimal/>
  703 + <group/>
  704 + </field>
  705 + <field>
  706 + <name>&#x8bbe;&#x5907;&#x4f9b;&#x5e94;&#x5382;&#x5546;</name>
  707 + <type>String</type>
  708 + <length>-1</length>
  709 + <precision>-1</precision>
  710 + <trim_type>none</trim_type>
  711 + <repeat>N</repeat>
  712 + <format/>
  713 + <currency/>
  714 + <decimal/>
  715 + <group/>
  716 + </field>
  717 + <field>
  718 + <name>&#x5206;&#x516c;&#x53f8;</name>
  719 + <type>String</type>
  720 + <length>-1</length>
  721 + <precision>-1</precision>
  722 + <trim_type>none</trim_type>
  723 + <repeat>N</repeat>
  724 + <format/>
  725 + <currency/>
  726 + <decimal/>
  727 + <group/>
  728 + </field>
  729 + </fields>
  730 + <sheets>
  731 + <sheet>
  732 + <name>&#x5de5;&#x4f5c;&#x8868;1</name>
  733 + <startrow>0</startrow>
  734 + <startcol>0</startcol>
  735 + </sheet>
  736 + </sheets>
  737 + <strict_types>N</strict_types>
  738 + <error_ignored>N</error_ignored>
  739 + <error_line_skipped>N</error_line_skipped>
  740 + <bad_line_files_destination_directory/>
  741 + <bad_line_files_extension>warning</bad_line_files_extension>
  742 + <error_line_files_destination_directory/>
  743 + <error_line_files_extension>error</error_line_files_extension>
  744 + <line_number_files_destination_directory/>
  745 + <line_number_files_extension>line</line_number_files_extension>
  746 + <shortFileFieldName/>
  747 + <pathFieldName/>
  748 + <hiddenFieldName/>
  749 + <lastModificationTimeFieldName/>
  750 + <uriNameFieldName/>
  751 + <rootUriNameFieldName/>
  752 + <extensionFieldName/>
  753 + <sizeFieldName/>
  754 + <spreadsheet_type>JXL</spreadsheet_type>
  755 + <cluster_schema/>
  756 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  757 + <xloc>131</xloc>
  758 + <yloc>58</yloc>
  759 + <draw>Y</draw>
  760 + </GUI>
  761 + </step>
  762 +
  763 + <step>
  764 + <name>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</name>
  765 + <type>SelectValues</type>
  766 + <description/>
  767 + <distribute>Y</distribute>
  768 + <custom_distribution/>
  769 + <copies>1</copies>
  770 + <partitioning>
  771 + <method>none</method>
  772 + <schema_name/>
  773 + </partitioning>
  774 + <fields> <field> <name>&#x5185;&#x90e8;&#x7f16;&#x7801;</name>
  775 + <rename>insideCode</rename>
  776 + <length>-2</length>
  777 + <precision>-2</precision>
  778 + </field> <field> <name>&#x8f66;&#x8f86;&#x7f16;&#x7801;</name>
  779 + <rename>carCode</rename>
  780 + <length>-2</length>
  781 + <precision>-2</precision>
  782 + </field> <field> <name>&#x6240;&#x5c5e;&#x516c;&#x53f8;</name>
  783 + <rename>company</rename>
  784 + <length>-2</length>
  785 + <precision>-2</precision>
  786 + </field> <field> <name>&#x5206;&#x516c;&#x53f8;</name>
  787 + <rename>brancheCompany</rename>
  788 + <length>-2</length>
  789 + <precision>-2</precision>
  790 + </field> <field> <name>&#x8f66;&#x724c;&#x53f7;</name>
  791 + <rename>carPlate</rename>
  792 + <length>-2</length>
  793 + <precision>-2</precision>
  794 + </field> <field> <name>&#x8bbe;&#x5907;&#x4f9b;&#x5e94;&#x5382;&#x5546;</name>
  795 + <rename>supplierName</rename>
  796 + <length>-2</length>
  797 + <precision>-2</precision>
  798 + </field> <field> <name>&#x8bbe;&#x5907;&#x7f16;&#x53f7;</name>
  799 + <rename>equipmentCode</rename>
  800 + <length>-2</length>
  801 + <precision>-2</precision>
  802 + </field> <field> <name>&#x8f66;&#x578b;&#x7c7b;&#x522b;</name>
  803 + <rename>carClass</rename>
  804 + <length>-2</length>
  805 + <precision>-2</precision>
  806 + </field> <field> <name>&#x6280;&#x672f;&#x901f;&#x5ea6;</name>
  807 + <rename>speed</rename>
  808 + <length>-2</length>
  809 + <precision>-2</precision>
  810 + </field> <field> <name>&#x5ea7;&#x4f4d;&#x6570;</name>
  811 + <rename>carSeatnNumber</rename>
  812 + <length>-2</length>
  813 + <precision>-2</precision>
  814 + </field> <field> <name>&#x8f7d;&#x5ba2;&#x6807;&#x51c6;</name>
  815 + <rename>carStandard</rename>
  816 + <length>-2</length>
  817 + <precision>-2</precision>
  818 + </field> <field> <name>&#x6807;&#x51c6;&#x6cb9;&#x8017;&#x28;&#x5f00;&#x7a7a;&#x8c03;&#x29;</name>
  819 + <rename>kburnStandard</rename>
  820 + <length>-2</length>
  821 + <precision>-2</precision>
  822 + </field> <field> <name>&#x6807;&#x51c6;&#x6cb9;&#x8017;&#x28;&#x5173;&#x7a7a;&#x8c03;&#x29;</name>
  823 + <rename>gburnStandard</rename>
  824 + <length>-2</length>
  825 + <precision>-2</precision>
  826 + </field> <field> <name>&#x62a5;&#x5e9f;&#x53f7;</name>
  827 + <rename>scrapCode</rename>
  828 + <length>-2</length>
  829 + <precision>-2</precision>
  830 + </field> <field> <name>&#x5382;&#x724c;&#x578b;&#x53f7;</name>
  831 + <rename>makeCodeOne</rename>
  832 + <length>-2</length>
  833 + <precision>-2</precision>
  834 + </field> <field> <name>&#x5382;&#x724c;&#x578b;&#x53f7;2</name>
  835 + <rename>makeCodeTwo</rename>
  836 + <length>-2</length>
  837 + <precision>-2</precision>
  838 + </field> <field> <name>&#x8f66;&#x8f86;&#x7b49;&#x7ea7;&#x6807;&#x51c6;</name>
  839 + <rename>carGride</rename>
  840 + <length>-2</length>
  841 + <precision>-2</precision>
  842 + </field> <field> <name>&#x51fa;&#x5382;&#x6392;&#x653e;&#x6807;&#x51c6;</name>
  843 + <rename>emissionsStandard</rename>
  844 + <length>-2</length>
  845 + <precision>-2</precision>
  846 + </field> <field> <name>&#x53d1;&#x52a8;&#x673a;&#x53f7;&#x7801;1</name>
  847 + <rename>engineCodeOne</rename>
  848 + <length>-2</length>
  849 + <precision>-2</precision>
  850 + </field> <field> <name>&#x53d1;&#x52a8;&#x673a;&#x53f7;&#x7801;2</name>
  851 + <rename>engineCodeTwo</rename>
  852 + <length>-2</length>
  853 + <precision>-2</precision>
  854 + </field> <field> <name>&#x8f66;&#x67b6;&#x53f7;&#x7801;1</name>
  855 + <rename>carNumberOne</rename>
  856 + <length>-2</length>
  857 + <precision>-2</precision>
  858 + </field> <field> <name>&#x8f66;&#x67b6;&#x53f7;&#x7801;2</name>
  859 + <rename>carNumberTwo</rename>
  860 + <length>-2</length>
  861 + <precision>-2</precision>
  862 + </field> <field> <name>&#x542f;&#x7528;&#x65e5;&#x671f;</name>
  863 + <rename>openDate</rename>
  864 + <length>-2</length>
  865 + <precision>-2</precision>
  866 + </field> <field> <name>&#x53d6;&#x6d88;&#x65e5;&#x671f;</name>
  867 + <rename>closeDate</rename>
  868 + <length>-2</length>
  869 + <precision>-2</precision>
  870 + </field> <field> <name>&#x662f;&#x5426;&#x7a7a;&#x8c03;</name>
  871 + <rename>hvacCar</rename>
  872 + <length>-2</length>
  873 + <precision>-2</precision>
  874 + </field> <field> <name>&#x6709;&#x65e0;&#x4eba;&#x552e;&#x7968;</name>
  875 + <rename>ticketType</rename>
  876 + <length>-2</length>
  877 + <precision>-2</precision>
  878 + </field> <field> <name>&#x662f;&#x5426;&#x6709;LED&#x670d;&#x52a1;&#x5c4f;</name>
  879 + <rename>ledScreen</rename>
  880 + <length>-2</length>
  881 + <precision>-2</precision>
  882 + </field> <field> <name>&#x662f;&#x5426;&#x6709;TV&#x89c6;&#x9891;</name>
  883 + <rename>tvVideoType</rename>
  884 + <length>-2</length>
  885 + <precision>-2</precision>
  886 + </field> <field> <name>&#x8f66;&#x8f86;&#x7c7b;&#x578b;</name>
  887 + <rename>carType</rename>
  888 + <length>-2</length>
  889 + <precision>-2</precision>
  890 + </field> <field> <name>&#x662f;&#x5426;&#x673a;&#x52a8;&#x8f66;</name>
  891 + <rename>vehicleStats</rename>
  892 + <length>-2</length>
  893 + <precision>-2</precision>
  894 + </field> <field> <name>&#x8fd0;&#x8425;&#x72b6;&#x6001;</name>
  895 + <rename>operatorsState</rename>
  896 + <length>-2</length>
  897 + <precision>-2</precision>
  898 + </field> <field> <name>&#x5907;&#x6ce8;</name>
  899 + <rename>descriptions</rename>
  900 + <length>-2</length>
  901 + <precision>-2</precision>
  902 + </field> <field> <name>&#x89c6;&#x9891;&#x7f16;&#x53f7;</name>
  903 + <rename>videoCode</rename>
  904 + <length>-2</length>
  905 + <precision>-2</precision>
  906 + </field> <select_unspecified>Y</select_unspecified>
  907 + </fields> <cluster_schema/>
  908 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  909 + <xloc>279</xloc>
  910 + <yloc>59</yloc>
  911 + <draw>Y</draw>
  912 + </GUI>
  913 + </step>
  914 +
  915 + <step>
  916 + <name>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_cars</name>
  917 + <type>InsertUpdate</type>
  918 + <description/>
  919 + <distribute>Y</distribute>
  920 + <custom_distribution/>
  921 + <copies>1</copies>
  922 + <partitioning>
  923 + <method>none</method>
  924 + <schema_name/>
  925 + </partitioning>
  926 + <connection>bus_control_&#x516c;&#x53f8;_201</connection>
  927 + <commit>1000</commit>
  928 + <update_bypassed>N</update_bypassed>
  929 + <lookup>
  930 + <schema/>
  931 + <table>bsth_c_cars</table>
  932 + <key>
  933 + <name>insideCode</name>
  934 + <field>inside_code</field>
  935 + <condition>&#x3d;</condition>
  936 + <name2/>
  937 + </key>
  938 + <value>
  939 + <name>inside_code</name>
  940 + <rename>insideCode</rename>
  941 + <update>Y</update>
  942 + </value>
  943 + <value>
  944 + <name>company</name>
  945 + <rename>company</rename>
  946 + <update>Y</update>
  947 + </value>
  948 + <value>
  949 + <name>branche_company</name>
  950 + <rename>brancheCompany</rename>
  951 + <update>Y</update>
  952 + </value>
  953 + <value>
  954 + <name>car_plate</name>
  955 + <rename>carPlate</rename>
  956 + <update>Y</update>
  957 + </value>
  958 + <value>
  959 + <name>supplier_name</name>
  960 + <rename>supplierName</rename>
  961 + <update>Y</update>
  962 + </value>
  963 + <value>
  964 + <name>equipment_code</name>
  965 + <rename>equipmentCode</rename>
  966 + <update>Y</update>
  967 + </value>
  968 + <value>
  969 + <name>car_class</name>
  970 + <rename>carClass</rename>
  971 + <update>Y</update>
  972 + </value>
  973 + <value>
  974 + <name>speed</name>
  975 + <rename>speed</rename>
  976 + <update>Y</update>
  977 + </value>
  978 + <value>
  979 + <name>car_seatn_number</name>
  980 + <rename>carSeatnNumber</rename>
  981 + <update>Y</update>
  982 + </value>
  983 + <value>
  984 + <name>car_standard</name>
  985 + <rename>carStandard</rename>
  986 + <update>Y</update>
  987 + </value>
  988 + <value>
  989 + <name>car_code</name>
  990 + <rename>carCode</rename>
  991 + <update>Y</update>
  992 + </value>
  993 + <value>
  994 + <name>kburn_standard</name>
  995 + <rename>kburnStandard</rename>
  996 + <update>Y</update>
  997 + </value>
  998 + <value>
  999 + <name>gburn_standard</name>
  1000 + <rename>gburnStandard</rename>
  1001 + <update>Y</update>
  1002 + </value>
  1003 + <value>
  1004 + <name>scrap_code</name>
  1005 + <rename>scrapCode</rename>
  1006 + <update>Y</update>
  1007 + </value>
  1008 + <value>
  1009 + <name>make_code_one</name>
  1010 + <rename>makeCodeOne</rename>
  1011 + <update>Y</update>
  1012 + </value>
  1013 + <value>
  1014 + <name>make_code_two</name>
  1015 + <rename>makeCodeTwo</rename>
  1016 + <update>Y</update>
  1017 + </value>
  1018 + <value>
  1019 + <name>car_gride</name>
  1020 + <rename>carGride</rename>
  1021 + <update>Y</update>
  1022 + </value>
  1023 + <value>
  1024 + <name>emissions_standard</name>
  1025 + <rename>emissionsStandard</rename>
  1026 + <update>Y</update>
  1027 + </value>
  1028 + <value>
  1029 + <name>engine_code_one</name>
  1030 + <rename>engineCodeOne</rename>
  1031 + <update>Y</update>
  1032 + </value>
  1033 + <value>
  1034 + <name>engine_code_two</name>
  1035 + <rename>engineCodeTwo</rename>
  1036 + <update>Y</update>
  1037 + </value>
  1038 + <value>
  1039 + <name>car_number_one</name>
  1040 + <rename>carNumberOne</rename>
  1041 + <update>Y</update>
  1042 + </value>
  1043 + <value>
  1044 + <name>car_number_two</name>
  1045 + <rename>carNumberTwo</rename>
  1046 + <update>Y</update>
  1047 + </value>
  1048 + <value>
  1049 + <name>open_date</name>
  1050 + <rename>openDate</rename>
  1051 + <update>Y</update>
  1052 + </value>
  1053 + <value>
  1054 + <name>close_date</name>
  1055 + <rename>closeDate</rename>
  1056 + <update>Y</update>
  1057 + </value>
  1058 + <value>
  1059 + <name>hvac_car</name>
  1060 + <rename>hvacCar</rename>
  1061 + <update>Y</update>
  1062 + </value>
  1063 + <value>
  1064 + <name>ticket_type</name>
  1065 + <rename>ticketType</rename>
  1066 + <update>Y</update>
  1067 + </value>
  1068 + <value>
  1069 + <name>led_screen</name>
  1070 + <rename>ledScreen</rename>
  1071 + <update>Y</update>
  1072 + </value>
  1073 + <value>
  1074 + <name>tv_video_type</name>
  1075 + <rename>tvVideoType</rename>
  1076 + <update>Y</update>
  1077 + </value>
  1078 + <value>
  1079 + <name>car_type</name>
  1080 + <rename>carType</rename>
  1081 + <update>Y</update>
  1082 + </value>
  1083 + <value>
  1084 + <name>vehicle_stats</name>
  1085 + <rename>vehicleStats</rename>
  1086 + <update>Y</update>
  1087 + </value>
  1088 + <value>
  1089 + <name>operators_state</name>
  1090 + <rename>operatorsState</rename>
  1091 + <update>Y</update>
  1092 + </value>
  1093 + <value>
  1094 + <name>descriptions</name>
  1095 + <rename>descriptions</rename>
  1096 + <update>Y</update>
  1097 + </value>
  1098 + <value>
  1099 + <name>video_code</name>
  1100 + <rename>videoCode</rename>
  1101 + <update>Y</update>
  1102 + </value>
  1103 + <value>
  1104 + <name>business_code</name>
  1105 + <rename>businessCode</rename>
  1106 + <update>Y</update>
  1107 + </value>
  1108 + </lookup>
  1109 + <cluster_schema/>
  1110 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1111 + <xloc>842</xloc>
  1112 + <yloc>319</yloc>
  1113 + <draw>Y</draw>
  1114 + </GUI>
  1115 + </step>
  1116 +
  1117 + <step>
  1118 + <name>&#x662f;&#x5426;&#x6709;LED&#x670d;&#x52a1;&#x5c4f;</name>
  1119 + <type>ValueMapper</type>
  1120 + <description/>
  1121 + <distribute>Y</distribute>
  1122 + <custom_distribution/>
  1123 + <copies>1</copies>
  1124 + <partitioning>
  1125 + <method>none</method>
  1126 + <schema_name/>
  1127 + </partitioning>
  1128 + <field_to_use>ledScreen</field_to_use>
  1129 + <target_field/>
  1130 + <non_match_default/>
  1131 + <fields>
  1132 + <field>
  1133 + <source_value>&#x662f;</source_value>
  1134 + <target_value>1</target_value>
  1135 + </field>
  1136 + <field>
  1137 + <source_value>&#x5426;</source_value>
  1138 + <target_value>0</target_value>
  1139 + </field>
  1140 + </fields>
  1141 + <cluster_schema/>
  1142 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1143 + <xloc>590</xloc>
  1144 + <yloc>61</yloc>
  1145 + <draw>Y</draw>
  1146 + </GUI>
  1147 + </step>
  1148 +
  1149 + <step>
  1150 + <name>&#x662f;&#x5426;&#x6709;TV&#x89c6;&#x9891;</name>
  1151 + <type>ValueMapper</type>
  1152 + <description/>
  1153 + <distribute>Y</distribute>
  1154 + <custom_distribution/>
  1155 + <copies>1</copies>
  1156 + <partitioning>
  1157 + <method>none</method>
  1158 + <schema_name/>
  1159 + </partitioning>
  1160 + <field_to_use>tvVideoType</field_to_use>
  1161 + <target_field/>
  1162 + <non_match_default/>
  1163 + <fields>
  1164 + <field>
  1165 + <source_value>&#x662f;</source_value>
  1166 + <target_value>1</target_value>
  1167 + </field>
  1168 + <field>
  1169 + <source_value>&#x5426;</source_value>
  1170 + <target_value>0</target_value>
  1171 + </field>
  1172 + </fields>
  1173 + <cluster_schema/>
  1174 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1175 + <xloc>706</xloc>
  1176 + <yloc>61</yloc>
  1177 + <draw>Y</draw>
  1178 + </GUI>
  1179 + </step>
  1180 +
  1181 + <step>
  1182 + <name>&#x662f;&#x5426;&#x7684;&#x53d8;&#x6210;&#x6570;&#x5b57;&#x578b;</name>
  1183 + <type>SelectValues</type>
  1184 + <description/>
  1185 + <distribute>Y</distribute>
  1186 + <custom_distribution/>
  1187 + <copies>1</copies>
  1188 + <partitioning>
  1189 + <method>none</method>
  1190 + <schema_name/>
  1191 + </partitioning>
  1192 + <fields> <select_unspecified>N</select_unspecified>
  1193 + <meta> <name>hvacCar</name>
  1194 + <rename>hvacCar</rename>
  1195 + <type>Integer</type>
  1196 + <length>1</length>
  1197 + <precision>-2</precision>
  1198 + <conversion_mask/>
  1199 + <date_format_lenient>false</date_format_lenient>
  1200 + <date_format_locale/>
  1201 + <date_format_timezone/>
  1202 + <lenient_string_to_number>false</lenient_string_to_number>
  1203 + <encoding/>
  1204 + <decimal_symbol/>
  1205 + <grouping_symbol/>
  1206 + <currency_symbol/>
  1207 + <storage_type/>
  1208 + </meta> <meta> <name>ticketType</name>
  1209 + <rename>ticketType</rename>
  1210 + <type>Integer</type>
  1211 + <length>1</length>
  1212 + <precision>-2</precision>
  1213 + <conversion_mask/>
  1214 + <date_format_lenient>false</date_format_lenient>
  1215 + <date_format_locale/>
  1216 + <date_format_timezone/>
  1217 + <lenient_string_to_number>false</lenient_string_to_number>
  1218 + <encoding/>
  1219 + <decimal_symbol/>
  1220 + <grouping_symbol/>
  1221 + <currency_symbol/>
  1222 + <storage_type/>
  1223 + </meta> <meta> <name>ledScreen</name>
  1224 + <rename>ledScreen</rename>
  1225 + <type>Integer</type>
  1226 + <length>1</length>
  1227 + <precision>-2</precision>
  1228 + <conversion_mask/>
  1229 + <date_format_lenient>false</date_format_lenient>
  1230 + <date_format_locale/>
  1231 + <date_format_timezone/>
  1232 + <lenient_string_to_number>false</lenient_string_to_number>
  1233 + <encoding/>
  1234 + <decimal_symbol/>
  1235 + <grouping_symbol/>
  1236 + <currency_symbol/>
  1237 + <storage_type/>
  1238 + </meta> <meta> <name>tvVideoType</name>
  1239 + <rename>tvVideoType</rename>
  1240 + <type>Integer</type>
  1241 + <length>1</length>
  1242 + <precision>-2</precision>
  1243 + <conversion_mask/>
  1244 + <date_format_lenient>false</date_format_lenient>
  1245 + <date_format_locale/>
  1246 + <date_format_timezone/>
  1247 + <lenient_string_to_number>false</lenient_string_to_number>
  1248 + <encoding/>
  1249 + <decimal_symbol/>
  1250 + <grouping_symbol/>
  1251 + <currency_symbol/>
  1252 + <storage_type/>
  1253 + </meta> </fields> <cluster_schema/>
  1254 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1255 + <xloc>839</xloc>
  1256 + <yloc>61</yloc>
  1257 + <draw>Y</draw>
  1258 + </GUI>
  1259 + </step>
  1260 +
  1261 + <step>
  1262 + <name>&#x662f;&#x5426;&#x7a7a;&#x8c03;&#x8f66;</name>
  1263 + <type>ValueMapper</type>
  1264 + <description/>
  1265 + <distribute>Y</distribute>
  1266 + <custom_distribution/>
  1267 + <copies>1</copies>
  1268 + <partitioning>
  1269 + <method>none</method>
  1270 + <schema_name/>
  1271 + </partitioning>
  1272 + <field_to_use>hvacCar</field_to_use>
  1273 + <target_field/>
  1274 + <non_match_default/>
  1275 + <fields>
  1276 + <field>
  1277 + <source_value>&#x662f;</source_value>
  1278 + <target_value>1</target_value>
  1279 + </field>
  1280 + <field>
  1281 + <source_value>&#x5426;</source_value>
  1282 + <target_value>0</target_value>
  1283 + </field>
  1284 + </fields>
  1285 + <cluster_schema/>
  1286 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1287 + <xloc>388</xloc>
  1288 + <yloc>61</yloc>
  1289 + <draw>Y</draw>
  1290 + </GUI>
  1291 + </step>
  1292 +
  1293 + <step>
  1294 + <name>&#x6709;&#x65e0;&#x4eba;&#x552e;&#x7968;</name>
  1295 + <type>ValueMapper</type>
  1296 + <description/>
  1297 + <distribute>Y</distribute>
  1298 + <custom_distribution/>
  1299 + <copies>1</copies>
  1300 + <partitioning>
  1301 + <method>none</method>
  1302 + <schema_name/>
  1303 + </partitioning>
  1304 + <field_to_use>ticketType</field_to_use>
  1305 + <target_field/>
  1306 + <non_match_default/>
  1307 + <fields>
  1308 + <field>
  1309 + <source_value>&#x662f;</source_value>
  1310 + <target_value>1</target_value>
  1311 + </field>
  1312 + <field>
  1313 + <source_value>&#x5426;</source_value>
  1314 + <target_value>0</target_value>
  1315 + </field>
  1316 + </fields>
  1317 + <cluster_schema/>
  1318 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1319 + <xloc>485</xloc>
  1320 + <yloc>61</yloc>
  1321 + <draw>Y</draw>
  1322 + </GUI>
  1323 + </step>
  1324 +
  1325 + <step>
  1326 + <name>&#x9519;&#x8bef;&#x8f93;&#x51fa;</name>
  1327 + <type>ExcelOutput</type>
  1328 + <description/>
  1329 + <distribute>Y</distribute>
  1330 + <custom_distribution/>
  1331 + <copies>1</copies>
  1332 + <partitioning>
  1333 + <method>none</method>
  1334 + <schema_name/>
  1335 + </partitioning>
  1336 + <header>Y</header>
  1337 + <footer>N</footer>
  1338 + <encoding/>
  1339 + <append>N</append>
  1340 + <add_to_result_filenames>Y</add_to_result_filenames>
  1341 + <file>
  1342 + <name>&#x24;&#x7b;erroroutputdir&#x7d;&#x2f;&#x8f66;&#x8f86;&#x57fa;&#x7840;&#x4fe1;&#x606f;_&#x9519;&#x8bef;</name>
  1343 + <extention>xls</extention>
  1344 + <do_not_open_newfile_init>N</do_not_open_newfile_init>
  1345 + <create_parent_folder>N</create_parent_folder>
  1346 + <split>N</split>
  1347 + <add_date>N</add_date>
  1348 + <add_time>N</add_time>
  1349 + <SpecifyFormat>N</SpecifyFormat>
  1350 + <date_time_format/>
  1351 + <sheetname>Sheet1</sheetname>
  1352 + <autosizecolums>N</autosizecolums>
  1353 + <nullisblank>N</nullisblank>
  1354 + <protect_sheet>N</protect_sheet>
  1355 + <password>Encrypted </password>
  1356 + <splitevery>0</splitevery>
  1357 + <usetempfiles>N</usetempfiles>
  1358 + <tempdirectory/>
  1359 + </file>
  1360 + <template>
  1361 + <enabled>N</enabled>
  1362 + <append>N</append>
  1363 + <filename>template.xls</filename>
  1364 + </template>
  1365 + <fields>
  1366 + <field>
  1367 + <name>insideCode</name>
  1368 + <type>String</type>
  1369 + <format/>
  1370 + </field>
  1371 + <field>
  1372 + <name>company</name>
  1373 + <type>String</type>
  1374 + <format/>
  1375 + </field>
  1376 + <field>
  1377 + <name>brancheCompany</name>
  1378 + <type>String</type>
  1379 + <format/>
  1380 + </field>
  1381 + <field>
  1382 + <name>carPlate</name>
  1383 + <type>String</type>
  1384 + <format/>
  1385 + </field>
  1386 + <field>
  1387 + <name>supplierName</name>
  1388 + <type>String</type>
  1389 + <format/>
  1390 + </field>
  1391 + <field>
  1392 + <name>equipmentCode</name>
  1393 + <type>String</type>
  1394 + <format/>
  1395 + </field>
  1396 + <field>
  1397 + <name>carClass</name>
  1398 + <type>String</type>
  1399 + <format/>
  1400 + </field>
  1401 + <field>
  1402 + <name>speed</name>
  1403 + <type>String</type>
  1404 + <format/>
  1405 + </field>
  1406 + <field>
  1407 + <name>carSeatnNumber</name>
  1408 + <type>String</type>
  1409 + <format/>
  1410 + </field>
  1411 + <field>
  1412 + <name>carStandard</name>
  1413 + <type>String</type>
  1414 + <format/>
  1415 + </field>
  1416 + <field>
  1417 + <name>kburnStandard</name>
  1418 + <type>String</type>
  1419 + <format/>
  1420 + </field>
  1421 + <field>
  1422 + <name>gburnStandard</name>
  1423 + <type>String</type>
  1424 + <format/>
  1425 + </field>
  1426 + <field>
  1427 + <name>scrapCode</name>
  1428 + <type>String</type>
  1429 + <format/>
  1430 + </field>
  1431 + <field>
  1432 + <name>makeCodeOne</name>
  1433 + <type>String</type>
  1434 + <format/>
  1435 + </field>
  1436 + <field>
  1437 + <name>makeCodeTwo</name>
  1438 + <type>String</type>
  1439 + <format/>
  1440 + </field>
  1441 + <field>
  1442 + <name>carGride</name>
  1443 + <type>String</type>
  1444 + <format/>
  1445 + </field>
  1446 + <field>
  1447 + <name>emissionsStandard</name>
  1448 + <type>String</type>
  1449 + <format/>
  1450 + </field>
  1451 + <field>
  1452 + <name>engineCodeOne</name>
  1453 + <type>String</type>
  1454 + <format/>
  1455 + </field>
  1456 + <field>
  1457 + <name>engineCodeTwo</name>
  1458 + <type>String</type>
  1459 + <format/>
  1460 + </field>
  1461 + <field>
  1462 + <name>carNumberOne</name>
  1463 + <type>String</type>
  1464 + <format/>
  1465 + </field>
  1466 + <field>
  1467 + <name>carNumberTwo</name>
  1468 + <type>String</type>
  1469 + <format/>
  1470 + </field>
  1471 + <field>
  1472 + <name>openDate</name>
  1473 + <type>String</type>
  1474 + <format/>
  1475 + </field>
  1476 + <field>
  1477 + <name>closeDate</name>
  1478 + <type>String</type>
  1479 + <format/>
  1480 + </field>
  1481 + <field>
  1482 + <name>hvacCar</name>
  1483 + <type>Integer</type>
  1484 + <format/>
  1485 + </field>
  1486 + <field>
  1487 + <name>ticketType</name>
  1488 + <type>Integer</type>
  1489 + <format/>
  1490 + </field>
  1491 + <field>
  1492 + <name>ledScreen</name>
  1493 + <type>Integer</type>
  1494 + <format/>
  1495 + </field>
  1496 + <field>
  1497 + <name>tvVideoType</name>
  1498 + <type>Integer</type>
  1499 + <format/>
  1500 + </field>
  1501 + <field>
  1502 + <name>carType</name>
  1503 + <type>String</type>
  1504 + <format/>
  1505 + </field>
  1506 + <field>
  1507 + <name>vehicleStats</name>
  1508 + <type>String</type>
  1509 + <format/>
  1510 + </field>
  1511 + <field>
  1512 + <name>operatorsState</name>
  1513 + <type>String</type>
  1514 + <format/>
  1515 + </field>
  1516 + <field>
  1517 + <name>descriptions</name>
  1518 + <type>String</type>
  1519 + <format/>
  1520 + </field>
  1521 + <field>
  1522 + <name>videoCode</name>
  1523 + <type>String</type>
  1524 + <format/>
  1525 + </field>
  1526 + <field>
  1527 + <name>businessCode</name>
  1528 + <type>String</type>
  1529 + <format/>
  1530 + </field>
  1531 + <field>
  1532 + <name>carCode</name>
  1533 + <type>String</type>
  1534 + <format/>
  1535 + </field>
  1536 + <field>
  1537 + <name>error_count</name>
  1538 + <type>Integer</type>
  1539 + <format/>
  1540 + </field>
  1541 + <field>
  1542 + <name>error_desc</name>
  1543 + <type>String</type>
  1544 + <format/>
  1545 + </field>
  1546 + <field>
  1547 + <name>error_column1</name>
  1548 + <type>String</type>
  1549 + <format/>
  1550 + </field>
  1551 + <field>
  1552 + <name>error_column2</name>
  1553 + <type>String</type>
  1554 + <format/>
  1555 + </field>
  1556 + </fields>
  1557 + <custom>
  1558 + <header_font_name>arial</header_font_name>
  1559 + <header_font_size>10</header_font_size>
  1560 + <header_font_bold>N</header_font_bold>
  1561 + <header_font_italic>N</header_font_italic>
  1562 + <header_font_underline>no</header_font_underline>
  1563 + <header_font_orientation>horizontal</header_font_orientation>
  1564 + <header_font_color>black</header_font_color>
  1565 + <header_background_color>none</header_background_color>
  1566 + <header_row_height>255</header_row_height>
  1567 + <header_alignment>left</header_alignment>
  1568 + <header_image/>
  1569 + <row_font_name>arial</row_font_name>
  1570 + <row_font_size>10</row_font_size>
  1571 + <row_font_color>black</row_font_color>
  1572 + <row_background_color>none</row_background_color>
  1573 + </custom>
  1574 + <cluster_schema/>
  1575 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1576 + <xloc>637</xloc>
  1577 + <yloc>320</yloc>
  1578 + <draw>Y</draw>
  1579 + </GUI>
  1580 + </step>
  1581 +
  1582 + <step>
  1583 + <name>&#x83b7;&#x53d6;&#x53d8;&#x91cf;</name>
  1584 + <type>GetVariable</type>
  1585 + <description/>
  1586 + <distribute>Y</distribute>
  1587 + <custom_distribution/>
  1588 + <copies>1</copies>
  1589 + <partitioning>
  1590 + <method>none</method>
  1591 + <schema_name/>
  1592 + </partitioning>
  1593 + <fields>
  1594 + <field>
  1595 + <name>filepath_</name>
  1596 + <variable>&#x24;&#x7b;filepath&#x7d;</variable>
  1597 + <type>String</type>
  1598 + <format/>
  1599 + <currency/>
  1600 + <decimal/>
  1601 + <group/>
  1602 + <length>-1</length>
  1603 + <precision>-1</precision>
  1604 + <trim_type>none</trim_type>
  1605 + </field>
  1606 + <field>
  1607 + <name>erroroutputdir_</name>
  1608 + <variable>&#x24;&#x7b;erroroutputdir&#x7d;</variable>
  1609 + <type>String</type>
  1610 + <format/>
  1611 + <currency/>
  1612 + <decimal/>
  1613 + <group/>
  1614 + <length>-1</length>
  1615 + <precision>-1</precision>
  1616 + <trim_type>none</trim_type>
  1617 + </field>
  1618 + </fields>
  1619 + <cluster_schema/>
  1620 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1621 + <xloc>134</xloc>
  1622 + <yloc>183</yloc>
  1623 + <draw>Y</draw>
  1624 + </GUI>
  1625 + </step>
  1626 +
  1627 + <step_error_handling>
  1628 + <error>
  1629 + <source_step>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_cars</source_step>
  1630 + <target_step>&#x9519;&#x8bef;&#x8f93;&#x51fa;</target_step>
  1631 + <is_enabled>Y</is_enabled>
  1632 + <nr_valuename>error_count</nr_valuename>
  1633 + <descriptions_valuename>error_desc</descriptions_valuename>
  1634 + <fields_valuename>error_column1</fields_valuename>
  1635 + <codes_valuename>error_column2</codes_valuename>
  1636 + <max_errors/>
  1637 + <max_pct_errors/>
  1638 + <min_pct_rows/>
  1639 + </error>
  1640 + </step_error_handling>
  1641 + <slave-step-copy-partition-distribution>
  1642 +</slave-step-copy-partition-distribution>
  1643 + <slave_transformation>N</slave_transformation>
  1644 +
  1645 +</transformation>
... ...
src/main/resources/datatools/ktrs/test.ktr 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<transformation>
  3 + <info>
  4 + <name>test</name>
  5 + <description/>
  6 + <extended_description/>
  7 + <trans_version/>
  8 + <trans_type>Normal</trans_type>
  9 + <trans_status>0</trans_status>
  10 + <directory>&#x2f;</directory>
  11 + <parameters>
  12 + <parameter>
  13 + <name>filepath</name>
  14 + <default_value/>
  15 + <description>&#x5bfc;&#x5165;&#x7684;excel&#x8def;&#x5f84;</description>
  16 + </parameter>
  17 + </parameters>
  18 + <log>
  19 +<trans-log-table><connection/>
  20 +<schema/>
  21 +<table/>
  22 +<size_limit_lines/>
  23 +<interval/>
  24 +<timeout_days/>
  25 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STATUS</id><enabled>Y</enabled><name>STATUS</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name><subject/></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name><subject/></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name><subject/></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name><subject/></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name><subject/></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name><subject/></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>STARTDATE</id><enabled>Y</enabled><name>STARTDATE</name></field><field><id>ENDDATE</id><enabled>Y</enabled><name>ENDDATE</name></field><field><id>LOGDATE</id><enabled>Y</enabled><name>LOGDATE</name></field><field><id>DEPDATE</id><enabled>Y</enabled><name>DEPDATE</name></field><field><id>REPLAYDATE</id><enabled>Y</enabled><name>REPLAYDATE</name></field><field><id>LOG_FIELD</id><enabled>Y</enabled><name>LOG_FIELD</name></field><field><id>EXECUTING_SERVER</id><enabled>N</enabled><name>EXECUTING_SERVER</name></field><field><id>EXECUTING_USER</id><enabled>N</enabled><name>EXECUTING_USER</name></field><field><id>CLIENT</id><enabled>N</enabled><name>CLIENT</name></field></trans-log-table>
  26 +<perf-log-table><connection/>
  27 +<schema/>
  28 +<table/>
  29 +<interval/>
  30 +<timeout_days/>
  31 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>SEQ_NR</id><enabled>Y</enabled><name>SEQ_NR</name></field><field><id>LOGDATE</id><enabled>Y</enabled><name>LOGDATE</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STEPNAME</id><enabled>Y</enabled><name>STEPNAME</name></field><field><id>STEP_COPY</id><enabled>Y</enabled><name>STEP_COPY</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>INPUT_BUFFER_ROWS</id><enabled>Y</enabled><name>INPUT_BUFFER_ROWS</name></field><field><id>OUTPUT_BUFFER_ROWS</id><enabled>Y</enabled><name>OUTPUT_BUFFER_ROWS</name></field></perf-log-table>
  32 +<channel-log-table><connection/>
  33 +<schema/>
  34 +<table/>
  35 +<timeout_days/>
  36 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>LOGGING_OBJECT_TYPE</id><enabled>Y</enabled><name>LOGGING_OBJECT_TYPE</name></field><field><id>OBJECT_NAME</id><enabled>Y</enabled><name>OBJECT_NAME</name></field><field><id>OBJECT_COPY</id><enabled>Y</enabled><name>OBJECT_COPY</name></field><field><id>REPOSITORY_DIRECTORY</id><enabled>Y</enabled><name>REPOSITORY_DIRECTORY</name></field><field><id>FILENAME</id><enabled>Y</enabled><name>FILENAME</name></field><field><id>OBJECT_ID</id><enabled>Y</enabled><name>OBJECT_ID</name></field><field><id>OBJECT_REVISION</id><enabled>Y</enabled><name>OBJECT_REVISION</name></field><field><id>PARENT_CHANNEL_ID</id><enabled>Y</enabled><name>PARENT_CHANNEL_ID</name></field><field><id>ROOT_CHANNEL_ID</id><enabled>Y</enabled><name>ROOT_CHANNEL_ID</name></field></channel-log-table>
  37 +<step-log-table><connection/>
  38 +<schema/>
  39 +<table/>
  40 +<timeout_days/>
  41 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STEPNAME</id><enabled>Y</enabled><name>STEPNAME</name></field><field><id>STEP_COPY</id><enabled>Y</enabled><name>STEP_COPY</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>LOG_FIELD</id><enabled>N</enabled><name>LOG_FIELD</name></field></step-log-table>
  42 +<metrics-log-table><connection/>
  43 +<schema/>
  44 +<table/>
  45 +<timeout_days/>
  46 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>METRICS_DATE</id><enabled>Y</enabled><name>METRICS_DATE</name></field><field><id>METRICS_CODE</id><enabled>Y</enabled><name>METRICS_CODE</name></field><field><id>METRICS_DESCRIPTION</id><enabled>Y</enabled><name>METRICS_DESCRIPTION</name></field><field><id>METRICS_SUBJECT</id><enabled>Y</enabled><name>METRICS_SUBJECT</name></field><field><id>METRICS_TYPE</id><enabled>Y</enabled><name>METRICS_TYPE</name></field><field><id>METRICS_VALUE</id><enabled>Y</enabled><name>METRICS_VALUE</name></field></metrics-log-table>
  47 + </log>
  48 + <maxdate>
  49 + <connection/>
  50 + <table/>
  51 + <field/>
  52 + <offset>0.0</offset>
  53 + <maxdiff>0.0</maxdiff>
  54 + </maxdate>
  55 + <size_rowset>10000</size_rowset>
  56 + <sleep_time_empty>50</sleep_time_empty>
  57 + <sleep_time_full>50</sleep_time_full>
  58 + <unique_connections>N</unique_connections>
  59 + <feedback_shown>Y</feedback_shown>
  60 + <feedback_size>50000</feedback_size>
  61 + <using_thread_priorities>Y</using_thread_priorities>
  62 + <shared_objects_file/>
  63 + <capture_step_performance>N</capture_step_performance>
  64 + <step_performance_capturing_delay>1000</step_performance_capturing_delay>
  65 + <step_performance_capturing_size_limit>100</step_performance_capturing_size_limit>
  66 + <dependencies>
  67 + </dependencies>
  68 + <partitionschemas>
  69 + </partitionschemas>
  70 + <slaveservers>
  71 + </slaveservers>
  72 + <clusterschemas>
  73 + </clusterschemas>
  74 + <created_user>-</created_user>
  75 + <created_date>2016&#x2f;06&#x2f;23 10&#x3a;31&#x3a;17.508</created_date>
  76 + <modified_user>-</modified_user>
  77 + <modified_date>2016&#x2f;06&#x2f;23 10&#x3a;31&#x3a;17.508</modified_date>
  78 + <key_for_session_key>H4sIAAAAAAAAAAMAAAAAAAAAAAA&#x3d;</key_for_session_key>
  79 + <is_key_private>N</is_key_private>
  80 + </info>
  81 + <notepads>
  82 + </notepads>
  83 + <connection>
  84 + <name>bus_control_&#x516c;&#x53f8;_201</name>
  85 + <server>192.168.168.201</server>
  86 + <type>MYSQL</type>
  87 + <access>Native</access>
  88 + <database>control</database>
  89 + <port>3306</port>
  90 + <username>root</username>
  91 + <password>Encrypted 2be98afc86aa7f2e4cb79ff228dc6fa8c</password>
  92 + <servername/>
  93 + <data_tablespace/>
  94 + <index_tablespace/>
  95 + <attributes>
  96 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  97 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  98 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  99 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  100 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  101 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  102 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  103 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  104 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  105 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  106 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  107 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  108 + </attributes>
  109 + </connection>
  110 + <connection>
  111 + <name>xlab_mysql_youle</name>
  112 + <server>101.231.124.8</server>
  113 + <type>MYSQL</type>
  114 + <access>Native</access>
  115 + <database>xlab_youle</database>
  116 + <port>45687</port>
  117 + <username>xlab-youle</username>
  118 + <password>Encrypted 2be98afc86aa78a88aa1be369d187a3df</password>
  119 + <servername/>
  120 + <data_tablespace/>
  121 + <index_tablespace/>
  122 + <attributes>
  123 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  124 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  125 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  126 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  127 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  128 + <attribute><code>PORT_NUMBER</code><attribute>45687</attribute></attribute>
  129 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  130 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  131 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  132 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
  133 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
  134 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  135 + </attributes>
  136 + </connection>
  137 + <connection>
  138 + <name>xlab_mysql_youle&#xff08;&#x672c;&#x673a;&#xff09;</name>
  139 + <server>localhost</server>
  140 + <type>MYSQL</type>
  141 + <access>Native</access>
  142 + <database>xlab_youle</database>
  143 + <port>3306</port>
  144 + <username>root</username>
  145 + <password>Encrypted </password>
  146 + <servername/>
  147 + <data_tablespace/>
  148 + <index_tablespace/>
  149 + <attributes>
  150 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  151 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  152 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  153 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  154 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  155 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  156 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  157 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  158 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  159 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
  160 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
  161 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  162 + </attributes>
  163 + </connection>
  164 + <connection>
  165 + <name>xlab_youle</name>
  166 + <server/>
  167 + <type>MYSQL</type>
  168 + <access>JNDI</access>
  169 + <database>xlab_youle</database>
  170 + <port>1521</port>
  171 + <username/>
  172 + <password>Encrypted </password>
  173 + <servername/>
  174 + <data_tablespace/>
  175 + <index_tablespace/>
  176 + <attributes>
  177 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  178 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  179 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  180 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  181 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  182 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  183 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  184 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  185 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  186 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  187 + </attributes>
  188 + </connection>
  189 + <order>
  190 + <hop> <from>Excel&#x8f93;&#x5165;</from><to>&#x7a7a;&#x64cd;&#x4f5c; &#x28;&#x4ec0;&#x4e48;&#x4e5f;&#x4e0d;&#x505a;&#x29;</to><enabled>Y</enabled> </hop>
  191 + <hop> <from>&#x83b7;&#x53d6;&#x53d8;&#x91cf;</from><to>Excel&#x8f93;&#x5165;</to><enabled>Y</enabled> </hop>
  192 + </order>
  193 + <step>
  194 + <name>&#x7a7a;&#x64cd;&#x4f5c; &#x28;&#x4ec0;&#x4e48;&#x4e5f;&#x4e0d;&#x505a;&#x29;</name>
  195 + <type>Dummy</type>
  196 + <description/>
  197 + <distribute>Y</distribute>
  198 + <custom_distribution/>
  199 + <copies>1</copies>
  200 + <partitioning>
  201 + <method>none</method>
  202 + <schema_name/>
  203 + </partitioning>
  204 + <cluster_schema/>
  205 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  206 + <xloc>400</xloc>
  207 + <yloc>100</yloc>
  208 + <draw>Y</draw>
  209 + </GUI>
  210 + </step>
  211 +
  212 + <step>
  213 + <name>Excel&#x8f93;&#x5165;</name>
  214 + <type>ExcelInput</type>
  215 + <description/>
  216 + <distribute>Y</distribute>
  217 + <custom_distribution/>
  218 + <copies>1</copies>
  219 + <partitioning>
  220 + <method>none</method>
  221 + <schema_name/>
  222 + </partitioning>
  223 + <header>Y</header>
  224 + <noempty>Y</noempty>
  225 + <stoponempty>N</stoponempty>
  226 + <filefield/>
  227 + <sheetfield/>
  228 + <sheetrownumfield/>
  229 + <rownumfield/>
  230 + <sheetfield/>
  231 + <filefield/>
  232 + <limit>0</limit>
  233 + <encoding/>
  234 + <add_to_result_filenames>Y</add_to_result_filenames>
  235 + <accept_filenames>Y</accept_filenames>
  236 + <accept_field>filepath_</accept_field>
  237 + <accept_stepname>&#x83b7;&#x53d6;&#x53d8;&#x91cf;</accept_stepname>
  238 + <file>
  239 + <name/>
  240 + <filemask/>
  241 + <exclude_filemask/>
  242 + <file_required>N</file_required>
  243 + <include_subfolders>N</include_subfolders>
  244 + </file>
  245 + <fields>
  246 + <field>
  247 + <name>&#x7ebf;&#x8def;</name>
  248 + <type>String</type>
  249 + <length>-1</length>
  250 + <precision>-1</precision>
  251 + <trim_type>none</trim_type>
  252 + <repeat>N</repeat>
  253 + <format/>
  254 + <currency/>
  255 + <decimal/>
  256 + <group/>
  257 + </field>
  258 + <field>
  259 + <name>&#x8def;&#x724c;&#x7f16;&#x53f7;</name>
  260 + <type>String</type>
  261 + <length>-1</length>
  262 + <precision>-1</precision>
  263 + <trim_type>none</trim_type>
  264 + <repeat>N</repeat>
  265 + <format/>
  266 + <currency/>
  267 + <decimal/>
  268 + <group/>
  269 + </field>
  270 + <field>
  271 + <name>&#x8def;&#x724c;&#x540d;&#x79f0;</name>
  272 + <type>String</type>
  273 + <length>-1</length>
  274 + <precision>-1</precision>
  275 + <trim_type>none</trim_type>
  276 + <repeat>N</repeat>
  277 + <format/>
  278 + <currency/>
  279 + <decimal/>
  280 + <group/>
  281 + </field>
  282 + <field>
  283 + <name>&#x8def;&#x724c;&#x7c7b;&#x578b;</name>
  284 + <type>String</type>
  285 + <length>-1</length>
  286 + <precision>-1</precision>
  287 + <trim_type>none</trim_type>
  288 + <repeat>N</repeat>
  289 + <format/>
  290 + <currency/>
  291 + <decimal/>
  292 + <group/>
  293 + </field>
  294 + </fields>
  295 + <sheets>
  296 + </sheets>
  297 + <strict_types>N</strict_types>
  298 + <error_ignored>N</error_ignored>
  299 + <error_line_skipped>N</error_line_skipped>
  300 + <bad_line_files_destination_directory/>
  301 + <bad_line_files_extension>warning</bad_line_files_extension>
  302 + <error_line_files_destination_directory/>
  303 + <error_line_files_extension>error</error_line_files_extension>
  304 + <line_number_files_destination_directory/>
  305 + <line_number_files_extension>line</line_number_files_extension>
  306 + <shortFileFieldName/>
  307 + <pathFieldName/>
  308 + <hiddenFieldName/>
  309 + <lastModificationTimeFieldName/>
  310 + <uriNameFieldName/>
  311 + <rootUriNameFieldName/>
  312 + <extensionFieldName/>
  313 + <sizeFieldName/>
  314 + <spreadsheet_type>JXL</spreadsheet_type>
  315 + <cluster_schema/>
  316 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  317 + <xloc>205</xloc>
  318 + <yloc>103</yloc>
  319 + <draw>Y</draw>
  320 + </GUI>
  321 + </step>
  322 +
  323 + <step>
  324 + <name>&#x83b7;&#x53d6;&#x53d8;&#x91cf;</name>
  325 + <type>GetVariable</type>
  326 + <description/>
  327 + <distribute>Y</distribute>
  328 + <custom_distribution/>
  329 + <copies>1</copies>
  330 + <partitioning>
  331 + <method>none</method>
  332 + <schema_name/>
  333 + </partitioning>
  334 + <fields>
  335 + <field>
  336 + <name>filepath_</name>
  337 + <variable>&#x24;&#x7b;filepath&#x7d;</variable>
  338 + <type>String</type>
  339 + <format/>
  340 + <currency/>
  341 + <decimal/>
  342 + <group/>
  343 + <length>-1</length>
  344 + <precision>-1</precision>
  345 + <trim_type>none</trim_type>
  346 + </field>
  347 + </fields>
  348 + <cluster_schema/>
  349 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  350 + <xloc>266</xloc>
  351 + <yloc>283</yloc>
  352 + <draw>Y</draw>
  353 + </GUI>
  354 + </step>
  355 +
  356 + <step_error_handling>
  357 + </step_error_handling>
  358 + <slave-step-copy-partition-distribution>
  359 +</slave-step-copy-partition-distribution>
  360 + <slave_transformation>N</slave_transformation>
  361 +
  362 +</transformation>
... ...
src/main/resources/static/assets/bower_components/angular-file-upload/.bower.json 0 → 100644
  1 +{
  2 + "name": "angular-file-upload",
  3 + "main": "dist/angular-file-upload.min.js",
  4 + "homepage": "https://github.com/nervgh/angular-file-upload",
  5 + "ignore": [
  6 + "examples"
  7 + ],
  8 + "dependencies": {
  9 + "angular": "^1.1.5"
  10 + },
  11 + "devDependencies": {
  12 + "es5-shim": ">=3.4.0"
  13 + },
  14 + "keywords": [
  15 + "angular",
  16 + "file",
  17 + "upload",
  18 + "module"
  19 + ],
  20 + "version": "2.1.4",
  21 + "_release": "2.1.4",
  22 + "_resolution": {
  23 + "type": "version",
  24 + "tag": "v2.1.4",
  25 + "commit": "888127c60b2946196784a3af474931ae48a8afca"
  26 + },
  27 + "_source": "https://github.com/nervgh/angular-file-upload.git",
  28 + "_target": "2.1.4",
  29 + "_originalSource": "angular-file-upload"
  30 +}
0 31 \ No newline at end of file
... ...
src/main/resources/static/assets/bower_components/angular-file-upload/.gitignore 0 → 100644
  1 +.temp
  2 +.idea
  3 +*.iml
  4 +node_modules
  5 +bower_components
... ...
src/main/resources/static/assets/bower_components/angular-file-upload/.jshintrc 0 → 100644
  1 +{
  2 + "camelcase" : true,
  3 + "indent": 4,
  4 + "strict": true,
  5 + "undef": true,
  6 + "unused": true,
  7 + "quotmark": "single",
  8 + "maxlen": 120,
  9 + "trailing": true,
  10 + "curly": true,
  11 +
  12 + "devel": true,
  13 +
  14 + "browser":true,
  15 + "jquery":true,
  16 + "predef": [
  17 + "angular",
  18 + "define",
  19 + "require",
  20 + "app"
  21 + ]
  22 +}
0 23 \ No newline at end of file
... ...
src/main/resources/static/assets/bower_components/angular-file-upload/README.md 0 → 100644
  1 +# Angular File Upload
  2 +
  3 +---
  4 +
  5 +## About
  6 +
  7 +**Angular File Upload** is a module for the [AngularJS](http://angularjs.org/) framework. Supports drag-n-drop upload, upload progress, validation filters and a file upload queue. It supports native HTML5 uploads, but degrades to a legacy iframe upload method for older browsers. Works with any server side platform which supports standard HTML form uploads.
  8 +
  9 +When files are selected or dropped into the component, one or more filters are applied. Files which pass all filters are added to the queue. When file is added to the queue, for him is created instance of `{FileItem}` and uploader options are copied into this object. After, items in the queue (FileItems) are ready for uploading.
  10 +
  11 +## Package managers
  12 +### Bower
  13 +```
  14 +bower install angular-file-upload
  15 +```
  16 +You could find this module in bower like [_angular file upload_](http://bower.io/search/?q=angular%20file%20upload).
  17 +
  18 +### NPM
  19 +```
  20 +npm install angular-file-upload
  21 +```
  22 +You could find this module in npm like [_angular file upload_](https://www.npmjs.com/search?q=angular%20file%20upload).
  23 +
  24 +## Demos
  25 +1. [Simple example](http://nervgh.github.io/pages/angular-file-upload/examples/simple)
  26 +2. [Uploads only images (with canvas preview)](http://nervgh.github.io/pages/angular-file-upload/examples/image-preview)
  27 +3. [Without bootstrap example](http://nervgh.github.io/pages/angular-file-upload/examples/without-bootstrap)
  28 +
  29 +## More Info
  30 +
  31 +1. [Introduction](https://github.com/nervgh/angular-file-upload/wiki/Introduction)
  32 +2. [Module API](https://github.com/nervgh/angular-file-upload/wiki/Module-API)
  33 +3. [FAQ](https://github.com/nervgh/angular-file-upload/wiki/FAQ)
  34 +4. [Migrate from 0.x.x to 1.x.x](https://github.com/nervgh/angular-file-upload/wiki/Migrate-from-0.x.x-to-1.x.x)
  35 +5. [RubyGem](https://github.com/marthyn/angularjs-file-upload-rails)
... ...
src/main/resources/static/assets/bower_components/angular-file-upload/bower.json 0 → 100644
  1 +{
  2 + "name": "angular-file-upload",
  3 + "main": "dist/angular-file-upload.min.js",
  4 + "homepage": "https://github.com/nervgh/angular-file-upload",
  5 + "ignore": ["examples"],
  6 + "dependencies": {
  7 + "angular": "^1.1.5"
  8 + },
  9 + "devDependencies": {
  10 + "es5-shim": ">=3.4.0"
  11 + },
  12 + "keywords": [
  13 + "angular",
  14 + "file",
  15 + "upload",
  16 + "module"
  17 + ]
  18 +}
... ...
src/main/resources/static/assets/bower_components/angular-file-upload/dist/angular-file-upload.min.js 0 → 100644
  1 +/*
  2 + angular-file-upload v2.1.4
  3 + https://github.com/nervgh/angular-file-upload
  4 +*/
  5 +
  6 +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):"object"==typeof exports?exports["angular-file-upload"]=t():e["angular-file-upload"]=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";var r=function(e){return e&&e.__esModule?e["default"]:e},i=r(n(2)),o=r(n(3)),s=r(n(4)),a=r(n(5)),u=r(n(6)),l=r(n(7)),c=r(n(1)),f=r(n(8)),p=r(n(9)),d=r(n(10)),v=r(n(11)),h=r(n(12));angular.module(i.name,[]).value("fileUploaderOptions",o).factory("FileUploader",s).factory("FileLikeObject",a).factory("FileItem",u).factory("FileDirective",l).factory("FileSelect",c).factory("FileDrop",f).factory("FileOver",p).directive("nvFileSelect",d).directive("nvFileDrop",v).directive("nvFileOver",h).run(["FileUploader","FileLikeObject","FileItem","FileDirective","FileSelect","FileDrop","FileOver",function(e,t,n,r,i,o,s){e.FileLikeObject=t,e.FileItem=n,e.FileDirective=r,e.FileSelect=i,e.FileDrop=o,e.FileOver=s}])},function(e,t,n){"use strict";var r=function(e){return e&&e.__esModule?e["default"]:e},i=function(){function e(e,t){for(var n in t){var r=t[n];r.configurable=!0,r.value&&(r.writable=!0)}Object.defineProperties(e,t)}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=function l(e,t,n){var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:l(i,t,n)}if("value"in r&&r.writable)return r.value;var o=r.get;return void 0===o?void 0:o.call(n)},s=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(e.__proto__=t)},a=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},u=(r(n(2)),angular.extend);e.exports=function(e){var t=function(e){function t(e){a(this,t);var n=u(e,{events:{$destroy:"destroy",change:"onChange"},prop:"select"});o(Object.getPrototypeOf(t.prototype),"constructor",this).call(this,n),this.uploader.isHTML5||this.element.removeAttr("multiple"),this.element.prop("value",null)}return s(t,e),i(t,{getOptions:{value:function(){}},getFilters:{value:function(){}},isEmptyAfterSelection:{value:function(){return!!this.element.attr("multiple")}},onChange:{value:function(){var e=this.uploader.isHTML5?this.element[0].files:this.element[0],t=this.getOptions(),n=this.getFilters();this.uploader.isHTML5||this.destroy(),this.uploader.addToQueue(e,t,n),this.isEmptyAfterSelection()&&(this.element.prop("value",null),this.element.replaceWith(this.element=this.element.clone(!0)))}}}),t}(e);return t},e.exports.$inject=["FileDirective"]},function(e,t){e.exports={name:"angularFileUpload"}},function(e,t){"use strict";e.exports={url:"/",alias:"file",headers:{},queue:[],progress:0,autoUpload:!1,removeAfterUpload:!1,method:"POST",filters:[],formData:[],queueLimit:Number.MAX_VALUE,withCredentials:!1}},function(e,t,n){"use strict";var r=function(e){return e&&e.__esModule?e["default"]:e},i=function(){function e(e,t){for(var n in t){var r=t[n];r.configurable=!0,r.value&&(r.writable=!0)}Object.defineProperties(e,t)}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},s=(r(n(2)),angular.copy),a=angular.extend,u=angular.forEach,l=angular.isObject,c=angular.isNumber,f=angular.isDefined,p=angular.isArray,d=angular.element;e.exports=function(e,t,n,r,v,h){var m=r.File,g=r.FormData,_=function(){function r(t){o(this,r);var n=s(e);a(this,n,t,{isUploading:!1,_nextIndex:0,_failFilterIndex:-1,_directives:{select:[],drop:[],over:[]}}),this.filters.unshift({name:"queueLimit",fn:this._queueLimitFilter}),this.filters.unshift({name:"folder",fn:this._folderFilter})}return i(r,{addToQueue:{value:function(e,t,n){var r=this,i=this.isArrayLikeObject(e)?e:[e],o=this._getFilters(n),s=this.queue.length,a=[];u(i,function(e){var n=new v(e);if(r._isValidFile(n,o,t)){var i=new h(r,e,t);a.push(i),r.queue.push(i),r._onAfterAddingFile(i)}else{var s=o[r._failFilterIndex];r._onWhenAddingFileFailed(n,s,t)}}),this.queue.length!==s&&(this._onAfterAddingAll(a),this.progress=this._getTotalProgress()),this._render(),this.autoUpload&&this.uploadAll()}},removeFromQueue:{value:function(e){var t=this.getIndexOfItem(e),n=this.queue[t];n.isUploading&&n.cancel(),this.queue.splice(t,1),n._destroy(),this.progress=this._getTotalProgress()}},clearQueue:{value:function(){for(;this.queue.length;)this.queue[0].remove();this.progress=0}},uploadItem:{value:function(e){var t=this.getIndexOfItem(e),n=this.queue[t],r=this.isHTML5?"_xhrTransport":"_iframeTransport";n._prepareToUploading(),this.isUploading||(this.isUploading=!0,this[r](n))}},cancelItem:{value:function(e){var t=this.getIndexOfItem(e),n=this.queue[t],r=this.isHTML5?"_xhr":"_form";n&&n.isUploading&&n[r].abort()}},uploadAll:{value:function(){var e=this.getNotUploadedItems().filter(function(e){return!e.isUploading});e.length&&(u(e,function(e){return e._prepareToUploading()}),e[0].upload())}},cancelAll:{value:function(){var e=this.getNotUploadedItems();u(e,function(e){return e.cancel()})}},isFile:{value:function(e){return this.constructor.isFile(e)}},isFileLikeObject:{value:function(e){return this.constructor.isFileLikeObject(e)}},isArrayLikeObject:{value:function(e){return this.constructor.isArrayLikeObject(e)}},getIndexOfItem:{value:function(e){return c(e)?e:this.queue.indexOf(e)}},getNotUploadedItems:{value:function(){return this.queue.filter(function(e){return!e.isUploaded})}},getReadyItems:{value:function(){return this.queue.filter(function(e){return e.isReady&&!e.isUploading}).sort(function(e,t){return e.index-t.index})}},destroy:{value:function(){var e=this;u(this._directives,function(t){u(e._directives[t],function(e){e.destroy()})})}},onAfterAddingAll:{value:function(e){}},onAfterAddingFile:{value:function(e){}},onWhenAddingFileFailed:{value:function(e,t,n){}},onBeforeUploadItem:{value:function(e){}},onProgressItem:{value:function(e,t){}},onProgressAll:{value:function(e){}},onSuccessItem:{value:function(e,t,n,r){}},onErrorItem:{value:function(e,t,n,r){}},onCancelItem:{value:function(e,t,n,r){}},onCompleteItem:{value:function(e,t,n,r){}},onCompleteAll:{value:function(){}},_getTotalProgress:{value:function(e){if(this.removeAfterUpload)return e||0;var t=this.getNotUploadedItems().length,n=t?this.queue.length-t:this.queue.length,r=100/this.queue.length,i=(e||0)*r/100;return Math.round(n*r+i)}},_getFilters:{value:function(e){if(!e)return this.filters;if(p(e))return e;var t=e.match(/[^\s,]+/g);return this.filters.filter(function(e){return-1!==t.indexOf(e.name)})}},_render:{value:function(){t.$$phase||t.$apply()}},_folderFilter:{value:function(e){return!(!e.size&&!e.type)}},_queueLimitFilter:{value:function(){return this.queue.length<this.queueLimit}},_isValidFile:{value:function(e,t,n){var r=this;return this._failFilterIndex=-1,t.length?t.every(function(t){return r._failFilterIndex++,t.fn.call(r,e,n)}):!0}},_isSuccessCode:{value:function(e){return e>=200&&300>e||304===e}},_transformResponse:{value:function(e,t){var r=this._headersGetter(t);return u(n.defaults.transformResponse,function(t){e=t(e,r)}),e}},_parseHeaders:{value:function(e){var t,n,r,i={};return e?(u(e.split("\n"),function(e){r=e.indexOf(":"),t=e.slice(0,r).trim().toLowerCase(),n=e.slice(r+1).trim(),t&&(i[t]=i[t]?i[t]+", "+n:n)}),i):i}},_headersGetter:{value:function(e){return function(t){return t?e[t.toLowerCase()]||null:e}}},_xhrTransport:{value:function(e){var t=this,n=e._xhr=new XMLHttpRequest,r=new g;if(this._onBeforeUploadItem(e),u(e.formData,function(e){u(e,function(e,t){r.append(t,e)})}),"number"!=typeof e._file.size)throw new TypeError("The file specified is no longer valid");r.append(e.alias,e._file,e.file.name),n.upload.onprogress=function(n){var r=Math.round(n.lengthComputable?100*n.loaded/n.total:0);t._onProgressItem(e,r)},n.onload=function(){var r=t._parseHeaders(n.getAllResponseHeaders()),i=t._transformResponse(n.response,r),o=t._isSuccessCode(n.status)?"Success":"Error",s="_on"+o+"Item";t[s](e,i,n.status,r),t._onCompleteItem(e,i,n.status,r)},n.onerror=function(){var r=t._parseHeaders(n.getAllResponseHeaders()),i=t._transformResponse(n.response,r);t._onErrorItem(e,i,n.status,r),t._onCompleteItem(e,i,n.status,r)},n.onabort=function(){var r=t._parseHeaders(n.getAllResponseHeaders()),i=t._transformResponse(n.response,r);t._onCancelItem(e,i,n.status,r),t._onCompleteItem(e,i,n.status,r)},n.open(e.method,e.url,!0),n.withCredentials=e.withCredentials,u(e.headers,function(e,t){n.setRequestHeader(t,e)}),n.send(r),this._render()}},_iframeTransport:{value:function(e){var t=this,n=d('<form style="display: none;" />'),r=d('<iframe name="iframeTransport'+Date.now()+'">'),i=e._input;e._form&&e._form.replaceWith(i),e._form=n,this._onBeforeUploadItem(e),i.prop("name",e.alias),u(e.formData,function(e){u(e,function(e,t){var r=d('<input type="hidden" name="'+t+'" />');r.val(e),n.append(r)})}),n.prop({action:e.url,method:"POST",target:r.prop("name"),enctype:"multipart/form-data",encoding:"multipart/form-data"}),r.bind("load",function(){var n="",i=200;try{n=r[0].contentDocument.body.innerHTML}catch(o){i=500}var s={response:n,status:i,dummy:!0},a={},u=t._transformResponse(s.response,a);t._onSuccessItem(e,u,s.status,a),t._onCompleteItem(e,u,s.status,a)}),n.abort=function(){var o,s={status:0,dummy:!0},a={};r.unbind("load").prop("src","javascript:false;"),n.replaceWith(i),t._onCancelItem(e,o,s.status,a),t._onCompleteItem(e,o,s.status,a)},i.after(n),n.append(i).append(r),n[0].submit(),this._render()}},_onWhenAddingFileFailed:{value:function(e,t,n){this.onWhenAddingFileFailed(e,t,n)}},_onAfterAddingFile:{value:function(e){this.onAfterAddingFile(e)}},_onAfterAddingAll:{value:function(e){this.onAfterAddingAll(e)}},_onBeforeUploadItem:{value:function(e){e._onBeforeUpload(),this.onBeforeUploadItem(e)}},_onProgressItem:{value:function(e,t){var n=this._getTotalProgress(t);this.progress=n,e._onProgress(t),this.onProgressItem(e,t),this.onProgressAll(n),this._render()}},_onSuccessItem:{value:function(e,t,n,r){e._onSuccess(t,n,r),this.onSuccessItem(e,t,n,r)}},_onErrorItem:{value:function(e,t,n,r){e._onError(t,n,r),this.onErrorItem(e,t,n,r)}},_onCancelItem:{value:function(e,t,n,r){e._onCancel(t,n,r),this.onCancelItem(e,t,n,r)}},_onCompleteItem:{value:function(e,t,n,r){e._onComplete(t,n,r),this.onCompleteItem(e,t,n,r);var i=this.getReadyItems()[0];return this.isUploading=!1,f(i)?void i.upload():(this.onCompleteAll(),this.progress=this._getTotalProgress(),void this._render())}}},{isFile:{value:function(e){return m&&e instanceof m}},isFileLikeObject:{value:function(e){return e instanceof v}},isArrayLikeObject:{value:function(e){return l(e)&&"length"in e}},inherit:{value:function(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.super_=t}}}),r}();return _.prototype.isHTML5=!(!m||!g),_.isHTML5=_.prototype.isHTML5,_},e.exports.$inject=["fileUploaderOptions","$rootScope","$http","$window","FileLikeObject","FileItem"]},function(e,t,n){"use strict";var r=function(e){return e&&e.__esModule?e["default"]:e},i=function(){function e(e,t){for(var n in t){var r=t[n];r.configurable=!0,r.value&&(r.writable=!0)}Object.defineProperties(e,t)}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},s=(r(n(2)),angular.copy),a=angular.isElement,u=angular.isString;e.exports=function(){var e=function(){function e(t){o(this,e);var n=a(t),r=n?t.value:t,i=u(r)?"FakePath":"Object",s="_createFrom"+i;this[s](r)}return i(e,{_createFromFakePath:{value:function(e){this.lastModifiedDate=null,this.size=null,this.type="like/"+e.slice(e.lastIndexOf(".")+1).toLowerCase(),this.name=e.slice(e.lastIndexOf("/")+e.lastIndexOf("\\")+2)}},_createFromObject:{value:function(e){this.lastModifiedDate=s(e.lastModifiedDate),this.size=e.size,this.type=e.type,this.name=e.name}}}),e}();return e},e.exports.$inject=[]},function(e,t,n){"use strict";var r=function(e){return e&&e.__esModule?e["default"]:e},i=function(){function e(e,t){for(var n in t){var r=t[n];r.configurable=!0,r.value&&(r.writable=!0)}Object.defineProperties(e,t)}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},s=(r(n(2)),angular.copy),a=angular.extend,u=angular.element,l=angular.isElement;e.exports=function(e,t){var n=function(){function n(e,r,i){o(this,n);var c=l(r),f=c?u(r):null,p=c?null:r;a(this,{url:e.url,alias:e.alias,headers:s(e.headers),formData:s(e.formData),removeAfterUpload:e.removeAfterUpload,withCredentials:e.withCredentials,method:e.method},i,{uploader:e,file:new t(r),isReady:!1,isUploading:!1,isUploaded:!1,isSuccess:!1,isCancel:!1,isError:!1,progress:0,index:null,_file:p,_input:f}),f&&this._replaceNode(f)}return i(n,{upload:{value:function(){try{this.uploader.uploadItem(this)}catch(e){this.uploader._onCompleteItem(this,"",0,[]),this.uploader._onErrorItem(this,"",0,[])}}},cancel:{value:function(){this.uploader.cancelItem(this)}},remove:{value:function(){this.uploader.removeFromQueue(this)}},onBeforeUpload:{value:function(){}},onProgress:{value:function(e){}},onSuccess:{value:function(e,t,n){}},onError:{value:function(e,t,n){}},onCancel:{value:function(e,t,n){}},onComplete:{value:function(e,t,n){}},_onBeforeUpload:{value:function(){this.isReady=!0,this.isUploading=!0,this.isUploaded=!1,this.isSuccess=!1,this.isCancel=!1,this.isError=!1,this.progress=0,this.onBeforeUpload()}},_onProgress:{value:function(e){this.progress=e,this.onProgress(e)}},_onSuccess:{value:function(e,t,n){this.isReady=!1,this.isUploading=!1,this.isUploaded=!0,this.isSuccess=!0,this.isCancel=!1,this.isError=!1,this.progress=100,this.index=null,this.onSuccess(e,t,n)}},_onError:{value:function(e,t,n){this.isReady=!1,this.isUploading=!1,this.isUploaded=!0,this.isSuccess=!1,this.isCancel=!1,this.isError=!0,this.progress=0,this.index=null,this.onError(e,t,n)}},_onCancel:{value:function(e,t,n){this.isReady=!1,this.isUploading=!1,this.isUploaded=!1,this.isSuccess=!1,this.isCancel=!0,this.isError=!1,this.progress=0,this.index=null,this.onCancel(e,t,n)}},_onComplete:{value:function(e,t,n){this.onComplete(e,t,n),this.removeAfterUpload&&this.remove()}},_destroy:{value:function(){this._input&&this._input.remove(),this._form&&this._form.remove(),delete this._form,delete this._input}},_prepareToUploading:{value:function(){this.index=this.index||++this.uploader._nextIndex,this.isReady=!0}},_replaceNode:{value:function(t){var n=e(t.clone())(t.scope());n.prop("value",null),t.css("display","none"),t.after(n)}}}),n}();return n},e.exports.$inject=["$compile","FileLikeObject"]},function(e,t,n){"use strict";var r=function(e){return e&&e.__esModule?e["default"]:e},i=function(){function e(e,t){for(var n in t){var r=t[n];r.configurable=!0,r.value&&(r.writable=!0)}Object.defineProperties(e,t)}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},s=(r(n(2)),angular.extend);e.exports=function(){var e=function(){function e(t){o(this,e),s(this,t),this.uploader._directives[this.prop].push(this),this._saveLinks(),this.bind()}return i(e,{bind:{value:function(){for(var e in this.events){var t=this.events[e];this.element.bind(e,this[t])}}},unbind:{value:function(){for(var e in this.events)this.element.unbind(e,this.events[e])}},destroy:{value:function(){var e=this.uploader._directives[this.prop].indexOf(this);this.uploader._directives[this.prop].splice(e,1),this.unbind()}},_saveLinks:{value:function(){for(var e in this.events){var t=this.events[e];this[t]=this[t].bind(this)}}}}),e}();return e.prototype.events={},e},e.exports.$inject=[]},function(e,t,n){"use strict";var r=function(e){return e&&e.__esModule?e["default"]:e},i=function(){function e(e,t){for(var n in t){var r=t[n];r.configurable=!0,r.value&&(r.writable=!0)}Object.defineProperties(e,t)}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=function c(e,t,n){var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:c(i,t,n)}if("value"in r&&r.writable)return r.value;var o=r.get;return void 0===o?void 0:o.call(n)},s=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(e.__proto__=t)},a=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},u=(r(n(2)),angular.extend),l=angular.forEach;e.exports=function(e){var t=function(e){function t(e){a(this,t);var n=u(e,{events:{$destroy:"destroy",drop:"onDrop",dragover:"onDragOver",dragleave:"onDragLeave"},prop:"drop"});o(Object.getPrototypeOf(t.prototype),"constructor",this).call(this,n)}return s(t,e),i(t,{getOptions:{value:function(){}},getFilters:{value:function(){}},onDrop:{value:function(e){var t=this._getTransfer(e);if(t){var n=this.getOptions(),r=this.getFilters();this._preventAndStop(e),l(this.uploader._directives.over,this._removeOverClass,this),this.uploader.addToQueue(t.files,n,r)}}},onDragOver:{value:function(e){var t=this._getTransfer(e);this._haveFiles(t.types)&&(t.dropEffect="copy",this._preventAndStop(e),l(this.uploader._directives.over,this._addOverClass,this))}},onDragLeave:{value:function(e){e.currentTarget!==this.element[0]&&(this._preventAndStop(e),l(this.uploader._directives.over,this._removeOverClass,this))}},_getTransfer:{value:function(e){return e.dataTransfer?e.dataTransfer:e.originalEvent.dataTransfer}},_preventAndStop:{value:function(e){e.preventDefault(),e.stopPropagation()}},_haveFiles:{value:function(e){return e?e.indexOf?-1!==e.indexOf("Files"):e.contains?e.contains("Files"):!1:!1}},_addOverClass:{value:function(e){e.addOverClass()}},_removeOverClass:{value:function(e){e.removeOverClass()}}}),t}(e);return t},e.exports.$inject=["FileDirective"]},function(e,t,n){"use strict";var r=function(e){return e&&e.__esModule?e["default"]:e},i=function(){function e(e,t){for(var n in t){var r=t[n];r.configurable=!0,r.value&&(r.writable=!0)}Object.defineProperties(e,t)}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=function l(e,t,n){var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:l(i,t,n)}if("value"in r&&r.writable)return r.value;var o=r.get;return void 0===o?void 0:o.call(n)},s=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(e.__proto__=t)},a=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},u=(r(n(2)),angular.extend);e.exports=function(e){var t=function(e){function t(e){a(this,t);var n=u(e,{events:{$destroy:"destroy"},prop:"over",overClass:"nv-file-over"});o(Object.getPrototypeOf(t.prototype),"constructor",this).call(this,n)}return s(t,e),i(t,{addOverClass:{value:function(){this.element.addClass(this.getOverClass())}},removeOverClass:{value:function(){this.element.removeClass(this.getOverClass())}},getOverClass:{value:function(){return this.overClass}}}),t}(e);return t},e.exports.$inject=["FileDirective"]},function(e,t,n){"use strict";var r=function(e){return e&&e.__esModule?e["default"]:e};r(n(2));e.exports=function(e,t,n){return{link:function(r,i,o){var s=r.$eval(o.uploader);if(!(s instanceof t))throw new TypeError('"Uploader" must be an instance of FileUploader');var a=new n({uploader:s,element:i});a.getOptions=e(o.options).bind(a,r),a.getFilters=function(){return o.filters}}}},e.exports.$inject=["$parse","FileUploader","FileSelect"]},function(e,t,n){"use strict";var r=function(e){return e&&e.__esModule?e["default"]:e};r(n(2));e.exports=function(e,t,n){return{link:function(r,i,o){var s=r.$eval(o.uploader);if(!(s instanceof t))throw new TypeError('"Uploader" must be an instance of FileUploader');if(s.isHTML5){var a=new n({uploader:s,element:i});a.getOptions=e(o.options).bind(a,r),a.getFilters=function(){return o.filters}}}}},e.exports.$inject=["$parse","FileUploader","FileDrop"]},function(e,t,n){"use strict";var r=function(e){return e&&e.__esModule?e["default"]:e};r(n(2));e.exports=function(e,t){return{link:function(n,r,i){var o=n.$eval(i.uploader);if(!(o instanceof e))throw new TypeError('"Uploader" must be an instance of FileUploader');var s=new t({uploader:o,element:r});s.getOverClass=function(){return i.overClass||s.overClass}}}},e.exports.$inject=["FileUploader","FileOver"]}])});
  7 +//# sourceMappingURL=angular-file-upload.min.js.map
0 8 \ No newline at end of file
... ...
src/main/resources/static/assets/bower_components/angular-file-upload/dist/angular-file-upload.min.js.map 0 → 100644
  1 +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///angular-file-upload.min.js","webpack:///webpack/bootstrap 2be85a13effb1c2acd03","webpack:///c:/OpenServer/domains/angular-file-upload.my/src/index.js","webpack:///c:/OpenServer/domains/angular-file-upload.my/src/services/FileSelect.js","webpack:///./src/config.json","webpack:///c:/OpenServer/domains/angular-file-upload.my/src/values/options.js","webpack:///c:/OpenServer/domains/angular-file-upload.my/src/services/FileUploader.js","webpack:///c:/OpenServer/domains/angular-file-upload.my/src/services/FileLikeObject.js","webpack:///c:/OpenServer/domains/angular-file-upload.my/src/services/FileItem.js","webpack:///c:/OpenServer/domains/angular-file-upload.my/src/services/FileDirective.js","webpack:///c:/OpenServer/domains/angular-file-upload.my/src/services/FileDrop.js","webpack:///c:/OpenServer/domains/angular-file-upload.my/src/services/FileOver.js","webpack:///c:/OpenServer/domains/angular-file-upload.my/src/directives/FileSelect.js","webpack:///c:/OpenServer/domains/angular-file-upload.my/src/directives/FileDrop.js","webpack:///c:/OpenServer/domains/angular-file-upload.my/src/directives/FileOver.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","_interopRequire","obj","__esModule","CONFIG","options","serviceFileUploader","serviceFileLikeObject","serviceFileItem","serviceFileDirective","serviceFileSelect","serviceFileDrop","serviceFileOver","directiveFileSelect","directiveFileDrop","directiveFileOver","angular","name","value","directive","run","FileUploader","FileLikeObject","FileItem","FileDirective","FileSelect","FileDrop","FileOver","_createClass","defineProperties","target","props","key","prop","configurable","writable","Object","Constructor","protoProps","staticProps","prototype","_get","get","object","property","receiver","desc","getOwnPropertyDescriptor","undefined","parent","getPrototypeOf","getter","_inherits","subClass","superClass","TypeError","create","constructor","enumerable","__proto__","_classCallCheck","instance","extend","_FileDirective","extendedOptions","events","$destroy","change","uploader","isHTML5","element","removeAttr","getOptions","getFilters","isEmptyAfterSelection","attr","onChange","files","filters","destroy","addToQueue","replaceWith","clone","$inject","url","alias","headers","queue","progress","autoUpload","removeAfterUpload","method","formData","queueLimit","Number","MAX_VALUE","withCredentials","copy","forEach","isObject","isNumber","isDefined","isArray","fileUploaderOptions","$rootScope","$http","$window","File","FormData","settings","isUploading","_nextIndex","_failFilterIndex","_directives","select","drop","over","unshift","fn","_queueLimitFilter","_folderFilter","_this","list","isArrayLikeObject","arrayOfFilters","_getFilters","count","length","addedFileItems","some","temp","_isValidFile","fileItem","push","_onAfterAddingFile","filter","_onWhenAddingFileFailed","_onAfterAddingAll","_getTotalProgress","_render","uploadAll","removeFromQueue","index","getIndexOfItem","item","cancel","splice","_destroy","clearQueue","remove","uploadItem","transport","_prepareToUploading","cancelItem","abort","items","getNotUploadedItems","upload","cancelAll","isFile","isFileLikeObject","indexOf","isUploaded","getReadyItems","isReady","sort","item1","item2","onAfterAddingAll","fileItems","onAfterAddingFile","onWhenAddingFileFailed","onBeforeUploadItem","onProgressItem","onProgressAll","onSuccessItem","response","status","onErrorItem","onCancelItem","onCompleteItem","onCompleteAll","notUploaded","uploaded","ratio","current","Math","round","names","match","$$phase","$apply","size","type","file","every","_isSuccessCode","_transformResponse","headersGetter","_headersGetter","defaults","transformResponse","transformFn","_parseHeaders","val","i","parsed","split","line","slice","trim","toLowerCase","parsedHeaders","_xhrTransport","xhr","_xhr","XMLHttpRequest","form","_onBeforeUploadItem","append","_file","onprogress","event","lengthComputable","total","_onProgressItem","onload","getAllResponseHeaders","gist","_onCompleteItem","onerror","_onErrorItem","onabort","_onCancelItem","open","setRequestHeader","send","_iframeTransport","iframe","Date","now","input","_input","_form","element_","action","enctype","encoding","bind","html","contentDocument","body","innerHTML","e","dummy","_onSuccessItem","unbind","after","submit","_onBeforeUpload","_onProgress","_onSuccess","_onError","_onCancel","_onComplete","nextItem","inherit","source","super_","isElement","isString","fileOrInput","isInput","fakePathOrObject","postfix","_createFromFakePath","path","lastModifiedDate","lastIndexOf","_createFromObject","$compile","isSuccess","isCancel","isError","_replaceNode","onBeforeUpload","onProgress","onSuccess","onError","onCancel","onComplete","scope","css","_saveLinks","dragover","dragleave","onDrop","transfer","_getTransfer","_preventAndStop","_removeOverClass","onDragOver","_haveFiles","types","dropEffect","_addOverClass","onDragLeave","currentTarget","dataTransfer","originalEvent","preventDefault","stopPropagation","contains","addOverClass","removeOverClass","overClass","addClass","getOverClass","removeClass","$parse","link","attributes","$eval"],"mappings":"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","file":"angular-file-upload.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"angular-file-upload\"] = factory();\n\telse\n\t\troot[\"angular-file-upload\"] = factory();\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"angular-file-upload\"] = factory();\n\telse\n\t\troot[\"angular-file-upload\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\t\n\tvar CONFIG = _interopRequire(__webpack_require__(2));\n\t\n\tvar options = _interopRequire(__webpack_require__(3));\n\t\n\tvar serviceFileUploader = _interopRequire(__webpack_require__(4));\n\t\n\tvar serviceFileLikeObject = _interopRequire(__webpack_require__(5));\n\t\n\tvar serviceFileItem = _interopRequire(__webpack_require__(6));\n\t\n\tvar serviceFileDirective = _interopRequire(__webpack_require__(7));\n\t\n\tvar serviceFileSelect = _interopRequire(__webpack_require__(1));\n\t\n\tvar serviceFileDrop = _interopRequire(__webpack_require__(8));\n\t\n\tvar serviceFileOver = _interopRequire(__webpack_require__(9));\n\t\n\tvar directiveFileSelect = _interopRequire(__webpack_require__(10));\n\t\n\tvar directiveFileDrop = _interopRequire(__webpack_require__(11));\n\t\n\tvar directiveFileOver = _interopRequire(__webpack_require__(12));\n\t\n\tangular.module(CONFIG.name, []).value(\"fileUploaderOptions\", options).factory(\"FileUploader\", serviceFileUploader).factory(\"FileLikeObject\", serviceFileLikeObject).factory(\"FileItem\", serviceFileItem).factory(\"FileDirective\", serviceFileDirective).factory(\"FileSelect\", serviceFileSelect).factory(\"FileDrop\", serviceFileDrop).factory(\"FileOver\", serviceFileOver).directive(\"nvFileSelect\", directiveFileSelect).directive(\"nvFileDrop\", directiveFileDrop).directive(\"nvFileOver\", directiveFileOver).run([\"FileUploader\", \"FileLikeObject\", \"FileItem\", \"FileDirective\", \"FileSelect\", \"FileDrop\", \"FileOver\", function (FileUploader, FileLikeObject, FileItem, FileDirective, FileSelect, FileDrop, FileOver) {\n\t // only for compatibility\n\t FileUploader.FileLikeObject = FileLikeObject;\n\t FileUploader.FileItem = FileItem;\n\t FileUploader.FileDirective = FileDirective;\n\t FileUploader.FileSelect = FileSelect;\n\t FileUploader.FileDrop = FileDrop;\n\t FileUploader.FileOver = FileOver;\n\t}]);\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\t\n\tvar _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\t\n\tvar _get = function get(object, property, receiver) { var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc && desc.writable) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\t\n\tvar _inherits = function (subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };\n\t\n\tvar _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } };\n\t\n\tvar CONFIG = _interopRequire(__webpack_require__(2));\n\t\n\tvar extend = angular.extend;\n\t\n\tmodule.exports = function (FileDirective) {\n\t var FileSelect = (function (_FileDirective) {\n\t /**\r\n\t * Creates instance of {FileSelect} object\r\n\t * @param {Object} options\r\n\t * @constructor\r\n\t */\n\t\n\t function FileSelect(options) {\n\t _classCallCheck(this, FileSelect);\n\t\n\t var extendedOptions = extend(options, {\n\t // Map of events\n\t events: {\n\t $destroy: \"destroy\",\n\t change: \"onChange\"\n\t },\n\t // Name of property inside uploader._directive object\n\t prop: \"select\"\n\t });\n\t\n\t _get(Object.getPrototypeOf(FileSelect.prototype), \"constructor\", this).call(this, extendedOptions);\n\t\n\t if (!this.uploader.isHTML5) {\n\t this.element.removeAttr(\"multiple\");\n\t }\n\t this.element.prop(\"value\", null); // FF fix\n\t }\n\t\n\t _inherits(FileSelect, _FileDirective);\n\t\n\t _createClass(FileSelect, {\n\t getOptions: {\n\t /**\r\n\t * Returns options\r\n\t * @return {Object|undefined}\r\n\t */\n\t\n\t value: function getOptions() {}\n\t },\n\t getFilters: {\n\t /**\r\n\t * Returns filters\r\n\t * @return {Array<Function>|String|undefined}\r\n\t */\n\t\n\t value: function getFilters() {}\n\t },\n\t isEmptyAfterSelection: {\n\t /**\r\n\t * If returns \"true\" then HTMLInputElement will be cleared\r\n\t * @returns {Boolean}\r\n\t */\n\t\n\t value: function isEmptyAfterSelection() {\n\t return !!this.element.attr(\"multiple\");\n\t }\n\t },\n\t onChange: {\n\t /**\r\n\t * Event handler\r\n\t */\n\t\n\t value: function onChange() {\n\t var files = this.uploader.isHTML5 ? this.element[0].files : this.element[0];\n\t var options = this.getOptions();\n\t var filters = this.getFilters();\n\t\n\t if (!this.uploader.isHTML5) this.destroy();\n\t this.uploader.addToQueue(files, options, filters);\n\t if (this.isEmptyAfterSelection()) {\n\t this.element.prop(\"value\", null);\n\t this.element.replaceWith(this.element = this.element.clone(true)); // IE fix\n\t }\n\t }\n\t }\n\t });\n\t\n\t return FileSelect;\n\t })(FileDirective);\n\t\n\t return FileSelect;\n\t};\n\t\n\tmodule.exports.$inject = [\"FileDirective\"];\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\tmodule.exports = {\n\t\t\"name\": \"angularFileUpload\"\n\t}\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t\n\tmodule.exports = {\n\t url: \"/\",\n\t alias: \"file\",\n\t headers: {},\n\t queue: [],\n\t progress: 0,\n\t autoUpload: false,\n\t removeAfterUpload: false,\n\t method: \"POST\",\n\t filters: [],\n\t formData: [],\n\t queueLimit: Number.MAX_VALUE,\n\t withCredentials: false\n\t};\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\t\n\tvar _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\t\n\tvar _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } };\n\t\n\tvar CONFIG = _interopRequire(__webpack_require__(2));\n\t\n\tvar copy = angular.copy;\n\tvar extend = angular.extend;\n\tvar forEach = angular.forEach;\n\tvar isObject = angular.isObject;\n\tvar isNumber = angular.isNumber;\n\tvar isDefined = angular.isDefined;\n\tvar isArray = angular.isArray;\n\tvar element = angular.element;\n\t\n\tmodule.exports = function (fileUploaderOptions, $rootScope, $http, $window, FileLikeObject, FileItem) {\n\t var File = $window.File;\n\t var FormData = $window.FormData;\n\t\n\t var FileUploader = (function () {\n\t /**********************\r\n\t * PUBLIC\r\n\t **********************/\n\t /**\r\n\t * Creates an instance of FileUploader\r\n\t * @param {Object} [options]\r\n\t * @constructor\r\n\t */\n\t\n\t function FileUploader(options) {\n\t _classCallCheck(this, FileUploader);\n\t\n\t var settings = copy(fileUploaderOptions);\n\t\n\t extend(this, settings, options, {\n\t isUploading: false,\n\t _nextIndex: 0,\n\t _failFilterIndex: -1,\n\t _directives: { select: [], drop: [], over: [] }\n\t });\n\t\n\t // add default filters\n\t this.filters.unshift({ name: \"queueLimit\", fn: this._queueLimitFilter });\n\t this.filters.unshift({ name: \"folder\", fn: this._folderFilter });\n\t }\n\t\n\t _createClass(FileUploader, {\n\t addToQueue: {\n\t /**\r\n\t * Adds items to the queue\r\n\t * @param {File|HTMLInputElement|Object|FileList|Array<Object>} files\r\n\t * @param {Object} [options]\r\n\t * @param {Array<Function>|String} filters\r\n\t */\n\t\n\t value: function addToQueue(files, options, filters) {\n\t var _this = this;\n\t\n\t var list = this.isArrayLikeObject(files) ? files : [files];\n\t var arrayOfFilters = this._getFilters(filters);\n\t var count = this.queue.length;\n\t var addedFileItems = [];\n\t\n\t forEach(list, function (some /*{File|HTMLInputElement|Object}*/) {\n\t var temp = new FileLikeObject(some);\n\t\n\t if (_this._isValidFile(temp, arrayOfFilters, options)) {\n\t var fileItem = new FileItem(_this, some, options);\n\t addedFileItems.push(fileItem);\n\t _this.queue.push(fileItem);\n\t _this._onAfterAddingFile(fileItem);\n\t } else {\n\t var filter = arrayOfFilters[_this._failFilterIndex];\n\t _this._onWhenAddingFileFailed(temp, filter, options);\n\t }\n\t });\n\t\n\t if (this.queue.length !== count) {\n\t this._onAfterAddingAll(addedFileItems);\n\t this.progress = this._getTotalProgress();\n\t }\n\t\n\t this._render();\n\t if (this.autoUpload) this.uploadAll();\n\t }\n\t },\n\t removeFromQueue: {\n\t /**\r\n\t * Remove items from the queue. Remove last: index = -1\r\n\t * @param {FileItem|Number} value\r\n\t */\n\t\n\t value: function removeFromQueue(value) {\n\t var index = this.getIndexOfItem(value);\n\t var item = this.queue[index];\n\t if (item.isUploading) item.cancel();\n\t this.queue.splice(index, 1);\n\t item._destroy();\n\t this.progress = this._getTotalProgress();\n\t }\n\t },\n\t clearQueue: {\n\t /**\r\n\t * Clears the queue\r\n\t */\n\t\n\t value: function clearQueue() {\n\t while (this.queue.length) {\n\t this.queue[0].remove();\n\t }\n\t this.progress = 0;\n\t }\n\t },\n\t uploadItem: {\n\t /**\r\n\t * Uploads a item from the queue\r\n\t * @param {FileItem|Number} value\r\n\t */\n\t\n\t value: function uploadItem(value) {\n\t var index = this.getIndexOfItem(value);\n\t var item = this.queue[index];\n\t var transport = this.isHTML5 ? \"_xhrTransport\" : \"_iframeTransport\";\n\t\n\t item._prepareToUploading();\n\t if (this.isUploading) {\n\t return;\n\t }this.isUploading = true;\n\t this[transport](item);\n\t }\n\t },\n\t cancelItem: {\n\t /**\r\n\t * Cancels uploading of item from the queue\r\n\t * @param {FileItem|Number} value\r\n\t */\n\t\n\t value: function cancelItem(value) {\n\t var index = this.getIndexOfItem(value);\n\t var item = this.queue[index];\n\t var prop = this.isHTML5 ? \"_xhr\" : \"_form\";\n\t if (item && item.isUploading) item[prop].abort();\n\t }\n\t },\n\t uploadAll: {\n\t /**\r\n\t * Uploads all not uploaded items of queue\r\n\t */\n\t\n\t value: function uploadAll() {\n\t var items = this.getNotUploadedItems().filter(function (item) {\n\t return !item.isUploading;\n\t });\n\t if (!items.length) {\n\t return;\n\t }forEach(items, function (item) {\n\t return item._prepareToUploading();\n\t });\n\t items[0].upload();\n\t }\n\t },\n\t cancelAll: {\n\t /**\r\n\t * Cancels all uploads\r\n\t */\n\t\n\t value: function cancelAll() {\n\t var items = this.getNotUploadedItems();\n\t forEach(items, function (item) {\n\t return item.cancel();\n\t });\n\t }\n\t },\n\t isFile: {\n\t /**\r\n\t * Returns \"true\" if value an instance of File\r\n\t * @param {*} value\r\n\t * @returns {Boolean}\r\n\t * @private\r\n\t */\n\t\n\t value: function isFile(value) {\n\t return this.constructor.isFile(value);\n\t }\n\t },\n\t isFileLikeObject: {\n\t /**\r\n\t * Returns \"true\" if value an instance of FileLikeObject\r\n\t * @param {*} value\r\n\t * @returns {Boolean}\r\n\t * @private\r\n\t */\n\t\n\t value: function isFileLikeObject(value) {\n\t return this.constructor.isFileLikeObject(value);\n\t }\n\t },\n\t isArrayLikeObject: {\n\t /**\r\n\t * Returns \"true\" if value is array like object\r\n\t * @param {*} value\r\n\t * @returns {Boolean}\r\n\t */\n\t\n\t value: function isArrayLikeObject(value) {\n\t return this.constructor.isArrayLikeObject(value);\n\t }\n\t },\n\t getIndexOfItem: {\n\t /**\r\n\t * Returns a index of item from the queue\r\n\t * @param {Item|Number} value\r\n\t * @returns {Number}\r\n\t */\n\t\n\t value: function getIndexOfItem(value) {\n\t return isNumber(value) ? value : this.queue.indexOf(value);\n\t }\n\t },\n\t getNotUploadedItems: {\n\t /**\r\n\t * Returns not uploaded items\r\n\t * @returns {Array}\r\n\t */\n\t\n\t value: function getNotUploadedItems() {\n\t return this.queue.filter(function (item) {\n\t return !item.isUploaded;\n\t });\n\t }\n\t },\n\t getReadyItems: {\n\t /**\r\n\t * Returns items ready for upload\r\n\t * @returns {Array}\r\n\t */\n\t\n\t value: function getReadyItems() {\n\t return this.queue.filter(function (item) {\n\t return item.isReady && !item.isUploading;\n\t }).sort(function (item1, item2) {\n\t return item1.index - item2.index;\n\t });\n\t }\n\t },\n\t destroy: {\n\t /**\r\n\t * Destroys instance of FileUploader\r\n\t */\n\t\n\t value: function destroy() {\n\t var _this = this;\n\t\n\t forEach(this._directives, function (key) {\n\t forEach(_this._directives[key], function (object) {\n\t object.destroy();\n\t });\n\t });\n\t }\n\t },\n\t onAfterAddingAll: {\n\t /**\r\n\t * Callback\r\n\t * @param {Array} fileItems\r\n\t */\n\t\n\t value: function onAfterAddingAll(fileItems) {}\n\t },\n\t onAfterAddingFile: {\n\t /**\r\n\t * Callback\r\n\t * @param {FileItem} fileItem\r\n\t */\n\t\n\t value: function onAfterAddingFile(fileItem) {}\n\t },\n\t onWhenAddingFileFailed: {\n\t /**\r\n\t * Callback\r\n\t * @param {File|Object} item\r\n\t * @param {Object} filter\r\n\t * @param {Object} options\r\n\t */\n\t\n\t value: function onWhenAddingFileFailed(item, filter, options) {}\n\t },\n\t onBeforeUploadItem: {\n\t /**\r\n\t * Callback\r\n\t * @param {FileItem} fileItem\r\n\t */\n\t\n\t value: function onBeforeUploadItem(fileItem) {}\n\t },\n\t onProgressItem: {\n\t /**\r\n\t * Callback\r\n\t * @param {FileItem} fileItem\r\n\t * @param {Number} progress\r\n\t */\n\t\n\t value: function onProgressItem(fileItem, progress) {}\n\t },\n\t onProgressAll: {\n\t /**\r\n\t * Callback\r\n\t * @param {Number} progress\r\n\t */\n\t\n\t value: function onProgressAll(progress) {}\n\t },\n\t onSuccessItem: {\n\t /**\r\n\t * Callback\r\n\t * @param {FileItem} item\r\n\t * @param {*} response\r\n\t * @param {Number} status\r\n\t * @param {Object} headers\r\n\t */\n\t\n\t value: function onSuccessItem(item, response, status, headers) {}\n\t },\n\t onErrorItem: {\n\t /**\r\n\t * Callback\r\n\t * @param {FileItem} item\r\n\t * @param {*} response\r\n\t * @param {Number} status\r\n\t * @param {Object} headers\r\n\t */\n\t\n\t value: function onErrorItem(item, response, status, headers) {}\n\t },\n\t onCancelItem: {\n\t /**\r\n\t * Callback\r\n\t * @param {FileItem} item\r\n\t * @param {*} response\r\n\t * @param {Number} status\r\n\t * @param {Object} headers\r\n\t */\n\t\n\t value: function onCancelItem(item, response, status, headers) {}\n\t },\n\t onCompleteItem: {\n\t /**\r\n\t * Callback\r\n\t * @param {FileItem} item\r\n\t * @param {*} response\r\n\t * @param {Number} status\r\n\t * @param {Object} headers\r\n\t */\n\t\n\t value: function onCompleteItem(item, response, status, headers) {}\n\t },\n\t onCompleteAll: {\n\t /**\r\n\t * Callback\r\n\t */\n\t\n\t value: function onCompleteAll() {}\n\t },\n\t _getTotalProgress: {\n\t /**********************\r\n\t * PRIVATE\r\n\t **********************/\n\t /**\r\n\t * Returns the total progress\r\n\t * @param {Number} [value]\r\n\t * @returns {Number}\r\n\t * @private\r\n\t */\n\t\n\t value: function _getTotalProgress(value) {\n\t if (this.removeAfterUpload) {\n\t return value || 0;\n\t }var notUploaded = this.getNotUploadedItems().length;\n\t var uploaded = notUploaded ? this.queue.length - notUploaded : this.queue.length;\n\t var ratio = 100 / this.queue.length;\n\t var current = (value || 0) * ratio / 100;\n\t\n\t return Math.round(uploaded * ratio + current);\n\t }\n\t },\n\t _getFilters: {\n\t /**\r\n\t * Returns array of filters\r\n\t * @param {Array<Function>|String} filters\r\n\t * @returns {Array<Function>}\r\n\t * @private\r\n\t */\n\t\n\t value: function _getFilters(filters) {\n\t if (!filters) {\n\t return this.filters;\n\t }if (isArray(filters)) {\n\t return filters;\n\t }var names = filters.match(/[^\\s,]+/g);\n\t return this.filters.filter(function (filter) {\n\t return names.indexOf(filter.name) !== -1;\n\t });\n\t }\n\t },\n\t _render: {\n\t /**\r\n\t * Updates html\r\n\t * @private\r\n\t */\n\t\n\t value: function _render() {\n\t if (!$rootScope.$$phase) $rootScope.$apply();\n\t }\n\t },\n\t _folderFilter: {\n\t /**\r\n\t * Returns \"true\" if item is a file (not folder)\r\n\t * @param {File|FileLikeObject} item\r\n\t * @returns {Boolean}\r\n\t * @private\r\n\t */\n\t\n\t value: function _folderFilter(item) {\n\t return !!(item.size || item.type);\n\t }\n\t },\n\t _queueLimitFilter: {\n\t /**\r\n\t * Returns \"true\" if the limit has not been reached\r\n\t * @returns {Boolean}\r\n\t * @private\r\n\t */\n\t\n\t value: function _queueLimitFilter() {\n\t return this.queue.length < this.queueLimit;\n\t }\n\t },\n\t _isValidFile: {\n\t /**\r\n\t * Returns \"true\" if file pass all filters\r\n\t * @param {File|Object} file\r\n\t * @param {Array<Function>} filters\r\n\t * @param {Object} options\r\n\t * @returns {Boolean}\r\n\t * @private\r\n\t */\n\t\n\t value: function _isValidFile(file, filters, options) {\n\t var _this = this;\n\t\n\t this._failFilterIndex = -1;\n\t return !filters.length ? true : filters.every(function (filter) {\n\t _this._failFilterIndex++;\n\t return filter.fn.call(_this, file, options);\n\t });\n\t }\n\t },\n\t _isSuccessCode: {\n\t /**\r\n\t * Checks whether upload successful\r\n\t * @param {Number} status\r\n\t * @returns {Boolean}\r\n\t * @private\r\n\t */\n\t\n\t value: function _isSuccessCode(status) {\n\t return status >= 200 && status < 300 || status === 304;\n\t }\n\t },\n\t _transformResponse: {\n\t /**\r\n\t * Transforms the server response\r\n\t * @param {*} response\r\n\t * @param {Object} headers\r\n\t * @returns {*}\r\n\t * @private\r\n\t */\n\t\n\t value: function _transformResponse(response, headers) {\n\t var headersGetter = this._headersGetter(headers);\n\t forEach($http.defaults.transformResponse, function (transformFn) {\n\t response = transformFn(response, headersGetter);\n\t });\n\t return response;\n\t }\n\t },\n\t _parseHeaders: {\n\t /**\r\n\t * Parsed response headers\r\n\t * @param headers\r\n\t * @returns {Object}\r\n\t * @see https://github.com/angular/angular.js/blob/master/src/ng/http.js\r\n\t * @private\r\n\t */\n\t\n\t value: function _parseHeaders(headers) {\n\t var parsed = {},\n\t key,\n\t val,\n\t i;\n\t\n\t if (!headers) {\n\t return parsed;\n\t }forEach(headers.split(\"\\n\"), function (line) {\n\t i = line.indexOf(\":\");\n\t key = line.slice(0, i).trim().toLowerCase();\n\t val = line.slice(i + 1).trim();\n\t\n\t if (key) {\n\t parsed[key] = parsed[key] ? parsed[key] + \", \" + val : val;\n\t }\n\t });\n\t\n\t return parsed;\n\t }\n\t },\n\t _headersGetter: {\n\t /**\r\n\t * Returns function that returns headers\r\n\t * @param {Object} parsedHeaders\r\n\t * @returns {Function}\r\n\t * @private\r\n\t */\n\t\n\t value: function _headersGetter(parsedHeaders) {\n\t return function (name) {\n\t if (name) {\n\t return parsedHeaders[name.toLowerCase()] || null;\n\t }\n\t return parsedHeaders;\n\t };\n\t }\n\t },\n\t _xhrTransport: {\n\t /**\r\n\t * The XMLHttpRequest transport\r\n\t * @param {FileItem} item\r\n\t * @private\r\n\t */\n\t\n\t value: function _xhrTransport(item) {\n\t var _this = this;\n\t\n\t var xhr = item._xhr = new XMLHttpRequest();\n\t var form = new FormData();\n\t\n\t this._onBeforeUploadItem(item);\n\t\n\t forEach(item.formData, function (obj) {\n\t forEach(obj, function (value, key) {\n\t form.append(key, value);\n\t });\n\t });\n\t\n\t if (typeof item._file.size != \"number\") {\n\t throw new TypeError(\"The file specified is no longer valid\");\n\t }\n\t\n\t form.append(item.alias, item._file, item.file.name);\n\t\n\t xhr.upload.onprogress = function (event) {\n\t var progress = Math.round(event.lengthComputable ? event.loaded * 100 / event.total : 0);\n\t _this._onProgressItem(item, progress);\n\t };\n\t\n\t xhr.onload = function () {\n\t var headers = _this._parseHeaders(xhr.getAllResponseHeaders());\n\t var response = _this._transformResponse(xhr.response, headers);\n\t var gist = _this._isSuccessCode(xhr.status) ? \"Success\" : \"Error\";\n\t var method = \"_on\" + gist + \"Item\";\n\t _this[method](item, response, xhr.status, headers);\n\t _this._onCompleteItem(item, response, xhr.status, headers);\n\t };\n\t\n\t xhr.onerror = function () {\n\t var headers = _this._parseHeaders(xhr.getAllResponseHeaders());\n\t var response = _this._transformResponse(xhr.response, headers);\n\t _this._onErrorItem(item, response, xhr.status, headers);\n\t _this._onCompleteItem(item, response, xhr.status, headers);\n\t };\n\t\n\t xhr.onabort = function () {\n\t var headers = _this._parseHeaders(xhr.getAllResponseHeaders());\n\t var response = _this._transformResponse(xhr.response, headers);\n\t _this._onCancelItem(item, response, xhr.status, headers);\n\t _this._onCompleteItem(item, response, xhr.status, headers);\n\t };\n\t\n\t xhr.open(item.method, item.url, true);\n\t\n\t xhr.withCredentials = item.withCredentials;\n\t\n\t forEach(item.headers, function (value, name) {\n\t xhr.setRequestHeader(name, value);\n\t });\n\t\n\t xhr.send(form);\n\t this._render();\n\t }\n\t },\n\t _iframeTransport: {\n\t /**\r\n\t * The IFrame transport\r\n\t * @param {FileItem} item\r\n\t * @private\r\n\t */\n\t\n\t value: function _iframeTransport(item) {\n\t var _this = this;\n\t\n\t var form = element(\"<form style=\\\"display: none;\\\" />\");\n\t var iframe = element(\"<iframe name=\\\"iframeTransport\" + Date.now() + \"\\\">\");\n\t var input = item._input;\n\t\n\t if (item._form) item._form.replaceWith(input); // remove old form\n\t item._form = form; // save link to new form\n\t\n\t this._onBeforeUploadItem(item);\n\t\n\t input.prop(\"name\", item.alias);\n\t\n\t forEach(item.formData, function (obj) {\n\t forEach(obj, function (value, key) {\n\t var element_ = element(\"<input type=\\\"hidden\\\" name=\\\"\" + key + \"\\\" />\");\n\t element_.val(value);\n\t form.append(element_);\n\t });\n\t });\n\t\n\t form.prop({\n\t action: item.url,\n\t method: \"POST\",\n\t target: iframe.prop(\"name\"),\n\t enctype: \"multipart/form-data\",\n\t encoding: \"multipart/form-data\" // old IE\n\t });\n\t\n\t iframe.bind(\"load\", function () {\n\t var html = \"\";\n\t var status = 200;\n\t\n\t try {\n\t // Fix for legacy IE browsers that loads internal error page\n\t // when failed WS response received. In consequence iframe\n\t // content access denied error is thrown becouse trying to\n\t // access cross domain page. When such thing occurs notifying\n\t // with empty response object. See more info at:\n\t // http://stackoverflow.com/questions/151362/access-is-denied-error-on-accessing-iframe-document-object\n\t // Note that if non standard 4xx or 5xx error code returned\n\t // from WS then response content can be accessed without error\n\t // but 'XHR' status becomes 200. In order to avoid confusion\n\t // returning response via same 'success' event handler.\n\t\n\t // fixed angular.contents() for iframes\n\t html = iframe[0].contentDocument.body.innerHTML;\n\t } catch (e) {\n\t // in case we run into the access-is-denied error or we have another error on the server side\n\t // (intentional 500,40... errors), we at least say 'something went wrong' -> 500\n\t status = 500;\n\t }\n\t\n\t var xhr = { response: html, status: status, dummy: true };\n\t var headers = {};\n\t var response = _this._transformResponse(xhr.response, headers);\n\t\n\t _this._onSuccessItem(item, response, xhr.status, headers);\n\t _this._onCompleteItem(item, response, xhr.status, headers);\n\t });\n\t\n\t form.abort = function () {\n\t var xhr = { status: 0, dummy: true };\n\t var headers = {};\n\t var response;\n\t\n\t iframe.unbind(\"load\").prop(\"src\", \"javascript:false;\");\n\t form.replaceWith(input);\n\t\n\t _this._onCancelItem(item, response, xhr.status, headers);\n\t _this._onCompleteItem(item, response, xhr.status, headers);\n\t };\n\t\n\t input.after(form);\n\t form.append(input).append(iframe);\n\t\n\t form[0].submit();\n\t this._render();\n\t }\n\t },\n\t _onWhenAddingFileFailed: {\n\t /**\r\n\t * Inner callback\r\n\t * @param {File|Object} item\r\n\t * @param {Object} filter\r\n\t * @param {Object} options\r\n\t * @private\r\n\t */\n\t\n\t value: function _onWhenAddingFileFailed(item, filter, options) {\n\t this.onWhenAddingFileFailed(item, filter, options);\n\t }\n\t },\n\t _onAfterAddingFile: {\n\t /**\r\n\t * Inner callback\r\n\t * @param {FileItem} item\r\n\t */\n\t\n\t value: function _onAfterAddingFile(item) {\n\t this.onAfterAddingFile(item);\n\t }\n\t },\n\t _onAfterAddingAll: {\n\t /**\r\n\t * Inner callback\r\n\t * @param {Array<FileItem>} items\r\n\t */\n\t\n\t value: function _onAfterAddingAll(items) {\n\t this.onAfterAddingAll(items);\n\t }\n\t },\n\t _onBeforeUploadItem: {\n\t /**\r\n\t * Inner callback\r\n\t * @param {FileItem} item\r\n\t * @private\r\n\t */\n\t\n\t value: function _onBeforeUploadItem(item) {\n\t item._onBeforeUpload();\n\t this.onBeforeUploadItem(item);\n\t }\n\t },\n\t _onProgressItem: {\n\t /**\r\n\t * Inner callback\r\n\t * @param {FileItem} item\r\n\t * @param {Number} progress\r\n\t * @private\r\n\t */\n\t\n\t value: function _onProgressItem(item, progress) {\n\t var total = this._getTotalProgress(progress);\n\t this.progress = total;\n\t item._onProgress(progress);\n\t this.onProgressItem(item, progress);\n\t this.onProgressAll(total);\n\t this._render();\n\t }\n\t },\n\t _onSuccessItem: {\n\t /**\r\n\t * Inner callback\r\n\t * @param {FileItem} item\r\n\t * @param {*} response\r\n\t * @param {Number} status\r\n\t * @param {Object} headers\r\n\t * @private\r\n\t */\n\t\n\t value: function _onSuccessItem(item, response, status, headers) {\n\t item._onSuccess(response, status, headers);\n\t this.onSuccessItem(item, response, status, headers);\n\t }\n\t },\n\t _onErrorItem: {\n\t /**\r\n\t * Inner callback\r\n\t * @param {FileItem} item\r\n\t * @param {*} response\r\n\t * @param {Number} status\r\n\t * @param {Object} headers\r\n\t * @private\r\n\t */\n\t\n\t value: function _onErrorItem(item, response, status, headers) {\n\t item._onError(response, status, headers);\n\t this.onErrorItem(item, response, status, headers);\n\t }\n\t },\n\t _onCancelItem: {\n\t /**\r\n\t * Inner callback\r\n\t * @param {FileItem} item\r\n\t * @param {*} response\r\n\t * @param {Number} status\r\n\t * @param {Object} headers\r\n\t * @private\r\n\t */\n\t\n\t value: function _onCancelItem(item, response, status, headers) {\n\t item._onCancel(response, status, headers);\n\t this.onCancelItem(item, response, status, headers);\n\t }\n\t },\n\t _onCompleteItem: {\n\t /**\r\n\t * Inner callback\r\n\t * @param {FileItem} item\r\n\t * @param {*} response\r\n\t * @param {Number} status\r\n\t * @param {Object} headers\r\n\t * @private\r\n\t */\n\t\n\t value: function _onCompleteItem(item, response, status, headers) {\n\t item._onComplete(response, status, headers);\n\t this.onCompleteItem(item, response, status, headers);\n\t\n\t var nextItem = this.getReadyItems()[0];\n\t this.isUploading = false;\n\t\n\t if (isDefined(nextItem)) {\n\t nextItem.upload();\n\t return;\n\t }\n\t\n\t this.onCompleteAll();\n\t this.progress = this._getTotalProgress();\n\t this._render();\n\t }\n\t }\n\t }, {\n\t isFile: {\n\t /**********************\r\n\t * STATIC\r\n\t **********************/\n\t /**\r\n\t * Returns \"true\" if value an instance of File\r\n\t * @param {*} value\r\n\t * @returns {Boolean}\r\n\t * @private\r\n\t */\n\t\n\t value: function isFile(value) {\n\t return File && value instanceof File;\n\t }\n\t },\n\t isFileLikeObject: {\n\t /**\r\n\t * Returns \"true\" if value an instance of FileLikeObject\r\n\t * @param {*} value\r\n\t * @returns {Boolean}\r\n\t * @private\r\n\t */\n\t\n\t value: function isFileLikeObject(value) {\n\t return value instanceof FileLikeObject;\n\t }\n\t },\n\t isArrayLikeObject: {\n\t /**\r\n\t * Returns \"true\" if value is array like object\r\n\t * @param {*} value\r\n\t * @returns {Boolean}\r\n\t */\n\t\n\t value: function isArrayLikeObject(value) {\n\t return isObject(value) && \"length\" in value;\n\t }\n\t },\n\t inherit: {\n\t /**\r\n\t * Inherits a target (Class_1) by a source (Class_2)\r\n\t * @param {Function} target\r\n\t * @param {Function} source\r\n\t */\n\t\n\t value: function inherit(target, source) {\n\t target.prototype = Object.create(source.prototype);\n\t target.prototype.constructor = target;\n\t target.super_ = source;\n\t }\n\t }\n\t });\n\t\n\t return FileUploader;\n\t })();\n\t\n\t /**********************\r\n\t * PUBLIC\r\n\t **********************/\n\t /**\r\n\t * Checks a support the html5 uploader\r\n\t * @returns {Boolean}\r\n\t * @readonly\r\n\t */\n\t FileUploader.prototype.isHTML5 = !!(File && FormData);\n\t /**********************\r\n\t * STATIC\r\n\t **********************/\n\t /**\r\n\t * @borrows FileUploader.prototype.isHTML5\r\n\t */\n\t FileUploader.isHTML5 = FileUploader.prototype.isHTML5;\n\t\n\t return FileUploader;\n\t};\n\t\n\tmodule.exports.$inject = [\"fileUploaderOptions\", \"$rootScope\", \"$http\", \"$window\", \"FileLikeObject\", \"FileItem\"];\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\t\n\tvar _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\t\n\tvar _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } };\n\t\n\tvar CONFIG = _interopRequire(__webpack_require__(2));\n\t\n\tvar copy = angular.copy;\n\tvar isElement = angular.isElement;\n\tvar isString = angular.isString;\n\t\n\tmodule.exports = function () {\n\t var FileLikeObject = (function () {\n\t /**\r\n\t * Creates an instance of FileLikeObject\r\n\t * @param {File|HTMLInputElement|Object} fileOrInput\r\n\t * @constructor\r\n\t */\n\t\n\t function FileLikeObject(fileOrInput) {\n\t _classCallCheck(this, FileLikeObject);\n\t\n\t var isInput = isElement(fileOrInput);\n\t var fakePathOrObject = isInput ? fileOrInput.value : fileOrInput;\n\t var postfix = isString(fakePathOrObject) ? \"FakePath\" : \"Object\";\n\t var method = \"_createFrom\" + postfix;\n\t this[method](fakePathOrObject);\n\t }\n\t\n\t _createClass(FileLikeObject, {\n\t _createFromFakePath: {\n\t /**\r\n\t * Creates file like object from fake path string\r\n\t * @param {String} path\r\n\t * @private\r\n\t */\n\t\n\t value: function _createFromFakePath(path) {\n\t this.lastModifiedDate = null;\n\t this.size = null;\n\t this.type = \"like/\" + path.slice(path.lastIndexOf(\".\") + 1).toLowerCase();\n\t this.name = path.slice(path.lastIndexOf(\"/\") + path.lastIndexOf(\"\\\\\") + 2);\n\t }\n\t },\n\t _createFromObject: {\n\t /**\r\n\t * Creates file like object from object\r\n\t * @param {File|FileLikeObject} object\r\n\t * @private\r\n\t */\n\t\n\t value: function _createFromObject(object) {\n\t this.lastModifiedDate = copy(object.lastModifiedDate);\n\t this.size = object.size;\n\t this.type = object.type;\n\t this.name = object.name;\n\t }\n\t }\n\t });\n\t\n\t return FileLikeObject;\n\t })();\n\t\n\t return FileLikeObject;\n\t};\n\t\n\tmodule.exports.$inject = [];\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\t\n\tvar _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\t\n\tvar _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } };\n\t\n\tvar CONFIG = _interopRequire(__webpack_require__(2));\n\t\n\tvar copy = angular.copy;\n\tvar extend = angular.extend;\n\tvar element = angular.element;\n\tvar isElement = angular.isElement;\n\t\n\tmodule.exports = function ($compile, FileLikeObject) {\n\t var FileItem = (function () {\n\t /**\r\n\t * Creates an instance of FileItem\r\n\t * @param {FileUploader} uploader\r\n\t * @param {File|HTMLInputElement|Object} some\r\n\t * @param {Object} options\r\n\t * @constructor\r\n\t */\n\t\n\t function FileItem(uploader, some, options) {\n\t _classCallCheck(this, FileItem);\n\t\n\t var isInput = isElement(some);\n\t var input = isInput ? element(some) : null;\n\t var file = !isInput ? some : null;\n\t\n\t extend(this, {\n\t url: uploader.url,\n\t alias: uploader.alias,\n\t headers: copy(uploader.headers),\n\t formData: copy(uploader.formData),\n\t removeAfterUpload: uploader.removeAfterUpload,\n\t withCredentials: uploader.withCredentials,\n\t method: uploader.method\n\t }, options, {\n\t uploader: uploader,\n\t file: new FileLikeObject(some),\n\t isReady: false,\n\t isUploading: false,\n\t isUploaded: false,\n\t isSuccess: false,\n\t isCancel: false,\n\t isError: false,\n\t progress: 0,\n\t index: null,\n\t _file: file,\n\t _input: input\n\t });\n\t\n\t if (input) this._replaceNode(input);\n\t }\n\t\n\t _createClass(FileItem, {\n\t upload: {\n\t /**********************\r\n\t * PUBLIC\r\n\t **********************/\n\t /**\r\n\t * Uploads a FileItem\r\n\t */\n\t\n\t value: function upload() {\n\t try {\n\t this.uploader.uploadItem(this);\n\t } catch (e) {\n\t this.uploader._onCompleteItem(this, \"\", 0, []);\n\t this.uploader._onErrorItem(this, \"\", 0, []);\n\t }\n\t }\n\t },\n\t cancel: {\n\t /**\r\n\t * Cancels uploading of FileItem\r\n\t */\n\t\n\t value: function cancel() {\n\t this.uploader.cancelItem(this);\n\t }\n\t },\n\t remove: {\n\t /**\r\n\t * Removes a FileItem\r\n\t */\n\t\n\t value: function remove() {\n\t this.uploader.removeFromQueue(this);\n\t }\n\t },\n\t onBeforeUpload: {\n\t /**\r\n\t * Callback\r\n\t * @private\r\n\t */\n\t\n\t value: function onBeforeUpload() {}\n\t },\n\t onProgress: {\n\t /**\r\n\t * Callback\r\n\t * @param {Number} progress\r\n\t * @private\r\n\t */\n\t\n\t value: function onProgress(progress) {}\n\t },\n\t onSuccess: {\n\t /**\r\n\t * Callback\r\n\t * @param {*} response\r\n\t * @param {Number} status\r\n\t * @param {Object} headers\r\n\t */\n\t\n\t value: function onSuccess(response, status, headers) {}\n\t },\n\t onError: {\n\t /**\r\n\t * Callback\r\n\t * @param {*} response\r\n\t * @param {Number} status\r\n\t * @param {Object} headers\r\n\t */\n\t\n\t value: function onError(response, status, headers) {}\n\t },\n\t onCancel: {\n\t /**\r\n\t * Callback\r\n\t * @param {*} response\r\n\t * @param {Number} status\r\n\t * @param {Object} headers\r\n\t */\n\t\n\t value: function onCancel(response, status, headers) {}\n\t },\n\t onComplete: {\n\t /**\r\n\t * Callback\r\n\t * @param {*} response\r\n\t * @param {Number} status\r\n\t * @param {Object} headers\r\n\t */\n\t\n\t value: function onComplete(response, status, headers) {}\n\t },\n\t _onBeforeUpload: {\n\t /**********************\r\n\t * PRIVATE\r\n\t **********************/\n\t /**\r\n\t * Inner callback\r\n\t */\n\t\n\t value: function _onBeforeUpload() {\n\t this.isReady = true;\n\t this.isUploading = true;\n\t this.isUploaded = false;\n\t this.isSuccess = false;\n\t this.isCancel = false;\n\t this.isError = false;\n\t this.progress = 0;\n\t this.onBeforeUpload();\n\t }\n\t },\n\t _onProgress: {\n\t /**\r\n\t * Inner callback\r\n\t * @param {Number} progress\r\n\t * @private\r\n\t */\n\t\n\t value: function _onProgress(progress) {\n\t this.progress = progress;\n\t this.onProgress(progress);\n\t }\n\t },\n\t _onSuccess: {\n\t /**\r\n\t * Inner callback\r\n\t * @param {*} response\r\n\t * @param {Number} status\r\n\t * @param {Object} headers\r\n\t * @private\r\n\t */\n\t\n\t value: function _onSuccess(response, status, headers) {\n\t this.isReady = false;\n\t this.isUploading = false;\n\t this.isUploaded = true;\n\t this.isSuccess = true;\n\t this.isCancel = false;\n\t this.isError = false;\n\t this.progress = 100;\n\t this.index = null;\n\t this.onSuccess(response, status, headers);\n\t }\n\t },\n\t _onError: {\n\t /**\r\n\t * Inner callback\r\n\t * @param {*} response\r\n\t * @param {Number} status\r\n\t * @param {Object} headers\r\n\t * @private\r\n\t */\n\t\n\t value: function _onError(response, status, headers) {\n\t this.isReady = false;\n\t this.isUploading = false;\n\t this.isUploaded = true;\n\t this.isSuccess = false;\n\t this.isCancel = false;\n\t this.isError = true;\n\t this.progress = 0;\n\t this.index = null;\n\t this.onError(response, status, headers);\n\t }\n\t },\n\t _onCancel: {\n\t /**\r\n\t * Inner callback\r\n\t * @param {*} response\r\n\t * @param {Number} status\r\n\t * @param {Object} headers\r\n\t * @private\r\n\t */\n\t\n\t value: function _onCancel(response, status, headers) {\n\t this.isReady = false;\n\t this.isUploading = false;\n\t this.isUploaded = false;\n\t this.isSuccess = false;\n\t this.isCancel = true;\n\t this.isError = false;\n\t this.progress = 0;\n\t this.index = null;\n\t this.onCancel(response, status, headers);\n\t }\n\t },\n\t _onComplete: {\n\t /**\r\n\t * Inner callback\r\n\t * @param {*} response\r\n\t * @param {Number} status\r\n\t * @param {Object} headers\r\n\t * @private\r\n\t */\n\t\n\t value: function _onComplete(response, status, headers) {\n\t this.onComplete(response, status, headers);\n\t if (this.removeAfterUpload) this.remove();\n\t }\n\t },\n\t _destroy: {\n\t /**\r\n\t * Destroys a FileItem\r\n\t */\n\t\n\t value: function _destroy() {\n\t if (this._input) this._input.remove();\n\t if (this._form) this._form.remove();\n\t delete this._form;\n\t delete this._input;\n\t }\n\t },\n\t _prepareToUploading: {\n\t /**\r\n\t * Prepares to uploading\r\n\t * @private\r\n\t */\n\t\n\t value: function _prepareToUploading() {\n\t this.index = this.index || ++this.uploader._nextIndex;\n\t this.isReady = true;\n\t }\n\t },\n\t _replaceNode: {\n\t /**\r\n\t * Replaces input element on his clone\r\n\t * @param {JQLite|jQuery} input\r\n\t * @private\r\n\t */\n\t\n\t value: function _replaceNode(input) {\n\t var clone = $compile(input.clone())(input.scope());\n\t clone.prop(\"value\", null); // FF fix\n\t input.css(\"display\", \"none\");\n\t input.after(clone); // remove jquery dependency\n\t }\n\t }\n\t });\n\t\n\t return FileItem;\n\t })();\n\t\n\t return FileItem;\n\t};\n\t\n\tmodule.exports.$inject = [\"$compile\", \"FileLikeObject\"];\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\t\n\tvar _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\t\n\tvar _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } };\n\t\n\tvar CONFIG = _interopRequire(__webpack_require__(2));\n\t\n\tvar extend = angular.extend;\n\t\n\tmodule.exports = function () {\n\t var FileDirective = (function () {\n\t /**\r\n\t * Creates instance of {FileDirective} object\r\n\t * @param {Object} options\r\n\t * @param {Object} options.uploader\r\n\t * @param {HTMLElement} options.element\r\n\t * @param {Object} options.events\r\n\t * @param {String} options.prop\r\n\t * @constructor\r\n\t */\n\t\n\t function FileDirective(options) {\n\t _classCallCheck(this, FileDirective);\n\t\n\t extend(this, options);\n\t this.uploader._directives[this.prop].push(this);\n\t this._saveLinks();\n\t this.bind();\n\t }\n\t\n\t _createClass(FileDirective, {\n\t bind: {\n\t /**\r\n\t * Binds events handles\r\n\t */\n\t\n\t value: function bind() {\n\t for (var key in this.events) {\n\t var prop = this.events[key];\n\t this.element.bind(key, this[prop]);\n\t }\n\t }\n\t },\n\t unbind: {\n\t /**\r\n\t * Unbinds events handles\r\n\t */\n\t\n\t value: function unbind() {\n\t for (var key in this.events) {\n\t this.element.unbind(key, this.events[key]);\n\t }\n\t }\n\t },\n\t destroy: {\n\t /**\r\n\t * Destroys directive\r\n\t */\n\t\n\t value: function destroy() {\n\t var index = this.uploader._directives[this.prop].indexOf(this);\n\t this.uploader._directives[this.prop].splice(index, 1);\n\t this.unbind();\n\t // this.element = null;\n\t }\n\t },\n\t _saveLinks: {\n\t /**\r\n\t * Saves links to functions\r\n\t * @private\r\n\t */\n\t\n\t value: function _saveLinks() {\n\t for (var key in this.events) {\n\t var prop = this.events[key];\n\t this[prop] = this[prop].bind(this);\n\t }\n\t }\n\t }\n\t });\n\t\n\t return FileDirective;\n\t })();\n\t\n\t /**\r\n\t * Map of events\r\n\t * @type {Object}\r\n\t */\n\t FileDirective.prototype.events = {};\n\t\n\t return FileDirective;\n\t};\n\t\n\tmodule.exports.$inject = [];\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\t\n\tvar _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\t\n\tvar _get = function get(object, property, receiver) { var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc && desc.writable) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\t\n\tvar _inherits = function (subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };\n\t\n\tvar _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } };\n\t\n\tvar CONFIG = _interopRequire(__webpack_require__(2));\n\t\n\tvar extend = angular.extend;\n\tvar forEach = angular.forEach;\n\t\n\tmodule.exports = function (FileDirective) {\n\t var FileDrop = (function (_FileDirective) {\n\t /**\r\n\t * Creates instance of {FileDrop} object\r\n\t * @param {Object} options\r\n\t * @constructor\r\n\t */\n\t\n\t function FileDrop(options) {\n\t _classCallCheck(this, FileDrop);\n\t\n\t var extendedOptions = extend(options, {\n\t // Map of events\n\t events: {\n\t $destroy: \"destroy\",\n\t drop: \"onDrop\",\n\t dragover: \"onDragOver\",\n\t dragleave: \"onDragLeave\"\n\t },\n\t // Name of property inside uploader._directive object\n\t prop: \"drop\"\n\t });\n\t\n\t _get(Object.getPrototypeOf(FileDrop.prototype), \"constructor\", this).call(this, extendedOptions);\n\t }\n\t\n\t _inherits(FileDrop, _FileDirective);\n\t\n\t _createClass(FileDrop, {\n\t getOptions: {\n\t /**\r\n\t * Returns options\r\n\t * @return {Object|undefined}\r\n\t */\n\t\n\t value: function getOptions() {}\n\t },\n\t getFilters: {\n\t /**\r\n\t * Returns filters\r\n\t * @return {Array<Function>|String|undefined}\r\n\t */\n\t\n\t value: function getFilters() {}\n\t },\n\t onDrop: {\n\t /**\r\n\t * Event handler\r\n\t */\n\t\n\t value: function onDrop(event) {\n\t var transfer = this._getTransfer(event);\n\t if (!transfer) {\n\t return;\n\t }var options = this.getOptions();\n\t var filters = this.getFilters();\n\t this._preventAndStop(event);\n\t forEach(this.uploader._directives.over, this._removeOverClass, this);\n\t this.uploader.addToQueue(transfer.files, options, filters);\n\t }\n\t },\n\t onDragOver: {\n\t /**\r\n\t * Event handler\r\n\t */\n\t\n\t value: function onDragOver(event) {\n\t var transfer = this._getTransfer(event);\n\t if (!this._haveFiles(transfer.types)) {\n\t return;\n\t }transfer.dropEffect = \"copy\";\n\t this._preventAndStop(event);\n\t forEach(this.uploader._directives.over, this._addOverClass, this);\n\t }\n\t },\n\t onDragLeave: {\n\t /**\r\n\t * Event handler\r\n\t */\n\t\n\t value: function onDragLeave(event) {\n\t if (event.currentTarget === this.element[0]) {\n\t return;\n\t }this._preventAndStop(event);\n\t forEach(this.uploader._directives.over, this._removeOverClass, this);\n\t }\n\t },\n\t _getTransfer: {\n\t /**\r\n\t * Helper\r\n\t */\n\t\n\t value: function _getTransfer(event) {\n\t return event.dataTransfer ? event.dataTransfer : event.originalEvent.dataTransfer; // jQuery fix;\n\t }\n\t },\n\t _preventAndStop: {\n\t /**\r\n\t * Helper\r\n\t */\n\t\n\t value: function _preventAndStop(event) {\n\t event.preventDefault();\n\t event.stopPropagation();\n\t }\n\t },\n\t _haveFiles: {\n\t /**\r\n\t * Returns \"true\" if types contains files\r\n\t * @param {Object} types\r\n\t */\n\t\n\t value: function _haveFiles(types) {\n\t if (!types) {\n\t return false;\n\t }if (types.indexOf) {\n\t return types.indexOf(\"Files\") !== -1;\n\t } else if (types.contains) {\n\t return types.contains(\"Files\");\n\t } else {\n\t return false;\n\t }\n\t }\n\t },\n\t _addOverClass: {\n\t /**\r\n\t * Callback\r\n\t */\n\t\n\t value: function _addOverClass(item) {\n\t item.addOverClass();\n\t }\n\t },\n\t _removeOverClass: {\n\t /**\r\n\t * Callback\r\n\t */\n\t\n\t value: function _removeOverClass(item) {\n\t item.removeOverClass();\n\t }\n\t }\n\t });\n\t\n\t return FileDrop;\n\t })(FileDirective);\n\t\n\t return FileDrop;\n\t};\n\t\n\tmodule.exports.$inject = [\"FileDirective\"];\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\t\n\tvar _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\t\n\tvar _get = function get(object, property, receiver) { var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc && desc.writable) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\t\n\tvar _inherits = function (subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; };\n\t\n\tvar _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } };\n\t\n\tvar CONFIG = _interopRequire(__webpack_require__(2));\n\t\n\tvar extend = angular.extend;\n\t\n\tmodule.exports = function (FileDirective) {\n\t var FileOver = (function (_FileDirective) {\n\t /**\r\n\t * Creates instance of {FileDrop} object\r\n\t * @param {Object} options\r\n\t * @constructor\r\n\t */\n\t\n\t function FileOver(options) {\n\t _classCallCheck(this, FileOver);\n\t\n\t var extendedOptions = extend(options, {\n\t // Map of events\n\t events: {\n\t $destroy: \"destroy\"\n\t },\n\t // Name of property inside uploader._directive object\n\t prop: \"over\",\n\t // Over class\n\t overClass: \"nv-file-over\"\n\t });\n\t\n\t _get(Object.getPrototypeOf(FileOver.prototype), \"constructor\", this).call(this, extendedOptions);\n\t }\n\t\n\t _inherits(FileOver, _FileDirective);\n\t\n\t _createClass(FileOver, {\n\t addOverClass: {\n\t /**\r\n\t * Adds over class\r\n\t */\n\t\n\t value: function addOverClass() {\n\t this.element.addClass(this.getOverClass());\n\t }\n\t },\n\t removeOverClass: {\n\t /**\r\n\t * Removes over class\r\n\t */\n\t\n\t value: function removeOverClass() {\n\t this.element.removeClass(this.getOverClass());\n\t }\n\t },\n\t getOverClass: {\n\t /**\r\n\t * Returns over class\r\n\t * @returns {String}\r\n\t */\n\t\n\t value: function getOverClass() {\n\t return this.overClass;\n\t }\n\t }\n\t });\n\t\n\t return FileOver;\n\t })(FileDirective);\n\t\n\t return FileOver;\n\t};\n\t\n\tmodule.exports.$inject = [\"FileDirective\"];\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\t\n\tvar CONFIG = _interopRequire(__webpack_require__(2));\n\t\n\tmodule.exports = function ($parse, FileUploader, FileSelect) {\n\t\n\t return {\n\t link: function (scope, element, attributes) {\n\t var uploader = scope.$eval(attributes.uploader);\n\t\n\t if (!(uploader instanceof FileUploader)) {\n\t throw new TypeError(\"\\\"Uploader\\\" must be an instance of FileUploader\");\n\t }\n\t\n\t var object = new FileSelect({\n\t uploader: uploader,\n\t element: element\n\t });\n\t\n\t object.getOptions = $parse(attributes.options).bind(object, scope);\n\t object.getFilters = function () {\n\t return attributes.filters;\n\t };\n\t }\n\t };\n\t};\n\t\n\tmodule.exports.$inject = [\"$parse\", \"FileUploader\", \"FileSelect\"];\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\t\n\tvar CONFIG = _interopRequire(__webpack_require__(2));\n\t\n\tmodule.exports = function ($parse, FileUploader, FileDrop) {\n\t\n\t return {\n\t link: function (scope, element, attributes) {\n\t var uploader = scope.$eval(attributes.uploader);\n\t\n\t if (!(uploader instanceof FileUploader)) {\n\t throw new TypeError(\"\\\"Uploader\\\" must be an instance of FileUploader\");\n\t }\n\t\n\t if (!uploader.isHTML5) return;\n\t\n\t var object = new FileDrop({\n\t uploader: uploader,\n\t element: element\n\t });\n\t\n\t object.getOptions = $parse(attributes.options).bind(object, scope);\n\t object.getFilters = function () {\n\t return attributes.filters;\n\t };\n\t }\n\t };\n\t};\n\t\n\tmodule.exports.$inject = [\"$parse\", \"FileUploader\", \"FileDrop\"];\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\t\n\tvar CONFIG = _interopRequire(__webpack_require__(2));\n\t\n\tmodule.exports = function (FileUploader, FileOver) {\n\t\n\t return {\n\t link: function (scope, element, attributes) {\n\t var uploader = scope.$eval(attributes.uploader);\n\t\n\t if (!(uploader instanceof FileUploader)) {\n\t throw new TypeError(\"\\\"Uploader\\\" must be an instance of FileUploader\");\n\t }\n\t\n\t var object = new FileOver({\n\t uploader: uploader,\n\t element: element\n\t });\n\t\n\t object.getOverClass = function () {\n\t return attributes.overClass || object.overClass;\n\t };\n\t }\n\t };\n\t};\n\t\n\tmodule.exports.$inject = [\"FileUploader\", \"FileOver\"];\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** angular-file-upload.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 2be85a13effb1c2acd03\n **/","'use strict';\r\n\r\n\r\nimport CONFIG from './config.json';\r\n\r\n\r\nimport options from './values/options'\r\n\r\n\r\nimport serviceFileUploader from './services/FileUploader';\r\nimport serviceFileLikeObject from './services/FileLikeObject';\r\nimport serviceFileItem from './services/FileItem';\r\nimport serviceFileDirective from './services/FileDirective';\r\nimport serviceFileSelect from './services/FileSelect';\r\nimport serviceFileDrop from './services/FileDrop';\r\nimport serviceFileOver from './services/FileOver';\r\n\r\n\r\nimport directiveFileSelect from './directives/FileSelect';\r\nimport directiveFileDrop from './directives/FileDrop';\r\nimport directiveFileOver from './directives/FileOver';\r\n\r\n\r\nangular\r\n .module(CONFIG.name, [])\r\n .value('fileUploaderOptions', options)\r\n .factory('FileUploader', serviceFileUploader)\r\n .factory('FileLikeObject', serviceFileLikeObject)\r\n .factory('FileItem', serviceFileItem)\r\n .factory('FileDirective', serviceFileDirective)\r\n .factory('FileSelect', serviceFileSelect)\r\n .factory('FileDrop', serviceFileDrop)\r\n .factory('FileOver', serviceFileOver)\r\n .directive('nvFileSelect', directiveFileSelect)\r\n .directive('nvFileDrop', directiveFileDrop)\r\n .directive('nvFileOver', directiveFileOver)\r\n .run([\r\n 'FileUploader',\r\n 'FileLikeObject',\r\n 'FileItem',\r\n 'FileDirective',\r\n 'FileSelect',\r\n 'FileDrop',\r\n 'FileOver',\r\n function(FileUploader, FileLikeObject, FileItem, FileDirective, FileSelect, FileDrop, FileOver) {\r\n // only for compatibility\r\n FileUploader.FileLikeObject = FileLikeObject;\r\n FileUploader.FileItem = FileItem;\r\n FileUploader.FileDirective = FileDirective;\r\n FileUploader.FileSelect = FileSelect;\r\n FileUploader.FileDrop = FileDrop;\r\n FileUploader.FileOver = FileOver;\r\n }\r\n ]);\r\n\n\n\n/** WEBPACK FOOTER **\n ** c:/OpenServer/domains/angular-file-upload.my/src/index.js\n **/","'use strict';\r\n\r\n\r\nimport CONFIG from './../config.json';\r\n\r\n\r\nlet {\r\n extend\r\n } = angular;\r\n\r\n\r\nexport default (FileDirective) => {\r\n \r\n \r\n class FileSelect extends FileDirective {\r\n /**\r\n * Creates instance of {FileSelect} object\r\n * @param {Object} options\r\n * @constructor\r\n */\r\n constructor(options) {\r\n let extendedOptions = extend(options, {\r\n // Map of events\r\n events: {\r\n $destroy: 'destroy',\r\n change: 'onChange'\r\n },\r\n // Name of property inside uploader._directive object\r\n prop: 'select'\r\n });\r\n \r\n super(extendedOptions);\r\n \r\n if(!this.uploader.isHTML5) {\r\n this.element.removeAttr('multiple');\r\n }\r\n this.element.prop('value', null); // FF fix\r\n }\r\n /**\r\n * Returns options\r\n * @return {Object|undefined}\r\n */\r\n getOptions() {\r\n }\r\n /**\r\n * Returns filters\r\n * @return {Array<Function>|String|undefined}\r\n */\r\n getFilters() {\r\n }\r\n /**\r\n * If returns \"true\" then HTMLInputElement will be cleared\r\n * @returns {Boolean}\r\n */\r\n isEmptyAfterSelection() {\r\n return !!this.element.attr('multiple');\r\n }\r\n /**\r\n * Event handler\r\n */\r\n onChange() {\r\n var files = this.uploader.isHTML5 ? this.element[0].files : this.element[0];\r\n var options = this.getOptions();\r\n var filters = this.getFilters();\r\n\r\n if(!this.uploader.isHTML5) this.destroy();\r\n this.uploader.addToQueue(files, options, filters);\r\n if(this.isEmptyAfterSelection()) {\r\n this.element.prop('value', null);\r\n this.element.replaceWith(this.element = this.element.clone(true)); // IE fix\r\n }\r\n }\r\n }\r\n \r\n \r\n return FileSelect;\r\n}\r\n\r\n\r\nmodule.exports.$inject = [\r\n 'FileDirective'\r\n];\r\n\n\n\n/** WEBPACK FOOTER **\n ** c:/OpenServer/domains/angular-file-upload.my/src/services/FileSelect.js\n **/","module.exports = {\n\t\"name\": \"angularFileUpload\"\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/config.json\n ** module id = 2\n ** module chunks = 0\n **/","'use strict';\r\n\r\n\r\nexport default {\r\n url: '/',\r\n alias: 'file',\r\n headers: {},\r\n queue: [],\r\n progress: 0,\r\n autoUpload: false,\r\n removeAfterUpload: false,\r\n method: 'POST',\r\n filters: [],\r\n formData: [],\r\n queueLimit: Number.MAX_VALUE,\r\n withCredentials: false\r\n};\n\n\n/** WEBPACK FOOTER **\n ** c:/OpenServer/domains/angular-file-upload.my/src/values/options.js\n **/","'use strict';\r\n\r\n\r\nimport CONFIG from './../config.json';\r\n\r\n\r\nlet {\r\n copy,\r\n extend,\r\n forEach,\r\n isObject,\r\n isNumber,\r\n isDefined,\r\n isArray,\r\n element\r\n } = angular;\r\n\r\n\r\nexport default (fileUploaderOptions, $rootScope, $http, $window, FileLikeObject, FileItem) => {\r\n \r\n \r\n let {\r\n File,\r\n FormData\r\n } = $window;\r\n \r\n \r\n class FileUploader {\r\n /**********************\r\n * PUBLIC\r\n **********************/\r\n /**\r\n * Creates an instance of FileUploader\r\n * @param {Object} [options]\r\n * @constructor\r\n */\r\n constructor(options) {\r\n var settings = copy(fileUploaderOptions);\r\n \r\n extend(this, settings, options, {\r\n isUploading: false,\r\n _nextIndex: 0,\r\n _failFilterIndex: -1,\r\n _directives: {select: [], drop: [], over: []}\r\n });\r\n\r\n // add default filters\r\n this.filters.unshift({name: 'queueLimit', fn: this._queueLimitFilter});\r\n this.filters.unshift({name: 'folder', fn: this._folderFilter});\r\n }\r\n /**\r\n * Adds items to the queue\r\n * @param {File|HTMLInputElement|Object|FileList|Array<Object>} files\r\n * @param {Object} [options]\r\n * @param {Array<Function>|String} filters\r\n */\r\n addToQueue(files, options, filters) {\r\n var list = this.isArrayLikeObject(files) ? files: [files];\r\n var arrayOfFilters = this._getFilters(filters);\r\n var count = this.queue.length;\r\n var addedFileItems = [];\r\n\r\n forEach(list, (some /*{File|HTMLInputElement|Object}*/) => {\r\n var temp = new FileLikeObject(some);\r\n\r\n if (this._isValidFile(temp, arrayOfFilters, options)) {\r\n var fileItem = new FileItem(this, some, options);\r\n addedFileItems.push(fileItem);\r\n this.queue.push(fileItem);\r\n this._onAfterAddingFile(fileItem);\r\n } else {\r\n var filter = arrayOfFilters[this._failFilterIndex];\r\n this._onWhenAddingFileFailed(temp, filter, options);\r\n }\r\n });\r\n\r\n if(this.queue.length !== count) {\r\n this._onAfterAddingAll(addedFileItems);\r\n this.progress = this._getTotalProgress();\r\n }\r\n\r\n this._render();\r\n if (this.autoUpload) this.uploadAll();\r\n }\r\n /**\r\n * Remove items from the queue. Remove last: index = -1\r\n * @param {FileItem|Number} value\r\n */\r\n removeFromQueue(value) {\r\n var index = this.getIndexOfItem(value);\r\n var item = this.queue[index];\r\n if(item.isUploading) item.cancel();\r\n this.queue.splice(index, 1);\r\n item._destroy();\r\n this.progress = this._getTotalProgress();\r\n }\r\n /**\r\n * Clears the queue\r\n */\r\n clearQueue() {\r\n while(this.queue.length) {\r\n this.queue[0].remove();\r\n }\r\n this.progress = 0;\r\n }\r\n /**\r\n * Uploads a item from the queue\r\n * @param {FileItem|Number} value\r\n */\r\n uploadItem(value) {\r\n var index = this.getIndexOfItem(value);\r\n var item = this.queue[index];\r\n var transport = this.isHTML5 ? '_xhrTransport' : '_iframeTransport';\r\n\r\n item._prepareToUploading();\r\n if(this.isUploading) return;\r\n\r\n this.isUploading = true;\r\n this[transport](item);\r\n }\r\n /**\r\n * Cancels uploading of item from the queue\r\n * @param {FileItem|Number} value\r\n */\r\n cancelItem(value) {\r\n var index = this.getIndexOfItem(value);\r\n var item = this.queue[index];\r\n var prop = this.isHTML5 ? '_xhr' : '_form';\r\n if(item && item.isUploading) item[prop].abort();\r\n }\r\n /**\r\n * Uploads all not uploaded items of queue\r\n */\r\n uploadAll() {\r\n var items = this.getNotUploadedItems().filter(item => !item.isUploading);\r\n if(!items.length) return;\r\n\r\n forEach(items, item => item._prepareToUploading());\r\n items[0].upload();\r\n }\r\n /**\r\n * Cancels all uploads\r\n */\r\n cancelAll() {\r\n var items = this.getNotUploadedItems();\r\n forEach(items, item => item.cancel());\r\n }\r\n /**\r\n * Returns \"true\" if value an instance of File\r\n * @param {*} value\r\n * @returns {Boolean}\r\n * @private\r\n */\r\n isFile(value) {\r\n return this.constructor.isFile(value);\r\n }\r\n /**\r\n * Returns \"true\" if value an instance of FileLikeObject\r\n * @param {*} value\r\n * @returns {Boolean}\r\n * @private\r\n */\r\n isFileLikeObject(value) {\r\n return this.constructor.isFileLikeObject(value);\r\n }\r\n /**\r\n * Returns \"true\" if value is array like object\r\n * @param {*} value\r\n * @returns {Boolean}\r\n */\r\n isArrayLikeObject(value) {\r\n return this.constructor.isArrayLikeObject(value);\r\n }\r\n /**\r\n * Returns a index of item from the queue\r\n * @param {Item|Number} value\r\n * @returns {Number}\r\n */\r\n getIndexOfItem(value) {\r\n return isNumber(value) ? value : this.queue.indexOf(value);\r\n }\r\n /**\r\n * Returns not uploaded items\r\n * @returns {Array}\r\n */\r\n getNotUploadedItems() {\r\n return this.queue.filter(item => !item.isUploaded);\r\n }\r\n /**\r\n * Returns items ready for upload\r\n * @returns {Array}\r\n */\r\n getReadyItems() {\r\n return this.queue\r\n .filter(item => (item.isReady && !item.isUploading))\r\n .sort((item1, item2) => item1.index - item2.index);\r\n }\r\n /**\r\n * Destroys instance of FileUploader\r\n */\r\n destroy() {\r\n forEach(this._directives, (key) => {\r\n forEach(this._directives[key], (object) => {\r\n object.destroy();\r\n });\r\n });\r\n }\r\n /**\r\n * Callback\r\n * @param {Array} fileItems\r\n */\r\n onAfterAddingAll(fileItems) {\r\n }\r\n /**\r\n * Callback\r\n * @param {FileItem} fileItem\r\n */\r\n onAfterAddingFile(fileItem) {\r\n }\r\n /**\r\n * Callback\r\n * @param {File|Object} item\r\n * @param {Object} filter\r\n * @param {Object} options\r\n */\r\n onWhenAddingFileFailed(item, filter, options) {\r\n }\r\n /**\r\n * Callback\r\n * @param {FileItem} fileItem\r\n */\r\n onBeforeUploadItem(fileItem) {\r\n }\r\n /**\r\n * Callback\r\n * @param {FileItem} fileItem\r\n * @param {Number} progress\r\n */\r\n onProgressItem(fileItem, progress) {\r\n }\r\n /**\r\n * Callback\r\n * @param {Number} progress\r\n */\r\n onProgressAll(progress) {\r\n }\r\n /**\r\n * Callback\r\n * @param {FileItem} item\r\n * @param {*} response\r\n * @param {Number} status\r\n * @param {Object} headers\r\n */\r\n onSuccessItem(item, response, status, headers) {\r\n }\r\n /**\r\n * Callback\r\n * @param {FileItem} item\r\n * @param {*} response\r\n * @param {Number} status\r\n * @param {Object} headers\r\n */\r\n onErrorItem(item, response, status, headers) {\r\n }\r\n /**\r\n * Callback\r\n * @param {FileItem} item\r\n * @param {*} response\r\n * @param {Number} status\r\n * @param {Object} headers\r\n */\r\n onCancelItem(item, response, status, headers) {\r\n }\r\n /**\r\n * Callback\r\n * @param {FileItem} item\r\n * @param {*} response\r\n * @param {Number} status\r\n * @param {Object} headers\r\n */\r\n onCompleteItem(item, response, status, headers) {\r\n }\r\n /**\r\n * Callback\r\n */\r\n onCompleteAll() {\r\n }\r\n /**********************\r\n * PRIVATE\r\n **********************/\r\n /**\r\n * Returns the total progress\r\n * @param {Number} [value]\r\n * @returns {Number}\r\n * @private\r\n */\r\n _getTotalProgress(value) {\r\n if(this.removeAfterUpload) return value || 0;\r\n\r\n var notUploaded = this.getNotUploadedItems().length;\r\n var uploaded = notUploaded ? this.queue.length - notUploaded : this.queue.length;\r\n var ratio = 100 / this.queue.length;\r\n var current = (value || 0) * ratio / 100;\r\n\r\n return Math.round(uploaded * ratio + current);\r\n }\r\n /**\r\n * Returns array of filters\r\n * @param {Array<Function>|String} filters\r\n * @returns {Array<Function>}\r\n * @private\r\n */\r\n _getFilters(filters) {\r\n if(!filters) return this.filters;\r\n if(isArray(filters)) return filters;\r\n var names = filters.match(/[^\\s,]+/g);\r\n return this.filters\r\n .filter(filter => names.indexOf(filter.name) !== -1);\r\n }\r\n /**\r\n * Updates html\r\n * @private\r\n */\r\n _render() {\r\n if(!$rootScope.$$phase) $rootScope.$apply();\r\n }\r\n /**\r\n * Returns \"true\" if item is a file (not folder)\r\n * @param {File|FileLikeObject} item\r\n * @returns {Boolean}\r\n * @private\r\n */\r\n _folderFilter(item) {\r\n return !!(item.size || item.type);\r\n }\r\n /**\r\n * Returns \"true\" if the limit has not been reached\r\n * @returns {Boolean}\r\n * @private\r\n */\r\n _queueLimitFilter() {\r\n return this.queue.length < this.queueLimit;\r\n }\r\n /**\r\n * Returns \"true\" if file pass all filters\r\n * @param {File|Object} file\r\n * @param {Array<Function>} filters\r\n * @param {Object} options\r\n * @returns {Boolean}\r\n * @private\r\n */\r\n _isValidFile(file, filters, options) {\r\n this._failFilterIndex = -1;\r\n return !filters.length ? true : filters.every((filter) => {\r\n this._failFilterIndex++;\r\n return filter.fn.call(this, file, options);\r\n });\r\n }\r\n /**\r\n * Checks whether upload successful\r\n * @param {Number} status\r\n * @returns {Boolean}\r\n * @private\r\n */\r\n _isSuccessCode(status) {\r\n return (status >= 200 && status < 300) || status === 304;\r\n }\r\n /**\r\n * Transforms the server response\r\n * @param {*} response\r\n * @param {Object} headers\r\n * @returns {*}\r\n * @private\r\n */\r\n _transformResponse(response, headers) {\r\n var headersGetter = this._headersGetter(headers);\r\n forEach($http.defaults.transformResponse, (transformFn) => {\r\n response = transformFn(response, headersGetter);\r\n });\r\n return response;\r\n }\r\n /**\r\n * Parsed response headers\r\n * @param headers\r\n * @returns {Object}\r\n * @see https://github.com/angular/angular.js/blob/master/src/ng/http.js\r\n * @private\r\n */\r\n _parseHeaders(headers) {\r\n var parsed = {}, key, val, i;\r\n\r\n if(!headers) return parsed;\r\n\r\n forEach(headers.split('\\n'), (line) => {\r\n i = line.indexOf(':');\r\n key = line.slice(0, i).trim().toLowerCase();\r\n val = line.slice(i + 1).trim();\r\n\r\n if(key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n }\r\n /**\r\n * Returns function that returns headers\r\n * @param {Object} parsedHeaders\r\n * @returns {Function}\r\n * @private\r\n */\r\n _headersGetter(parsedHeaders) {\r\n return (name) => {\r\n if(name) {\r\n return parsedHeaders[name.toLowerCase()] || null;\r\n }\r\n return parsedHeaders;\r\n };\r\n }\r\n /**\r\n * The XMLHttpRequest transport\r\n * @param {FileItem} item\r\n * @private\r\n */\r\n _xhrTransport(item) {\r\n var xhr = item._xhr = new XMLHttpRequest();\r\n var form = new FormData();\r\n\r\n this._onBeforeUploadItem(item);\r\n\r\n forEach(item.formData, (obj) => {\r\n forEach(obj, (value, key) => {\r\n form.append(key, value);\r\n });\r\n });\r\n\r\n if(typeof(item._file.size) != 'number') {\r\n throw new TypeError('The file specified is no longer valid');\r\n }\r\n\r\n form.append(item.alias, item._file, item.file.name);\r\n\r\n xhr.upload.onprogress = (event) => {\r\n var progress = Math.round(event.lengthComputable ? event.loaded * 100 / event.total : 0);\r\n this._onProgressItem(item, progress);\r\n };\r\n\r\n xhr.onload = () => {\r\n var headers = this._parseHeaders(xhr.getAllResponseHeaders());\r\n var response = this._transformResponse(xhr.response, headers);\r\n var gist = this._isSuccessCode(xhr.status) ? 'Success' : 'Error';\r\n var method = '_on' + gist + 'Item';\r\n this[method](item, response, xhr.status, headers);\r\n this._onCompleteItem(item, response, xhr.status, headers);\r\n };\r\n\r\n xhr.onerror = () => {\r\n var headers = this._parseHeaders(xhr.getAllResponseHeaders());\r\n var response = this._transformResponse(xhr.response, headers);\r\n this._onErrorItem(item, response, xhr.status, headers);\r\n this._onCompleteItem(item, response, xhr.status, headers);\r\n };\r\n\r\n xhr.onabort = () => {\r\n var headers = this._parseHeaders(xhr.getAllResponseHeaders());\r\n var response = this._transformResponse(xhr.response, headers);\r\n this._onCancelItem(item, response, xhr.status, headers);\r\n this._onCompleteItem(item, response, xhr.status, headers);\r\n };\r\n\r\n xhr.open(item.method, item.url, true);\r\n\r\n xhr.withCredentials = item.withCredentials;\r\n\r\n forEach(item.headers, (value, name) => {\r\n xhr.setRequestHeader(name, value);\r\n });\r\n\r\n xhr.send(form);\r\n this._render();\r\n }\r\n /**\r\n * The IFrame transport\r\n * @param {FileItem} item\r\n * @private\r\n */\r\n _iframeTransport(item) {\r\n var form = element('<form style=\"display: none;\" />');\r\n var iframe = element('<iframe name=\"iframeTransport' + Date.now() + '\">');\r\n var input = item._input;\r\n\r\n if(item._form) item._form.replaceWith(input); // remove old form\r\n item._form = form; // save link to new form\r\n\r\n this._onBeforeUploadItem(item);\r\n\r\n input.prop('name', item.alias);\r\n\r\n forEach(item.formData, (obj) => {\r\n forEach(obj, (value, key) => {\r\n var element_ = element('<input type=\"hidden\" name=\"' + key + '\" />');\r\n element_.val(value);\r\n form.append(element_);\r\n });\r\n });\r\n\r\n form.prop({\r\n action: item.url,\r\n method: 'POST',\r\n target: iframe.prop('name'),\r\n enctype: 'multipart/form-data',\r\n encoding: 'multipart/form-data' // old IE\r\n });\r\n\r\n iframe.bind('load', () => {\r\n var html = '';\r\n var status = 200;\r\n\r\n try {\r\n // Fix for legacy IE browsers that loads internal error page\r\n // when failed WS response received. In consequence iframe\r\n // content access denied error is thrown becouse trying to\r\n // access cross domain page. When such thing occurs notifying\r\n // with empty response object. See more info at:\r\n // http://stackoverflow.com/questions/151362/access-is-denied-error-on-accessing-iframe-document-object\r\n // Note that if non standard 4xx or 5xx error code returned\r\n // from WS then response content can be accessed without error\r\n // but 'XHR' status becomes 200. In order to avoid confusion\r\n // returning response via same 'success' event handler.\r\n\r\n // fixed angular.contents() for iframes\r\n html = iframe[0].contentDocument.body.innerHTML;\r\n } catch(e) {\r\n // in case we run into the access-is-denied error or we have another error on the server side\r\n // (intentional 500,40... errors), we at least say 'something went wrong' -> 500\r\n status = 500;\r\n }\r\n\r\n var xhr = {response: html, status: status, dummy: true};\r\n var headers = {};\r\n var response = this._transformResponse(xhr.response, headers);\r\n\r\n this._onSuccessItem(item, response, xhr.status, headers);\r\n this._onCompleteItem(item, response, xhr.status, headers);\r\n });\r\n\r\n form.abort = () => {\r\n var xhr = {status: 0, dummy: true};\r\n var headers = {};\r\n var response;\r\n\r\n iframe.unbind('load').prop('src', 'javascript:false;');\r\n form.replaceWith(input);\r\n\r\n this._onCancelItem(item, response, xhr.status, headers);\r\n this._onCompleteItem(item, response, xhr.status, headers);\r\n };\r\n\r\n input.after(form);\r\n form.append(input).append(iframe);\r\n\r\n form[0].submit();\r\n this._render();\r\n }\r\n /**\r\n * Inner callback\r\n * @param {File|Object} item\r\n * @param {Object} filter\r\n * @param {Object} options\r\n * @private\r\n */\r\n _onWhenAddingFileFailed(item, filter, options) {\r\n this.onWhenAddingFileFailed(item, filter, options);\r\n }\r\n /**\r\n * Inner callback\r\n * @param {FileItem} item\r\n */\r\n _onAfterAddingFile(item) {\r\n this.onAfterAddingFile(item);\r\n }\r\n /**\r\n * Inner callback\r\n * @param {Array<FileItem>} items\r\n */\r\n _onAfterAddingAll(items) {\r\n this.onAfterAddingAll(items);\r\n }\r\n /**\r\n * Inner callback\r\n * @param {FileItem} item\r\n * @private\r\n */\r\n _onBeforeUploadItem(item) {\r\n item._onBeforeUpload();\r\n this.onBeforeUploadItem(item);\r\n }\r\n /**\r\n * Inner callback\r\n * @param {FileItem} item\r\n * @param {Number} progress\r\n * @private\r\n */\r\n _onProgressItem(item, progress) {\r\n var total = this._getTotalProgress(progress);\r\n this.progress = total;\r\n item._onProgress(progress);\r\n this.onProgressItem(item, progress);\r\n this.onProgressAll(total);\r\n this._render();\r\n }\r\n /**\r\n * Inner callback\r\n * @param {FileItem} item\r\n * @param {*} response\r\n * @param {Number} status\r\n * @param {Object} headers\r\n * @private\r\n */\r\n _onSuccessItem(item, response, status, headers) {\r\n item._onSuccess(response, status, headers);\r\n this.onSuccessItem(item, response, status, headers);\r\n }\r\n /**\r\n * Inner callback\r\n * @param {FileItem} item\r\n * @param {*} response\r\n * @param {Number} status\r\n * @param {Object} headers\r\n * @private\r\n */\r\n _onErrorItem(item, response, status, headers) {\r\n item._onError(response, status, headers);\r\n this.onErrorItem(item, response, status, headers);\r\n }\r\n /**\r\n * Inner callback\r\n * @param {FileItem} item\r\n * @param {*} response\r\n * @param {Number} status\r\n * @param {Object} headers\r\n * @private\r\n */\r\n _onCancelItem(item, response, status, headers) {\r\n item._onCancel(response, status, headers);\r\n this.onCancelItem(item, response, status, headers);\r\n }\r\n /**\r\n * Inner callback\r\n * @param {FileItem} item\r\n * @param {*} response\r\n * @param {Number} status\r\n * @param {Object} headers\r\n * @private\r\n */\r\n _onCompleteItem(item, response, status, headers) {\r\n item._onComplete(response, status, headers);\r\n this.onCompleteItem(item, response, status, headers);\r\n\r\n var nextItem = this.getReadyItems()[0];\r\n this.isUploading = false;\r\n\r\n if(isDefined(nextItem)) {\r\n nextItem.upload();\r\n return;\r\n }\r\n\r\n this.onCompleteAll();\r\n this.progress = this._getTotalProgress();\r\n this._render();\r\n }\r\n /**********************\r\n * STATIC\r\n **********************/\r\n /**\r\n * Returns \"true\" if value an instance of File\r\n * @param {*} value\r\n * @returns {Boolean}\r\n * @private\r\n */\r\n static isFile(value) {\r\n return (File && value instanceof File);\r\n }\r\n /**\r\n * Returns \"true\" if value an instance of FileLikeObject\r\n * @param {*} value\r\n * @returns {Boolean}\r\n * @private\r\n */\r\n static isFileLikeObject(value) {\r\n return value instanceof FileLikeObject;\r\n }\r\n /**\r\n * Returns \"true\" if value is array like object\r\n * @param {*} value\r\n * @returns {Boolean}\r\n */\r\n static isArrayLikeObject(value) {\r\n return (isObject(value) && 'length' in value);\r\n }\r\n /**\r\n * Inherits a target (Class_1) by a source (Class_2)\r\n * @param {Function} target\r\n * @param {Function} source\r\n */\r\n static inherit(target, source) {\r\n target.prototype = Object.create(source.prototype);\r\n target.prototype.constructor = target;\r\n target.super_ = source;\r\n }\r\n }\r\n\r\n\r\n /**********************\r\n * PUBLIC\r\n **********************/\r\n /**\r\n * Checks a support the html5 uploader\r\n * @returns {Boolean}\r\n * @readonly\r\n */\r\n FileUploader.prototype.isHTML5 = !!(File && FormData);\r\n /**********************\r\n * STATIC\r\n **********************/\r\n /**\r\n * @borrows FileUploader.prototype.isHTML5\r\n */\r\n FileUploader.isHTML5 = FileUploader.prototype.isHTML5;\r\n\r\n \r\n return FileUploader;\r\n}\r\n\r\n\r\nmodule.exports.$inject = [\r\n 'fileUploaderOptions', \r\n '$rootScope', \r\n '$http', \r\n '$window',\r\n 'FileLikeObject',\r\n 'FileItem'\r\n];\n\n\n/** WEBPACK FOOTER **\n ** c:/OpenServer/domains/angular-file-upload.my/src/services/FileUploader.js\n **/","'use strict';\r\n\r\n\r\nimport CONFIG from './../config.json';\r\n\r\n\r\nlet {\r\n copy,\r\n isElement,\r\n isString\r\n } = angular;\r\n\r\n\r\nexport default () => {\r\n \r\n \r\n class FileLikeObject {\r\n /**\r\n * Creates an instance of FileLikeObject\r\n * @param {File|HTMLInputElement|Object} fileOrInput\r\n * @constructor\r\n */\r\n constructor(fileOrInput) {\r\n var isInput = isElement(fileOrInput);\r\n var fakePathOrObject = isInput ? fileOrInput.value : fileOrInput;\r\n var postfix = isString(fakePathOrObject) ? 'FakePath' : 'Object';\r\n var method = '_createFrom' + postfix;\r\n this[method](fakePathOrObject);\r\n }\r\n /**\r\n * Creates file like object from fake path string\r\n * @param {String} path\r\n * @private\r\n */\r\n _createFromFakePath(path) {\r\n this.lastModifiedDate = null;\r\n this.size = null;\r\n this.type = 'like/' + path.slice(path.lastIndexOf('.') + 1).toLowerCase();\r\n this.name = path.slice(path.lastIndexOf('/') + path.lastIndexOf('\\\\') + 2);\r\n }\r\n /**\r\n * Creates file like object from object\r\n * @param {File|FileLikeObject} object\r\n * @private\r\n */\r\n _createFromObject(object) {\r\n this.lastModifiedDate = copy(object.lastModifiedDate);\r\n this.size = object.size;\r\n this.type = object.type;\r\n this.name = object.name;\r\n }\r\n }\r\n \r\n \r\n return FileLikeObject;\r\n}\r\n\r\n\r\nmodule.exports.$inject = [\r\n];\n\n\n/** WEBPACK FOOTER **\n ** c:/OpenServer/domains/angular-file-upload.my/src/services/FileLikeObject.js\n **/","'use strict';\r\n\r\n\r\nimport CONFIG from './../config.json';\r\n\r\n\r\nlet {\r\n copy,\r\n extend,\r\n element,\r\n isElement\r\n } = angular;\r\n\r\n\r\nexport default ($compile, FileLikeObject) => {\r\n \r\n \r\n class FileItem {\r\n /**\r\n * Creates an instance of FileItem\r\n * @param {FileUploader} uploader\r\n * @param {File|HTMLInputElement|Object} some\r\n * @param {Object} options\r\n * @constructor\r\n */\r\n constructor(uploader, some, options) {\r\n var isInput = isElement(some);\r\n var input = isInput ? element(some) : null;\r\n var file = !isInput ? some : null;\r\n\r\n extend(this, {\r\n url: uploader.url,\r\n alias: uploader.alias,\r\n headers: copy(uploader.headers),\r\n formData: copy(uploader.formData),\r\n removeAfterUpload: uploader.removeAfterUpload,\r\n withCredentials: uploader.withCredentials,\r\n method: uploader.method\r\n }, options, {\r\n uploader: uploader,\r\n file: new FileLikeObject(some),\r\n isReady: false,\r\n isUploading: false,\r\n isUploaded: false,\r\n isSuccess: false,\r\n isCancel: false,\r\n isError: false,\r\n progress: 0,\r\n index: null,\r\n _file: file,\r\n _input: input\r\n });\r\n\r\n if (input) this._replaceNode(input);\r\n }\r\n /**********************\r\n * PUBLIC\r\n **********************/\r\n /**\r\n * Uploads a FileItem\r\n */\r\n upload() {\r\n try {\r\n this.uploader.uploadItem(this);\r\n } catch(e) {\r\n this.uploader._onCompleteItem(this, '', 0, []);\r\n this.uploader._onErrorItem(this, '', 0, []);\r\n }\r\n }\r\n /**\r\n * Cancels uploading of FileItem\r\n */\r\n cancel() {\r\n this.uploader.cancelItem(this);\r\n }\r\n /**\r\n * Removes a FileItem\r\n */\r\n remove() {\r\n this.uploader.removeFromQueue(this);\r\n }\r\n /**\r\n * Callback\r\n * @private\r\n */\r\n onBeforeUpload() {\r\n }\r\n /**\r\n * Callback\r\n * @param {Number} progress\r\n * @private\r\n */\r\n onProgress(progress) {\r\n }\r\n /**\r\n * Callback\r\n * @param {*} response\r\n * @param {Number} status\r\n * @param {Object} headers\r\n */\r\n onSuccess(response, status, headers) {\r\n }\r\n /**\r\n * Callback\r\n * @param {*} response\r\n * @param {Number} status\r\n * @param {Object} headers\r\n */\r\n onError(response, status, headers) {\r\n }\r\n /**\r\n * Callback\r\n * @param {*} response\r\n * @param {Number} status\r\n * @param {Object} headers\r\n */\r\n onCancel(response, status, headers) {\r\n }\r\n /**\r\n * Callback\r\n * @param {*} response\r\n * @param {Number} status\r\n * @param {Object} headers\r\n */\r\n onComplete(response, status, headers) {\r\n }\r\n /**********************\r\n * PRIVATE\r\n **********************/\r\n /**\r\n * Inner callback\r\n */\r\n _onBeforeUpload() {\r\n this.isReady = true;\r\n this.isUploading = true;\r\n this.isUploaded = false;\r\n this.isSuccess = false;\r\n this.isCancel = false;\r\n this.isError = false;\r\n this.progress = 0;\r\n this.onBeforeUpload();\r\n }\r\n /**\r\n * Inner callback\r\n * @param {Number} progress\r\n * @private\r\n */\r\n _onProgress(progress) {\r\n this.progress = progress;\r\n this.onProgress(progress);\r\n }\r\n /**\r\n * Inner callback\r\n * @param {*} response\r\n * @param {Number} status\r\n * @param {Object} headers\r\n * @private\r\n */\r\n _onSuccess(response, status, headers) {\r\n this.isReady = false;\r\n this.isUploading = false;\r\n this.isUploaded = true;\r\n this.isSuccess = true;\r\n this.isCancel = false;\r\n this.isError = false;\r\n this.progress = 100;\r\n this.index = null;\r\n this.onSuccess(response, status, headers);\r\n }\r\n /**\r\n * Inner callback\r\n * @param {*} response\r\n * @param {Number} status\r\n * @param {Object} headers\r\n * @private\r\n */\r\n _onError(response, status, headers) {\r\n this.isReady = false;\r\n this.isUploading = false;\r\n this.isUploaded = true;\r\n this.isSuccess = false;\r\n this.isCancel = false;\r\n this.isError = true;\r\n this.progress = 0;\r\n this.index = null;\r\n this.onError(response, status, headers);\r\n }\r\n /**\r\n * Inner callback\r\n * @param {*} response\r\n * @param {Number} status\r\n * @param {Object} headers\r\n * @private\r\n */\r\n _onCancel(response, status, headers) {\r\n this.isReady = false;\r\n this.isUploading = false;\r\n this.isUploaded = false;\r\n this.isSuccess = false;\r\n this.isCancel = true;\r\n this.isError = false;\r\n this.progress = 0;\r\n this.index = null;\r\n this.onCancel(response, status, headers);\r\n }\r\n /**\r\n * Inner callback\r\n * @param {*} response\r\n * @param {Number} status\r\n * @param {Object} headers\r\n * @private\r\n */\r\n _onComplete(response, status, headers) {\r\n this.onComplete(response, status, headers);\r\n if(this.removeAfterUpload) this.remove();\r\n }\r\n /**\r\n * Destroys a FileItem\r\n */\r\n _destroy() {\r\n if(this._input) this._input.remove();\r\n if(this._form) this._form.remove();\r\n delete this._form;\r\n delete this._input;\r\n }\r\n /**\r\n * Prepares to uploading\r\n * @private\r\n */\r\n _prepareToUploading() {\r\n this.index = this.index || ++this.uploader._nextIndex;\r\n this.isReady = true;\r\n }\r\n /**\r\n * Replaces input element on his clone\r\n * @param {JQLite|jQuery} input\r\n * @private\r\n */\r\n _replaceNode(input) {\r\n var clone = $compile(input.clone())(input.scope());\r\n clone.prop('value', null); // FF fix\r\n input.css('display', 'none');\r\n input.after(clone); // remove jquery dependency\r\n }\r\n\r\n }\r\n \r\n \r\n return FileItem;\r\n}\r\n\r\n\r\nmodule.exports.$inject = [\r\n '$compile',\r\n 'FileLikeObject'\r\n];\n\n\n/** WEBPACK FOOTER **\n ** c:/OpenServer/domains/angular-file-upload.my/src/services/FileItem.js\n **/","'use strict';\r\n\r\n\r\nimport CONFIG from './../config.json';\r\n\r\n\r\nlet {\r\n extend\r\n } = angular;\r\n\r\n\r\nexport default () => {\r\n\r\n\r\n class FileDirective {\r\n /**\r\n * Creates instance of {FileDirective} object\r\n * @param {Object} options\r\n * @param {Object} options.uploader\r\n * @param {HTMLElement} options.element\r\n * @param {Object} options.events\r\n * @param {String} options.prop\r\n * @constructor\r\n */\r\n constructor(options) {\r\n extend(this, options);\r\n this.uploader._directives[this.prop].push(this);\r\n this._saveLinks();\r\n this.bind();\r\n }\r\n /**\r\n * Binds events handles\r\n */\r\n bind() {\r\n for(var key in this.events) {\r\n var prop = this.events[key];\r\n this.element.bind(key, this[prop]);\r\n }\r\n }\r\n /**\r\n * Unbinds events handles\r\n */\r\n unbind() {\r\n for(var key in this.events) {\r\n this.element.unbind(key, this.events[key]);\r\n }\r\n }\r\n /**\r\n * Destroys directive\r\n */\r\n destroy() {\r\n var index = this.uploader._directives[this.prop].indexOf(this);\r\n this.uploader._directives[this.prop].splice(index, 1);\r\n this.unbind();\r\n // this.element = null;\r\n }\r\n /**\r\n * Saves links to functions\r\n * @private\r\n */\r\n _saveLinks() {\r\n for(var key in this.events) {\r\n var prop = this.events[key];\r\n this[prop] = this[prop].bind(this);\r\n }\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Map of events\r\n * @type {Object}\r\n */\r\n FileDirective.prototype.events = {};\r\n\r\n\r\n return FileDirective;\r\n}\r\n\r\n\r\nmodule.exports.$inject = [\r\n];\n\n\n/** WEBPACK FOOTER **\n ** c:/OpenServer/domains/angular-file-upload.my/src/services/FileDirective.js\n **/","'use strict';\r\n\r\n\r\nimport CONFIG from './../config.json';\r\n\r\n\r\nlet {\r\n extend,\r\n forEach\r\n } = angular;\r\n\r\n\r\nexport default (FileDirective) => {\r\n \r\n \r\n class FileDrop extends FileDirective {\r\n /**\r\n * Creates instance of {FileDrop} object\r\n * @param {Object} options\r\n * @constructor\r\n */\r\n constructor(options) {\r\n let extendedOptions = extend(options, {\r\n // Map of events\r\n events: {\r\n $destroy: 'destroy',\r\n drop: 'onDrop',\r\n dragover: 'onDragOver',\r\n dragleave: 'onDragLeave'\r\n },\r\n // Name of property inside uploader._directive object\r\n prop: 'drop'\r\n });\r\n \r\n super(extendedOptions);\r\n }\r\n /**\r\n * Returns options\r\n * @return {Object|undefined}\r\n */\r\n getOptions() {\r\n }\r\n /**\r\n * Returns filters\r\n * @return {Array<Function>|String|undefined}\r\n */\r\n getFilters() {\r\n }\r\n /**\r\n * Event handler\r\n */\r\n onDrop(event) {\r\n var transfer = this._getTransfer(event);\r\n if(!transfer) return;\r\n var options = this.getOptions();\r\n var filters = this.getFilters();\r\n this._preventAndStop(event);\r\n forEach(this.uploader._directives.over, this._removeOverClass, this);\r\n this.uploader.addToQueue(transfer.files, options, filters);\r\n }\r\n /**\r\n * Event handler\r\n */\r\n onDragOver(event) {\r\n var transfer = this._getTransfer(event);\r\n if(!this._haveFiles(transfer.types)) return;\r\n transfer.dropEffect = 'copy';\r\n this._preventAndStop(event);\r\n forEach(this.uploader._directives.over, this._addOverClass, this);\r\n }\r\n /**\r\n * Event handler\r\n */\r\n onDragLeave(event) {\r\n if(event.currentTarget === this.element[0]) return;\r\n this._preventAndStop(event);\r\n forEach(this.uploader._directives.over, this._removeOverClass, this);\r\n }\r\n /**\r\n * Helper\r\n */\r\n _getTransfer(event) {\r\n return event.dataTransfer ? event.dataTransfer : event.originalEvent.dataTransfer; // jQuery fix;\r\n }\r\n /**\r\n * Helper\r\n */\r\n _preventAndStop(event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n /**\r\n * Returns \"true\" if types contains files\r\n * @param {Object} types\r\n */\r\n _haveFiles(types) {\r\n if(!types) return false;\r\n if(types.indexOf) {\r\n return types.indexOf('Files') !== -1;\r\n } else if(types.contains) {\r\n return types.contains('Files');\r\n } else {\r\n return false;\r\n }\r\n }\r\n /**\r\n * Callback\r\n */\r\n _addOverClass(item) {\r\n item.addOverClass();\r\n }\r\n /**\r\n * Callback\r\n */\r\n _removeOverClass(item) {\r\n item.removeOverClass();\r\n }\r\n }\r\n \r\n \r\n return FileDrop;\r\n}\r\n\r\n\r\nmodule.exports.$inject = [\r\n 'FileDirective'\r\n];\n\n\n/** WEBPACK FOOTER **\n ** c:/OpenServer/domains/angular-file-upload.my/src/services/FileDrop.js\n **/","'use strict';\r\n\r\n\r\nimport CONFIG from './../config.json';\r\n\r\n\r\nlet {\r\n extend\r\n } = angular;\r\n\r\n\r\nexport default (FileDirective) => {\r\n \r\n \r\n class FileOver extends FileDirective {\r\n /**\r\n * Creates instance of {FileDrop} object\r\n * @param {Object} options\r\n * @constructor\r\n */\r\n constructor(options) {\r\n let extendedOptions = extend(options, {\r\n // Map of events\r\n events: {\r\n $destroy: 'destroy'\r\n },\r\n // Name of property inside uploader._directive object\r\n prop: 'over',\r\n // Over class\r\n overClass: 'nv-file-over'\r\n });\r\n \r\n super(extendedOptions);\r\n }\r\n /**\r\n * Adds over class\r\n */\r\n addOverClass() {\r\n this.element.addClass(this.getOverClass());\r\n }\r\n /**\r\n * Removes over class\r\n */\r\n removeOverClass() {\r\n this.element.removeClass(this.getOverClass());\r\n }\r\n /**\r\n * Returns over class\r\n * @returns {String}\r\n */\r\n getOverClass() {\r\n return this.overClass;\r\n }\r\n }\r\n \r\n \r\n return FileOver;\r\n}\r\n\r\n\r\nmodule.exports.$inject = [\r\n 'FileDirective'\r\n];\n\n\n/** WEBPACK FOOTER **\n ** c:/OpenServer/domains/angular-file-upload.my/src/services/FileOver.js\n **/","'use strict';\r\n\r\n\r\nimport CONFIG from './../config.json';\r\n\r\n\r\nexport default ($parse, FileUploader, FileSelect) => {\r\n\r\n\r\n return {\r\n link: (scope, element, attributes) => {\r\n var uploader = scope.$eval(attributes.uploader);\r\n\r\n if (!(uploader instanceof FileUploader)) {\r\n throw new TypeError('\"Uploader\" must be an instance of FileUploader');\r\n }\r\n\r\n var object = new FileSelect({\r\n uploader: uploader,\r\n element: element\r\n });\r\n\r\n object.getOptions = $parse(attributes.options).bind(object, scope);\r\n object.getFilters = () => attributes.filters;\r\n }\r\n };\r\n\r\n\r\n}\r\n\r\n\r\nmodule.exports.$inject = [\r\n '$parse',\r\n 'FileUploader',\r\n 'FileSelect'\r\n];\n\n\n/** WEBPACK FOOTER **\n ** c:/OpenServer/domains/angular-file-upload.my/src/directives/FileSelect.js\n **/","'use strict';\r\n\r\n\r\nimport CONFIG from './../config.json';\r\n\r\n\r\nexport default ($parse, FileUploader, FileDrop) => {\r\n\r\n\r\n return {\r\n link: (scope, element, attributes) => {\r\n var uploader = scope.$eval(attributes.uploader);\r\n\r\n if (!(uploader instanceof FileUploader)) {\r\n throw new TypeError('\"Uploader\" must be an instance of FileUploader');\r\n }\r\n\r\n if (!uploader.isHTML5) return;\r\n\r\n var object = new FileDrop({\r\n uploader: uploader,\r\n element: element\r\n });\r\n\r\n object.getOptions = $parse(attributes.options).bind(object, scope);\r\n object.getFilters = () => attributes.filters;\r\n }\r\n };\r\n\r\n\r\n}\r\n\r\n\r\nmodule.exports.$inject = [\r\n '$parse',\r\n 'FileUploader',\r\n 'FileDrop'\r\n];\n\n\n/** WEBPACK FOOTER **\n ** c:/OpenServer/domains/angular-file-upload.my/src/directives/FileDrop.js\n **/","'use strict';\r\n\r\n\r\nimport CONFIG from './../config.json';\r\n\r\n\r\nexport default (FileUploader, FileOver) => {\r\n\r\n\r\n return {\r\n link: (scope, element, attributes) => {\r\n var uploader = scope.$eval(attributes.uploader);\r\n\r\n if (!(uploader instanceof FileUploader)) {\r\n throw new TypeError('\"Uploader\" must be an instance of FileUploader');\r\n }\r\n\r\n var object = new FileOver({\r\n uploader: uploader,\r\n element: element\r\n });\r\n\r\n object.getOverClass = () => attributes.overClass || object.overClass;\r\n }\r\n };\r\n\r\n\r\n}\r\n\r\n\r\nmodule.exports.$inject = [\r\n 'FileUploader',\r\n 'FileOver'\r\n];\n\n\n/** WEBPACK FOOTER **\n ** c:/OpenServer/domains/angular-file-upload.my/src/directives/FileOver.js\n **/"],"sourceRoot":""}
0 2 \ No newline at end of file
... ...
src/main/resources/static/assets/bower_components/angular-file-upload/gulpfile.js 0 → 100644
  1 +
  2 +
  3 +var pkg = require('./package.json');
  4 +// https://github.com/gulpjs/gulp/blob/master/docs/README.md
  5 +var gulp = require('gulp');
  6 +// http://webpack.github.io/docs/
  7 +var webpack = require('webpack');
  8 +// https://github.com/shama/webpack-stream
  9 +var webpackStream = require('webpack-stream');
  10 +
  11 +
  12 +gulp.task(
  13 + pkg.name + '/build',
  14 + function() {
  15 + return gulp
  16 + .src('./src/index.js')
  17 + .pipe(webpackStream({
  18 + module: {
  19 + loaders: [
  20 + // https://github.com/babel/babel-loader
  21 + {test: /\.js$/, loader: 'babel'},
  22 + // https://github.com/webpack/json-loader
  23 + {test: /\.json$/, loader: 'json'},
  24 + // https://github.com/webpack/html-loader
  25 + {test: /\.html$/, loader: 'html'}
  26 + ]
  27 + },
  28 + plugins: [
  29 + // http://webpack.github.io/docs/list-of-plugins.html#uglifyjsplugin
  30 + new webpack.optimize.UglifyJsPlugin({
  31 + compress: {
  32 + warnings: false
  33 + }
  34 + }),
  35 + // http://webpack.github.io/docs/list-of-plugins.html#bannerplugin
  36 + new webpack.BannerPlugin(
  37 + '/*\n' +
  38 + ' ' + pkg.name + ' v' + pkg.version + '\n' +
  39 + ' ' + pkg.homepage + '\n' +
  40 + '*/\n'
  41 + , {
  42 + entryOnly: true,
  43 + raw: true
  44 + })
  45 + ],
  46 + devtool: 'source-map',
  47 + debug: true,
  48 + output: {
  49 + library: pkg.name,
  50 + libraryTarget: 'umd',
  51 + filename: pkg.name + '.min.js'
  52 + }
  53 + }))
  54 + .pipe(gulp.dest('./dist'));
  55 + }
  56 +);
  57 +
  58 +
  59 +gulp.task(
  60 + pkg.name + '/watch', function() {
  61 + return gulp
  62 + .watch(
  63 + [
  64 + './src/**/*.js',
  65 + './src/**/*.json',
  66 + './src/**/*.html'
  67 + ],
  68 + [
  69 + pkg.name + '/build'
  70 + ]
  71 + );
  72 + }
  73 +);
... ...
src/main/resources/static/assets/bower_components/angular-file-upload/license.txt 0 → 100644
  1 +The MIT License
  2 +
  3 +Copyright (c) 2013 nerv. https://github.com/nervgh
  4 +
  5 +Permission is hereby granted, free of charge, to any person obtaining a copy
  6 +of this software and associated documentation files (the "Software"), to deal
  7 +in the Software without restriction, including without limitation the rights
  8 +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  9 +copies of the Software, and to permit persons to whom the Software is
  10 +furnished to do so, subject to the following conditions:
  11 +
  12 +The above copyright notice and this permission notice shall be included in
  13 +all copies or substantial portions of the Software.
  14 +
  15 +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16 +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17 +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  18 +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  19 +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  20 +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  21 +THE SOFTWARE.
... ...
src/main/resources/static/assets/bower_components/angular-file-upload/package.json 0 → 100644
  1 +{
  2 + "name": "angular-file-upload",
  3 + "version": "2.1.4",
  4 + "homepage": "https://github.com/nervgh/angular-file-upload",
  5 + "description": "Angular File Upload is a module for the AngularJS framework",
  6 + "author": {
  7 + "name": "nerv",
  8 + "url": "https://github.com/nervgh"
  9 + },
  10 + "main": "dist/angular-file-upload.min.js",
  11 + "devDependencies": {
  12 + "babel": "^4.7.16",
  13 + "babel-loader": "^4.0.0",
  14 + "json-loader": "^0.5.1",
  15 + "html-loader": "^0.2.3",
  16 + "gulp": "^3.9.0",
  17 + "webpack": "^1.10.1",
  18 + "webpack-stream": "^2.0.0"
  19 + }
  20 +}
... ...
src/main/resources/static/assets/bower_components/angular-file-upload/src/config.json 0 → 100644
  1 +{
  2 + "name": "angularFileUpload"
  3 +}
0 4 \ No newline at end of file
... ...
src/main/resources/static/assets/bower_components/angular-file-upload/src/directives/FileDrop.js 0 → 100644
  1 +'use strict';
  2 +
  3 +
  4 +import CONFIG from './../config.json';
  5 +
  6 +
  7 +export default ($parse, FileUploader, FileDrop) => {
  8 +
  9 +
  10 + return {
  11 + link: (scope, element, attributes) => {
  12 + var uploader = scope.$eval(attributes.uploader);
  13 +
  14 + if (!(uploader instanceof FileUploader)) {
  15 + throw new TypeError('"Uploader" must be an instance of FileUploader');
  16 + }
  17 +
  18 + if (!uploader.isHTML5) return;
  19 +
  20 + var object = new FileDrop({
  21 + uploader: uploader,
  22 + element: element
  23 + });
  24 +
  25 + object.getOptions = $parse(attributes.options).bind(object, scope);
  26 + object.getFilters = () => attributes.filters;
  27 + }
  28 + };
  29 +
  30 +
  31 +}
  32 +
  33 +
  34 +module.exports.$inject = [
  35 + '$parse',
  36 + 'FileUploader',
  37 + 'FileDrop'
  38 +];
0 39 \ No newline at end of file
... ...
src/main/resources/static/assets/bower_components/angular-file-upload/src/directives/FileOver.js 0 → 100644
  1 +'use strict';
  2 +
  3 +
  4 +import CONFIG from './../config.json';
  5 +
  6 +
  7 +export default (FileUploader, FileOver) => {
  8 +
  9 +
  10 + return {
  11 + link: (scope, element, attributes) => {
  12 + var uploader = scope.$eval(attributes.uploader);
  13 +
  14 + if (!(uploader instanceof FileUploader)) {
  15 + throw new TypeError('"Uploader" must be an instance of FileUploader');
  16 + }
  17 +
  18 + var object = new FileOver({
  19 + uploader: uploader,
  20 + element: element
  21 + });
  22 +
  23 + object.getOverClass = () => attributes.overClass || object.overClass;
  24 + }
  25 + };
  26 +
  27 +
  28 +}
  29 +
  30 +
  31 +module.exports.$inject = [
  32 + 'FileUploader',
  33 + 'FileOver'
  34 +];
0 35 \ No newline at end of file
... ...
src/main/resources/static/assets/bower_components/angular-file-upload/src/directives/FileSelect.js 0 → 100644
  1 +'use strict';
  2 +
  3 +
  4 +import CONFIG from './../config.json';
  5 +
  6 +
  7 +export default ($parse, FileUploader, FileSelect) => {
  8 +
  9 +
  10 + return {
  11 + link: (scope, element, attributes) => {
  12 + var uploader = scope.$eval(attributes.uploader);
  13 +
  14 + if (!(uploader instanceof FileUploader)) {
  15 + throw new TypeError('"Uploader" must be an instance of FileUploader');
  16 + }
  17 +
  18 + var object = new FileSelect({
  19 + uploader: uploader,
  20 + element: element
  21 + });
  22 +
  23 + object.getOptions = $parse(attributes.options).bind(object, scope);
  24 + object.getFilters = () => attributes.filters;
  25 + }
  26 + };
  27 +
  28 +
  29 +}
  30 +
  31 +
  32 +module.exports.$inject = [
  33 + '$parse',
  34 + 'FileUploader',
  35 + 'FileSelect'
  36 +];
0 37 \ No newline at end of file
... ...
src/main/resources/static/assets/bower_components/angular-file-upload/src/index.js 0 → 100644
  1 +'use strict';
  2 +
  3 +
  4 +import CONFIG from './config.json';
  5 +
  6 +
  7 +import options from './values/options'
  8 +
  9 +
  10 +import serviceFileUploader from './services/FileUploader';
  11 +import serviceFileLikeObject from './services/FileLikeObject';
  12 +import serviceFileItem from './services/FileItem';
  13 +import serviceFileDirective from './services/FileDirective';
  14 +import serviceFileSelect from './services/FileSelect';
  15 +import serviceFileDrop from './services/FileDrop';
  16 +import serviceFileOver from './services/FileOver';
  17 +
  18 +
  19 +import directiveFileSelect from './directives/FileSelect';
  20 +import directiveFileDrop from './directives/FileDrop';
  21 +import directiveFileOver from './directives/FileOver';
  22 +
  23 +
  24 +angular
  25 + .module(CONFIG.name, [])
  26 + .value('fileUploaderOptions', options)
  27 + .factory('FileUploader', serviceFileUploader)
  28 + .factory('FileLikeObject', serviceFileLikeObject)
  29 + .factory('FileItem', serviceFileItem)
  30 + .factory('FileDirective', serviceFileDirective)
  31 + .factory('FileSelect', serviceFileSelect)
  32 + .factory('FileDrop', serviceFileDrop)
  33 + .factory('FileOver', serviceFileOver)
  34 + .directive('nvFileSelect', directiveFileSelect)
  35 + .directive('nvFileDrop', directiveFileDrop)
  36 + .directive('nvFileOver', directiveFileOver)
  37 + .run([
  38 + 'FileUploader',
  39 + 'FileLikeObject',
  40 + 'FileItem',
  41 + 'FileDirective',
  42 + 'FileSelect',
  43 + 'FileDrop',
  44 + 'FileOver',
  45 + function(FileUploader, FileLikeObject, FileItem, FileDirective, FileSelect, FileDrop, FileOver) {
  46 + // only for compatibility
  47 + FileUploader.FileLikeObject = FileLikeObject;
  48 + FileUploader.FileItem = FileItem;
  49 + FileUploader.FileDirective = FileDirective;
  50 + FileUploader.FileSelect = FileSelect;
  51 + FileUploader.FileDrop = FileDrop;
  52 + FileUploader.FileOver = FileOver;
  53 + }
  54 + ]);
... ...
src/main/resources/static/assets/bower_components/angular-file-upload/src/services/FileDirective.js 0 → 100644
  1 +'use strict';
  2 +
  3 +
  4 +import CONFIG from './../config.json';
  5 +
  6 +
  7 +let {
  8 + extend
  9 + } = angular;
  10 +
  11 +
  12 +export default () => {
  13 +
  14 +
  15 + class FileDirective {
  16 + /**
  17 + * Creates instance of {FileDirective} object
  18 + * @param {Object} options
  19 + * @param {Object} options.uploader
  20 + * @param {HTMLElement} options.element
  21 + * @param {Object} options.events
  22 + * @param {String} options.prop
  23 + * @constructor
  24 + */
  25 + constructor(options) {
  26 + extend(this, options);
  27 + this.uploader._directives[this.prop].push(this);
  28 + this._saveLinks();
  29 + this.bind();
  30 + }
  31 + /**
  32 + * Binds events handles
  33 + */
  34 + bind() {
  35 + for(var key in this.events) {
  36 + var prop = this.events[key];
  37 + this.element.bind(key, this[prop]);
  38 + }
  39 + }
  40 + /**
  41 + * Unbinds events handles
  42 + */
  43 + unbind() {
  44 + for(var key in this.events) {
  45 + this.element.unbind(key, this.events[key]);
  46 + }
  47 + }
  48 + /**
  49 + * Destroys directive
  50 + */
  51 + destroy() {
  52 + var index = this.uploader._directives[this.prop].indexOf(this);
  53 + this.uploader._directives[this.prop].splice(index, 1);
  54 + this.unbind();
  55 + // this.element = null;
  56 + }
  57 + /**
  58 + * Saves links to functions
  59 + * @private
  60 + */
  61 + _saveLinks() {
  62 + for(var key in this.events) {
  63 + var prop = this.events[key];
  64 + this[prop] = this[prop].bind(this);
  65 + }
  66 + }
  67 + }
  68 +
  69 +
  70 + /**
  71 + * Map of events
  72 + * @type {Object}
  73 + */
  74 + FileDirective.prototype.events = {};
  75 +
  76 +
  77 + return FileDirective;
  78 +}
  79 +
  80 +
  81 +module.exports.$inject = [
  82 +];
0 83 \ No newline at end of file
... ...
src/main/resources/static/assets/bower_components/angular-file-upload/src/services/FileDrop.js 0 → 100644
  1 +'use strict';
  2 +
  3 +
  4 +import CONFIG from './../config.json';
  5 +
  6 +
  7 +let {
  8 + extend,
  9 + forEach
  10 + } = angular;
  11 +
  12 +
  13 +export default (FileDirective) => {
  14 +
  15 +
  16 + class FileDrop extends FileDirective {
  17 + /**
  18 + * Creates instance of {FileDrop} object
  19 + * @param {Object} options
  20 + * @constructor
  21 + */
  22 + constructor(options) {
  23 + let extendedOptions = extend(options, {
  24 + // Map of events
  25 + events: {
  26 + $destroy: 'destroy',
  27 + drop: 'onDrop',
  28 + dragover: 'onDragOver',
  29 + dragleave: 'onDragLeave'
  30 + },
  31 + // Name of property inside uploader._directive object
  32 + prop: 'drop'
  33 + });
  34 +
  35 + super(extendedOptions);
  36 + }
  37 + /**
  38 + * Returns options
  39 + * @return {Object|undefined}
  40 + */
  41 + getOptions() {
  42 + }
  43 + /**
  44 + * Returns filters
  45 + * @return {Array<Function>|String|undefined}
  46 + */
  47 + getFilters() {
  48 + }
  49 + /**
  50 + * Event handler
  51 + */
  52 + onDrop(event) {
  53 + var transfer = this._getTransfer(event);
  54 + if(!transfer) return;
  55 + var options = this.getOptions();
  56 + var filters = this.getFilters();
  57 + this._preventAndStop(event);
  58 + forEach(this.uploader._directives.over, this._removeOverClass, this);
  59 + this.uploader.addToQueue(transfer.files, options, filters);
  60 + }
  61 + /**
  62 + * Event handler
  63 + */
  64 + onDragOver(event) {
  65 + var transfer = this._getTransfer(event);
  66 + if(!this._haveFiles(transfer.types)) return;
  67 + transfer.dropEffect = 'copy';
  68 + this._preventAndStop(event);
  69 + forEach(this.uploader._directives.over, this._addOverClass, this);
  70 + }
  71 + /**
  72 + * Event handler
  73 + */
  74 + onDragLeave(event) {
  75 + if(event.currentTarget === this.element[0]) return;
  76 + this._preventAndStop(event);
  77 + forEach(this.uploader._directives.over, this._removeOverClass, this);
  78 + }
  79 + /**
  80 + * Helper
  81 + */
  82 + _getTransfer(event) {
  83 + return event.dataTransfer ? event.dataTransfer : event.originalEvent.dataTransfer; // jQuery fix;
  84 + }
  85 + /**
  86 + * Helper
  87 + */
  88 + _preventAndStop(event) {
  89 + event.preventDefault();
  90 + event.stopPropagation();
  91 + }
  92 + /**
  93 + * Returns "true" if types contains files
  94 + * @param {Object} types
  95 + */
  96 + _haveFiles(types) {
  97 + if(!types) return false;
  98 + if(types.indexOf) {
  99 + return types.indexOf('Files') !== -1;
  100 + } else if(types.contains) {
  101 + return types.contains('Files');
  102 + } else {
  103 + return false;
  104 + }
  105 + }
  106 + /**
  107 + * Callback
  108 + */
  109 + _addOverClass(item) {
  110 + item.addOverClass();
  111 + }
  112 + /**
  113 + * Callback
  114 + */
  115 + _removeOverClass(item) {
  116 + item.removeOverClass();
  117 + }
  118 + }
  119 +
  120 +
  121 + return FileDrop;
  122 +}
  123 +
  124 +
  125 +module.exports.$inject = [
  126 + 'FileDirective'
  127 +];
0 128 \ No newline at end of file
... ...
src/main/resources/static/assets/bower_components/angular-file-upload/src/services/FileItem.js 0 → 100644
  1 +'use strict';
  2 +
  3 +
  4 +import CONFIG from './../config.json';
  5 +
  6 +
  7 +let {
  8 + copy,
  9 + extend,
  10 + element,
  11 + isElement
  12 + } = angular;
  13 +
  14 +
  15 +export default ($compile, FileLikeObject) => {
  16 +
  17 +
  18 + class FileItem {
  19 + /**
  20 + * Creates an instance of FileItem
  21 + * @param {FileUploader} uploader
  22 + * @param {File|HTMLInputElement|Object} some
  23 + * @param {Object} options
  24 + * @constructor
  25 + */
  26 + constructor(uploader, some, options) {
  27 + var isInput = isElement(some);
  28 + var input = isInput ? element(some) : null;
  29 + var file = !isInput ? some : null;
  30 +
  31 + extend(this, {
  32 + url: uploader.url,
  33 + alias: uploader.alias,
  34 + headers: copy(uploader.headers),
  35 + formData: copy(uploader.formData),
  36 + removeAfterUpload: uploader.removeAfterUpload,
  37 + withCredentials: uploader.withCredentials,
  38 + method: uploader.method
  39 + }, options, {
  40 + uploader: uploader,
  41 + file: new FileLikeObject(some),
  42 + isReady: false,
  43 + isUploading: false,
  44 + isUploaded: false,
  45 + isSuccess: false,
  46 + isCancel: false,
  47 + isError: false,
  48 + progress: 0,
  49 + index: null,
  50 + _file: file,
  51 + _input: input
  52 + });
  53 +
  54 + if (input) this._replaceNode(input);
  55 + }
  56 + /**********************
  57 + * PUBLIC
  58 + **********************/
  59 + /**
  60 + * Uploads a FileItem
  61 + */
  62 + upload() {
  63 + try {
  64 + this.uploader.uploadItem(this);
  65 + } catch(e) {
  66 + this.uploader._onCompleteItem(this, '', 0, []);
  67 + this.uploader._onErrorItem(this, '', 0, []);
  68 + }
  69 + }
  70 + /**
  71 + * Cancels uploading of FileItem
  72 + */
  73 + cancel() {
  74 + this.uploader.cancelItem(this);
  75 + }
  76 + /**
  77 + * Removes a FileItem
  78 + */
  79 + remove() {
  80 + this.uploader.removeFromQueue(this);
  81 + }
  82 + /**
  83 + * Callback
  84 + * @private
  85 + */
  86 + onBeforeUpload() {
  87 + }
  88 + /**
  89 + * Callback
  90 + * @param {Number} progress
  91 + * @private
  92 + */
  93 + onProgress(progress) {
  94 + }
  95 + /**
  96 + * Callback
  97 + * @param {*} response
  98 + * @param {Number} status
  99 + * @param {Object} headers
  100 + */
  101 + onSuccess(response, status, headers) {
  102 + }
  103 + /**
  104 + * Callback
  105 + * @param {*} response
  106 + * @param {Number} status
  107 + * @param {Object} headers
  108 + */
  109 + onError(response, status, headers) {
  110 + }
  111 + /**
  112 + * Callback
  113 + * @param {*} response
  114 + * @param {Number} status
  115 + * @param {Object} headers
  116 + */
  117 + onCancel(response, status, headers) {
  118 + }
  119 + /**
  120 + * Callback
  121 + * @param {*} response
  122 + * @param {Number} status
  123 + * @param {Object} headers
  124 + */
  125 + onComplete(response, status, headers) {
  126 + }
  127 + /**********************
  128 + * PRIVATE
  129 + **********************/
  130 + /**
  131 + * Inner callback
  132 + */
  133 + _onBeforeUpload() {
  134 + this.isReady = true;
  135 + this.isUploading = true;
  136 + this.isUploaded = false;
  137 + this.isSuccess = false;
  138 + this.isCancel = false;
  139 + this.isError = false;
  140 + this.progress = 0;
  141 + this.onBeforeUpload();
  142 + }
  143 + /**
  144 + * Inner callback
  145 + * @param {Number} progress
  146 + * @private
  147 + */
  148 + _onProgress(progress) {
  149 + this.progress = progress;
  150 + this.onProgress(progress);
  151 + }
  152 + /**
  153 + * Inner callback
  154 + * @param {*} response
  155 + * @param {Number} status
  156 + * @param {Object} headers
  157 + * @private
  158 + */
  159 + _onSuccess(response, status, headers) {
  160 + this.isReady = false;
  161 + this.isUploading = false;
  162 + this.isUploaded = true;
  163 + this.isSuccess = true;
  164 + this.isCancel = false;
  165 + this.isError = false;
  166 + this.progress = 100;
  167 + this.index = null;
  168 + this.onSuccess(response, status, headers);
  169 + }
  170 + /**
  171 + * Inner callback
  172 + * @param {*} response
  173 + * @param {Number} status
  174 + * @param {Object} headers
  175 + * @private
  176 + */
  177 + _onError(response, status, headers) {
  178 + this.isReady = false;
  179 + this.isUploading = false;
  180 + this.isUploaded = true;
  181 + this.isSuccess = false;
  182 + this.isCancel = false;
  183 + this.isError = true;
  184 + this.progress = 0;
  185 + this.index = null;
  186 + this.onError(response, status, headers);
  187 + }
  188 + /**
  189 + * Inner callback
  190 + * @param {*} response
  191 + * @param {Number} status
  192 + * @param {Object} headers
  193 + * @private
  194 + */
  195 + _onCancel(response, status, headers) {
  196 + this.isReady = false;
  197 + this.isUploading = false;
  198 + this.isUploaded = false;
  199 + this.isSuccess = false;
  200 + this.isCancel = true;
  201 + this.isError = false;
  202 + this.progress = 0;
  203 + this.index = null;
  204 + this.onCancel(response, status, headers);
  205 + }
  206 + /**
  207 + * Inner callback
  208 + * @param {*} response
  209 + * @param {Number} status
  210 + * @param {Object} headers
  211 + * @private
  212 + */
  213 + _onComplete(response, status, headers) {
  214 + this.onComplete(response, status, headers);
  215 + if(this.removeAfterUpload) this.remove();
  216 + }
  217 + /**
  218 + * Destroys a FileItem
  219 + */
  220 + _destroy() {
  221 + if(this._input) this._input.remove();
  222 + if(this._form) this._form.remove();
  223 + delete this._form;
  224 + delete this._input;
  225 + }
  226 + /**
  227 + * Prepares to uploading
  228 + * @private
  229 + */
  230 + _prepareToUploading() {
  231 + this.index = this.index || ++this.uploader._nextIndex;
  232 + this.isReady = true;
  233 + }
  234 + /**
  235 + * Replaces input element on his clone
  236 + * @param {JQLite|jQuery} input
  237 + * @private
  238 + */
  239 + _replaceNode(input) {
  240 + var clone = $compile(input.clone())(input.scope());
  241 + clone.prop('value', null); // FF fix
  242 + input.css('display', 'none');
  243 + input.after(clone); // remove jquery dependency
  244 + }
  245 +
  246 + }
  247 +
  248 +
  249 + return FileItem;
  250 +}
  251 +
  252 +
  253 +module.exports.$inject = [
  254 + '$compile',
  255 + 'FileLikeObject'
  256 +];
0 257 \ No newline at end of file
... ...
src/main/resources/static/assets/bower_components/angular-file-upload/src/services/FileLikeObject.js 0 → 100644
  1 +'use strict';
  2 +
  3 +
  4 +import CONFIG from './../config.json';
  5 +
  6 +
  7 +let {
  8 + copy,
  9 + isElement,
  10 + isString
  11 + } = angular;
  12 +
  13 +
  14 +export default () => {
  15 +
  16 +
  17 + class FileLikeObject {
  18 + /**
  19 + * Creates an instance of FileLikeObject
  20 + * @param {File|HTMLInputElement|Object} fileOrInput
  21 + * @constructor
  22 + */
  23 + constructor(fileOrInput) {
  24 + var isInput = isElement(fileOrInput);
  25 + var fakePathOrObject = isInput ? fileOrInput.value : fileOrInput;
  26 + var postfix = isString(fakePathOrObject) ? 'FakePath' : 'Object';
  27 + var method = '_createFrom' + postfix;
  28 + this[method](fakePathOrObject);
  29 + }
  30 + /**
  31 + * Creates file like object from fake path string
  32 + * @param {String} path
  33 + * @private
  34 + */
  35 + _createFromFakePath(path) {
  36 + this.lastModifiedDate = null;
  37 + this.size = null;
  38 + this.type = 'like/' + path.slice(path.lastIndexOf('.') + 1).toLowerCase();
  39 + this.name = path.slice(path.lastIndexOf('/') + path.lastIndexOf('\\') + 2);
  40 + }
  41 + /**
  42 + * Creates file like object from object
  43 + * @param {File|FileLikeObject} object
  44 + * @private
  45 + */
  46 + _createFromObject(object) {
  47 + this.lastModifiedDate = copy(object.lastModifiedDate);
  48 + this.size = object.size;
  49 + this.type = object.type;
  50 + this.name = object.name;
  51 + }
  52 + }
  53 +
  54 +
  55 + return FileLikeObject;
  56 +}
  57 +
  58 +
  59 +module.exports.$inject = [
  60 +];
0 61 \ No newline at end of file
... ...
src/main/resources/static/assets/bower_components/angular-file-upload/src/services/FileOver.js 0 → 100644
  1 +'use strict';
  2 +
  3 +
  4 +import CONFIG from './../config.json';
  5 +
  6 +
  7 +let {
  8 + extend
  9 + } = angular;
  10 +
  11 +
  12 +export default (FileDirective) => {
  13 +
  14 +
  15 + class FileOver extends FileDirective {
  16 + /**
  17 + * Creates instance of {FileDrop} object
  18 + * @param {Object} options
  19 + * @constructor
  20 + */
  21 + constructor(options) {
  22 + let extendedOptions = extend(options, {
  23 + // Map of events
  24 + events: {
  25 + $destroy: 'destroy'
  26 + },
  27 + // Name of property inside uploader._directive object
  28 + prop: 'over',
  29 + // Over class
  30 + overClass: 'nv-file-over'
  31 + });
  32 +
  33 + super(extendedOptions);
  34 + }
  35 + /**
  36 + * Adds over class
  37 + */
  38 + addOverClass() {
  39 + this.element.addClass(this.getOverClass());
  40 + }
  41 + /**
  42 + * Removes over class
  43 + */
  44 + removeOverClass() {
  45 + this.element.removeClass(this.getOverClass());
  46 + }
  47 + /**
  48 + * Returns over class
  49 + * @returns {String}
  50 + */
  51 + getOverClass() {
  52 + return this.overClass;
  53 + }
  54 + }
  55 +
  56 +
  57 + return FileOver;
  58 +}
  59 +
  60 +
  61 +module.exports.$inject = [
  62 + 'FileDirective'
  63 +];
0 64 \ No newline at end of file
... ...
src/main/resources/static/assets/bower_components/angular-file-upload/src/services/FileSelect.js 0 → 100644
  1 +'use strict';
  2 +
  3 +
  4 +import CONFIG from './../config.json';
  5 +
  6 +
  7 +let {
  8 + extend
  9 + } = angular;
  10 +
  11 +
  12 +export default (FileDirective) => {
  13 +
  14 +
  15 + class FileSelect extends FileDirective {
  16 + /**
  17 + * Creates instance of {FileSelect} object
  18 + * @param {Object} options
  19 + * @constructor
  20 + */
  21 + constructor(options) {
  22 + let extendedOptions = extend(options, {
  23 + // Map of events
  24 + events: {
  25 + $destroy: 'destroy',
  26 + change: 'onChange'
  27 + },
  28 + // Name of property inside uploader._directive object
  29 + prop: 'select'
  30 + });
  31 +
  32 + super(extendedOptions);
  33 +
  34 + if(!this.uploader.isHTML5) {
  35 + this.element.removeAttr('multiple');
  36 + }
  37 + this.element.prop('value', null); // FF fix
  38 + }
  39 + /**
  40 + * Returns options
  41 + * @return {Object|undefined}
  42 + */
  43 + getOptions() {
  44 + }
  45 + /**
  46 + * Returns filters
  47 + * @return {Array<Function>|String|undefined}
  48 + */
  49 + getFilters() {
  50 + }
  51 + /**
  52 + * If returns "true" then HTMLInputElement will be cleared
  53 + * @returns {Boolean}
  54 + */
  55 + isEmptyAfterSelection() {
  56 + return !!this.element.attr('multiple');
  57 + }
  58 + /**
  59 + * Event handler
  60 + */
  61 + onChange() {
  62 + var files = this.uploader.isHTML5 ? this.element[0].files : this.element[0];
  63 + var options = this.getOptions();
  64 + var filters = this.getFilters();
  65 +
  66 + if(!this.uploader.isHTML5) this.destroy();
  67 + this.uploader.addToQueue(files, options, filters);
  68 + if(this.isEmptyAfterSelection()) {
  69 + this.element.prop('value', null);
  70 + this.element.replaceWith(this.element = this.element.clone(true)); // IE fix
  71 + }
  72 + }
  73 + }
  74 +
  75 +
  76 + return FileSelect;
  77 +}
  78 +
  79 +
  80 +module.exports.$inject = [
  81 + 'FileDirective'
  82 +];
... ...
src/main/resources/static/assets/bower_components/angular-file-upload/src/services/FileUploader.js 0 → 100644
  1 +'use strict';
  2 +
  3 +
  4 +import CONFIG from './../config.json';
  5 +
  6 +
  7 +let {
  8 + copy,
  9 + extend,
  10 + forEach,
  11 + isObject,
  12 + isNumber,
  13 + isDefined,
  14 + isArray,
  15 + element
  16 + } = angular;
  17 +
  18 +
  19 +export default (fileUploaderOptions, $rootScope, $http, $window, FileLikeObject, FileItem) => {
  20 +
  21 +
  22 + let {
  23 + File,
  24 + FormData
  25 + } = $window;
  26 +
  27 +
  28 + class FileUploader {
  29 + /**********************
  30 + * PUBLIC
  31 + **********************/
  32 + /**
  33 + * Creates an instance of FileUploader
  34 + * @param {Object} [options]
  35 + * @constructor
  36 + */
  37 + constructor(options) {
  38 + var settings = copy(fileUploaderOptions);
  39 +
  40 + extend(this, settings, options, {
  41 + isUploading: false,
  42 + _nextIndex: 0,
  43 + _failFilterIndex: -1,
  44 + _directives: {select: [], drop: [], over: []}
  45 + });
  46 +
  47 + // add default filters
  48 + this.filters.unshift({name: 'queueLimit', fn: this._queueLimitFilter});
  49 + this.filters.unshift({name: 'folder', fn: this._folderFilter});
  50 + }
  51 + /**
  52 + * Adds items to the queue
  53 + * @param {File|HTMLInputElement|Object|FileList|Array<Object>} files
  54 + * @param {Object} [options]
  55 + * @param {Array<Function>|String} filters
  56 + */
  57 + addToQueue(files, options, filters) {
  58 + var list = this.isArrayLikeObject(files) ? files: [files];
  59 + var arrayOfFilters = this._getFilters(filters);
  60 + var count = this.queue.length;
  61 + var addedFileItems = [];
  62 +
  63 + forEach(list, (some /*{File|HTMLInputElement|Object}*/) => {
  64 + var temp = new FileLikeObject(some);
  65 +
  66 + if (this._isValidFile(temp, arrayOfFilters, options)) {
  67 + var fileItem = new FileItem(this, some, options);
  68 + addedFileItems.push(fileItem);
  69 + this.queue.push(fileItem);
  70 + this._onAfterAddingFile(fileItem);
  71 + } else {
  72 + var filter = arrayOfFilters[this._failFilterIndex];
  73 + this._onWhenAddingFileFailed(temp, filter, options);
  74 + }
  75 + });
  76 +
  77 + if(this.queue.length !== count) {
  78 + this._onAfterAddingAll(addedFileItems);
  79 + this.progress = this._getTotalProgress();
  80 + }
  81 +
  82 + this._render();
  83 + if (this.autoUpload) this.uploadAll();
  84 + }
  85 + /**
  86 + * Remove items from the queue. Remove last: index = -1
  87 + * @param {FileItem|Number} value
  88 + */
  89 + removeFromQueue(value) {
  90 + var index = this.getIndexOfItem(value);
  91 + var item = this.queue[index];
  92 + if(item.isUploading) item.cancel();
  93 + this.queue.splice(index, 1);
  94 + item._destroy();
  95 + this.progress = this._getTotalProgress();
  96 + }
  97 + /**
  98 + * Clears the queue
  99 + */
  100 + clearQueue() {
  101 + while(this.queue.length) {
  102 + this.queue[0].remove();
  103 + }
  104 + this.progress = 0;
  105 + }
  106 + /**
  107 + * Uploads a item from the queue
  108 + * @param {FileItem|Number} value
  109 + */
  110 + uploadItem(value) {
  111 + var index = this.getIndexOfItem(value);
  112 + var item = this.queue[index];
  113 + var transport = this.isHTML5 ? '_xhrTransport' : '_iframeTransport';
  114 +
  115 + item._prepareToUploading();
  116 + if(this.isUploading) return;
  117 +
  118 + this.isUploading = true;
  119 + this[transport](item);
  120 + }
  121 + /**
  122 + * Cancels uploading of item from the queue
  123 + * @param {FileItem|Number} value
  124 + */
  125 + cancelItem(value) {
  126 + var index = this.getIndexOfItem(value);
  127 + var item = this.queue[index];
  128 + var prop = this.isHTML5 ? '_xhr' : '_form';
  129 + if(item && item.isUploading) item[prop].abort();
  130 + }
  131 + /**
  132 + * Uploads all not uploaded items of queue
  133 + */
  134 + uploadAll() {
  135 + var items = this.getNotUploadedItems().filter(item => !item.isUploading);
  136 + if(!items.length) return;
  137 +
  138 + forEach(items, item => item._prepareToUploading());
  139 + items[0].upload();
  140 + }
  141 + /**
  142 + * Cancels all uploads
  143 + */
  144 + cancelAll() {
  145 + var items = this.getNotUploadedItems();
  146 + forEach(items, item => item.cancel());
  147 + }
  148 + /**
  149 + * Returns "true" if value an instance of File
  150 + * @param {*} value
  151 + * @returns {Boolean}
  152 + * @private
  153 + */
  154 + isFile(value) {
  155 + return this.constructor.isFile(value);
  156 + }
  157 + /**
  158 + * Returns "true" if value an instance of FileLikeObject
  159 + * @param {*} value
  160 + * @returns {Boolean}
  161 + * @private
  162 + */
  163 + isFileLikeObject(value) {
  164 + return this.constructor.isFileLikeObject(value);
  165 + }
  166 + /**
  167 + * Returns "true" if value is array like object
  168 + * @param {*} value
  169 + * @returns {Boolean}
  170 + */
  171 + isArrayLikeObject(value) {
  172 + return this.constructor.isArrayLikeObject(value);
  173 + }
  174 + /**
  175 + * Returns a index of item from the queue
  176 + * @param {Item|Number} value
  177 + * @returns {Number}
  178 + */
  179 + getIndexOfItem(value) {
  180 + return isNumber(value) ? value : this.queue.indexOf(value);
  181 + }
  182 + /**
  183 + * Returns not uploaded items
  184 + * @returns {Array}
  185 + */
  186 + getNotUploadedItems() {
  187 + return this.queue.filter(item => !item.isUploaded);
  188 + }
  189 + /**
  190 + * Returns items ready for upload
  191 + * @returns {Array}
  192 + */
  193 + getReadyItems() {
  194 + return this.queue
  195 + .filter(item => (item.isReady && !item.isUploading))
  196 + .sort((item1, item2) => item1.index - item2.index);
  197 + }
  198 + /**
  199 + * Destroys instance of FileUploader
  200 + */
  201 + destroy() {
  202 + forEach(this._directives, (key) => {
  203 + forEach(this._directives[key], (object) => {
  204 + object.destroy();
  205 + });
  206 + });
  207 + }
  208 + /**
  209 + * Callback
  210 + * @param {Array} fileItems
  211 + */
  212 + onAfterAddingAll(fileItems) {
  213 + }
  214 + /**
  215 + * Callback
  216 + * @param {FileItem} fileItem
  217 + */
  218 + onAfterAddingFile(fileItem) {
  219 + }
  220 + /**
  221 + * Callback
  222 + * @param {File|Object} item
  223 + * @param {Object} filter
  224 + * @param {Object} options
  225 + */
  226 + onWhenAddingFileFailed(item, filter, options) {
  227 + }
  228 + /**
  229 + * Callback
  230 + * @param {FileItem} fileItem
  231 + */
  232 + onBeforeUploadItem(fileItem) {
  233 + }
  234 + /**
  235 + * Callback
  236 + * @param {FileItem} fileItem
  237 + * @param {Number} progress
  238 + */
  239 + onProgressItem(fileItem, progress) {
  240 + }
  241 + /**
  242 + * Callback
  243 + * @param {Number} progress
  244 + */
  245 + onProgressAll(progress) {
  246 + }
  247 + /**
  248 + * Callback
  249 + * @param {FileItem} item
  250 + * @param {*} response
  251 + * @param {Number} status
  252 + * @param {Object} headers
  253 + */
  254 + onSuccessItem(item, response, status, headers) {
  255 + }
  256 + /**
  257 + * Callback
  258 + * @param {FileItem} item
  259 + * @param {*} response
  260 + * @param {Number} status
  261 + * @param {Object} headers
  262 + */
  263 + onErrorItem(item, response, status, headers) {
  264 + }
  265 + /**
  266 + * Callback
  267 + * @param {FileItem} item
  268 + * @param {*} response
  269 + * @param {Number} status
  270 + * @param {Object} headers
  271 + */
  272 + onCancelItem(item, response, status, headers) {
  273 + }
  274 + /**
  275 + * Callback
  276 + * @param {FileItem} item
  277 + * @param {*} response
  278 + * @param {Number} status
  279 + * @param {Object} headers
  280 + */
  281 + onCompleteItem(item, response, status, headers) {
  282 + }
  283 + /**
  284 + * Callback
  285 + */
  286 + onCompleteAll() {
  287 + }
  288 + /**********************
  289 + * PRIVATE
  290 + **********************/
  291 + /**
  292 + * Returns the total progress
  293 + * @param {Number} [value]
  294 + * @returns {Number}
  295 + * @private
  296 + */
  297 + _getTotalProgress(value) {
  298 + if(this.removeAfterUpload) return value || 0;
  299 +
  300 + var notUploaded = this.getNotUploadedItems().length;
  301 + var uploaded = notUploaded ? this.queue.length - notUploaded : this.queue.length;
  302 + var ratio = 100 / this.queue.length;
  303 + var current = (value || 0) * ratio / 100;
  304 +
  305 + return Math.round(uploaded * ratio + current);
  306 + }
  307 + /**
  308 + * Returns array of filters
  309 + * @param {Array<Function>|String} filters
  310 + * @returns {Array<Function>}
  311 + * @private
  312 + */
  313 + _getFilters(filters) {
  314 + if(!filters) return this.filters;
  315 + if(isArray(filters)) return filters;
  316 + var names = filters.match(/[^\s,]+/g);
  317 + return this.filters
  318 + .filter(filter => names.indexOf(filter.name) !== -1);
  319 + }
  320 + /**
  321 + * Updates html
  322 + * @private
  323 + */
  324 + _render() {
  325 + if(!$rootScope.$$phase) $rootScope.$apply();
  326 + }
  327 + /**
  328 + * Returns "true" if item is a file (not folder)
  329 + * @param {File|FileLikeObject} item
  330 + * @returns {Boolean}
  331 + * @private
  332 + */
  333 + _folderFilter(item) {
  334 + return !!(item.size || item.type);
  335 + }
  336 + /**
  337 + * Returns "true" if the limit has not been reached
  338 + * @returns {Boolean}
  339 + * @private
  340 + */
  341 + _queueLimitFilter() {
  342 + return this.queue.length < this.queueLimit;
  343 + }
  344 + /**
  345 + * Returns "true" if file pass all filters
  346 + * @param {File|Object} file
  347 + * @param {Array<Function>} filters
  348 + * @param {Object} options
  349 + * @returns {Boolean}
  350 + * @private
  351 + */
  352 + _isValidFile(file, filters, options) {
  353 + this._failFilterIndex = -1;
  354 + return !filters.length ? true : filters.every((filter) => {
  355 + this._failFilterIndex++;
  356 + return filter.fn.call(this, file, options);
  357 + });
  358 + }
  359 + /**
  360 + * Checks whether upload successful
  361 + * @param {Number} status
  362 + * @returns {Boolean}
  363 + * @private
  364 + */
  365 + _isSuccessCode(status) {
  366 + return (status >= 200 && status < 300) || status === 304;
  367 + }
  368 + /**
  369 + * Transforms the server response
  370 + * @param {*} response
  371 + * @param {Object} headers
  372 + * @returns {*}
  373 + * @private
  374 + */
  375 + _transformResponse(response, headers) {
  376 + var headersGetter = this._headersGetter(headers);
  377 + forEach($http.defaults.transformResponse, (transformFn) => {
  378 + response = transformFn(response, headersGetter);
  379 + });
  380 + return response;
  381 + }
  382 + /**
  383 + * Parsed response headers
  384 + * @param headers
  385 + * @returns {Object}
  386 + * @see https://github.com/angular/angular.js/blob/master/src/ng/http.js
  387 + * @private
  388 + */
  389 + _parseHeaders(headers) {
  390 + var parsed = {}, key, val, i;
  391 +
  392 + if(!headers) return parsed;
  393 +
  394 + forEach(headers.split('\n'), (line) => {
  395 + i = line.indexOf(':');
  396 + key = line.slice(0, i).trim().toLowerCase();
  397 + val = line.slice(i + 1).trim();
  398 +
  399 + if(key) {
  400 + parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
  401 + }
  402 + });
  403 +
  404 + return parsed;
  405 + }
  406 + /**
  407 + * Returns function that returns headers
  408 + * @param {Object} parsedHeaders
  409 + * @returns {Function}
  410 + * @private
  411 + */
  412 + _headersGetter(parsedHeaders) {
  413 + return (name) => {
  414 + if(name) {
  415 + return parsedHeaders[name.toLowerCase()] || null;
  416 + }
  417 + return parsedHeaders;
  418 + };
  419 + }
  420 + /**
  421 + * The XMLHttpRequest transport
  422 + * @param {FileItem} item
  423 + * @private
  424 + */
  425 + _xhrTransport(item) {
  426 + var xhr = item._xhr = new XMLHttpRequest();
  427 + var form = new FormData();
  428 +
  429 + this._onBeforeUploadItem(item);
  430 +
  431 + forEach(item.formData, (obj) => {
  432 + forEach(obj, (value, key) => {
  433 + form.append(key, value);
  434 + });
  435 + });
  436 +
  437 + if(typeof(item._file.size) != 'number') {
  438 + throw new TypeError('The file specified is no longer valid');
  439 + }
  440 +
  441 + form.append(item.alias, item._file, item.file.name);
  442 +
  443 + xhr.upload.onprogress = (event) => {
  444 + var progress = Math.round(event.lengthComputable ? event.loaded * 100 / event.total : 0);
  445 + this._onProgressItem(item, progress);
  446 + };
  447 +
  448 + xhr.onload = () => {
  449 + var headers = this._parseHeaders(xhr.getAllResponseHeaders());
  450 + var response = this._transformResponse(xhr.response, headers);
  451 + var gist = this._isSuccessCode(xhr.status) ? 'Success' : 'Error';
  452 + var method = '_on' + gist + 'Item';
  453 + this[method](item, response, xhr.status, headers);
  454 + this._onCompleteItem(item, response, xhr.status, headers);
  455 + };
  456 +
  457 + xhr.onerror = () => {
  458 + var headers = this._parseHeaders(xhr.getAllResponseHeaders());
  459 + var response = this._transformResponse(xhr.response, headers);
  460 + this._onErrorItem(item, response, xhr.status, headers);
  461 + this._onCompleteItem(item, response, xhr.status, headers);
  462 + };
  463 +
  464 + xhr.onabort = () => {
  465 + var headers = this._parseHeaders(xhr.getAllResponseHeaders());
  466 + var response = this._transformResponse(xhr.response, headers);
  467 + this._onCancelItem(item, response, xhr.status, headers);
  468 + this._onCompleteItem(item, response, xhr.status, headers);
  469 + };
  470 +
  471 + xhr.open(item.method, item.url, true);
  472 +
  473 + xhr.withCredentials = item.withCredentials;
  474 +
  475 + forEach(item.headers, (value, name) => {
  476 + xhr.setRequestHeader(name, value);
  477 + });
  478 +
  479 + xhr.send(form);
  480 + this._render();
  481 + }
  482 + /**
  483 + * The IFrame transport
  484 + * @param {FileItem} item
  485 + * @private
  486 + */
  487 + _iframeTransport(item) {
  488 + var form = element('<form style="display: none;" />');
  489 + var iframe = element('<iframe name="iframeTransport' + Date.now() + '">');
  490 + var input = item._input;
  491 +
  492 + if(item._form) item._form.replaceWith(input); // remove old form
  493 + item._form = form; // save link to new form
  494 +
  495 + this._onBeforeUploadItem(item);
  496 +
  497 + input.prop('name', item.alias);
  498 +
  499 + forEach(item.formData, (obj) => {
  500 + forEach(obj, (value, key) => {
  501 + var element_ = element('<input type="hidden" name="' + key + '" />');
  502 + element_.val(value);
  503 + form.append(element_);
  504 + });
  505 + });
  506 +
  507 + form.prop({
  508 + action: item.url,
  509 + method: 'POST',
  510 + target: iframe.prop('name'),
  511 + enctype: 'multipart/form-data',
  512 + encoding: 'multipart/form-data' // old IE
  513 + });
  514 +
  515 + iframe.bind('load', () => {
  516 + var html = '';
  517 + var status = 200;
  518 +
  519 + try {
  520 + // Fix for legacy IE browsers that loads internal error page
  521 + // when failed WS response received. In consequence iframe
  522 + // content access denied error is thrown becouse trying to
  523 + // access cross domain page. When such thing occurs notifying
  524 + // with empty response object. See more info at:
  525 + // http://stackoverflow.com/questions/151362/access-is-denied-error-on-accessing-iframe-document-object
  526 + // Note that if non standard 4xx or 5xx error code returned
  527 + // from WS then response content can be accessed without error
  528 + // but 'XHR' status becomes 200. In order to avoid confusion
  529 + // returning response via same 'success' event handler.
  530 +
  531 + // fixed angular.contents() for iframes
  532 + html = iframe[0].contentDocument.body.innerHTML;
  533 + } catch(e) {
  534 + // in case we run into the access-is-denied error or we have another error on the server side
  535 + // (intentional 500,40... errors), we at least say 'something went wrong' -> 500
  536 + status = 500;
  537 + }
  538 +
  539 + var xhr = {response: html, status: status, dummy: true};
  540 + var headers = {};
  541 + var response = this._transformResponse(xhr.response, headers);
  542 +
  543 + this._onSuccessItem(item, response, xhr.status, headers);
  544 + this._onCompleteItem(item, response, xhr.status, headers);
  545 + });
  546 +
  547 + form.abort = () => {
  548 + var xhr = {status: 0, dummy: true};
  549 + var headers = {};
  550 + var response;
  551 +
  552 + iframe.unbind('load').prop('src', 'javascript:false;');
  553 + form.replaceWith(input);
  554 +
  555 + this._onCancelItem(item, response, xhr.status, headers);
  556 + this._onCompleteItem(item, response, xhr.status, headers);
  557 + };
  558 +
  559 + input.after(form);
  560 + form.append(input).append(iframe);
  561 +
  562 + form[0].submit();
  563 + this._render();
  564 + }
  565 + /**
  566 + * Inner callback
  567 + * @param {File|Object} item
  568 + * @param {Object} filter
  569 + * @param {Object} options
  570 + * @private
  571 + */
  572 + _onWhenAddingFileFailed(item, filter, options) {
  573 + this.onWhenAddingFileFailed(item, filter, options);
  574 + }
  575 + /**
  576 + * Inner callback
  577 + * @param {FileItem} item
  578 + */
  579 + _onAfterAddingFile(item) {
  580 + this.onAfterAddingFile(item);
  581 + }
  582 + /**
  583 + * Inner callback
  584 + * @param {Array<FileItem>} items
  585 + */
  586 + _onAfterAddingAll(items) {
  587 + this.onAfterAddingAll(items);
  588 + }
  589 + /**
  590 + * Inner callback
  591 + * @param {FileItem} item
  592 + * @private
  593 + */
  594 + _onBeforeUploadItem(item) {
  595 + item._onBeforeUpload();
  596 + this.onBeforeUploadItem(item);
  597 + }
  598 + /**
  599 + * Inner callback
  600 + * @param {FileItem} item
  601 + * @param {Number} progress
  602 + * @private
  603 + */
  604 + _onProgressItem(item, progress) {
  605 + var total = this._getTotalProgress(progress);
  606 + this.progress = total;
  607 + item._onProgress(progress);
  608 + this.onProgressItem(item, progress);
  609 + this.onProgressAll(total);
  610 + this._render();
  611 + }
  612 + /**
  613 + * Inner callback
  614 + * @param {FileItem} item
  615 + * @param {*} response
  616 + * @param {Number} status
  617 + * @param {Object} headers
  618 + * @private
  619 + */
  620 + _onSuccessItem(item, response, status, headers) {
  621 + item._onSuccess(response, status, headers);
  622 + this.onSuccessItem(item, response, status, headers);
  623 + }
  624 + /**
  625 + * Inner callback
  626 + * @param {FileItem} item
  627 + * @param {*} response
  628 + * @param {Number} status
  629 + * @param {Object} headers
  630 + * @private
  631 + */
  632 + _onErrorItem(item, response, status, headers) {
  633 + item._onError(response, status, headers);
  634 + this.onErrorItem(item, response, status, headers);
  635 + }
  636 + /**
  637 + * Inner callback
  638 + * @param {FileItem} item
  639 + * @param {*} response
  640 + * @param {Number} status
  641 + * @param {Object} headers
  642 + * @private
  643 + */
  644 + _onCancelItem(item, response, status, headers) {
  645 + item._onCancel(response, status, headers);
  646 + this.onCancelItem(item, response, status, headers);
  647 + }
  648 + /**
  649 + * Inner callback
  650 + * @param {FileItem} item
  651 + * @param {*} response
  652 + * @param {Number} status
  653 + * @param {Object} headers
  654 + * @private
  655 + */
  656 + _onCompleteItem(item, response, status, headers) {
  657 + item._onComplete(response, status, headers);
  658 + this.onCompleteItem(item, response, status, headers);
  659 +
  660 + var nextItem = this.getReadyItems()[0];
  661 + this.isUploading = false;
  662 +
  663 + if(isDefined(nextItem)) {
  664 + nextItem.upload();
  665 + return;
  666 + }
  667 +
  668 + this.onCompleteAll();
  669 + this.progress = this._getTotalProgress();
  670 + this._render();
  671 + }
  672 + /**********************
  673 + * STATIC
  674 + **********************/
  675 + /**
  676 + * Returns "true" if value an instance of File
  677 + * @param {*} value
  678 + * @returns {Boolean}
  679 + * @private
  680 + */
  681 + static isFile(value) {
  682 + return (File && value instanceof File);
  683 + }
  684 + /**
  685 + * Returns "true" if value an instance of FileLikeObject
  686 + * @param {*} value
  687 + * @returns {Boolean}
  688 + * @private
  689 + */
  690 + static isFileLikeObject(value) {
  691 + return value instanceof FileLikeObject;
  692 + }
  693 + /**
  694 + * Returns "true" if value is array like object
  695 + * @param {*} value
  696 + * @returns {Boolean}
  697 + */
  698 + static isArrayLikeObject(value) {
  699 + return (isObject(value) && 'length' in value);
  700 + }
  701 + /**
  702 + * Inherits a target (Class_1) by a source (Class_2)
  703 + * @param {Function} target
  704 + * @param {Function} source
  705 + */
  706 + static inherit(target, source) {
  707 + target.prototype = Object.create(source.prototype);
  708 + target.prototype.constructor = target;
  709 + target.super_ = source;
  710 + }
  711 + }
  712 +
  713 +
  714 + /**********************
  715 + * PUBLIC
  716 + **********************/
  717 + /**
  718 + * Checks a support the html5 uploader
  719 + * @returns {Boolean}
  720 + * @readonly
  721 + */
  722 + FileUploader.prototype.isHTML5 = !!(File && FormData);
  723 + /**********************
  724 + * STATIC
  725 + **********************/
  726 + /**
  727 + * @borrows FileUploader.prototype.isHTML5
  728 + */
  729 + FileUploader.isHTML5 = FileUploader.prototype.isHTML5;
  730 +
  731 +
  732 + return FileUploader;
  733 +}
  734 +
  735 +
  736 +module.exports.$inject = [
  737 + 'fileUploaderOptions',
  738 + '$rootScope',
  739 + '$http',
  740 + '$window',
  741 + 'FileLikeObject',
  742 + 'FileItem'
  743 +];
0 744 \ No newline at end of file
... ...
src/main/resources/static/assets/bower_components/angular-file-upload/src/values/options.js 0 → 100644
  1 +'use strict';
  2 +
  3 +
  4 +export default {
  5 + url: '/',
  6 + alias: 'file',
  7 + headers: {},
  8 + queue: [],
  9 + progress: 0,
  10 + autoUpload: false,
  11 + removeAfterUpload: false,
  12 + method: 'POST',
  13 + filters: [],
  14 + formData: [],
  15 + queueLimit: Number.MAX_VALUE,
  16 + withCredentials: false
  17 +};
0 18 \ No newline at end of file
... ...
src/main/resources/static/pages/base/line/add.html
... ... @@ -220,6 +220,79 @@
220 220 <input type="text" class="form-control" name="endPhone" id="startPhoneInput" placeholder="终点站调度电话">
221 221 </div>
222 222 </div>
  223 + <!--
  224 + 起始站名称
  225 + <div class="form-group">
  226 + <label class="control-label col-md-3"> 起始站名称: </label>
  227 + <div class="col-md-4">
  228 + <input type="text" class="form-control" name="startStationName" id="startStationNameInput" placeholder="起始站名称">
  229 + </div>
  230 + </div>
  231 +
  232 + 起始站首班车时间
  233 + <div class="form-group">
  234 + <label class="control-label col-md-3"> 起始站首班车时间: </label>
  235 + <div class="col-md-4">
  236 + <input type="text" class="form-control" name="startStationFirstTime" id="startStationFirstTimeInput" placeholder="起始站首班车时间">
  237 + </div>
  238 + </div>
  239 +
  240 + 起始站末班车时间
  241 + <div class="form-group">
  242 + <label class="control-label col-md-3"> 起始站末班车时间: </label>
  243 + <div class="col-md-4">
  244 + <input type="text" class="form-control" name="StartStationEndTime" id="StartStationEndTimeInput" placeholder="起始站末班车时间 ">
  245 + </div>
  246 + </div>
  247 +
  248 +
  249 + 终点站名称
  250 + <div class="form-group">
  251 + <label class="control-label col-md-3"> 终点站名称: </label>
  252 + <div class="col-md-4">
  253 + <input type="text" class="form-control" name="endStationName" id="endStationNameInput" placeholder="终点站名称">
  254 + </div>
  255 + </div>
  256 +
  257 + 终点站首班时间
  258 + <div class="form-group">
  259 + <label class="control-label col-md-3"> 终点站首班车时间: </label>
  260 + <div class="col-md-4">
  261 + <input type="text" class="form-control" name="endStationFirstTime" id="endStationFirstTimeInput" placeholder="终点站首班车时间">
  262 + </div>
  263 + </div>
  264 +
  265 + 终点站末班时间
  266 + <div class="form-group">
  267 + <label class="control-label col-md-3"> 终点站末班车时间: </label>
  268 + <div class="col-md-4">
  269 + <input type="text" class="form-control" name="endStationEndTime" id="endStationEndTimeInput" placeholder="终点站末班车时间 ">
  270 + </div>
  271 + </div> -->
  272 +
  273 + <!-- 车辆总数 -->
  274 + <div class="form-group">
  275 + <label class="control-label col-md-3"> 车辆总数: </label>
  276 + <div class="col-md-4">
  277 + <input type="text" class="form-control" name="carSumNumber" id="carSumNumberInput" placeholder="车辆总数">
  278 + </div>
  279 + </div>
  280 +
  281 + <!-- 空调车辆数 -->
  282 + <div class="form-group">
  283 + <label class="control-label col-md-3"> 空调车辆数: </label>
  284 + <div class="col-md-4">
  285 + <input type="text" class="form-control" name="hvacCarNumber" id="hvacCarNumberInput" placeholder="空调车辆数">
  286 + </div>
  287 + </div>
  288 +
  289 + <!-- 普通车辆数 -->
  290 + <div class="form-group">
  291 + <label class="control-label col-md-3"> 普通车辆数: </label>
  292 + <div class="col-md-4">
  293 + <input type="text" class="form-control" name="ordCarNumber" id="ordCarNumberInput" placeholder="普通车辆数">
  294 + </div>
  295 + </div>
223 296  
224 297 <!-- 描述/说明 -->
225 298 <div class="form-group">
... ...
src/main/resources/static/pages/base/line/details.html
... ... @@ -11,97 +11,296 @@
11 11 <li><span class="active">线路详情</span></li>
12 12 </ul>
13 13  
14   -<div class="row">
15   - <div class="col-md-12">
16   - <div class="portlet light porttlet-fit bordered">
17   - <div class="portlet-title">
18   - <div class="caption">
19   - <i class="fa fa-info-circle font-dark"></i>
20   - <span class="caption-subject font-dark sbold uppercase">线路详情</span>
21   - </div>
22   - <div class="actions">
23   - <div class="btn-group btn-group-devided" data-toggle="buttons">
24   - <a class="btn btn-circle blue" href="list.html" data-pjax><i class="fa fa-reply"></i> 返回</a>
  14 +<div class="portlet light bordered">
  15 + <div class="portlet-title">
  16 + <div class="caption">
  17 + <i class="icon-equalizer font-red-sunglo"></i>
  18 + <span class="caption-subject font-red-sunglo bold uppercase">线路详情信息</span>
  19 + </div>
  20 + </div>
  21 + <div class="portlet-body form" id="lineDetailsForm">
  22 +
  23 + <!-- START FORM -->
  24 + <form action="/" class="form-horizontal" id="line_details_form" >
  25 +
  26 + <!-- 表单内容 -->
  27 + <div class="form-body">
  28 +
  29 + <!-- 线路名称 -->
  30 + <div class="form-group">
  31 + <label class="control-label col-md-3">
  32 + <span class="required"> * </span>线路名称:
  33 + </label>
  34 + <div class="col-md-4">
  35 + <input type="text" class="form-control" name="name" id="nameInput" placeholder="线路名称" />
  36 + <span class="help-block"> 例如 :浦东88路 </span>
  37 + </div>
  38 + </div>
  39 +
  40 + <!-- 英文名称 -->
  41 + <div class="form-group">
  42 + <label class="control-label col-md-3"> 英文名称: </label>
  43 + <div class="col-md-4">
  44 + <input type="text" class="form-control" name="es" id="esInput" placeholder="英文名称">
  45 + </div>
  46 + </div>
  47 +
  48 + <!-- 线路简称 -->
  49 + <div class="form-group">
  50 + <label class="control-label col-md-3"> 线路简称:</label>
  51 + <div class="col-md-4">
  52 + <input type="text" class="form-control" name="shortName" id="shortNameInput" placeholder="线路简称">
  53 + </div>
  54 + </div>
  55 +
  56 + <!-- 线路编码 -->
  57 + <div class="form-group">
  58 + <label class="control-label col-md-3">
  59 + <span class="required"> * </span>线路编码:
  60 + </label>
  61 + <div class="col-md-4">
  62 + <input type="text" class="form-control" name="lineCode" id="lineCodeInput" placeholder="线路编码">
  63 + </div>
  64 + </div>
  65 +
  66 + <!-- 所属公司 -->
  67 + <div class="form-group">
  68 + <label class="control-label col-md-3"> 所属公司:</label>
  69 + <div class="col-md-4">
  70 + <select name="company" class="form-control" id="companySelect"></select>
  71 + </div>
  72 + </div>
  73 +
  74 + <!-- 所属分公司 -->
  75 + <div class="form-group">
  76 + <label class="control-label col-md-3"> 所属分公司:</label>
  77 + <div class="col-md-4">
  78 + <select name="brancheCompany" class="form-control" id="brancheCompanySelect"></select>
  79 + </div>
  80 + </div>
  81 +
  82 + <!-- 线路性质 -->
  83 + <div class="form-group">
  84 + <label class="control-label col-md-3"> 线路性质:</label>
  85 + <div class="col-md-4">
  86 + <select name="nature" class="form-control" id="natureSelect">
  87 + <option value="">-- 请选择线路性质 --</option>
  88 + <option value="lj">路救</option>
  89 + <option value="bc">备车</option>
  90 + <option value="dbc">定班车</option>
  91 + <option value="yxl">夜宵路</option>
  92 + <option value="cgxl">常规线路</option>
  93 + <option value="gjxl">过江线路</option>
  94 + <option value="csbs">穿梭巴士</option>
  95 + <option value="tyxl">特约线路</option>
  96 + <option value="cctxl">村村通线路</option>
  97 + <option value="qt">其他</option>
  98 + </select>
  99 + </div>
  100 + </div>
  101 +
  102 + <!-- 线路等级 -->
  103 + <div class="form-group">
  104 + <label class="control-label col-md-3"> 线路等级:</label>
  105 + <div class="col-md-4">
  106 + <select name="level" class="form-control" id="levelSelect">
  107 + <option value="">-- 请选择线路等级 --</option>
  108 + <option value="1">一级线路</option>
  109 + <option value="2">二级线路</option>
  110 + <option value="0">未知等级</option>
  111 + </select>
25 112 </div>
26   - </div>
  113 + </div>
  114 +
  115 + <!-- 是否撤销 -->
  116 + <div class="form-group">
  117 + <label class="control-label col-md-3">是否撤销:</label>
  118 + <div class="col-md-4">
  119 + <div class="md-radio-inline">
  120 + <div class="md-radio">
  121 + <input type="radio" id="radio14" name="destroy" data-title="是" class="md-radiobtn" value="1" >
  122 + <label for="radio14">
  123 + <span></span>
  124 + <span class="check"></span>
  125 + <span class="box"></span> 是
  126 + </label>
  127 + </div>
  128 + <div class="md-radio has-error">
  129 + <input type="radio" id="radio15" name="destroy" class="md-radiobtn" data-title="否" value="0">
  130 + <label for="radio15" style="color:#FFC0CB">
  131 + <span></span>
  132 + <span class="check"></span>
  133 + <span class="box"></span> 否
  134 + </label>
  135 + </div>
  136 + </div>
  137 + </div>
  138 + </div>
  139 +
  140 + <!-- 是否宵夜 -->
  141 + <div class="form-group">
  142 + <label class="control-label col-md-3">是否宵夜:</label>
  143 + <div class="col-md-4">
  144 + <div class="md-radio-inline">
  145 + <div class="md-radio">
  146 + <input type="radio" id="radio16" name="supperLine" class="md-radiobtn" data-title="是" value="1">
  147 + <label for="radio16">
  148 + <span></span>
  149 + <span class="check"></span>
  150 + <span class="box"></span> 是
  151 + </label>
  152 + </div>
  153 + <div class="md-radio has-error">
  154 + <input type="radio" id="radio17" name="supperLine" class="md-radiobtn" data-title="否" value="0">
  155 + <label for="radio17" style="color:#FFC0CB">
  156 + <span></span>
  157 + <span class="check"></span>
  158 + <span class="box"></span> 否
  159 + </label>
  160 + </div>
  161 + </div>
  162 + </div>
  163 + </div>
  164 +
  165 + <!-- 开辟日期 -->
  166 + <div class="form-group">
  167 + <label class="control-label col-md-3"> 开辟日期: </label>
  168 + <div class="col-md-4">
  169 + <input type="text" class="form-control" name="openDate" id="openDateInput" placeholder="开辟日期">
  170 + </div>
  171 + </div>
  172 +
  173 + <!-- 线路沿革 -->
  174 + <div class="form-group">
  175 + <label class="control-label col-md-3"> 线路沿革: </label>
  176 + <div class="col-md-4">
  177 + <textarea class="form-control" rows="3" name="history" id="historyTextarea" placeholder="线路沿革"></textarea>
  178 + <span class="help-block">日期及内容:如2014-1-1,开辟;2014-5-1,延线;</span>
  179 + </div>
  180 + </div>
  181 +
  182 + <!-- 设备线路编码 -->
  183 + <div class="form-group">
  184 + <label class="control-label col-md-3"> 设备线路编码: </label>
  185 + <div class="col-md-4">
  186 + <input type="text" class="form-control" name="eqLinecode" id="eqLinecodeInput" placeholder="设备线路编码">
  187 + </div>
  188 + </div>
  189 +
  190 + <!-- 上海市线路编码 -->
  191 + <div class="form-group">
  192 + <label class="control-label col-md-3"> 上海市线路编码: </label>
  193 + <div class="col-md-4">
  194 + <input type="text" class="form-control" name="shanghaiLinecode" id="shanghaiLinecodeInput" placeholder="上海市线路编码">
  195 + </div>
  196 + </div>
  197 +
  198 + <!-- 起始站调度电话 -->
  199 + <div class="form-group">
  200 + <label class="control-label col-md-3"> 起始站调度电话: </label>
  201 + <div class="col-md-4">
  202 + <input type="text" class="form-control" name="startPhone" id="startPhoneInput" placeholder="起始站调度电话">
  203 + </div>
  204 + </div>
  205 +
  206 + <!-- 终点站调度电话 -->
  207 + <div class="form-group">
  208 + <label class="control-label col-md-3"> 终点站调度电话: </label>
  209 + <div class="col-md-4">
  210 + <input type="text" class="form-control" name="endPhone" id="startPhoneInput" placeholder="终点站调度电话">
  211 + </div>
  212 + </div>
  213 + <!-- 起始站名称 -->
  214 + <div class="form-group">
  215 + <label class="control-label col-md-3"> 起始站名称: </label>
  216 + <div class="col-md-4">
  217 + <input type="text" class="form-control" name="startStationName" id="startStationNameInput" placeholder="起始站名称">
  218 + </div>
  219 + </div>
  220 +
  221 + <!-- 起始站首班车时间 -->
  222 + <div class="form-group">
  223 + <label class="control-label col-md-3"> 起始站首班车时间: </label>
  224 + <div class="col-md-4">
  225 + <input type="text" class="form-control" name="startStationFirstTime" id="startStationFirstTimeInput" placeholder="起始站首班车时间">
  226 + </div>
  227 + </div>
  228 +
  229 + <!-- 起始站末班车时间 -->
  230 + <div class="form-group">
  231 + <label class="control-label col-md-3"> 起始站末班车时间: </label>
  232 + <div class="col-md-4">
  233 + <input type="text" class="form-control" name="startStationEndTime" id="StartStationEndTimeInput" placeholder="起始站末班车时间 ">
  234 + </div>
  235 + </div>
  236 +
  237 +
  238 + <!-- 终点站名称 -->
  239 + <div class="form-group">
  240 + <label class="control-label col-md-3"> 终点站名称: </label>
  241 + <div class="col-md-4">
  242 + <input type="text" class="form-control" name="endStationName" id="endStationNameInput" placeholder="终点站名称">
  243 + </div>
  244 + </div>
  245 +
  246 + <!-- 终点站首班时间 -->
  247 + <div class="form-group">
  248 + <label class="control-label col-md-3"> 终点站首班车时间: </label>
  249 + <div class="col-md-4">
  250 + <input type="text" class="form-control" name="endStationFirstTime" id="endStationFirstTimeInput" placeholder="终点站首班车时间">
  251 + </div>
  252 + </div>
  253 +
  254 + <!-- 终点站末班时间 -->
  255 + <div class="form-group">
  256 + <label class="control-label col-md-3"> 终点站末班车时间: </label>
  257 + <div class="col-md-4">
  258 + <input type="text" class="form-control" name="endStationEndTime" id="endStationEndTimeInput" placeholder="终点站末班车时间 ">
  259 + </div>
  260 + </div>
  261 +
  262 + <!-- 车辆总数 -->
  263 + <div class="form-group">
  264 + <label class="control-label col-md-3"> 车辆总数: </label>
  265 + <div class="col-md-4">
  266 + <input type="text" class="form-control" name="carSumNumber" id="carSumNumberInput" placeholder="车辆总数">
  267 + </div>
  268 + </div>
  269 +
  270 + <!-- 空调车辆数 -->
  271 + <div class="form-group">
  272 + <label class="control-label col-md-3"> 空调车辆数: </label>
  273 + <div class="col-md-4">
  274 + <input type="text" class="form-control" name="hvacCarNumber" id="hvacCarNumberInput" placeholder="空调车辆数">
  275 + </div>
  276 + </div>
  277 +
  278 + <!-- 普通车辆数 -->
  279 + <div class="form-group">
  280 + <label class="control-label col-md-3"> 普通车辆数: </label>
  281 + <div class="col-md-4">
  282 + <input type="text" class="form-control" name="ordCarNumber" id="ordCarNumberInput" placeholder="普通车辆数">
  283 + </div>
  284 + </div>
  285 +
  286 + <!-- 描述/说明 -->
  287 + <div class="form-group">
  288 + <label class="control-label col-md-3"> 描述/说明: </label>
  289 + <div class="col-md-4">
  290 + <textarea class="form-control" rows="3" name="descriptions" id="descriptionsTextarea" placeholder="描述/说明"></textarea>
  291 + </div>
  292 + </div>
27 293 </div>
28   - <div class="portlet-body">
29   - <div class="table-container" style="margin-top: 10px">
30   - <table class="table table-striped table-bordered table-hover table-checkable" id="line_details">
31   - <thead>
32   - <tr role="row" class="heading">
33   - <th width="8%">线路编码</th>
34   - <th width="8%">线路名称</th>
35   - <th width="10%">英文名称</th>
36   - <th width="10%">线路简称</th>
37   - <th width="10%">所属公司</th>
38   - <th width="10%">所属分公司</th>
39   - <th width="10%">线路性质</th>
40   - <th width="10%">线路等级</th>
41   - <th width="10%">是否撤消</th>
42   - <th width="10%">是否夜宵线</th>
43   - <th width="10%">起始站调度电话</th>
44   - <th width="10%">终点站调度电话</th>
45   - <th width="10%">开辟日期</th>
46   - <th width="10%">线路沿革</th>
47   - </tr>
48   - </thead>
49   - <tbody></tbody>
50   - </table>
51   - <div style="text-align: right;">
52   - <ul id="pagination" class="pagination"></ul>
  294 + <div class="form-actions">
  295 + <div class="row">
  296 + <div class="col-md-offset-3 col-md-4">
  297 + <a type="button" class="btn default" href="list.html" style="margin-left: 35%;" data-pjax><i class="fa fa-reply"></i> 返回</a>
53 298 </div>
54 299 </div>
55 300 </div>
56   - </div>
  301 + </form>
  302 + <!-- END FORM-->
  303 +
57 304 </div>
58 305 </div>
59   -<script type="text/html" id="line_details_temp">
60   -{{each list as obj i }}
61   -<tr>
62   - <td>
63   - {{obj.lineCode}}
64   - </td>
65   - <td>
66   - {{obj.name}}
67   - </td>
68   - <td>
69   - {{obj.es}}
70   - </td>
71   - <td>
72   - {{obj.shortName}}
73   - </td>
74   - <td>
75   - {{obj.company}}
76   - </td>
77   - <td>
78   - {{obj.brancheCompany}}
79   - </td>
80   - <td>
81   - {{obj.nature}}
82   - </td>
83   - <td>
84   - {{obj.level}}
85   - </td>
86   - <td>
87   - {{obj.destroy}}
88   - </td>
89   - <td>
90   - {{obj.supperLine}}
91   - </td>
92   - <td>
93   - {{obj.startPhone}}
94   - </td>
95   - <td>
96   - {{obj.endPhone}}
97   - </td>
98   - <td>
99   - {{obj.openDate}}
100   - </td>
101   - <td>
102   - {{obj.history}}
103   - </td>
104   -</tr>
105   -{{/each}}
106   -</script>
107 306 <script type="text/javascript" src="/pages/base/line/js/line-details-info.js"></script>
108 307 \ No newline at end of file
... ...