basestyle.js 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. return domUtils.filterNodeList(editor.selection.getStartElementPath(),tagNames);
  20. },
  21. me = this;
  22. //添加快捷键
  23. me.addshortcutkey({
  24. "Bold" : "ctrl+66",//^B
  25. "Italic" : "ctrl+73", //^I
  26. "Underline" : "ctrl+85"//^U
  27. });
  28. for ( var style in basestyles ) {
  29. (function( cmd, tagNames ) {
  30. me.commands[cmd] = {
  31. execCommand : function( cmdName ) {
  32. var range = me.selection.getRange(),obj = getObj(this,tagNames);
  33. if ( range.collapsed ) {
  34. if ( obj ) {
  35. var tmpText = me.document.createTextNode('');
  36. range.insertNode( tmpText ).removeInlineStyle( tagNames );
  37. range.setStartBefore(tmpText);
  38. domUtils.remove(tmpText);
  39. } else {
  40. var tmpNode = range.document.createElement( tagNames[0] );
  41. if(cmdName == 'superscript' || cmdName == 'subscript'){
  42. tmpText = me.document.createTextNode('');
  43. range.insertNode(tmpText)
  44. .removeInlineStyle(['sub','sup'])
  45. .setStartBefore(tmpText)
  46. .collapse(true);
  47. }
  48. range.insertNode( tmpNode ).setStart( tmpNode, 0 );
  49. }
  50. range.collapse( true );
  51. } else {
  52. if(cmdName == 'superscript' || cmdName == 'subscript'){
  53. if(!obj || obj.tagName.toLowerCase() != cmdName){
  54. range.removeInlineStyle(['sub','sup']);
  55. }
  56. }
  57. obj ? range.removeInlineStyle( tagNames ) : range.applyInlineStyle( tagNames[0] );
  58. }
  59. range.select();
  60. },
  61. queryCommandState : function() {
  62. return getObj(this,tagNames) ? 1 : 0;
  63. }
  64. };
  65. })( style, basestyles[style] );
  66. }
  67. };