menuFontTool.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. Trex.I.MenuFontTool = Trex.Mixin.create({
  2. oninitialized: function(config) {
  3. var self = this;
  4. self.beforeOnInitialized(config);
  5. var menuInitHandler = self.menuInitHandler && self.menuInitHandler.bind(self);
  6. self.weave(self.createButton(), self.createMenu(), self.handler, menuInitHandler);
  7. if (config.sync) {
  8. self.startSyncButtonWithStyle();
  9. }
  10. },
  11. rangeExecutor: function(processor, newStyle, range) {
  12. this.wrapTextAsStyledSpan(processor, newStyle, range);
  13. },
  14. startSyncButtonWithStyle: function() {
  15. var self = this;
  16. self.canvas.observeJob(Trex.Ev.__CANVAS_PANEL_QUERY_STATUS, function(goog_range) {
  17. self.syncButton(self.queryCurrentStyle(goog_range));
  18. });
  19. },
  20. queryCurrentStyle: function(goog_range) { // only for fontfamily, fontsize
  21. var self = this;
  22. var queriedValue = self.queryCommandValue();
  23. // try to get using queryCommand
  24. if (self.reliableQueriedValue(queriedValue) && queriedValue && self.getTextByValue(queriedValue)) {
  25. return self.getTextByValue(queriedValue);
  26. }
  27. // try to get from style
  28. var currentStyle = self.canvas.query(function(processor) {
  29. var targetNode;
  30. if ($tx.msie && goog_range.isCollapsed()) { // FTDUEDTR-1233
  31. targetNode = processor.getNode();
  32. } else {
  33. targetNode = self.findQueryingNode(goog_range);
  34. }
  35. return self.queryElementCurrentStyle(targetNode);
  36. });
  37. if (currentStyle && self.getTextByValue(currentStyle)) {
  38. return self.getTextByValue(currentStyle);
  39. }
  40. // fallback
  41. return queriedValue || currentStyle || self.getTextByValue(self.getDefaultProperty());
  42. },
  43. queryCommandValue: function() {
  44. var self = this;
  45. return self.canvas.query(function(processor) {
  46. return processor.queryCommandValue(self.getQueryCommandName());
  47. });
  48. },
  49. reliableQueriedValue: function(value) {
  50. return _TRUE;
  51. },
  52. queryElementCurrentStyle: function(element) {
  53. var cssPropertyName = this.getCssPropertyName();
  54. var queryingNode = element;
  55. var MAX_VISIT_PARENT = 10;
  56. for (var i = 0; i < MAX_VISIT_PARENT && $tom.kindOf(queryingNode, "%inline"); i++) {
  57. var currentStyleValue = queryingNode.style[cssPropertyName];
  58. if (currentStyleValue) {
  59. return currentStyleValue;
  60. }
  61. if ($tom.kindOf(queryingNode, 'font') && $tom.getAttribute(this.getFontTagAttribute())) {
  62. return $tom.getAttribute(this.getFontTagAttribute());
  63. }
  64. queryingNode = queryingNode.parentNode;
  65. }
  66. var processor = this.canvas.getProcessor();
  67. if (element) {
  68. return processor.queryStyle(element, cssPropertyName);
  69. } else {
  70. return _NULL;
  71. }
  72. },
  73. computeNewStyle: function(newStyle) {
  74. var style = {};
  75. style[this.getCssPropertyName()] = newStyle;
  76. return style;
  77. },
  78. cachedProperty: _FALSE,
  79. syncButton: function(text) {
  80. var self = this;
  81. self.button.setText(text);
  82. if (self.cachedProperty != text) {
  83. self.button.setText(text);
  84. self.cachedProperty = text;
  85. }
  86. }
  87. });