style.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. define(function(require, exports, module) {
  2. var kity = require('../core/kity');
  3. var utils = require('../core/utils');
  4. var Minder = require('../core/minder');
  5. var MinderNode = require('../core/node');
  6. var Command = require('../core/command');
  7. var Module = require('../core/module');
  8. var Renderer = require('../core/render');
  9. Module.register('StyleModule', function() {
  10. var styleNames = ['font-size', 'font-family', 'font-weight', 'font-style', 'background', 'color'];
  11. var styleClipBoard = null;
  12. function hasStyle(node) {
  13. var data = node.getData();
  14. for (var i = 0; i < styleNames.length; i++) {
  15. if (styleNames[i] in data) return true;
  16. }
  17. }
  18. return {
  19. 'commands': {
  20. /**
  21. * @command CopyStyle
  22. * @description 拷贝选中节点的当前样式,包括字体、字号、粗体、斜体、背景色、字体色
  23. * @state
  24. * 0: 当前有选中的节点
  25. * -1: 当前没有选中的节点
  26. */
  27. 'copystyle': kity.createClass('CopyStyleCommand', {
  28. base: Command,
  29. execute: function(minder) {
  30. var node = minder.getSelectedNode();
  31. var nodeData = node.getData();
  32. styleClipBoard = {};
  33. styleNames.forEach(function(name) {
  34. if (name in nodeData) styleClipBoard[name] = nodeData[name];
  35. else {
  36. styleClipBoard[name] = null;
  37. delete styleClipBoard[name];
  38. }
  39. });
  40. return styleClipBoard;
  41. },
  42. queryState: function(minder) {
  43. var nodes = minder.getSelectedNodes();
  44. if (nodes.length !== 1) return -1;
  45. return hasStyle(nodes[0]) ? 0 : -1;
  46. }
  47. }),
  48. /**
  49. * @command PasteStyle
  50. * @description 粘贴已拷贝的样式到选中的节点上,包括字体、字号、粗体、斜体、背景色、字体色
  51. * @state
  52. * 0: 当前有选中的节点,并且已经有复制的样式
  53. * -1: 当前没有选中的节点,或者没有复制的样式
  54. */
  55. 'pastestyle': kity.createClass('PastStyleCommand', {
  56. base: Command,
  57. execute: function(minder) {
  58. minder.getSelectedNodes().forEach(function(node) {
  59. for (var name in styleClipBoard) {
  60. if (styleClipBoard.hasOwnProperty(name))
  61. node.setData(name, styleClipBoard[name]);
  62. }
  63. });
  64. minder.renderNodeBatch(minder.getSelectedNodes());
  65. minder.layout(300);
  66. return styleClipBoard;
  67. },
  68. queryState: function(minder) {
  69. return (styleClipBoard && minder.getSelectedNodes().length) ? 0 : -1;
  70. }
  71. }),
  72. /**
  73. * @command ClearStyle
  74. * @description 移除选中节点的样式,包括字体、字号、粗体、斜体、背景色、字体色
  75. * @state
  76. * 0: 当前有选中的节点,并且至少有一个设置了至少一种样式
  77. * -1: 其它情况
  78. */
  79. 'clearstyle': kity.createClass('ClearStyleCommand', {
  80. base: Command,
  81. execute: function(minder) {
  82. minder.getSelectedNodes().forEach(function(node) {
  83. styleNames.forEach(function(name) {
  84. node.setData(name);
  85. });
  86. });
  87. minder.renderNodeBatch(minder.getSelectedNodes());
  88. minder.layout(300);
  89. return styleClipBoard;
  90. },
  91. queryState: function(minder) {
  92. var nodes = minder.getSelectedNodes();
  93. if (!nodes.length) return -1;
  94. for (var i = 0; i < nodes.length; i++) {
  95. if (hasStyle(nodes[i])) return 0;
  96. }
  97. return -1;
  98. }
  99. })
  100. }
  101. };
  102. });
  103. });