basestyle.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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 TextRenderer = require('./text');
  9. Module.register('basestylemodule', function() {
  10. var km = this;
  11. function getNodeDataOrStyle(node, name) {
  12. return node.getData(name) || node.getStyle(name);
  13. }
  14. TextRenderer.registerStyleHook(function(node, textGroup) {
  15. var fontWeight = getNodeDataOrStyle(node,'font-weight');
  16. var fontStyle = getNodeDataOrStyle(node, 'font-style');
  17. var styleHash = [fontWeight, fontStyle].join('/');
  18. textGroup.eachItem(function(index,item) {
  19. item.setFont({
  20. 'weight': fontWeight,
  21. 'style': fontStyle
  22. });
  23. });
  24. });
  25. return {
  26. 'commands': {
  27. /**
  28. * @command Bold
  29. * @description 加粗选中的节点
  30. * @shortcut Ctrl + B
  31. * @state
  32. * 0: 当前有选中的节点
  33. * -1: 当前没有选中的节点
  34. * 1: 当前已选中的节点已加粗
  35. */
  36. 'bold': kity.createClass('boldCommand', {
  37. base: Command,
  38. execute: function(km) {
  39. var nodes = km.getSelectedNodes();
  40. if (this.queryState('bold') == 1) {
  41. nodes.forEach(function(n) {
  42. n.setData('font-weight').render();
  43. });
  44. } else {
  45. nodes.forEach(function(n) {
  46. n.setData('font-weight', 'bold').render();
  47. });
  48. }
  49. km.layout();
  50. },
  51. queryState: function() {
  52. var nodes = km.getSelectedNodes(),
  53. result = 0;
  54. if (nodes.length === 0) {
  55. return -1;
  56. }
  57. nodes.forEach(function(n) {
  58. if (n && n.getData('font-weight')) {
  59. result = 1;
  60. return false;
  61. }
  62. });
  63. return result;
  64. }
  65. }),
  66. /**
  67. * @command Italic
  68. * @description 加斜选中的节点
  69. * @shortcut Ctrl + I
  70. * @state
  71. * 0: 当前有选中的节点
  72. * -1: 当前没有选中的节点
  73. * 1: 当前已选中的节点已加斜
  74. */
  75. 'italic': kity.createClass('italicCommand', {
  76. base: Command,
  77. execute: function(km) {
  78. var nodes = km.getSelectedNodes();
  79. if (this.queryState('italic') == 1) {
  80. nodes.forEach(function(n) {
  81. n.setData('font-style').render();
  82. });
  83. } else {
  84. nodes.forEach(function(n) {
  85. n.setData('font-style', 'italic').render();
  86. });
  87. }
  88. km.layout();
  89. },
  90. queryState: function() {
  91. var nodes = km.getSelectedNodes(),
  92. result = 0;
  93. if (nodes.length === 0) {
  94. return -1;
  95. }
  96. nodes.forEach(function(n) {
  97. if (n && n.getData('font-style')) {
  98. result = 1;
  99. return false;
  100. }
  101. });
  102. return result;
  103. }
  104. })
  105. },
  106. commandShortcutKeys: {
  107. 'bold': 'ctrl+b', //bold
  108. 'italic': 'ctrl+i' //italic
  109. }
  110. };
  111. });
  112. });