vesh-vj
Version:
VESH's JavaScript Framework
182 lines • 8.73 kB
JavaScript
(function (V, W, $) {
V.registScript(function (path, vm) {
var _ = this, __ = {};
{
V.inherit.apply(_, [W.Control, [path || '<textarea></textarea>', V.merge({
data: {
toolbars: {
cut: true, copy: true, paste: true, undo: true, redo: true, bold: true, italic: true, underline: true, strike: true, sup: true, sub: true, link: true, unlink: true, image: true, justify: true, left: true, center: true, right: true, removeformat: true, hr: true, paragraph: true
},
width: '100%',
height: '300',
language: 'zh-cn',
icon: 'default',
value: '',
image: './images/'
/*
about: false
[
["separator", "cut", "copy", "paste", "separator", "undo", "redo", "separator", "bold", "italic", "underline", "strike", "sup", "sub", "separator", "link", "unlink", "image"],
["separator", "justify", "left", "center", "right", "separator", "removeformat", "striptags", "hr", "paragraph"]
],icon:'default',skin:''*/
}
}, vm)]]);
__.onLoad = _.onLoad;
__.render = _.render;
_.addDesc('texteditor 对象');
_.addDesc('非必填属性:');
_.addDesc('\twidth 类型300px,100%');
_.addDesc('\theight 类型300px,不支持百分比');
_.addDesc('\ttoolbars cut:true,copy:true,paste:true,undo:true,redo:true,bold:true,italic:true,underline:true,strike:true,sup:true,sub:true,link:true,unlink:true,image:true,justify:true,left:true,center:true,right:true,removeformat:true,hr:true,paragraph:true,commands:[{icon:"new.gif",tooltip:"添加新控件",command:function(){initControl();}}]');
_.addDesc('\t说明 commands表示要添加新的icon控件,支持N个,{新加的控件(icon:图标地址,tooltip:图标显示名称,command:要执行的函数)}');
_.addDesc('\tlanguage 语言 类型 en zh-cn');
_.addDesc('\tvalue 内容会被V.decHtml 同时获取的内容会被自动encHtml 另更新value时请至少等待100ms以防止渲染出现问题');
_.addDesc("\t定义:editor:{path:'xhtml.js;htmlbox.js;../Scripts/module/part/texteditor.js',params:['',{data:{debug:true,image:'../../Scripts/ref/images/'}}]}");
//_.addDesc('\tinit 新加的控件(icon:图标地址,tooltip:图标显示名称,command:要执行的函数)');
}
_.onLoad = function (node) {
V.forC(_.events, function (k, v) {
switch (k.toLowerCase()) {
case 'click':
break;
default:
_.bindEvent(_.node, k, v);
break;
}
}, function () { __.onLoad(node) });
};
_.transform = function (data) {
var ret = V.merge({ about: false, toolbar: [], idir: data.image }, data);
V.forC(data.toolbars, function (k, v) {
switch (k.toLowerCase()) {
case 'cut':
case 'copy':
case 'paste':
if (v) {
ret.toolbar[0] = ret.toolbar[0] ? ret.toolbar[0] : [];
ret.toolbar[0].push(k);
}
break;
case 'undo':
case 'redo':
if (v) {
ret.toolbar[1] = ret.toolbar[1] ? ret.toolbar[1] : [];
ret.toolbar[1].push(k);
}
break;
case 'bold':
case 'italic':
case 'underline':
case 'strike':
case 'sup':
case 'sub':
if (v) {
ret.toolbar[2] = ret.toolbar[2] ? ret.toolbar[2] : [];
ret.toolbar[2].push(k);
}
break;
case 'link':
case 'unlink':
case 'image':
if (v) {
ret.toolbar[3] = ret.toolbar[3] ? ret.toolbar[3] : [];
ret.toolbar[3].push(k);
}
break;
case 'justify':
case 'left': case 'center': case 'right':
if (v) {
ret.toolbar[4] = ret.toolbar[4] ? ret.toolbar[4] : [];
ret.toolbar[4].push(k);
}
break;
case 'removeformat':
case 'striptags':
case 'hr':
case 'paragraph':
if (v) {
ret.toolbar[5] = ret.toolbar[5] ? ret.toolbar[5] : [];
ret.toolbar[5].push(k);
}
break;
case 'commands':
if(V.isArray(v)){
ret.toolbar[6] = ret.toolbar[6] ? ret.toolbar[6] : [];
for(var i=0;i<v.length;i++){
if(v[i]&&v[i].icon){
ret.toolbar[6].push(v[i]);
}
}
}
break;
default:
if (v) {
ret.toolbar[6] = ret.toolbar[6] ? ret.toolbar[6] : [];
ret.toolbar[6].push(k);
}
break;
}
}, function () {
var tools = ret.toolbar, toolbars = [];
ret.toolbars = [];
delete ret.toolbar;
for (var i = 0; i < tools.length; i++) {
if (tools[i] && tools[i].length > 0) {
toolbars.push("separator");
toolbars = toolbars.concat(tools[i]);
}
if ((i + 1) % 6 == 0 || i == tools.length - 1) {
toolbars.push("separator");
ret.toolbars.push(toolbars);
toolbars = [];
}
}
}, true);
return ret;
};
_.fill = function () { return { value: _.node.get_html ? V.encHtml(_.node.get_html().replace(/</g, '<').replace(/>/g, '>')) : "", html: _.node.get_html ? _.node.get_html() : "" } };
_.render = function (data) {
console.log(data);
//data = __.render(data);
var ret = V.merge({}, data);//处理空数据
var render = _.editor ? false : true;
V.forC(ret, function (k, v) {
switch (k.toLowerCase()) {
case 'width':
_.node.css('width', v);
break;
case 'height':
_.node.css('height', v);
break;
case 'language':
case 'images':
render = true;
break;
case 'value':
console.log('value'+v);
if (_.editor) {
V.once(function () {
_.node.set_text(V.decHtml(v).replace(/</g, '<').replace(/>/g, '>').replace(/<script/g, '<script').replace(/script>/g, 'script>'));_.call('changed');
}, 100);
} else render = true;
break;
case 'addvalue':
console.log(v);
if(_.editor) {V.once(function(){_.node.insert_text(V.decHtml(v).replace(/</g, '<').replace(/>/g, '>').replace(/<script/g, '<script').replace(/script>/g, 'script>'));_.call('changed');},100);};
break;
}
}, function () {
if (render && !_.editor) {
_.editor = true;
ret = _.transform(ret);
_.node.htmlbox(ret);
if (data.value) {
_.node.set_text(V.decHtml(data.value).replace(/</g, '<').replace(/>/g, '>').replace(/<script/g, '<script').replace(/script>/g, 'script>'));
}
}
delete data.value;
data = __.render(data);
}, true);
}
});
})(VJ, VJ.view, jQuery);