123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- ///import core
- ///commands 引用
- ///commandsName BlockQuote
- ///commandsTitle 引用
- /**
- *
- * 引用模块实现
- * @function
- * @name baidu.editor.execCommand
- * @param {String} cmdName blockquote引用
- */
- UE.plugins['blockquote'] = function(){
- var me = this;
- function getObj(editor){
- return domUtils.filterNodeList(editor.selection.getStartElementPath(),'blockquote');
- };
- me.commands['blockquote'] = {
- execCommand : function( cmdName, attrs ) {
- var range = this.selection.getRange(),
- obj = getObj(this),
- blockquote = dtd.blockquote,
- bookmark = range.createBookmark();
- if ( obj ) {
- var start = range.startContainer,
- startBlock = domUtils.isBlockElm(start) ? start : domUtils.findParent(start,function(node){return domUtils.isBlockElm(node)}),
- end = range.endContainer,
- endBlock = domUtils.isBlockElm(end) ? end : domUtils.findParent(end,function(node){return domUtils.isBlockElm(node)});
- //处理一下li
- startBlock = domUtils.findParentByTagName(startBlock,'li',true) || startBlock;
- endBlock = domUtils.findParentByTagName(endBlock,'li',true) || endBlock;
- if(startBlock.tagName == 'LI' || startBlock.tagName == 'TD' || startBlock === obj){
- domUtils.remove(obj,true);
- }else{
- domUtils.breakParent(startBlock,obj);
- }
- if(startBlock !== endBlock){
- obj = domUtils.findParentByTagName(endBlock,'blockquote');
- if(obj){
- if(endBlock.tagName == 'LI' || endBlock.tagName == 'TD'){
- domUtils.remove(obj,true);
- }else{
- domUtils.breakParent(endBlock,obj);
- }
- }
- }
- var blockquotes = domUtils.getElementsByTagName(this.document,'blockquote');
- for(var i=0,bi;bi=blockquotes[i++];){
- if(!bi.childNodes.length){
- domUtils.remove(bi);
- }else if(domUtils.getPosition(bi,startBlock)&domUtils.POSITION_FOLLOWING && domUtils.getPosition(bi,endBlock)&domUtils.POSITION_PRECEDING){
- domUtils.remove(bi,true);
- }
- }
- } else {
- var tmpRange = range.cloneRange(),
- node = tmpRange.startContainer.nodeType == 1 ? tmpRange.startContainer : tmpRange.startContainer.parentNode,
- preNode = node,
- doEnd = 1;
- //调整开始
- while ( 1 ) {
- if ( domUtils.isBody(node) ) {
- if ( preNode !== node ) {
- if ( range.collapsed ) {
- tmpRange.selectNode( preNode );
- doEnd = 0;
- } else {
- tmpRange.setStartBefore( preNode );
- }
- }else{
- tmpRange.setStart(node,0);
- }
- break;
- }
- if ( !blockquote[node.tagName] ) {
- if ( range.collapsed ) {
- tmpRange.selectNode( preNode );
- } else{
- tmpRange.setStartBefore( preNode);
- }
- break;
- }
- preNode = node;
- node = node.parentNode;
- }
- //调整结束
- if ( doEnd ) {
- preNode = node = node = tmpRange.endContainer.nodeType == 1 ? tmpRange.endContainer : tmpRange.endContainer.parentNode;
- while ( 1 ) {
- if ( domUtils.isBody( node ) ) {
- if ( preNode !== node ) {
- tmpRange.setEndAfter( preNode );
- } else {
- tmpRange.setEnd( node, node.childNodes.length );
- }
- break;
- }
- if ( !blockquote[node.tagName] ) {
- tmpRange.setEndAfter( preNode );
- break;
- }
- preNode = node;
- node = node.parentNode;
- }
- }
- node = range.document.createElement( 'blockquote' );
- domUtils.setAttributes( node, attrs );
- node.appendChild( tmpRange.extractContents() );
- tmpRange.insertNode( node );
- //去除重复的
- var childs = domUtils.getElementsByTagName(node,'blockquote');
- for(var i=0,ci;ci=childs[i++];){
- if(ci.parentNode){
- domUtils.remove(ci,true);
- }
- }
- }
- range.moveToBookmark( bookmark ).select();
- },
- queryCommandState : function() {
- return getObj(this) ? 1 : 0;
- }
- };
- };
|