elementpath.js 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. ///import core
  2. ///commands 选区路径
  3. ///commandsName ElementPath,elementPathEnabled
  4. ///commandsTitle 选区路径
  5. /**
  6. * 选区路径
  7. * @function
  8. * @name baidu.editor.execCommand
  9. * @param {String} cmdName elementpath选区路径
  10. */
  11. UE.plugins['elementpath'] = function(){
  12. var currentLevel,
  13. tagNames,
  14. me = this;
  15. me.setOpt('elementPathEnabled',true);
  16. if(!me.options.elementPathEnabled)return;
  17. me.commands['elementpath'] = {
  18. execCommand : function( cmdName, level ) {
  19. var start = tagNames[level],
  20. range = me.selection.getRange();
  21. me.currentSelectedArr && domUtils.clearSelectedArr(me.currentSelectedArr);
  22. currentLevel = level*1;
  23. if(dtd.$tableContent[start.tagName]){
  24. switch (start.tagName){
  25. case 'TD':me.currentSelectedArr = [start];
  26. start.className = me.options.selectedTdClass;
  27. break;
  28. case 'TR':
  29. var cells = start.cells;
  30. for(var i=0,ti;ti=cells[i++];){
  31. me.currentSelectedArr.push(ti);
  32. ti.className = me.options.selectedTdClass;
  33. }
  34. break;
  35. case 'TABLE':
  36. case 'TBODY':
  37. var rows = start.rows;
  38. for(var i=0,ri;ri=rows[i++];){
  39. cells = ri.cells;
  40. for(var j=0,tj;tj=cells[j++];){
  41. me.currentSelectedArr.push(tj);
  42. tj.className = me.options.selectedTdClass;
  43. }
  44. }
  45. }
  46. start = me.currentSelectedArr[0];
  47. if(domUtils.isEmptyNode(start)){
  48. range.setStart(start,0).setCursor()
  49. }else{
  50. range.selectNodeContents(start).select()
  51. }
  52. }else{
  53. range.selectNode(start).select()
  54. }
  55. },
  56. queryCommandValue : function() {
  57. //产生一个副本,不能修改原来的startElementPath;
  58. var parents = [].concat(this.selection.getStartElementPath()).reverse(),
  59. names = [];
  60. tagNames = parents;
  61. for(var i=0,ci;ci=parents[i];i++){
  62. if(ci.nodeType == 3) continue;
  63. var name = ci.tagName.toLowerCase();
  64. if(name == 'img' && ci.getAttribute('anchorname')){
  65. name = 'anchor'
  66. }
  67. names[i] = name;
  68. if(currentLevel == i){
  69. currentLevel = -1;
  70. break;
  71. }
  72. }
  73. return names;
  74. }
  75. }
  76. };