basestyle.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. ///import core
  2. ///commands 加粗,斜体,上标,下标
  3. ///commandsName Bold,Italic,Subscript,Superscript
  4. ///commandsTitle 加粗,加斜,下标,上标
  5. /**
  6. * b u i等基础功能实现
  7. * @function
  8. * @name baidu.editor.execCommands
  9. * @param {String} cmdName bold加粗。italic斜体。subscript上标。superscript下标。
  10. */
  11. UE.plugins['basestyle'] = function(){
  12. var basestyles = {
  13. 'bold':['strong','b'],
  14. 'italic':['em','i'],
  15. 'subscript':['sub'],
  16. 'superscript':['sup']
  17. },
  18. getObj = function(editor,tagNames){
  19. //var start = editor.selection.getStart();
  20. var path = editor.selection.getStartElementPath();
  21. // return domUtils.findParentByTagName( start, tagNames, true )
  22. return utils.findNode(path,tagNames);
  23. },
  24. me = this;
  25. for ( var style in basestyles ) {
  26. (function( cmd, tagNames ) {
  27. me.commands[cmd] = {
  28. execCommand : function( cmdName ) {
  29. var range = new dom.Range(me.document),obj = '';
  30. //table的处理
  31. if(me.currentSelectedArr && me.currentSelectedArr.length > 0){
  32. for(var i=0,ci;ci=me.currentSelectedArr[i++];){
  33. if(ci.style.display != 'none'){
  34. range.selectNodeContents(ci).select();
  35. //trace:943
  36. !obj && (obj = getObj(this,tagNames));
  37. if(cmdName == 'superscript' || cmdName == 'subscript'){
  38. if(!obj || obj.tagName.toLowerCase() != cmdName)
  39. range.removeInlineStyle(['sub','sup'])
  40. }
  41. obj ? range.removeInlineStyle( tagNames ) : range.applyInlineStyle( tagNames[0] )
  42. }
  43. }
  44. range.selectNodeContents(me.currentSelectedArr[0]).select();
  45. }else{
  46. range = me.selection.getRange();
  47. obj = getObj(this,tagNames);
  48. if ( range.collapsed ) {
  49. if ( obj ) {
  50. var tmpText = me.document.createTextNode('');
  51. range.insertNode( tmpText ).removeInlineStyle( tagNames );
  52. range.setStartBefore(tmpText);
  53. domUtils.remove(tmpText);
  54. } else {
  55. var tmpNode = range.document.createElement( tagNames[0] );
  56. if(cmdName == 'superscript' || cmdName == 'subscript'){
  57. tmpText = me.document.createTextNode('');
  58. range.insertNode(tmpText)
  59. .removeInlineStyle(['sub','sup'])
  60. .setStartBefore(tmpText)
  61. .collapse(true);
  62. }
  63. range.insertNode( tmpNode ).setStart( tmpNode, 0 );
  64. }
  65. range.collapse( true )
  66. } else {
  67. if(cmdName == 'superscript' || cmdName == 'subscript'){
  68. if(!obj || obj.tagName.toLowerCase() != cmdName)
  69. range.removeInlineStyle(['sub','sup'])
  70. }
  71. obj ? range.removeInlineStyle( tagNames ) : range.applyInlineStyle( tagNames[0] )
  72. }
  73. range.select();
  74. }
  75. return true;
  76. },
  77. queryCommandState : function() {
  78. if(this.highlight){
  79. return -1;
  80. }
  81. return getObj(this,tagNames) ? 1 : 0;
  82. }
  83. }
  84. })( style, basestyles[style] );
  85. }
  86. };