buttonFontTool.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. Trex.I.ButtonFontTool = Trex.Mixin.create({
  2. oninitialized: function(config) {
  3. var self = this;
  4. self.button = new Trex.Button(self.buttonCfg);
  5. self.weave(self.button, _NULL, self.handler);
  6. if (config.sync) {
  7. self.startSyncButtonWithStyle();
  8. }
  9. self.bindKeyboard(config.hotKey, self.handler.bind(self));
  10. },
  11. rangeExecutor: function(processor, newStyle, range) {
  12. var el = null;
  13. if($tx.msie && this.wrapDummy && processor.isCollapsed()){
  14. el = this.wrapDummy(processor, range);
  15. processor.execCommand(this.getQueryCommandName());
  16. var rng = processor.createGoogRangeFromNodes(el, 1, el, 1);
  17. rng.select();
  18. }else {
  19. processor.execCommand(this.getQueryCommandName());
  20. }
  21. },
  22. onAfterHandler: function(data) {
  23. // TODO 현재 툴의 state만 변경하면 되는데, 불필요하게 Trex.Ev.__CANVAS_PANEL_QUERY_STATUS를 fire한다.
  24. var canvas = this.canvas;
  25. if (canvas.triggerQueryStatus) {
  26. canvas.triggerQueryStatus();
  27. }
  28. },
  29. startSyncButtonWithStyle: function() {
  30. var self = this;
  31. self.canvas.observeJob(Trex.Ev.__CANVAS_PANEL_QUERY_STATUS, function(goog_range) {
  32. self.syncButton(self.queryCurrentStyle(goog_range));
  33. });
  34. },
  35. queryCurrentStyle: function(goog_range) {
  36. var self = this;
  37. var state = self.canvas.query(function(processor) {
  38. var command = self.getQueryCommandName();
  39. var minGeckoVersion = 20;
  40. var geckoQueryCommandStateNotWorkingVersion = ($tx.gecko && $tx.gecko_ver < minGeckoVersion);
  41. if (command && !$tx.opera && !geckoQueryCommandStateNotWorkingVersion) {
  42. // gecko? : FTDUEDTR-1181
  43. // opera?: <span style="font-weight: bold">...</span> 인 경우에 bold 상태가 false로 나온다. <b>...</b>인 경우는 제대로 나옴.
  44. return processor.queryCommandState(command);
  45. } else {
  46. var targetNode = self.findQueryingNode(goog_range);
  47. return !!targetNode && self.isStyleApplied(targetNode);
  48. }
  49. });
  50. return state;
  51. },
  52. computeNewStyle: function() {
  53. return _NULL;
  54. },
  55. cachedProperty: _FALSE,
  56. syncButton: function(state) {
  57. if (this.cachedProperty != state) {
  58. this.button.setState(state);
  59. this.cachedProperty = state;
  60. }
  61. }
  62. });