提交 541aad58 编写于 作者: T taoqili

Merge remote-tracking branch 'origin/dev-1.2.5' into dev-1.2.5

......@@ -64,7 +64,7 @@
}
function createEditor(){
enableBtn();
UE.getEditor('editor')
UE.getEditor('editor');
}
function getAllHtml() {
alert( UE.getEditor('editor').getAllHtml() )
......
......@@ -437,50 +437,7 @@
* return false //编辑器没有内容 ,getContent直接返回空
* })
*/
getContent:function (cmd,fn,isPreview) {
// var me = this;
// if ( cmd && utils.isFunction( cmd ) ) {
// fn = cmd;
// cmd = '';
// }
// if ( fn ? !fn() : !this.hasContents() ) {
// return '';
// }
//// var range = me.selection.getRange(),
//// address = range.createAddress();
// var root = UE.htmlparser(me.body.innerHTML);
// me.fireEvent( 'beforegetcontent');
//
// me.filterOutputRule(root);
// var reg = new RegExp( domUtils.fillChar, 'g' ),
// //ie下取得的html可能会有\n存在,要去掉,在处理replace(/[\t\r\n]*/g,'');代码高量的\n不能去除
// html = me.body.innerHTML.replace( reg, '' ).replace( />[\t\r\n]*?</g, '><' );
// me.fireEvent( 'aftergetcontent', cmd );
// try{
// range.moveToAddress(address).select(true);
// }catch(e){}
// if ( me.serialize ) {
// var node = me.serialize.parseHTML( html );
// node = me.serialize.transformOutput( node );
// html = me.serialize.toHTML( node );
// }
//
// if ( ie && isPreview ) {
// //trace:2471
// //两个br会导致空行,所以这里先注视掉
// html = html//.replace(/<\s*br\s*\/?\s*>/gi,'<br/><br/>')
// .replace( /<p>\s*?<\/p>/g, '<p>&nbsp;</p>' );
// } else {
// //多个&nbsp;要转换成空格加&nbsp;的形式,要不预览时会所成一个
// html = html.replace( /(&nbsp;)+/g, function ( s ) {
// for ( var i = 0, str = [], l = s.split( ';' ).length - 1; i < l; i++ ) {
// str.push( i % 2 == 0 ? ' ' : '&nbsp;' );
// }
// return str.join( '' );
// } );
// }
//
// return html;
getContent:function (cmd,fn) {
var me = this;
if (cmd && utils.isFunction(cmd)) {
fn = cmd;
......@@ -501,22 +458,7 @@
range.moveToAddress(address).select(true);
}catch(e){}
var html = root.toHtml();
if (ie && isPreview) {
//trace:2471
//两个br会导致空行,所以这里先注视掉
html = html.replace(/<p>\s*?<\/p>/g, '<p>&nbsp;</p>');
} else {
//多个&nbsp;要转换成空格加&nbsp;的形式,要不预览时会所成一个
html = html.replace(/(&nbsp;)+/g, function (s) {
for (var i = 0, str = [], l = s.split(';').length - 1; i < l; i++) {
str.push(i % 2 == 0 ? ' ' : '&nbsp;');
}
return str.join('');
});
}
return html;
return root.toHtml();
},
/**
* 取得完整的html代码,可以直接显示成完整的html文档
......@@ -583,116 +525,19 @@
* })
*/
setContent:function (html, isAppendTo, notFireSelectionchange) {
// var me = this,
// inline = utils.extend( {a:1, A:1}, dtd.$inline, true ),
// lastTagName;
//
// html = html
// .replace( /^[ \t\r\n]*?</, '<' )
// .replace( />[ \t\r\n]*?$/, '>' )
// //ie有时的源码会有>&nbsp;<的情况
// .replace(/>(?:(\s|&nbsp;)*?)</g,'><' )//代码高量的\n不能去除
// .replace( /[\s\/]?(\w+)?>[ \t\r\n]*?<\/?(\w+)/gi, function ( a, b, c ) {
// if ( b ) {
// lastTagName = c;
// } else {
// b = lastTagName;
// }
// return !inline[b] && !inline[c] ? a.replace( />[ \t\r\n]*?</, '><' ) : a;
// } );
// html = {'html':html};
// me.fireEvent( 'beforesetcontent',html,root);
// html = html.html;
// var serialize = this.serialize;
// if ( serialize ) {
// var node = serialize.parseHTML( html );
// node = serialize.transformInput( node );
// node = serialize.filter( node );
// html = serialize.toHTML( node );
// }
// //html.replace(new RegExp('[\t\n\r' + domUtils.fillChar + ']*','g'),'');
// //去掉了\t\n\r 如果有插入的代码,在源码切换所见即所得模式时,换行都丢掉了
// //\r在ie下的不可见字符,在源码切换时会变成多个&nbsp;
// //trace:1559
// this.body.innerHTML = (isAppendTo ? this.getContent() : '') + html.replace( new RegExp( '[\r' + domUtils.fillChar + ']*', 'g' ), '' );
// //处理ie6下innerHTML自动将相对路径转化成绝对路径的问题
// if ( browser.ie && browser.version < 7 ) {
// replaceSrc( this.document.body );
// }
// //给文本或者inline节点套p标签
// if ( me.options.enterTag == 'p' ) {
//
// var child = this.body.firstChild, tmpNode;
// if ( !child || child.nodeType == 1 &&
// (dtd.$cdata[child.tagName] ||
// domUtils.isCustomeNode( child )
// )
// && child === this.body.lastChild ) {
// this.body.innerHTML = '<p>' + (browser.ie ? '&nbsp;' : '<br/>') + '</p>' + this.body.innerHTML;
//
// } else {
// var p = me.document.createElement( 'p' );
// while ( child ) {
// while ( child && (child.nodeType == 3 || child.nodeType == 1 && dtd.p[child.tagName] && !dtd.$cdata[child.tagName]) ) {
// tmpNode = child.nextSibling;
// p.appendChild( child );
// child = tmpNode;
// }
// if ( p.firstChild ) {
// if ( !child ) {
// me.body.appendChild( p );
// break;
// } else {
// child.parentNode.insertBefore( p, child );
// p = me.document.createElement( 'p' );
// }
// }
// child = child.nextSibling;
// }
// }
// }
// me.fireEvent( 'aftersetcontent' );
// me.fireEvent( 'contentchange' );
// console.log(root.toHtml())
// !notFireSelectionchange && me._selectionChange();
// //清除保存的选区
// me._bakRange = me._bakIERange = null;
// //trace:1742 setContent后gecko能得到焦点问题
// var geckoSel;
// if ( browser.gecko && (geckoSel = this.selection.getNative()) ) {
// geckoSel.removeAllRanges();
// }
var me = this,
inline = utils.extend({a:1, A:1}, dtd.$inline, true),
lastTagName;
html = html
.replace(/^[ \t\r\n]*?</, '<')
.replace(/>[ \t\r\n]*?$/, '>')
//ie有时的源码会有>&nbsp;<的情况
.replace(/>(?:(\s|&nbsp;)*?)</g, '><')//代码高量的\n不能去除
.replace(/[\s\/]?(\w+)?>[ \t\r\n]*?<\/?(\w+)/gi, function (a, b, c) {
if (b) {
lastTagName = c;
} else {
b = lastTagName;
}
return !inline[b] && !inline[c] ? a.replace(/>[ \t\r\n]*?</, '><') : a;
});
var me = this;
me.fireEvent( 'beforesetcontent',html);
var root = UE.htmlparser(html);
me.filterInputRule(root);
html = root.toHtml();
//html.replace(new RegExp('[\t\n\r' + domUtils.fillChar + ']*','g'),'');
//去掉了\t\n\r 如果有插入的代码,在源码切换所见即所得模式时,换行都丢掉了
//\r在ie下的不可见字符,在源码切换时会变成多个&nbsp;
//trace:1559
this.body.innerHTML = (isAppendTo ? this.getContent() : '') + html.replace(new RegExp('[\r' + domUtils.fillChar + ']*', 'g'), '');
me.body.innerHTML = (isAppendTo ? this.getContent() : '') + html;
//处理ie6下innerHTML自动将相对路径转化成绝对路径的问题
if (browser.ie && browser.version < 7) {
replaceSrc(this.body);
replaceSrc(me.body);
}
//给文本或者inline节点套p标签
if (me.options.enterTag == 'p') {
......@@ -1193,4 +1038,3 @@
};
utils.inherits(Editor, EventBase);
})();
......@@ -1223,6 +1223,19 @@
}
return true;
},
traversal:function(doFn,filterFn){
if (this.collapsed)
return this;
var bookmark = this.createBookmark(),
end = bookmark.end,
current = domUtils.getNextDomNode(bookmark.start, false, filterFn);
while (current && current !== end && (domUtils.getPosition(current, end) & domUtils.POSITION_PRECEDING)) {
var tmpNode = domUtils.getNextDomNode(current,false,filterFn);
doFn(current);
current = tmpNode;
}
return this.moveToBookmark(bookmark);
}
};
})();
\ No newline at end of file
......@@ -3,7 +3,10 @@
var htmlparser = UE.htmlparser = function (htmlstr) {
var reg = new RegExp(domUtils.fillChar, 'g');
//ie下取得的html可能会有\n存在,要去掉,在处理replace(/[\t\r\n]*/g,'');代码高量的\n不能去除
htmlstr = htmlstr.replace(reg, '').replace(/>[\t\r\n]*?</g, '><');
htmlstr = htmlstr.replace(reg, '')
.replace(/(?:^[ \t\r\n]*?<)/, '<')
.replace(/(?:>[ \t\r\n]*?$)/, '>')
.replace(/>(?:[ \t\r\n]*)/g, '>').replace(/(?:[ \t\r\n]*)</g, '<');
var re_tag = /<(?:(?:\/([^>]+)>)|(?:!--([\S|\s]*?)-->)|(?:([^\s\/>]+)\s*((?:(?:"[^"]*")|(?:'[^']*')|[^"'<>])*)\/?>))/g,
re_attr = /([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g;
......@@ -21,14 +24,22 @@ var htmlparser = UE.htmlparser = function (htmlstr) {
'dt':'dl',
'dd':'dl',
'option':'select'
},
needChild = {
'ol':'li',
'ul':'li'
};
function text(parent, data) {
parent.children.push(new uNode({
type:'text',
data:data,
parentNode:parent
}));
if(needChild[parent.tagName]){
var tmpNode = uNode.createElement(needChild[parent.tagName]);
parent.appendChild(tmpNode);
tmpNode.appendChild(uNode.createText(data));
parent = tmpNode;
}else{
parent.appendChild(uNode.createText(data));
}
}
function element(parent, tagName, htmlattr) {
......@@ -47,10 +58,6 @@ var htmlparser = UE.htmlparser = function (htmlstr) {
parent = element(parent, utils.isArray(needParentTag) ? needParentTag[0] : needParentTag)
}
}
// //根据dtd判断是否当前节点可以放入新的节点
// while(dtd[parent.tagName] && !dtd[parent.tagName][tagName]){
// parent = parent.parentNode;
// }
var elm = new uNode({
parentNode:parent,
......
......@@ -196,6 +196,23 @@
}
return this.children ? this.children[this.children.length - 1] : null;
},
previousSibling : function(){
var parent = this.parentNode;
for (var i = 0, ci; ci = parent.children[i]; i++) {
if (ci === this) {
return i == 0 ? null : parent.children[i-1];
}
}
},
nextSibling : function(){
var parent = this.parentNode;
for (var i = 0, ci; ci = parent.children[i++];) {
if (ci === this) {
return parent.children[i];
}
}
},
replaceChild:function (target, source) {
if (this.children) {
if(target.parentNode){
......
......@@ -40,7 +40,9 @@ UE.plugins['anchor'] = function (){
a.setAttr({
anchorname :a.getAttr('name'),
'class' : 'anchorclass'
})
});
a.setAttr('name')
}
})
});
......
......@@ -59,9 +59,6 @@ UE.plugins['snapscreen'] = function(){
}catch(e){
me.ui._dialogs['snapscreenDialog'].open();
}
},
queryCommandState: function(){
return this.highlight ? -1 :0;
}
};
}
......
......@@ -131,13 +131,11 @@
});
//重置getContent,源码模式下取值也能是最新的数据
me.getContent = function (){
var cont = sourceEditor.getContent() || '<p>' + (browser.ie ? '' : '<br/>')+'</p>';
return cont.replace(/>[ \n\r\t]+/g,'>').replace(/[ \n\r\t]+</g,'<').replace(/>[\n\r\t]+</g,'><');
return sourceEditor.getContent() || '<p>' + (browser.ie ? '' : '<br/>')+'</p>';
};
} else {
me.iframe.style.cssText = bakCssText;
var cont = sourceEditor.getContent() || '<p>' + (browser.ie ? '' : '<br/>')+'</p>';
cont = cont.replace(/>[ \n\r\t]+/g,'>').replace(/[ \n\r\t]+</g,'<').replace(/>[\n\r\t]+</g,'><');
me.setContent(cont);
sourceEditor.dispose();
sourceEditor = null;
......
......@@ -66,7 +66,8 @@
return;
}
this.getAdv().style.display=this.ishide?"block":"none";
obj.innerHTML = this.ishide?"收缩":"高级";
domUtils.removeClasses(obj,["arrow_down","arrow_up"]);
this.ishide?domUtils.addClass(obj,"arrow_up"):domUtils.addClass(obj,"arrow_down");
this.ishide = !this.ishide;
this.fireEvent("changeheight");
},
......@@ -283,7 +284,7 @@
}
html += '</tr></table>';
//高级按钮
html += '<span id="##_togglehandle" class="edui-colorpicker-advbtn" onclick="$$._onShowAdv(event, this);">高级</span>';
html += '<span id="##_togglehandle" class="edui-colorpicker-advbtn arrow_down" onclick="$$._onShowAdv(event, this);"></span>';
html += getAdvColorPicker();
html += '</div>';
return html;
......
......@@ -6,6 +6,8 @@
<property name="coverage.path" value="_test/coverage"/>
<property name="report.file" value="_test/tools/br/report.html"/>
<property name="svn.project" value="ueditor_svn"/>
<property name="git.project" value="ueditor_git"/>
<property name="git.user" value=""/>
<path id="ext.classpath">
<fileset dir="_test/tools/lib">
......@@ -59,8 +61,8 @@
<!--</target>-->
<target name="executeAll" depends="init,coverage">
<get src="http://${serverip}/${svn.project}/_test/tools/br/runall.php?ci=true&amp;cov=true"
dest="/tmp/${git.user}_${svn.project}.php"/>
<get src="http://${serverip}/${git.project}/_test/tools/br/runall.php?ci=true&amp;cov=true"
dest="/tmp/${git.user}_${git.project}.php"/>
</target>
<target name="getreportAll" depends="init,coverage,executeAll">
<waitfor maxwait="3000" maxwaitunit="second">
......@@ -72,8 +74,8 @@
</target>
<target name="executeIE" depends="init,coverage">
<get src="http://${serverip}/${svn.project}IE/_test/tools/br/runall.php?ci=true&amp;cov=true&amp;browserSet=ie6_ie7_ie8_ie9"
dest="/tmp/${git.user}_${svn.project}IE.php"/>
<get src="http://${serverip}/${git.project}IE/_test/tools/br/runall.php?ci=true&amp;cov=true&amp;browserSet=ie6_ie7_ie8_ie9"
dest="/tmp/${git.user}_${git.project}IE.php"/>
</target>
<target name="getreportIE" depends="init,coverage,executeIE">
<waitfor maxwait="3000" maxwaitunit="second">
......
......@@ -6,6 +6,7 @@
<property name="coverage.path" value="_test/coverage"/>
<property name="report.file" value="_test/tools/br/report.html"/>
<property name="svn.project" value="ueditor_svn"/>
<property name="git.project" value="ueditor_git"/>
<property name="git.user" value=""/>
<path id="ext.classpath">
<fileset dir="_test/tools/lib">
......@@ -59,8 +60,8 @@
<!--</target>-->
<target name="executecore" depends="init,coverage">
<get src="http://${serverip}/${svn.project}/_test/tools/br/runall.php?ci=true&amp;cov=true&amp;filter=core"
dest="/tmp/${git.user}_${svn.project}core.php"/>
<get src="http://${serverip}/${git.project}/_test/tools/br/runall.php?ci=true&amp;cov=true&amp;filter=core"
dest="/tmp/${git.user}_${git.project}core.php"/>
</target>
<target name="getreportcore" depends="init,coverage,executecore">
<waitfor maxwait="3000" maxwaitunit="second">
......
......@@ -6,6 +6,8 @@
<property name="coverage.path" value="_test/coverage"/>
<property name="report.file" value="_test/tools/br/report.html"/>
<property name="svn.project" value="ueditor_svn"/>
<property name="git.project" value="ueditor_git"/>
<property name="git.user" value=""/>
<path id="ext.classpath">
<fileset dir="_test/tools/lib">
......@@ -59,8 +61,8 @@
<!--</target>-->
<target name="executeplugin" depends="init,coverage">
<get src="http://${serverip}/${svn.project}/_test/tools/br/runall.php?ci=true&amp;cov=true&amp;filter=plugins"
dest="/tmp/${git.user}_${svn.project}plugin.php"/>
<get src="http://${serverip}/${git.project}/_test/tools/br/runall.php?ci=true&amp;cov=true&amp;filter=plugins"
dest="/tmp/${git.user}_${git.project}plugin.php"/>
</target>
<target name="getreportplugin" depends="init,coverage,executeplugin">
<waitfor maxwait="3000" maxwaitunit="second">
......
......@@ -6,6 +6,7 @@
<property name="coverage.path" value="_test/coverage"/>
<property name="report.file" value="_test/tools/br/report.html"/>
<property name="svn.project" value="ueditor_svn"/>
<property name="git.project" value="ueditor_git"/>
<property name="git.user" value=""/>
<path id="ext.classpath">
<fileset dir="_test/tools/lib">
......@@ -59,8 +60,8 @@
<!--</target>-->
<target name="executeui" depends="init,coverage">
<get src="http://${serverip}/${svn.project}/_test/tools/br/runall.php?ci=true&amp;cov=true&amp;filter=ui"
dest="/tmp/${git.user}_${svn.project}ui.php"/>
<get src="http://${serverip}/${git.project}/_test/tools/br/runall.php?ci=true&amp;cov=true&amp;filter=ui"
dest="/tmp/${git.user}_${git.project}ui.php"/>
</target>
<target name="getreportui" depends="init,coverage,executeui">
<waitfor maxwait="3000" maxwaitunit="second">
......
......@@ -115,78 +115,6 @@ test( "render-- options", function() {
// //todo
//} );
//TODO 现在在过滤机制里面去除无用的标签
test( "getContent--去除无用的空标签:autoClearEmptyNode==true", function() {
var editor = new UE.Editor({autoClearEmptyNode:true,'autoFloatEnabled':false});
stop();
setTimeout(function(){
var div = document.body.appendChild(document.createElement('div'));
editor.render(div);
te.dom.push(div);
editor.focus();
var innerHTML = '<span><span></span><strong>xx</strong><em>em</em><em></em></span><div>xxxx</div>';
editor.setContent( innerHTML );
editor.execCommand('source');
editor.execCommand('source');
equal( editor.getContent(), '<p><strong>xx</strong><em>em</em></p><div>xxxx</div>', "span style空,套空的em和不空的em" );
//style="color:#c4bd97;"
innerHTML = '<span style="color:#c4bd97"><span></span><strong>xx</strong><em>em</em><em></em></span>';
editor.setContent( innerHTML );
if(ua.browser.ie ==9){
equal( editor.getContent().toLowerCase(), '<p><span style="color:#c4bd97;"><strong>xx</strong><em>em</em></span></p>', "span style不空,套空的em和不空的em" );
}
else{
equal( editor.getContent().toLowerCase(), '<p><span style="color:#c4bd97"><strong>xx</strong><em>em</em></span></p>', "span style不空,套空的em和不空的em" );
}
innerHTML = '<span style="color:#c4bd97"></span><strong>xx</strong><em>em</em><em></em>';
editor.setContent( innerHTML );
/*inline标签上只要有属性就不清理*/
if(ua.browser.ie ==9){
equal( editor.getContent().toLowerCase(), '<p><span style="color:#c4bd97;"></span><strong>xx</strong><em>em</em></p>', "span 有style但内容为空" );
}
else{
equal( editor.getContent().toLowerCase(), '<p><span style="color:#c4bd97"></span><strong>xx</strong><em>em</em></p>', "span 有style但内容为空" );
}
innerHTML = '<span style="color:#c4bd97">asdf<strong>xx</strong><em>em</em><em></em></span>';
editor.setContent( innerHTML );
if(ua.browser.ie ==9){
equal( editor.getContent().toLowerCase(), '<p><span style="color:#c4bd97;">asdf<strong>xx</strong><em>em</em></span></p>', "span 有style内容不空" );
}
else{
equal( editor.getContent().toLowerCase(), '<p><span style="color:#c4bd97">asdf<strong>xx</strong><em>em</em></span></p>', "span 有style内容不空" );
}
innerHTML = '<a href="http://www.baidu.com"></a><a>a</a><strong>xx</strong><em>em</em><em></em>';
editor.setContent( innerHTML );
equal( editor.getContent(), '<p><a href="http://www.baidu.com"></a><a>a</a><strong>xx</strong><em>em</em></p>', "a 有href但内容为空,不过滤a标签" );
start()
},100);
} );
//editor.options.autoClearEmptyNode
test("getContent--不去除无用的空标签:autoClearEmptyNode==false", function() {
var editor = new UE.Editor({autoClearEmptyNode:false,'autoFloatEnabled':false});
stop();
setTimeout(function(){
var div = document.body.appendChild(document.createElement('div'));
editor.render(div);
te.dom.push(div);
editor.focus();
var innerHTML = '<span><span></span><strong>xx</strong><em>em</em><em></em><strong></strong></span>';
editor.setContent(innerHTML);
equal(editor.getContent().toLowerCase(), '<p><span><span></span><strong>xx</strong><em>em</em><em></em><strong></strong></span></p>', "span style空,套空的em和不空的em");
innerHTML = '<span style="color:#c4bd97"></span><strong>xx</strong><em>em</em><em></em><strong></strong>';
editor.setContent(innerHTML);
ua.manualDeleteFillData(editor.body);
if (ua.browser.ie == 9) {
equal(editor.getContent().toLowerCase(), '<p><span style="color:#c4bd97;"></span><strong>xx</strong><em>em</em><em></em><strong></strong></p>', "span 有style但内容为空");
}
else {
equal(editor.getContent().toLowerCase(), '<p><span style="color:#c4bd97"></span><strong>xx</strong><em>em</em><em></em><strong></strong></p>', "span 有style但内容为空");
}
start();
},100);
});
test("getContent--转换空格,nbsp与空格相间显示", function() {
var editor = te.obj[1];
var div = te.dom[0];
......@@ -202,8 +130,9 @@ test('getContent--参数为函数', function() {
var div = te.dom[0];
editor.render(div);
editor.focus();
editor.setContent("<p><br />dd</p>");
equal(editor.getContent(), "<p><br />dd</p>", 'hasContents判断不为空');
editor.setContent("<p><br/>dd</p>");
equal(editor.getContent(), "<p><br/>dd</p>", 'hasContents判断不为空');
equal(editor.getContent(function() {
return false
}), "", '为空');
......@@ -214,8 +143,8 @@ test('getContent--2个参数,第一个参数为参数为函数', function() {
var div = te.dom[0];
editor.render(div);
editor.focus();
editor.setContent("<p><br />dd</p>");
equal(editor.getContent(), "<p><br />dd</p>", 'hasContents判断不为空');
editor.setContent("<p><br/>dd</p>");
equal(editor.getContent(), "<p><br/>dd</p>", 'hasContents判断不为空');
equal(editor.getContent("", function() {
return false
}), "", '为空');
......@@ -405,7 +334,7 @@ test("execCommand", function() {
var editor = te.obj[1];
var div = te.dom[0];
editor.focus();
editor.setContent("<span>xx</span><p>xxx</p>");
editor.setContent("<p>xx</p><p>xxx</p>");
var doc = editor.document;
var range = new baidu.editor.dom.Range(doc);
var p = doc.getElementsByTagName('p')[1];
......@@ -416,7 +345,8 @@ test("execCommand", function() {
range.selectNode(p).select();
editor.execCommand("forecolor", "red");
/*span发生了变化,需要重新获取*/
span = doc.getElementsByTagName('span')[0];
var span = doc.getElementsByTagName('span')[0];
equal(span.style['color'], 'red', 'check execCommand color');
var div_new = document.createElement('div');
div_new.innerHTML = '<p><span style="color: red; ">xx</span></p><p style="text-align: right; ">xxx</p>';
......
module( 'core.filternode' );
test( '', function() {
test( '过滤掉整个标签', function() {
var uNode = UE.uNode;
var node = uNode.createElement('<div id="aa"><p>sdf<b>sdf</b></p><i>sdf</i></div>');
UE.filterNode(node,{
'p':{},
'b':'-'
});
equals(node.toHtml().replace(/[ ]+>/g,'>'),'<div id="aa"><p>sdf</p>sdf</div>');
equals(node.toHtml().replace(/[ ]+>/g,'>'),'<div id="aa"><p>sdf</p>sdf</div>','保留p,过滤b');
node.innerHTML('<p style="color:#ccc;border:1px solid #ccc;"><table><tbody><tr><td></td></tr></tbody></table></p><div>sdfasdf</div>');
node.innerHTML('<p><p>sdfs</p><br/><br/><br/><br/></p>');
UE.filterNode(node,{
'p':{$:{
style:['color']
}},
'td':{}
'p':{},
'br':'-'
});
equals(node.toHtml().replace(/[ ]+>/g,'>'),'<div id="aa"><p style="color:#ccc"><td></td></p>sdfasdf</div>');
equals(node.toHtml().replace(/[ ]+>/g,'>'),'<div id="aa"><p><p>sdfs</p></p></div>','保留p,过滤br');
});
node.innerHTML('<p style="color:#ccc;border:1px solid #ccc;"><table><tbody><tr><td>sdfs</td><td>sdfs</td></tr></tbody></table></p><div>sdfasdf</div>');
test( '过滤标签全部属性', function() {
var uNode = UE.uNode;
var node = uNode.createElement('<div id="aa"><p>sdf<b>sdf</b></p><i>sdf</i></div>');
node.innerHTML('<div id="aa"><p style="color:#ccc"><p>sdfssdfs</p></p>sdfasdf</div>');
UE.filterNode(node,{
'p':{$:{
style:['color']
}},
'tr':function(node){
node.tagName = 'p';
node.setAttr();
},
'td':function(node){
node.parentNode.removeChild(node,true)
}
'p':{$:{}}
});
equals(node.toHtml().replace(/[ ]+>/g,'>'),'<div id="aa"><p style="color:#ccc"><p>sdfssdfs</p></p>sdfasdf</div>');
equals(node.toHtml().replace(/[ ]+>/g,'>'),'<div id="aa"><p><p>sdfssdfs</p></p>sdfasdf</div>','过滤p全部属性');
node.innerHTML('<h6>asd<b>lk</b><i>fj</i></h6>');
UE.filterNode(node,{
'p':{$:{}}
'h6':function(node){
node.tagName = 'p';
node.setAttr();
},
'-':'b i',
'p':{}
});
equals(node.toHtml().replace(/[ ]+>/g,'>'),'<div id="aa"><p><p>sdfssdfs</p></p>sdfasdf</div>');
equals(node.toHtml().replace(/[ ]+>/g,'>'),'<div id="aa"><p>asd</p></div>','同时过滤多个标签属性');
});
node.innerHTML('<p><p>sdfs</p><br/><br/><br/><br/></p>');
test( '过滤标签部分属性', function() {
var uNode = UE.uNode;
var node = uNode.createElement('<div id="aa"><p>sdf<b>sdf</b></p><i>sdf</i></div>');
node.innerHTML('<p style="color:#ccc;border:1px solid #ccc;"><table><tbody><tr><td></td></tr></tbody></table></p><div>sdfasdf</div>');
UE.filterNode(node,{
'p':{},
'br':'-'
'p':{$:{
style:['color']
}},
'td':{}
});
equals(node.toHtml().replace(/[ ]+>/g,'>'),'<div id="aa"><p><p>sdfs</p></p></div>');
equals(node.toHtml().replace(/[ ]+>/g,'>'),'<div id="aa"><p style="color:#ccc"><td></td></p>sdfasdf</div>','保留p的color属性');
node.innerHTML('<p style="text-indent:28px;line-height:200%;margin-top:62px;"><strong>sdfs</strong><span style="font-family:宋体">sdfs</span></p>');
UE.filterNode(node,{
......@@ -53,7 +58,7 @@ test( '', function() {
'span':{$:{}},
'strong':'-'
});
equals(node.toHtml().replace(/[ ]+>/g,'>'),'<div id="aa"><p style="line-height:200%"><span>sdfs</span></p></div>');
equals(node.toHtml().replace(/[ ]+>/g,'>'),'<div id="aa"><p style="line-height:200%"><span>sdfs</span></p></div>','过滤span全部属性,保留p部分属性,过滤strong标签');
node.innerHTML('<p><a></a><u class="ad" id="underline">sdfs<sub class="ab">sdfs</sub><i>sdfs</i></u><i>sdfs</i></p>');
UE.filterNode(node,{
......@@ -64,7 +69,26 @@ test( '', function() {
'sub':{$:{}},
'i':'-'
});
equals(node.toHtml().replace(/[ ]+>/g,'>'),'<div id="aa"><p><u class="ad">sdfs<sub>sdfs</sub></u></p></div>');
equals(node.toHtml().replace(/[ ]+>/g,'>'),'<div id="aa"><p><u class="ad">sdfs<sub>sdfs</sub></u></p></div>','过滤sub全部属性,保留u部分属性,过滤i标签');
});
test( '标签替换过滤', function() {
var uNode = UE.uNode;
var node = uNode.createElement('<div id="aa"><p>sdf<b>sdf</b></p><i>sdf</i></div>');
node.innerHTML('<p style="color:#ccc;border:1px solid #ccc;"><table><tbody><tr><td>sdfs</td><td>sdfs</td></tr></tbody></table></p><div>sdfasdf</div>');
UE.filterNode(node,{
'p':{$:{
style:['color']
}},
'tr':function(node){
node.tagName = 'p';
node.setAttr();
},
'td':function(node){
node.parentNode.removeChild(node,true)
}
});
equals(node.toHtml().replace(/[ ]+>/g,'>'),'<div id="aa"><p style="color:#ccc"><p>sdfssdfs</p></p>sdfasdf</div>','tr替换为p,过滤掉td');
node.innerHTML('<img src="http://img.baidu.com/hi/jx2/j_0020.gif" height="10px"/><table><caption>aldkfj</caption><tbody><tr style="background-color: #ccc;"><th>adf</th></tr><tr><td>lkj</td></tbody></table>');
UE.filterNode(node,{
......@@ -83,41 +107,41 @@ test( '', function() {
node.parentNode.removeChild(node,node.innerText())
}
});
equals(node.toHtml().replace(/[ ]+>/g,'>'),'<div id="aa"><img src="http://img.baidu.com/hi/jx2/j_0020.gif" /><table>aldkfj<tbody><tr>adf &nbsp; &nbsp;</tr><tr><td>lkj</td></tr></tbody></table></div>');
equals(node.toHtml().replace(/[ ]+>/g,'>'),'<div id="aa"><img src="http://img.baidu.com/hi/jx2/j_0020.gif" /><table>aldkfj<tbody><tr>adf &nbsp; &nbsp;</tr><tr><td>lkj</td></tr></tbody></table></div>','th按文本内容替换,保留img部分属性');
});
test( '保留标签全部属性', function() {
var uNode = UE.uNode;
var node = uNode.createElement('<div id="aa"><p>sdf<b>sdf</b></p><i>sdf</i></div>');
node.innerHTML('<ol><li><em>sdf</em></li><ul class=" list-paddingleft-2"><li>a</li><li>b</li><li>c</ul><li>jkl</ol>');
UE.filterNode(node,{
'ol':{},
'ul':{$:{}},
'li':{}
});
equals(node.toHtml().replace(/[ ]+>/g,'>'),'<div id="aa"><ol><li>sdf</li><ul><li>a</li><li>b</li><li>c</li></ul><li>jkl</li></ol></div>');
equals(node.toHtml().replace(/[ ]+>/g,'>'),'<div id="aa"><ol><li>sdf</li><ul><li>a</li><li>b</li><li>c</li></ul><li>jkl</li></ol></div>','保留ol、li全部属性,过滤ul全部属性');
});
//过滤规则为空
test( '过滤规则为空', function() {
var uNode = UE.uNode;
var node = uNode.createElement('<div id="aa"><p>sdf<b>sdf</b></p><i>sdf</i></div>');
node.innerHTML('<p style="color:#ccc;border:1px solid #ccc;"><table><tbody><tr><td><h1>asd</h1></td></tr></tbody></table></p><div>sdfasdf</div>');
UE.filterNode(node,{});
equals(node.toHtml().replace(/[ ]+>/g,'>'),'<div id="aa"><p style="color:#ccc;border:1px solid #ccc;"><table><tbody><tr><td><h1>asd</h1></td></tr></tbody></table></p><div>sdfasdf</div></div>');
equals(node.toHtml().replace(/[ ]+>/g,'>'),'<div id="aa"><p style="color:#ccc;border:1px solid #ccc;"><table><tbody><tr><td><h1>asd</h1></td></tr></tbody></table></p><div>sdfasdf</div></div>','过滤规则为空');
});
test( '特殊规则过滤', function() {
var uNode = UE.uNode;
var node = uNode.createElement('<div id="aa"><p>sdf</p><i>sdf</i></div>');
node.innerHTML('<script></script>');
UE.filterNode(node,{
'b':'-'
});
equals(node.toHtml().replace(/[ ]+>/g,'>'),'<div id="aa"></div>');
equals(node.toHtml().replace(/[ ]+>/g,'>'),'<div id="aa"></div>','过滤规则中包含html中不存在的标签');
node.innerHTML('<p><!--asdfjasldkfjasldkfj--></p>');
UE.filterNode(node,{
'p':{}
});
equals(node.toHtml().replace(/[ ]+>/g,'>'),'<div id="aa"><p></p></div>');
node.innerHTML('<h6>asd<b>lk</b><i>fj</i></h6>');
UE.filterNode(node,{
'h6':function(node){
node.tagName = 'p';
node.setAttr();
},
'-':'b i',
'p':{}
});
equals(node.toHtml().replace(/[ ]+>/g,'>'),'<div id="aa"><p>asd</p></div>');
equals(node.toHtml().replace(/[ ]+>/g,'>'),'<div id="aa"><p></p></div>','innerHTML中包含注释');
});
\ No newline at end of file
module( 'core.htmlparser' );
test( '', function() {
var div = te.dom[0];
test( '普通标签处理', function() {
var root = UE.htmlparser('<i>sdfsdfsdfsf</i>');
equals(root.toHtml(),'<i>sdfsdfsdfsf</i>');
equals(root.toHtml(),'<i>sdfsdfsdfsf</i>','单个普通标签');
root = UE.htmlparser('<i>sdf<b>sdfsdsd</b>fsdfsf</i>');
equals(root.toHtml(),'<i>sdf<b>sdfsdsd</b>fsdfsf</i>');
equals(root.toHtml(),'<i>sdf<b>sdfsdsd</b>fsdfsf</i>','多个普通标签');
root = UE.htmlparser('<i dsf="sdf" sdf="wewe" readonly >sdf</i>');
equals(root.toHtml(),'<i dsf="sdf" sdf="wewe" readonly >sdf</i>');
root = UE.htmlparser('<i dsf="sdf" sdf="wewe" readonly >sd<!--fasdf-->f</i>');
equals(root.toHtml(),'<i dsf="sdf" sdf="wewe" readonly >sd<!--fasdf-->f</i>');
root = UE.htmlparser('<p><td></td></p>');
equals(root.toHtml(),'<p><table><tbody><tr><td></td></tr></tbody></table></p>');
root = UE.htmlparser('<p><td>sdfsdfsdf</p>');
equals(root.toHtml(),'<p><table><tbody><tr><td>sdfsdfsdf</td></tr></tbody></table></p>');
equals(root.toHtml(),'<i dsf="sdf" sdf="wewe" readonly >sdf</i>','添加属性的标签');
root = UE.htmlparser('<img src="file:///C:/DOCUME~1/DONGYA~1/LOCALS~1/Temp/msohtmlclip1/01/clip_image002.jpg" width="553" height="275" />');
equals(root.toHtml(),'<img src="file:///C:/DOCUME~1/DONGYA~1/LOCALS~1/Temp/msohtmlclip1/01/clip_image002.jpg" width="553" height="275" />');
root = UE.htmlparser('<td></td>' + '\n\r' + '<td></td>');
equals(root.toHtml(),'<table><tbody><tr><td></td><td></td></tr></tbody></table>');
root = UE.htmlparser('<li>sdfsdfsdf<li>sdfsdfsdfsdf');
equals(root.toHtml(),'<ul><li>sdfsdfsdf</li><li>sdfsdfsdfsdf</li></ul>');
equals(root.toHtml(),'<img src="file:///C:/DOCUME~1/DONGYA~1/LOCALS~1/Temp/msohtmlclip1/01/clip_image002.jpg" width="553" height="275" />','img标签');
});
test( '特殊标签处理', function() {
var root = UE.htmlparser('<i dsf="sdf" sdf="wewe" readonly >sd<!--fasdf-->f</i>');
equals(root.toHtml(),'<i dsf="sdf" sdf="wewe" readonly >sd<!--fasdf-->f</i>','包含注释');
root = UE.htmlparser('<script type="text/javascript" charset="utf-8" src="editor_api.js"></script>');
equals(root.toHtml().replace(/[ ]+>/g,'>'),'<script type="text/javascript" charset="utf-8" src="editor_api.js"></script>');
equals(root.toHtml().replace(/[ ]+>/g,'>'),'<script type="text/javascript" charset="utf-8" src="editor_api.js"></script>','script标签');
root = UE.htmlparser('<table width="960"><tbody><tr><td width="939" valign="top"><br></td></tr></tbody></table><p><br></p>');
equals(root.toHtml().replace(/[ ]+>/g,'>'),'<table width="960"><tbody><tr><td width="939" valign="top"><br/></td></tr></tbody></table><p><br/></p>');
root = UE.htmlparser('<ol><li><em><u>sdf<li>sdfsdf</ol>');
equals(root.toHtml().replace(/[ ]+>/g,'>'),'<ol><li><em><u>sdf</u></em></li><li>sdfsdf</li></ol>');
equals(root.toHtml().replace(/[ ]+>/g,'>'),'<table width="960"><tbody><tr><td width="939" valign="top"><br/></td></tr></tbody></table><p><br/></p>','br标签');
root = UE.htmlparser('<li>sdfsdfsdf<li>sdfsdfsdfsdf');
equals(root.toHtml(),'<ul><li>sdfsdfsdf</li><li>sdfsdfsdfsdf</li></ul>','以文本结束的html');
});
test( '补全不完整table', function() {
var root = UE.htmlparser('<p><td></td></p>');
equals(root.toHtml(),'<p><table><tbody><tr><td></td></tr></tbody></table></p>','td完整,补全table');
root = UE.htmlparser('<p><td>sdfsdfsdf</p>');
equals(root.toHtml(),'<p><table><tbody><tr><td>sdfsdfsdf</td></tr></tbody></table></p>','td不完整,补全table');
root = UE.htmlparser('<td></td>' + '\n\r' + '<td></td>');
equals(root.toHtml(),'<table><tbody><tr><td></td><td></td></tr></tbody></table>','包含\n,补全table');
});
test( '补全不完整li', function() {
var root = UE.htmlparser('<ol><li><em><u>sdf<li>sdfsdf</ol>');
equals(root.toHtml().replace(/[ ]+>/g,'>'),'<ol><li><em><u>sdf</u></em></li><li>sdfsdf</li></ol>','补全u,em');
root = UE.htmlparser('<ol><li><em>sdf</em></li><ul><li>a</li><li>b</li><li>c</ul><li>jkl</ol>');
equals(root.toHtml().replace(/[ ]+>/g,'>'),'<ol><li><em>sdf</em></li><ul><li>a</li><li>b</li><li>c</li></ul><li>jkl</li></ol>');
equals(root.toHtml().replace(/[ ]+>/g,'>'),'<ol><li><em>sdf</em></li><ul><li>a</li><li>b</li><li>c</li></ul><li>jkl</li></ol>','补全li');
});
\ No newline at end of file
module( 'core.node' );
test( '', function() {
test( 'createElement', function() {
var uNode = UE.uNode;
//createElement
var node = uNode.createElement('div');
equals(node.tagName,'div');
equals(node.type,'element');
equals(node.tagName,'div','空div ——tagname');
equals(node.type,'element','空div ——节点类型');
node = uNode.createElement('<div id="aa">sdfadf</div>');
equals(node.tagName,'div');
equals(node.children[0].data,'sdfadf');
equals(node.tagName,'div','非空div——tagname');
equals(node.children[0].data,'sdfadf','非空div——数据内容');
});
//getNodeById
node = uNode.createElement('<div id="aa"><div id="bb"></div>sdfadf</div>');
test( 'getNodeById', function() {
var uNode = UE.uNode;
var node = uNode.createElement('<div id="aa"><div id="bb"></div>sdfadf</div>');
node = node.getNodeById('bb');
equals(node.getAttr('id'),'bb');
equals(node.getAttr('id'),'bb','获取标签id');
node = uNode.createElement('<div id="aa"><div id="bb"><div id="cc"></div> </div>sdfadf</div>');
node = node.getNodeById('cc');
equals(node.getAttr('id'),'cc');
equals(node.getAttr('id'),'cc','获取标签id');
});
//getNodesByTagName
node = uNode.createElement('<div id="aa"><div id="bb"><div id="cc"></div> </div>sdfadf</div>');
test( 'getNodesByTagName', function() {
var uNode = UE.uNode;
var node = uNode.createElement('<div id="aa"><div id="bb"><div id="cc"></div> </div>sdfadf</div>');
var nodelist = node.getNodesByTagName('div');
equals(nodelist.length,2);
equals(node.innerHTML().replace(/[ ]+>/g,'>'),'<div id="bb"><div id="cc"></div> </div>sdfadf');
equals(nodelist.length,2,'div节点列表长度');
equals(node.innerHTML().replace(/[ ]+>/g,'>'),'<div id="bb"><div id="cc"></div> </div>sdfadf','innerHTML内容');
});
//innerHTML
test( 'innerHTML', function() {
var uNode = UE.uNode;
var node = uNode.createElement('<div id="aa">sdfadf</div>');
node.innerHTML('<div><div><div></div></div></div>');
nodelist =node.getNodesByTagName('div');
equals(nodelist.length,3);
var nodelist =node.getNodesByTagName('div');
equals(nodelist.length,3,'div节点列表长度');
for(var i= 0,ci;ci=nodelist[i++];){
ci.tagName = 'p';
}
equals(node.innerHTML(),'<p><p><p></p></p></p>');
equals(node.innerHTML(),'<p><p><p></p></p></p>','innerHTML内容');
});
//innerText
test( 'innerText', function() {
var tmp = new UE.uNode.createElement('area');
tmp.innerHTML('');
equals(tmp.innerText(),tmp);
tmp.innerHTML('<p></p>');
equals(tmp.innerText(),tmp,'标签类型特殊');
var tmp = new UE.uNode.createText('');
tmp.innerHTML('');
equals(tmp.innerText(),tmp);
tmp.innerHTML('<p></p>');
equals(tmp.innerText(),tmp,'对象类型不为element');
var uNode = UE.uNode;
var node = uNode.createElement('<div id="aa">sdfadf</div>');
node.innerHTML('<p>dfsdfsdf<b>eee</b>sdf</p>');
equals(node.innerText(),'dfsdfsdfeeesdf');
equals(node.innerText(),'dfsdfsdfeeesdf','获取标签中纯文本');
});
//getData
test( 'getData', function() {
var tmp = new UE.uNode.createElement('div');
equals(tmp.getData(),'');
equals(tmp.getData(),'','element元素');
var tmp = new UE.uNode.createText('askdj');
equals(tmp.getData(),"askdj");
equals(tmp.getData(),"askdj",'其他类型');
});
//appendChild && insertBefore
test( 'appendChild && insertBefore', function() {
var uNode = UE.uNode;
var node = uNode.createElement('<div id="aa">sdfadf</div>');
node.innerHTML('<p><td></td></p>');
equals(node.innerHTML().replace(/[ ]+>/g,'>'),'<p><table><tbody><tr><td></td></tr></tbody></table></p>');
equals(node.innerHTML().replace(/[ ]+>/g,'>'),'<p><table><tbody><tr><td></td></tr></tbody></table></p>','补全html标签');
var tmp = uNode.createElement('div');
node.appendChild(tmp);
equals(node.innerHTML().replace(/[ ]+>/g,'>'),'<p><table><tbody><tr><td></td></tr></tbody></table></p><div></div>');
equals(node.innerHTML().replace(/[ ]+>/g,'>'),'<p><table><tbody><tr><td></td></tr></tbody></table></p><div></div>','appendChild');
node.insertBefore(tmp,node.firstChild());
equals(node.innerHTML().replace(/[ ]+>/g,'>'),'<div></div><p><table><tbody><tr><td></td></tr></tbody></table></p>');
equals(node.innerHTML().replace(/[ ]+>/g,'>'),'<div></div><p><table><tbody><tr><td></td></tr></tbody></table></p>','insertBefore');
node.appendChild(tmp);
equals(node.innerHTML().replace(/[ ]+>/g,'>'),'<p><table><tbody><tr><td></td></tr></tbody></table></p><div></div>');
equals(node.innerHTML().replace(/[ ]+>/g,'>'),'<p><table><tbody><tr><td></td></tr></tbody></table></p><div></div>','appendChild');
});
//replaceChild && setAttr
tmp = uNode.createElement('p');
test( 'replaceChild && setAttr', function() {
var uNode = UE.uNode;
var node = uNode.createElement('<div id="aa">sdfadf</div>');
node.innerHTML('<p><table><tbody><tr><td></td></tr></tbody></table></p><div></div>');
var tmp = uNode.createElement('p');
tmp.setAttr({'class':'test','id':'aa'});
node.insertBefore(tmp,node.lastChild());
equals(node.innerHTML().replace(/[ ]+>/g,'>'),'<p><table><tbody><tr><td></td></tr></tbody></table></p><p class="test" id="aa"></p><div></div>');
equals(node.innerHTML().replace(/[ ]+>/g,'>'),'<p><table><tbody><tr><td></td></tr></tbody></table></p><p class="test" id="aa"></p><div></div>','setAttr不为空');
node.replaceChild(uNode.createElement('div'),tmp);
equals(node.innerHTML().replace(/[ ]+>/g,'>'),'<p><table><tbody><tr><td></td></tr></tbody></table></p><div></div><div></div>');
equals(node.innerHTML().replace(/[ ]+>/g,'>'),'<p><table><tbody><tr><td></td></tr></tbody></table></p><div></div><div></div>','replaceChild');
//insertAfter
node.innerHTML('<p><td></td></p>');
var tmp = uNode.createElement('div');
node.appendChild(tmp);
node.insertAfter(tmp,node.firstChild());
equals(node.innerHTML().replace(/[ ]+>/g,'>'),'<p><table><tbody><tr><td></td></tr></tbody></table></p><div></div>');
node.appendChild(tmp);
equals(node.innerHTML().replace(/[ ]+>/g,'>'),'<p><table><tbody><tr><td></td></tr></tbody></table></p><div></div>');
//setAttr
node.removeChild(node.lastChild(),true);
tmp = uNode.createElement('p');
tmp.setAttr();
node.insertAfter(tmp,node.lastChild());
equals(node.innerHTML().replace(/[ ]+>/g,'>'),'<p><table><tbody><tr><td></td></tr></tbody></table></p><div></div><p></p>');
//replaceChild
equals(node.innerHTML().replace(/[ ]+>/g,'>'),'<p><table><tbody><tr><td></td></tr></tbody></table></p><div></div><p></p>','setAttr为空');
node.innerHTML('<p><td></td></p>');
var tmp = uNode.createElement('div');
node.appendChild(tmp);
node.replaceChild(node.firstChild(),tmp);
equals(node.innerHTML().replace(/[ ]+>/g,'>'),'<p><table><tbody><tr><td></td></tr></tbody></table></p>');
equals(node.innerHTML().replace(/[ ]+>/g,'>'),'<p><table><tbody><tr><td></td></tr></tbody></table></p>','replaceChild');
});
//getStyle
test( 'insertAfter', function() {
var uNode = UE.uNode;
var node = uNode.createElement('<div id="aa">sdfadf</div>');
node.innerHTML('<p><td></td></p>');
var tmp = uNode.createElement('div');
node.appendChild(tmp);
node.insertAfter(tmp,node.firstChild());
equals(node.innerHTML().replace(/[ ]+>/g,'>'),'<p><table><tbody><tr><td></td></tr></tbody></table></p><div></div>','在第一个子节点后插入');
});
test( 'getStyle', function() {
var uNode = UE.uNode;
var node = uNode.createElement('div');
node.innerHTML('<div style=""><div>');
node = node.firstChild();
equals(node.getStyle(''),'');
equals(node.getStyle(''),'','空cssStyle');
node.innerHTML('<div style="border:1px solid #ccc"><div>');
node = node.firstChild();
equals(node.getStyle('border'),'1px solid #ccc');
equals(node.getStyle('border'),'1px solid #ccc','有border,取border样式');
node.innerHTML('<div style="border:1px solid #ccc"><div>');
node = node.firstChild();
equals(node.getStyle('color'),'');
equals(node.getStyle('color'),'','无color样式,取color样式');
node.innerHTML('<div style="border:1px solid #ccc;color:#ccc"><div>');
node = node.firstChild();
equals(node.getStyle('border'),'1px solid #ccc');
equals(node.getStyle('border'),'1px solid #ccc','有2个样式,取其一');
});
//setStyle
test( 'setStyle', function() {
var uNode = UE.uNode;
var node = uNode.createElement('div');
node.innerHTML('<div style="border:1px solid #ccc;color:#ccc"><div>');
node = node.firstChild();
node.setStyle('border','2px solid #ccc');
equals(node.getAttr('style'),'border:2px solid #ccc;color:#ccc');
equals(node.getAttr('style'),'border:2px solid #ccc;color:#ccc','修改样式中的一个');
node.setStyle({
'font':'12px',
'background':'#ccc'
});
equals(node.getAttr('style'),'background:#ccc;font:12px;border:2px solid #ccc;color:#ccc');
equals(node.getAttr('style'),'background:#ccc;font:12px;border:2px solid #ccc;color:#ccc','添加新样式');
node.setStyle({
'font':'',
'background':'',
'border':'',
'color':''
});
equals(node.getAttr('style'),undefined);
equals(node.getAttr('style'),undefined,'清空样式');
node.setStyle('border','<script>alert("")</script>');
equals(node.getAttr('style'),"border:&lt;script&gt;alert(&quot;&quot;)&lt;/script&gt;;");
equals(node.toHtml(),'<div style=\"border:&lt;script&gt;alert(&quot;&quot;)&lt;/script&gt;;\" ><div></div></div>')
node.innerHTML('<div>asdfasdf<b>sdf</b></div>')
equals(node.getAttr('style'),"border:&lt;script&gt;alert(&quot;&quot;)&lt;/script&gt;;",'脚本');
equals(node.toHtml(),'<div style=\"border:&lt;script&gt;alert(&quot;&quot;)&lt;/script&gt;;\" ><div></div></div>','脚本转html');
node.innerHTML('<div>asdfasdf<b>sdf</b></div>');
node.removeChild(node.firstChild(),true);
equals(node.toHtml(),'<div style=\"border:&lt;script&gt;alert(&quot;&quot;)&lt;/script&gt;;\" >asdfasdf<b>sdf</b></div>')
equals(node.toHtml(),'<div style=\"border:&lt;script&gt;alert(&quot;&quot;)&lt;/script&gt;;\" >asdfasdf<b>sdf</b></div>','移除子节点');
});
//getIndex
test( 'getIndex', function() {
var uNode = UE.uNode;
var node = uNode.createElement('div');
node.innerHTML('<div>asdfasdf<b>sdf</b></div>')
node.removeChild(node.firstChild(),true);
var tmp = new UE.uNode.createElement('div');
node.appendChild(tmp);
equals(tmp.getIndex(),2);
equals(tmp.getIndex(),2,'节点索引');
});
\ No newline at end of file
......@@ -5,17 +5,14 @@ test( '插入锚点后切换源码', function() {
var range = te.obj[1];
var body = editor.body;
stop();
//1.2版本,ie中‘’-〉'&nbsp;'
var br = baidu.editor.browser.ie ? '&nbsp;' : '<br />';
var br = baidu.editor.browser.ie ? '&nbsp;' : '<br />'; //1.2版本,ie中‘’-〉'&nbsp;'
setTimeout( function() {
editor.setContent( '<p>' + br + '</p>' );
range.setStart( body.firstChild, 0 ).collapse( 1 ).select();
editor.execCommand( 'anchor', 'hello' );
//1.2版本后,在img前有的不可见字符没有删去,这里改成之比较img内的内容
// ua.checkHTMLSameStyle( '<img anchorname="hello" class="anchorclass">' + br, editor.document, body.firstChild, '检查锚点html' );
ua.checkHTMLSameStyle( '<img anchorname="hello" class="anchorclass">' + br, editor.document, body.firstChild, '检查锚点html' ); //1.2版本后,在img前有的不可见字符没有删去,这里改成之比较img内的内容
ok(body.getElementsByTagName('img')[0].attributes['anchorname'].nodeValue=="hello"&&body.getElementsByTagName('img')[0].attributes['class'].nodeValue=="anchorclass",'检查锚点');
editor.execCommand( 'source' );
/*切到源码模式下会有一个超时*/
editor.execCommand( 'source' ); /*切到源码模式下会有一个超时*/
setTimeout( function() {
var tas = editor.iframe.parentNode.getElementsByTagName( 'textarea' );
ok( tas[0].value.indexOf( '<a name="hello"' ) != -1 || tas[0].value.indexOf( '<a anchorname="1"' ) != -1, '查看是否转换成功' );
......@@ -29,55 +26,18 @@ test( '插入锚点后切换源码', function() {
}, 10 );
}, 20 );
} );
//两次设定textarea中的内容总会出错,把这个用例拆成两个
//test( '在源码模式设置超链接的name属性,切换到编辑器模式检查超链接是否变为锚点', function() {
// var editor = te.obj[0];
// editor.setContent( '' );
// var body = editor.body;
// stop();
// /*切到源码模式下会有一个超时*/
// setTimeout( function() {
// editor.execCommand( 'source' );
// setTimeout( function() {
// var ta = editor.iframe.parentNode.getElementsByTagName( 'textarea' )[0];
// /*这种情况认为是锚点*/
//// ta.value
//// ta.textContent='<p><a name="source" anchorname="1"></a></p>';
// ta.value = '<p><a name="source" anchorname="1"></a></p>';
// setTimeout( function() {
// editor.execCommand( 'source' );
// ua.checkHTMLSameStyle( '<img anchorname="source" class="anchorclass">', editor.document, body.firstChild, '检查锚点html' );
// /*这种情况不应当转换为锚点*/
// editor.execCommand( 'source' );
// setTimeout( function() {
//// ta = editor.iframe.parentNode.getElementsByTagName( 'textarea' )[0];
// editor.iframe.parentNode.getElementsByTagName( 'textarea' )[0].value = '<p><a name="source">你好</a></p>';
// setTimeout( function() {
// editor.execCommand( 'source' );
// equal( body.firstChild.firstChild.tagName.toLowerCase(), 'a', 'a标签不会转化' );
// /*用例结束前等一下,因为还有个超时操作会获取窗口*/
// setTimeout( function() {
// start();
// }, 50 );
// }, 50 );
// }, 50 );
// }, 20 );
// }, 10 );
// }, 20 );
//} );
test( '在源码模式设置超链接的name属性,切换到编辑器模式检查超链接是否变为锚点', function() {
var editor = te.obj[0];
var body = editor.body;
stop();
setTimeout(function(){
editor.setContent( '' );
/*切到源码模式下会有一个超时*/
setTimeout( function() {
editor.execCommand( 'source' );
setTimeout( function() {
var ta = editor.iframe.parentNode.getElementsByTagName( 'textarea' )[0];
/*这种情况认为是锚点*/
ta.value = '<p><a name="source" anchorname="1"></a></p>';
ta.value = '<p><a name="source" anchorname="1"></a></p>'; /*这种情况认为是锚点*/
setTimeout( function() {
editor.execCommand( 'source' );
ua.checkHTMLSameStyle( '<img anchorname="source" class="anchorclass">', editor.document, body.firstChild, '检查锚点html' );
......@@ -88,22 +48,20 @@ test( '在源码模式设置超链接的name属性,切换到编辑器模式检
},100);
} );
test( '在源码模式设置超链接没有name属性,切换到编辑器模式检查超链接不变为锚点', function() {
var editor = te.obj[0];
editor.setContent( '' );
var body = editor.body;
stop();
/*切到源码模式下会有一个超时*/
setTimeout( function() {
editor.execCommand( 'source' );
setTimeout( function() {
var ta = editor.iframe.parentNode.getElementsByTagName( 'textarea' )[0];
ta.value = '<p><a name="source">你好</a></p>';
ta.value = '<p><a name="source" href="www.baidu.com">你好</a></p>';
setTimeout( function() {
editor.execCommand( 'source' );
ua.manualDeleteFillData(editor.body);
equal( body.firstChild.firstChild.tagName.toLowerCase(), 'a', 'a标签不会转化' );
start();
}, 50 );
......@@ -120,7 +78,6 @@ test( '已存在锚点', function() {
range.selectNode(body.firstChild).select();
editor.execCommand( 'anchor', 'hello' );
var name=body.firstChild.firstChild.getAttribute('anchorname');
// equal(ua.getChildHTML(editor.body),'<p><img anchorname=\"hello\" class=\"anchorclass\" _src=\"undefined\"></p>','更改name');
equal(name, 'hello', '更改name');
editor.setContent( '<p><img anchorname="1" class="anchorclass"/></p>' );
range.selectNode(body.firstChild).select();
......
/**
* Created by JetBrains PhpStorm.
* User: dongyancen
* Date: 13-2-28
* Time: 下午3:20
* To change this template use File | Settings | File Templates.
*/
module( 'plugins.defaultfilter' );
//TODO 现在在过滤机制里面去除无用的标签
test( "getContent--去除无用的空标签:autoClearEmptyNode==true", function() {
var editor = new UE.Editor({autoClearEmptyNode:true,'autoFloatEnabled':false});
stop();
setTimeout(function(){
var div = document.body.appendChild(document.createElement('div'));
editor.render(div);
te.dom.push(div);
editor.focus();
var innerHTML = '<span><span></span><strong>xx</strong><em>em</em><em></em></span><div>xxxx</div>';
editor.setContent( innerHTML );
editor.execCommand('source');
editor.execCommand('source');
equal( editor.getContent(), '<p><strong>xx</strong><em>em</em></p><div>xxxx</div>', "span style空,套空的em和不空的em" );
//style="color:#c4bd97;"
innerHTML = '<span style="color:#c4bd97"><span></span><strong>xx</strong><em>em</em><em></em></span>';
editor.setContent( innerHTML );
if(ua.browser.ie ==9){
equal( editor.getContent().toLowerCase(), '<p><span style="color:#c4bd97;"><strong>xx</strong><em>em</em></span></p>', "span style不空,套空的em和不空的em" );
}
else{
equal( editor.getContent().toLowerCase(), '<p><span style="color:#c4bd97"><strong>xx</strong><em>em</em></span></p>', "span style不空,套空的em和不空的em" );
}
innerHTML = '<span style="color:#c4bd97"></span><strong>xx</strong><em>em</em><em></em>';
editor.setContent( innerHTML );
/*inline标签上只要有属性就不清理*/
if(ua.browser.ie ==9){
equal( editor.getContent().toLowerCase(), '<p><span style="color:#c4bd97;"></span><strong>xx</strong><em>em</em></p>', "span 有style但内容为空" );
}
else{
equal( editor.getContent().toLowerCase(), '<p><span style="color:#c4bd97"></span><strong>xx</strong><em>em</em></p>', "span 有style但内容为空" );
}
innerHTML = '<span style="color:#c4bd97">asdf<strong>xx</strong><em>em</em><em></em></span>';
editor.setContent( innerHTML );
if(ua.browser.ie ==9){
equal( editor.getContent().toLowerCase(), '<p><span style="color:#c4bd97;">asdf<strong>xx</strong><em>em</em></span></p>', "span 有style内容不空" );
}
else{
equal( editor.getContent().toLowerCase(), '<p><span style="color:#c4bd97">asdf<strong>xx</strong><em>em</em></span></p>', "span 有style内容不空" );
}
innerHTML = '<a href="http://www.baidu.com"></a><a>a</a><strong>xx</strong><em>em</em><em></em>';
editor.setContent( innerHTML );
equal( editor.getContent(), '<p><a href="http://www.baidu.com"></a><a>a</a><strong>xx</strong><em>em</em></p>', "a 有href但内容为空,不过滤a标签" );
start()
},100);
} );
//editor.options.autoClearEmptyNode
test("getContent--不去除无用的空标签:autoClearEmptyNode==false", function() {
var editor = new UE.Editor({autoClearEmptyNode:false,'autoFloatEnabled':false});
stop();
setTimeout(function(){
var div = document.body.appendChild(document.createElement('div'));
editor.render(div);
te.dom.push(div);
editor.focus();
var innerHTML = '<span><span></span><strong>xx</strong><em>em</em><em></em><strong></strong></span>';
editor.setContent(innerHTML);
equal(editor.getContent().toLowerCase(), '<p><span><span></span><strong>xx</strong><em>em</em><em></em><strong></strong></span></p>', "span style空,套空的em和不空的em");
innerHTML = '<span style="color:#c4bd97"></span><strong>xx</strong><em>em</em><em></em><strong></strong>';
editor.setContent(innerHTML);
ua.manualDeleteFillData(editor.body);
if (ua.browser.ie == 9) {
equal(editor.getContent().toLowerCase(), '<p><span style="color:#c4bd97;"></span><strong>xx</strong><em>em</em><em></em><strong></strong></p>', "span 有style但内容为空");
}
else {
equal(editor.getContent().toLowerCase(), '<p><span style="color:#c4bd97"></span><strong>xx</strong><em>em</em><em></em><strong></strong></p>', "span 有style但内容为空");
}
start();
},100);
});
test("getContent--转换空格,nbsp与空格相间显示", function() {
var editor = te.obj[1];
var div = te.dom[0];
editor.render(div);
editor.focus();
var innerHTML = '<div> x x x&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;&nbsp; &nbsp;</div>';
editor.setContent(innerHTML);
equal(editor.getContent(), '<div> x &nbsp;x &nbsp; x &nbsp; &nbsp;x &nbsp; &nbsp; </div>', "转换空格,nbsp与空格相间显示");
});
此差异已折叠。
此差异已折叠。
......@@ -2,7 +2,7 @@ function run( kiss, runnext ) {
window.document.title = kiss;
var wb = window.brtest = window.brtest || {};
wb.timeout = wb.timeout || 30000;
wb.timeout = wb.timeout || 60000;
wb.breakOnError = /breakonerror=true/gi.test( location.search )
|| $( 'input#id_control_breakonerror' ).attr( 'checked' );
wb.runnext = /batchrun=true/gi.test( location.search ) || runnext
......
......@@ -45,7 +45,13 @@
display: block;
text-align: center;
cursor: pointer;
height:18px;
height:20px;
}
.arrow_down{
background: white url('../images/arrow_down.png') no-repeat center;
}
.arrow_up{
background: white url('../images/arrow_up.png') no-repeat center;
}
/*高级的样式*/
.edui-colorpicker-adv{
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册