/**
* Created by mac on 15/9/7.
*/
import {classConstants} from './constants.js';
let consts = classConstants;
const PREFIX = 'ph-';
export default obj=>{
/*
* 给className添加前缀后返回className
* @method getClassName
* @param name {String} 从该字符串中去查找
* @param pre {Boolean} 是否添加Component中定义的class前缀,默认添加
* @return {String}
* */
obj.prototype.getClassName=function(name,pre=true,constPre=true){
name=name?name:'';
name = (name+'').split(' ');
let list = [],
_this = this;
name.forEach(function(item){
if(item){
if(constPre) list.push(PREFIX + _this.setPrefix(item,pre) );
else list.push(_this.setPrefix(item,pre) );
}
});
return list.join(' ');
};
/*
* 验证props中的样式是否符合规则
* @method getClassNames
* @param props {Object} 从该对象中去查找
* @param pre {Boolean} 是否添加Component中定义的class前缀,默认添加
* @return {String}
* */
obj.prototype.getClassNames=function(props,pre=true){
let clazz = {};
for(var item in props){
if(props[item] && item === consts[item]){
clazz[this.getClassName(item,pre)] = true;
}
}
return clazz;
};
/*
* 给多个className添加前缀后返回
* @method getClassNamesForArguments
* @param arguments {Arguments String} 多个class参数
* @return {String}
* */
obj.prototype.getClassNamesForArguments=function(){
let arg = arguments;
let arr = [];
let _this = this;
if(arg && arg.length>0 ){
for(let i=0,len=arg.length;i<len;i++){
if(arg[i]){
arr.push(_this.getClassName(arg[i]) );
}
}
}
return arr.join(' ');
};
/*
* 设置css类名前缀
* @method setPrefix
* @param name{String} class名字
* @param pre{Boolean} 是否添加前缀
* @return {String}
* */
obj.prototype.setPrefix= function(name,pre=true){
var classArray=consts.classNameNamespace?[consts.classNameNamespace] :[];
if(pre && this.props.classPrefix){
classArray.push(this.props.classPrefix);
}
if(name&&name !=this.props.classPrefix){
classArray.push(name);
}
return classArray.join(classArray.length>1?'-':'');
};
/*
* 检查元素是否存在样式名
* @method hasClass
* @param obj {Object} 元素
* @param cls {String} 需要检查的样式名
* @return {Boolean}
* */
obj.prototype.hasClass = function(obj,cls){
return obj.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'));
};
/*
* 给元素增加一个样式名
* @method addClass
* @param obj {Object} 元素
* @param cls {String} 样式名
* */
obj.prototype.addClass = function(obj,cls){
if (!this.hasClass(obj, cls)) obj.className += " " + cls;
};
/*
* 给元素删除一个样式名
* @method removeClass
* @param obj {Object} 元素
* @param cls {String} 样式名
* */
obj.prototype.removeClass = function(obj,cls){
if (this.hasClass(obj, cls)) {
var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');
obj.className = obj.className.replace(reg, ' ');
}
};
}