123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- ///import core
- ///commands 查找替换
- ///commandsName SearchReplace
- ///commandsTitle 查询替换
- ///commandsDialog dialogs\searchreplace
- /**
- * @description 查找替换
- * @author zhanyi
- */
- UE.plugins['searchreplace'] = function(){
- var currentRange,
- first,
- me = this;
- me.addListener('reset',function(){
- currentRange = null;
- first = null;
- });
- me.commands['searchreplace'] = {
- execCommand : function(cmdName,opt){
- var me = this,
- sel = me.selection,
- range,
- nativeRange,
- num = 0,
- opt = utils.extend(opt,{
- all : false,
- casesensitive : false,
- dir : 1
- },true);
- if(browser.ie){
- while(1){
- var tmpRange;
- nativeRange = me.document.selection.createRange();
- tmpRange = nativeRange.duplicate();
- tmpRange.moveToElementText(me.document.body);
- if(opt.all){
- first = 0;
- opt.dir = 1;
- if(currentRange){
- tmpRange.setEndPoint(opt.dir == -1 ? 'EndToStart' : 'StartToEnd',currentRange);
- }
- tmpRange.moveToElementText(me.document.body);
- }else{
- tmpRange.setEndPoint(opt.dir == -1 ? 'EndToStart' : 'StartToEnd',nativeRange);
- if(opt.hasOwnProperty("replaceStr")){
- tmpRange.setEndPoint(opt.dir == -1 ? 'StartToEnd' : 'EndToStart',nativeRange);
- }
- }
- nativeRange = tmpRange.duplicate();
- if(!tmpRange.findText(opt.searchStr,opt.dir,opt.casesensitive ? 4 : 0)){
- currentRange = null;
- tmpRange = me.document.selection.createRange();
- tmpRange.scrollIntoView();
- return num;
- }
- tmpRange.select();
- //替换
- if(opt.hasOwnProperty("replaceStr")){
- range = sel.getRange();
- range.deleteContents().insertNode(range.document.createTextNode(opt.replaceStr)).select();
- currentRange = sel.getNative().createRange();
- }
- num++;
- if(!opt.all){
- break;
- }
- }
- }else{
- var w = me.window,nativeSel = sel.getNative(),tmpRange;
- while(1){
- if(opt.all){
- if(currentRange){
- currentRange.collapse(false);
- nativeRange = currentRange;
- }else{
- nativeRange = me.document.createRange();
- }
- nativeRange.setStart(me.document.body,0);
- nativeRange.collapse(true);
- nativeSel.removeAllRanges();
- nativeSel.addRange( nativeRange );
- first = 0;
- opt.dir = 1;
- }else{
- //safari弹出层,原生已经找不到range了,所以需要先选回来,再取原生
- if(browser.safari){
- me.selection.getRange().select();
- }
- nativeRange = w.getSelection().getRangeAt(0);
- if(opt.hasOwnProperty("replaceStr")){
- nativeRange.collapse(opt.dir == 1 ? true : false);
- }
- }
- //如果是第一次并且海选中了内容那就要清除,为find做准备
- if(!first){
- nativeRange.collapse( opt.dir <0 ? true : false);
- nativeSel.removeAllRanges();
- nativeSel.addRange( nativeRange );
- }else{
- nativeSel.removeAllRanges();
- }
- if(!w.find(opt.searchStr,opt.casesensitive,opt.dir < 0 ? true : false) ) {
- currentRange = null;
- nativeSel.removeAllRanges();
- return num;
- }
- first = 0;
- range = w.getSelection().getRangeAt(0);
- if(!range.collapsed){
- if(opt.hasOwnProperty("replaceStr")){
- range.deleteContents();
- var text = w.document.createTextNode(opt.replaceStr);
- range.insertNode(text);
- range.selectNode(text);
- nativeSel.addRange(range);
- currentRange = range.cloneRange();
- }
- }
- num++;
- if(!opt.all){
- break;
- }
- }
- }
- return true;
- }
- };
- };
|