selectall.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. ///import core
  2. ///commands 全选
  3. ///commandsName SelectAll
  4. ///commandsTitle 全选
  5. /**
  6. * 选中所有
  7. * @function
  8. * @name baidu.editor.execCommand
  9. * @param {String} cmdName selectall选中编辑器里的所有内容
  10. * @author zhanyi
  11. */
  12. UE.plugins['selectall'] = function(){
  13. var me = this;
  14. me.commands['selectall'] = {
  15. execCommand : function(){
  16. //去掉了原生的selectAll,因为会出现报错和当内容为空时,不能出现闭合状态的光标
  17. var me = this,body = me.body,
  18. range = me.selection.getRange();
  19. range.selectNodeContents(body);
  20. if(domUtils.isEmptyBlock(body)){
  21. //opera不能自动合并到元素的里边,要手动处理一下
  22. if(browser.opera && body.firstChild && body.firstChild.nodeType == 1){
  23. range.setStartAtFirst(body.firstChild);
  24. }
  25. range.collapse(true);
  26. }
  27. range.select(true);
  28. },
  29. notNeedUndo : 1
  30. };
  31. function isBoundaryNode(node,dir){
  32. var tmp;
  33. while(!domUtils.isBody(node)){
  34. tmp = node;
  35. node = node.parentNode;
  36. if(tmp !== node[dir]){
  37. return false;
  38. }
  39. }
  40. return true;
  41. }
  42. me.addListener('keydown', function(type, evt) {
  43. var rng = me.selection.getRange();
  44. if(!rng.collapsed && !(evt.ctrlKey || evt.metaKey || evt.shiftKey || evt.altKey)){
  45. var tmpNode = rng.startContainer;
  46. if(domUtils.isFillChar(tmpNode)){
  47. rng.setStartBefore(tmpNode)
  48. }
  49. tmpNode = rng.endContainer;
  50. if(domUtils.isFillChar(tmpNode)){
  51. rng.setEndAfter(tmpNode)
  52. }
  53. rng.txtToElmBoundary();
  54. if(rng.startOffset == 0){
  55. tmpNode = rng.startContainer;
  56. if(isBoundaryNode(tmpNode,'firstChild')){
  57. tmpNode = rng.endContainer;
  58. if(rng.endOffset == rng.endContainer.childNodes.length && isBoundaryNode(tmpNode,'lastChild') ){
  59. me.fireEvent('saveScene');
  60. me.body.innerHTML = '<p>'+(browser.ie ? '' : '<br/>')+'</p>';
  61. rng.setStart(me.body.firstChild,0).setCursor(false,true);
  62. me.fireEvent('saveScene');
  63. browser.ie && me._selectionChange();
  64. return;
  65. }
  66. }
  67. }
  68. }
  69. });
  70. //快捷键
  71. me.addshortcutkey({
  72. "selectAll" : "ctrl+65"
  73. });
  74. };