/**
|
* @fileoverview 存储文件路径信息的隐藏域
|
* @author: 剑平(明河)<minghe36@126.com>,紫英<daxingplay@gmail.com>
|
**/
|
KISSY.add('gallery/form/1.3/uploader/urlsInput',function(S, Node, Base) {
|
var EMPTY = '',$ = Node.all,LOG_PREFIX = '[uploader-urlsInput]:';
|
/**
|
* @name UrlsInput
|
* @class 存储文件路径信息的隐藏域
|
* @constructor
|
* @extends Base
|
* @param {String} wrapper 容器钩子
|
* @param {Object} config 组件配置(下面的参数为配置项,配置会写入属性,详细的配置说明请看属性部分)
|
* @param {String} config.name *,隐藏域名称,当此name的隐藏域不存在时组件会创建一个
|
* @param {String} config.split 多个路径间的分隔符
|
* @param {String} config.tpl 隐藏域模板
|
*
|
*/
|
function UrlsInput(wrapper, config) {
|
var self = this;
|
//调用父类构造函数
|
UrlsInput.superclass.constructor.call(self, config);
|
self.set('wrapper', $(wrapper));
|
}
|
|
S.mix(UrlsInput, /**@lends UrlsInput*/ {
|
/**
|
* 隐藏域模板, '<input type="hidden" id="{name}" name="{name}" value="{value}" />'
|
*
|
*/
|
TPL : '<input type="hidden" id="{name}" name="{name}" value="{value}" />'
|
});
|
//继承于Base,属性getter和setter委托于Base处理
|
S.extend(UrlsInput, Base, /** @lends UrlsInput.prototype*/{
|
/**
|
* 运行组件,实例化类后必须调用render()才真正运行组件逻辑
|
* @return {UrlsInput}
|
*/
|
render : function() {
|
var self = this,$wrapper = self.get('wrapper'),
|
name = self.get('name'),
|
elInput = document.getElementsByName(name)[0];
|
if (!S.isObject($wrapper)) {
|
S.log(LOG_PREFIX + 'container参数不合法!');
|
return false;
|
}
|
//如果已经存在隐藏域,那么不自动创建
|
if(elInput){
|
S.log(LOG_PREFIX + 'urls input found');
|
self.set('input',$(elInput));
|
}else{
|
self._create();
|
}
|
return self;
|
},
|
/**
|
* 向路径隐藏域添加路径
|
* @param {String} url 路径
|
* @return {UrlsInput}
|
*/
|
add : function(url){
|
if(!S.isString(url)){
|
S.log(LOG_PREFIX + 'add()的url参数不合法!');
|
return false;
|
}
|
var self = this,urls = self.get('urls'),
|
//判断路径是否已经存在
|
isExist = self.isExist(url);
|
//TODO:第一个路径会出现为空的情况,日后完善
|
if(urls[0] == EMPTY) urls = [];
|
if(isExist){
|
S.log(LOG_PREFIX + 'add(),文件路径已经存在!');
|
return self;
|
}
|
urls.push(url);
|
self.set('urls',urls);
|
self._val();
|
return self;
|
},
|
/**
|
* 删除隐藏域内的指定路径
|
* @param {String} url 路径
|
* @return {Array} urls 删除后的路径
|
*/
|
remove : function(url){
|
if(!url) return false;
|
var self = this,urls = self.get('urls'),
|
isExist = self.isExist(url) ,
|
reg = new RegExp(url);
|
if(!isExist){
|
S.log(LOG_PREFIX + 'remove(),不存在该文件路径!');
|
return false;
|
}
|
urls = S.filter(urls,function(sUrl){
|
return !reg.test(sUrl);
|
});
|
self.set('urls',urls);
|
self._val();
|
return urls;
|
},
|
/**
|
* 解析当前input的值,取得文件路径
|
* @return {Array}
|
*/
|
parse: function(){
|
var self = this,
|
input = self.get('input');
|
if(input){
|
var urls = $(input).val(),
|
split = self.get('split'),
|
files=[];
|
if (urls) files = urls.split(split); //mod by liuhuisheng 原为files = urls.split(split)
|
self.set('urls',files);
|
return files;
|
}else{
|
S.log(LOG_PREFIX + 'cannot find urls input.');
|
return [];
|
}
|
},
|
/**
|
* 设置隐藏域的值
|
* @return {String}
|
*/
|
_val : function(){
|
var self = this,urls = self.get('urls'),
|
$input = self.get('input'),
|
//多个路径间的分隔符
|
split = self.get('split'),
|
sUrl = urls.join(split);
|
$input.val(sUrl);
|
return sUrl;
|
},
|
/**
|
* 是否已经存在指定路径
|
* @param {String} url 路径
|
* @return {Boolean}
|
*/
|
isExist : function(url){
|
var self = this,b = false,urls = self.get('urls'),
|
reg = new RegExp(url);
|
if(!urls.length) return false;
|
S.each(urls,function(val){
|
if(reg.test(val)){
|
return b = true;
|
}
|
});
|
return b;
|
},
|
/**
|
* 创建隐藏域
|
*/
|
_create : function() {
|
var self = this,
|
container = self.get('wrapper'),
|
tpl = self.get('tpl'),
|
name = self.get('name'),
|
urls = self.get('urls'),
|
input;
|
if(!container || container.length <= 0){
|
S.log(LOG_PREFIX + 'UrlsInput container not specified!', 'warn');
|
return false;
|
}
|
if (!S.isString(tpl) || !S.isString('name')){
|
S.log(LOG_PREFIX + '_create(),tpl和name属性不合法!');
|
return false;
|
}
|
input = $(S.substitute(tpl, {name : name,value : urls}));
|
container.append(input);
|
self.set('input', input);
|
S.log(LOG_PREFIX + 'input created.');
|
return input;
|
}
|
|
}, {ATTRS : /** @lends UrlsInput.prototype*/{
|
/**
|
* 隐藏域名称
|
* @type String
|
* @default ""
|
*/
|
name : {value : EMPTY},
|
/**
|
* 文件路径
|
* @type Array
|
* @default []
|
*/
|
urls : { value : [] },
|
/**
|
* input模板
|
* @type String
|
* @default '<input type="hidden" id="{name}" name="{name}" value="{value}" />'
|
*/
|
tpl : {value : UrlsInput.TPL},
|
/**
|
* 多个路径间的分隔符
|
* @type String
|
* @default ","
|
*/
|
split : {value : ',',
|
setter : function(v){
|
var self = this;
|
self._val();
|
return v;
|
}
|
},
|
/**
|
* 文件路径隐藏input
|
* @type KISSY.Node
|
* @default ""
|
*/
|
input : {value : EMPTY},
|
/**
|
* 隐藏域容器
|
*@type KISSY.Node
|
* @default ""
|
*/
|
wrapper : {value : EMPTY}
|
}});
|
|
return UrlsInput;
|
}, {requires:['node','base']});
|